mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 14:42:11 +02:00
fixed several bugs in new C++ parser
This commit is contained in:
parent
4ae9346289
commit
900ae2cb4b
16 changed files with 9668 additions and 9349 deletions
|
@ -5583,8 +5583,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
|
|||
struct A {
|
||||
virtual void f();
|
||||
};
|
||||
struct B1 : A { // note nonvirtual
|
||||
derivation
|
||||
struct B1 : A { // note nonvirtual derivation
|
||||
void f();
|
||||
};
|
||||
struct B2 : A {
|
||||
|
@ -5609,8 +5608,7 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
|
|||
buffer.append("struct A {\n"); //$NON-NLS-1$
|
||||
buffer.append("virtual void f();\n"); //$NON-NLS-1$
|
||||
buffer.append("};\n"); //$NON-NLS-1$
|
||||
buffer.append("struct B1 : A { // note nonvirtual\n"); //$NON-NLS-1$
|
||||
buffer.append("derivation\n"); //$NON-NLS-1$
|
||||
buffer.append("struct B1 : A { // note nonvirtual derivation\n"); //$NON-NLS-1$
|
||||
buffer.append("void f();\n"); //$NON-NLS-1$
|
||||
buffer.append("};\n"); //$NON-NLS-1$
|
||||
buffer.append("struct B2 : A {\n"); //$NON-NLS-1$
|
||||
|
@ -5741,20 +5739,21 @@ public class AST2CPPSpecTest extends AST2SpecBaseTest {
|
|||
parse(buffer.toString(), ParserLanguage.CPP, true, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
[--Start Example(CPP 10.4-2b):
|
||||
struct C {
|
||||
virtual void f() { }=0; // illformed
|
||||
};
|
||||
--End Example]
|
||||
*/
|
||||
public void test10_4s2b() throws Exception {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("struct C {\n"); //$NON-NLS-1$
|
||||
buffer.append("virtual void f() { }=0; // illformed\n"); //$NON-NLS-1$
|
||||
buffer.append("};\n"); //$NON-NLS-1$
|
||||
parse(buffer.toString(), ParserLanguage.CPP, true, 0);
|
||||
}
|
||||
// Not legal C++
|
||||
// /**
|
||||
// [--Start Example(CPP 10.4-2b):
|
||||
// struct C {
|
||||
// virtual void f() { }=0; // illformed
|
||||
// };
|
||||
// --End Example]
|
||||
// */
|
||||
// public void test10_4s2b() throws Exception {
|
||||
// StringBuffer buffer = new StringBuffer();
|
||||
// buffer.append("struct C {\n"); //$NON-NLS-1$
|
||||
// buffer.append("virtual void f() { }=0; // illformed\n"); //$NON-NLS-1$
|
||||
// buffer.append("};\n"); //$NON-NLS-1$
|
||||
// parse(buffer.toString(), ParserLanguage.CPP, true, 0);
|
||||
// }
|
||||
|
||||
/**
|
||||
[--Start Example(CPP 10.4-3):
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
package org.eclipse.cdt.core.lrparser.tests.cpp;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
||||
import org.eclipse.cdt.core.dom.lrparser.c99.C99Language;
|
||||
import org.eclipse.cdt.core.dom.lrparser.cpp.ISOCPPLanguage;
|
||||
import org.eclipse.cdt.core.lrparser.tests.c99.ParseHelper;
|
||||
import org.eclipse.cdt.core.model.ILanguage;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.parser.tests.ast2.AST2CPPSpecTest;
|
||||
import org.eclipse.cdt.internal.core.parser.ParserException;
|
||||
|
||||
public class ISOCPPSpecTest extends AST2CPPSpecTest {
|
||||
|
||||
public ISOCPPSpecTest() { }
|
||||
public ISOCPPSpecTest(String name) { super(name); }
|
||||
|
||||
|
||||
@Override
|
||||
protected void parseCandCPP( String code, boolean checkBindings, int expectedProblemBindings ) throws ParserException {
|
||||
parse(code, ParserLanguage.C, checkBindings, expectedProblemBindings);
|
||||
parse(code, ParserLanguage.CPP, checkBindings, expectedProblemBindings);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IASTTranslationUnit parse( String code, ParserLanguage lang, boolean checkBindings, int expectedProblemBindings ) throws ParserException {
|
||||
ILanguage language = lang.isCPP() ? getCPPLanguage() : getCLanguage();
|
||||
return ParseHelper.parse(code, language, true, checkBindings, expectedProblemBindings );
|
||||
}
|
||||
|
||||
protected BaseExtensibleLanguage getCLanguage() {
|
||||
return C99Language.getDefault();
|
||||
}
|
||||
|
||||
protected BaseExtensibleLanguage getCPPLanguage() {
|
||||
return ISOCPPLanguage.getDefault();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -805,8 +805,6 @@ constant_expression_opt
|
|||
-- Statements
|
||||
------------------------------------------------------------------------------------------
|
||||
|
||||
-- TODO: declarations in conditions
|
||||
|
||||
statement
|
||||
::= labeled_statement
|
||||
| expression_statement
|
||||
|
@ -895,9 +893,13 @@ jump_statement
|
|||
/. $Build consumeStatementGoto(); $EndBuild ./
|
||||
|
||||
|
||||
-- Nested functions are not part of the C++ spec, but several
|
||||
-- of the parser test cases expect them to work.
|
||||
declaration_statement
|
||||
::= block_declaration
|
||||
/. $Build consumeStatementDeclaration(); $EndBuild ./
|
||||
| function_definition -- not spec
|
||||
/. $Build consumeStatementDeclaration(); $EndBuild ./
|
||||
|
||||
|
||||
|
||||
|
@ -908,20 +910,20 @@ declaration_statement
|
|||
|
||||
declaration
|
||||
::= block_declaration
|
||||
| function_definition -- done
|
||||
| template_declaration -- done
|
||||
| explicit_instantiation -- done
|
||||
| explicit_specialization -- done
|
||||
| linkage_specification -- done
|
||||
| namespace_definition -- done
|
||||
| function_definition
|
||||
| template_declaration
|
||||
| explicit_instantiation
|
||||
| explicit_specialization
|
||||
| linkage_specification
|
||||
| namespace_definition
|
||||
|
||||
|
||||
block_declaration
|
||||
::= simple_declaration -- done
|
||||
| asm_definition -- done
|
||||
| namespace_alias_definition -- done
|
||||
| using_declaration -- done
|
||||
| using_directive -- done
|
||||
::= simple_declaration
|
||||
| asm_definition
|
||||
| namespace_alias_definition
|
||||
| using_declaration
|
||||
| using_directive
|
||||
|
||||
|
||||
declaration_seq
|
||||
|
@ -1573,30 +1575,31 @@ base_specifier_list
|
|||
| base_specifier_list ',' base_specifier
|
||||
|
||||
|
||||
-- make this more lenient, allow virtual both before and after
|
||||
|
||||
base_specifier
|
||||
::= dcolon_opt nested_name_specifier_opt class_name
|
||||
/. $Build consumeBaseSpecifier(false); $EndBuild ./
|
||||
| virtual_opt access_specifier_keyword virtual_opt dcolon_opt nested_name_specifier_opt class_name
|
||||
/. $Build consumeBaseSpecifier(true); $EndBuild ./
|
||||
/. $Build consumeBaseSpecifier(false, false); $EndBuild ./
|
||||
| 'virtual' access_specifier_keyword_opt dcolon_opt nested_name_specifier_opt class_name
|
||||
/. $Build consumeBaseSpecifier(true, true); $EndBuild ./
|
||||
| access_specifier_keyword 'virtual' dcolon_opt nested_name_specifier_opt class_name
|
||||
/. $Build consumeBaseSpecifier(true, true); $EndBuild ./
|
||||
| access_specifier_keyword dcolon_opt nested_name_specifier_opt class_name
|
||||
/. $Build consumeBaseSpecifier(true, false); $EndBuild ./
|
||||
|
||||
|
||||
virtual_opt
|
||||
::= 'virtual'
|
||||
/. $Build consumePlaceHolder(); $EndBuild ./
|
||||
| $empty
|
||||
/. $Build consumeEmpty(); $EndBuild ./
|
||||
|
||||
|
||||
access_specifier_keyword
|
||||
::= 'private'
|
||||
/. $Build consumeAccessKeywordToken(); $EndBuild ./
|
||||
| 'protected'
|
||||
/. $Build consumeAccessKeywordToken(); $EndBuild ./
|
||||
| 'public'
|
||||
/. $Build consumeAccessKeywordToken(); $EndBuild ./
|
||||
|
||||
|
||||
access_specifier_keyword_opt
|
||||
::= access_specifier_keyword
|
||||
| $empty
|
||||
/. $Build consumeEmpty(); $EndBuild ./
|
||||
|
||||
|
||||
conversion_function_id_name
|
||||
|
@ -1684,9 +1687,16 @@ template_parameter_list
|
|||
| template_parameter_list ',' template_parameter
|
||||
|
||||
|
||||
-- TODO There is an ambiguity in the spec grammar here,
|
||||
-- "class X" should be parsed as a type_parameter
|
||||
-- and not as a parameter_declaration. Here precedence is used to disambiguate
|
||||
-- but it would be better to refactor the grammar to remove the conflict.
|
||||
|
||||
template_parameter
|
||||
::= type_parameter
|
||||
| parameter_declaration
|
||||
::=? type_parameter
|
||||
|
||||
template_parameter
|
||||
::= parameter_declaration
|
||||
|
||||
|
||||
type_parameter
|
||||
|
|
|
@ -96,6 +96,7 @@ import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPNoCastExpressionParser;
|
|||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPParsersym;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPSizeofExpressionParser;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionDeclarator;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTQualifiedName;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator;
|
||||
|
||||
/**
|
||||
|
@ -389,6 +390,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
}
|
||||
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
private static OverloadableOperator getOverloadableOperator(List<IToken> tokens) {
|
||||
if(tokens.size() == 1) {
|
||||
// TODO this is a hack that I did to save time
|
||||
|
@ -401,6 +403,12 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
else if(matchTokens(tokens, TK_delete, TK_LeftBracket, TK_RightBracket)) {
|
||||
return OverloadableOperator.DELETE_ARRAY;
|
||||
}
|
||||
else if(matchTokens(tokens, TK_LeftBracket, TK_RightBracket)) {
|
||||
return OverloadableOperator.BRACKET;
|
||||
}
|
||||
else if(matchTokens(tokens, TK_LeftParen, TK_RightParen)) {
|
||||
return OverloadableOperator.PAREN;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
@ -678,6 +686,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
/**
|
||||
* Creates a qualified name from a list of names (that must be in reverse order).
|
||||
*/
|
||||
@SuppressWarnings("restriction")
|
||||
private IASTName createQualifiedName(LinkedList<IASTName> nestedNames, boolean startsWithColonColon) {
|
||||
if(!startsWithColonColon && nestedNames.size() == 1) { // its actually an unqualified name
|
||||
return nestedNames.get(0);
|
||||
|
@ -686,8 +695,17 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
ICPPASTQualifiedName qualifiedName = nodeFactory.newCPPQualifiedName();
|
||||
qualifiedName.setFullyQualified(startsWithColonColon);
|
||||
|
||||
for(IASTName name : reverseIterable(nestedNames))
|
||||
StringBuilder signature = new StringBuilder(startsWithColonColon ? "::" : ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
boolean first = true;
|
||||
for(IASTName name : reverseIterable(nestedNames)) {
|
||||
qualifiedName.addName(name);
|
||||
if(!first)
|
||||
signature.append("::"); //$NON-NLS-1$
|
||||
signature.append(name.toString());
|
||||
first = false;
|
||||
}
|
||||
|
||||
((CPPASTQualifiedName)qualifiedName).setSignature(signature.toString());
|
||||
|
||||
int startOffset = offset(nestedNames.getLast());
|
||||
int length = endOffset(nestedNames.getFirst()) - startOffset;
|
||||
|
@ -863,7 +881,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
if(TRACE_ACTIONS) DebugUtil.printMethodTrace();
|
||||
|
||||
List<Object> declarations = astStack.closeScope();
|
||||
IASTName namespaceName = (hasName) ? (IASTName) astStack.pop() : null;
|
||||
IASTName namespaceName = hasName ? (IASTName)astStack.pop() : nodeFactory.newName();
|
||||
|
||||
ICPPASTNamespaceDefinition definition = nodeFactory.newNamespaceDefinition(namespaceName);
|
||||
|
||||
|
@ -1077,7 +1095,8 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
public void consumeVisibilityLabel() {
|
||||
if(TRACE_ACTIONS) DebugUtil.printMethodTrace();
|
||||
|
||||
int visibility = getAccessSpecifier(parser.getLeftIToken());
|
||||
IToken specifier = (IToken)astStack.pop();
|
||||
int visibility = getAccessSpecifier(specifier);
|
||||
ICPPASTVisiblityLabel visibilityLabel = nodeFactory.newVisibilityLabel(visibility);
|
||||
setOffsetAndLength(visibilityLabel);
|
||||
astStack.push(visibilityLabel);
|
||||
|
@ -1098,23 +1117,21 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
|
||||
/**
|
||||
* base_specifier
|
||||
* ::= dcolon_opt nested_name_specifier_opt class_name
|
||||
* | virtual_opt access_specifier_keyword virtual_opt dcolon_opt nested_name_specifier_opt class_name
|
||||
* ::= dcolon_opt nested_name_specifier_opt class_name
|
||||
* | 'virtual' access_specifier_keyword_opt dcolon_opt nested_name_specifier_opt class_name
|
||||
* | access_specifier_keyword 'virtual' dcolon_opt nested_name_specifier_opt class_name
|
||||
* | access_specifier_keyword dcolon_opt nested_name_specifier_opt class_name
|
||||
*/
|
||||
public void consumeBaseSpecifier(boolean hasAccessSpecifier) {
|
||||
public void consumeBaseSpecifier(boolean hasAccessSpecifier, boolean isVirtual) {
|
||||
if(TRACE_ACTIONS) DebugUtil.printMethodTrace();
|
||||
|
||||
IASTName name = subRuleQualifiedName(false);
|
||||
boolean isVirtual = false;
|
||||
int visibility = 0; // this is the default value that the DOM parser uses
|
||||
|
||||
int visibility = 0; // this is the default value that the DOM parser uses
|
||||
if(hasAccessSpecifier) {
|
||||
boolean hasVirtualKeyword2 = astStack.pop() == PLACE_HOLDER;
|
||||
boolean hasVirtualKeyword1 = astStack.pop() == PLACE_HOLDER;
|
||||
isVirtual = hasVirtualKeyword1 | hasVirtualKeyword2;
|
||||
|
||||
IToken accessSpecifierToken = parser.getRuleTokens().get(hasVirtualKeyword1 ? 1 : 0);
|
||||
visibility = getAccessSpecifier(accessSpecifierToken);
|
||||
IToken accessSpecifierToken = (IToken) astStack.pop();
|
||||
if(accessSpecifierToken != null)
|
||||
visibility = getAccessSpecifier(accessSpecifierToken);
|
||||
}
|
||||
|
||||
ICPPASTBaseSpecifier baseSpecifier = nodeFactory.newBaseSpecifier(name, visibility, isVirtual);
|
||||
|
@ -1125,6 +1142,18 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the current token and places it on the stack for later consumption.
|
||||
*/
|
||||
public void consumeAccessKeywordToken() {
|
||||
if(TRACE_ACTIONS) DebugUtil.printMethodTrace();
|
||||
|
||||
astStack.push(parser.getRightIToken());
|
||||
|
||||
if(TRACE_AST_STACK) System.out.println(astStack);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* class_specifier
|
||||
* ::= class_head '{' <openscope-ast> member_declaration_list_opt '}'
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -20,7 +20,7 @@ public interface CPPExpressionStatementParsersym {
|
|||
TK_bool = 15,
|
||||
TK_break = 77,
|
||||
TK_case = 78,
|
||||
TK_catch = 117,
|
||||
TK_catch = 120,
|
||||
TK_char = 16,
|
||||
TK_class = 59,
|
||||
TK_const = 48,
|
||||
|
@ -49,9 +49,9 @@ public interface CPPExpressionStatementParsersym {
|
|||
TK_namespace = 67,
|
||||
TK_new = 43,
|
||||
TK_operator = 7,
|
||||
TK_private = 118,
|
||||
TK_protected = 119,
|
||||
TK_public = 120,
|
||||
TK_private = 116,
|
||||
TK_protected = 117,
|
||||
TK_public = 118,
|
||||
TK_register = 55,
|
||||
TK_reinterpret_cast = 31,
|
||||
TK_return = 86,
|
||||
|
@ -89,7 +89,7 @@ public interface CPPExpressionStatementParsersym {
|
|||
TK_LeftBracket = 66,
|
||||
TK_LeftParen = 3,
|
||||
TK_LeftBrace = 64,
|
||||
TK_Dot = 116,
|
||||
TK_Dot = 119,
|
||||
TK_DotStar = 96,
|
||||
TK_Arrow = 103,
|
||||
TK_ArrowStar = 90,
|
||||
|
@ -256,11 +256,11 @@ public interface CPPExpressionStatementParsersym {
|
|||
"OrAssign",
|
||||
"Question",
|
||||
"RightBracket",
|
||||
"Dot",
|
||||
"catch",
|
||||
"private",
|
||||
"protected",
|
||||
"public",
|
||||
"Dot",
|
||||
"catch",
|
||||
"EOF_TOKEN",
|
||||
"else",
|
||||
"Invalid"
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -20,7 +20,7 @@ public interface CPPNoCastExpressionParsersym {
|
|||
TK_bool = 15,
|
||||
TK_break = 77,
|
||||
TK_case = 78,
|
||||
TK_catch = 118,
|
||||
TK_catch = 121,
|
||||
TK_char = 16,
|
||||
TK_class = 60,
|
||||
TK_const = 48,
|
||||
|
@ -49,9 +49,9 @@ public interface CPPNoCastExpressionParsersym {
|
|||
TK_namespace = 67,
|
||||
TK_new = 43,
|
||||
TK_operator = 7,
|
||||
TK_private = 119,
|
||||
TK_protected = 120,
|
||||
TK_public = 121,
|
||||
TK_private = 117,
|
||||
TK_protected = 118,
|
||||
TK_public = 119,
|
||||
TK_register = 55,
|
||||
TK_reinterpret_cast = 31,
|
||||
TK_return = 86,
|
||||
|
@ -89,7 +89,7 @@ public interface CPPNoCastExpressionParsersym {
|
|||
TK_LeftBracket = 66,
|
||||
TK_LeftParen = 3,
|
||||
TK_LeftBrace = 61,
|
||||
TK_Dot = 117,
|
||||
TK_Dot = 120,
|
||||
TK_DotStar = 96,
|
||||
TK_Arrow = 103,
|
||||
TK_ArrowStar = 90,
|
||||
|
@ -257,11 +257,11 @@ public interface CPPNoCastExpressionParsersym {
|
|||
"Question",
|
||||
"RightBracket",
|
||||
"EOF_TOKEN",
|
||||
"Dot",
|
||||
"catch",
|
||||
"private",
|
||||
"protected",
|
||||
"public",
|
||||
"Dot",
|
||||
"catch",
|
||||
"else",
|
||||
"Invalid"
|
||||
};
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -20,7 +20,7 @@ public interface CPPParsersym {
|
|||
TK_bool = 13,
|
||||
TK_break = 78,
|
||||
TK_case = 79,
|
||||
TK_catch = 117,
|
||||
TK_catch = 120,
|
||||
TK_char = 14,
|
||||
TK_class = 59,
|
||||
TK_const = 48,
|
||||
|
@ -49,9 +49,9 @@ public interface CPPParsersym {
|
|||
TK_namespace = 65,
|
||||
TK_new = 44,
|
||||
TK_operator = 7,
|
||||
TK_private = 118,
|
||||
TK_protected = 119,
|
||||
TK_public = 120,
|
||||
TK_private = 116,
|
||||
TK_protected = 117,
|
||||
TK_public = 118,
|
||||
TK_register = 55,
|
||||
TK_reinterpret_cast = 31,
|
||||
TK_return = 86,
|
||||
|
@ -89,7 +89,7 @@ public interface CPPParsersym {
|
|||
TK_LeftBracket = 68,
|
||||
TK_LeftParen = 3,
|
||||
TK_LeftBrace = 66,
|
||||
TK_Dot = 116,
|
||||
TK_Dot = 119,
|
||||
TK_DotStar = 96,
|
||||
TK_Arrow = 103,
|
||||
TK_ArrowStar = 90,
|
||||
|
@ -256,11 +256,11 @@ public interface CPPParsersym {
|
|||
"OrAssign",
|
||||
"Question",
|
||||
"RightBracket",
|
||||
"Dot",
|
||||
"catch",
|
||||
"private",
|
||||
"protected",
|
||||
"public",
|
||||
"Dot",
|
||||
"catch",
|
||||
"EOF_TOKEN",
|
||||
"else",
|
||||
"Invalid"
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -20,7 +20,7 @@ public interface CPPSizeofExpressionParsersym {
|
|||
TK_bool = 15,
|
||||
TK_break = 77,
|
||||
TK_case = 78,
|
||||
TK_catch = 118,
|
||||
TK_catch = 121,
|
||||
TK_char = 16,
|
||||
TK_class = 60,
|
||||
TK_const = 48,
|
||||
|
@ -49,9 +49,9 @@ public interface CPPSizeofExpressionParsersym {
|
|||
TK_namespace = 65,
|
||||
TK_new = 43,
|
||||
TK_operator = 7,
|
||||
TK_private = 119,
|
||||
TK_protected = 120,
|
||||
TK_public = 121,
|
||||
TK_private = 117,
|
||||
TK_protected = 118,
|
||||
TK_public = 119,
|
||||
TK_register = 56,
|
||||
TK_reinterpret_cast = 31,
|
||||
TK_return = 86,
|
||||
|
@ -89,7 +89,7 @@ public interface CPPSizeofExpressionParsersym {
|
|||
TK_LeftBracket = 63,
|
||||
TK_LeftParen = 3,
|
||||
TK_LeftBrace = 61,
|
||||
TK_Dot = 117,
|
||||
TK_Dot = 120,
|
||||
TK_DotStar = 96,
|
||||
TK_Arrow = 103,
|
||||
TK_ArrowStar = 90,
|
||||
|
@ -257,11 +257,11 @@ public interface CPPSizeofExpressionParsersym {
|
|||
"Question",
|
||||
"RightBracket",
|
||||
"EOF_TOKEN",
|
||||
"Dot",
|
||||
"catch",
|
||||
"private",
|
||||
"protected",
|
||||
"public",
|
||||
"Dot",
|
||||
"catch",
|
||||
"else",
|
||||
"Invalid"
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue