diff options
Diffstat (limited to 'lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/gpp/GPPParser.java')
-rw-r--r-- | lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/gpp/GPPParser.java | 5180 |
1 files changed, 2933 insertions, 2247 deletions
diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/gpp/GPPParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/gpp/GPPParser.java index 09ae1814ddd..bd89af415e4 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/gpp/GPPParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/gpp/GPPParser.java @@ -42,2267 +42,2953 @@ import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPBuildASTParserAction; import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPSecondaryParserFactory; import org.eclipse.cdt.core.dom.ast.gnu.cpp.*; -public class GPPParser extends PrsStream implements RuleAction, ITokenStream, - ITokenCollector, IParser< IASTTranslationUnit > - +public class GPPParser extends PrsStream + implements RuleAction, ITokenStream, ITokenCollector, IParser<IASTTranslationUnit> + { - private static ParseTable prs = new GPPParserprs(); - private FixedBacktrackingParser btParser; - - public FixedBacktrackingParser getParser() { return btParser; } - private void setResult(Object object) { btParser.setSym1(object); } - public Object getRhsSym(int i) { return btParser.getSym(i); } - - public int getRhsTokenIndex(int i) { return btParser.getToken(i); } - public IToken getRhsIToken(int i) { return super.getIToken(getRhsTokenIndex(i)); } - - public int getRhsFirstTokenIndex(int i) { return btParser.getFirstToken(i); } - public IToken getRhsFirstIToken(int i) { return super.getIToken(getRhsFirstTokenIndex(i)); } - - public int getRhsLastTokenIndex(int i) { return btParser.getLastToken(i); } - public IToken getRhsLastIToken(int i) { return super.getIToken(getRhsLastTokenIndex(i)); } - - public int getLeftSpan() { return btParser.getFirstToken(); } - @Override - public IToken getLeftIToken() { return super.getIToken(getLeftSpan()); } - - public int getRightSpan() { return btParser.getLastToken(); } - @Override - public IToken getRightIToken() { return super.getIToken(getRightSpan()); } - - public int getRhsErrorTokenIndex(int i) - { - int index = btParser.getToken(i); - IToken err = super.getIToken(index); - return (err instanceof ErrorToken ? index : 0); - } - public ErrorToken getRhsErrorIToken(int i) - { - int index = btParser.getToken(i); - IToken err = super.getIToken(index); - return (ErrorToken) (err instanceof ErrorToken ? err : null); - } - - public GPPParser(LexStream lexStream) - { - super(lexStream); - - try - { - super.remapTerminalSymbols(orderedTerminalSymbols(), GPPParserprs.EOFT_SYMBOL); - } - catch(NullExportedSymbolsException e) { - } - catch(NullTerminalSymbolsException e) { - } - catch(UnimplementedTerminalsException e) - { - java.util.ArrayList unimplemented_symbols = e.getSymbols(); - System.out.println("The Lexer will not scan the following token(s):"); - for (int i = 0; i < unimplemented_symbols.size(); i++) - { - Integer id = (Integer) unimplemented_symbols.get(i); - System.out.println(" " + GPPParsersym.orderedTerminalSymbols[id.intValue()]); - } - System.out.println(); - } - catch(UndefinedEofSymbolException e) - { - throw new Error(new UndefinedEofSymbolException - ("The Lexer does not implement the Eof symbol " + - GPPParsersym.orderedTerminalSymbols[GPPParserprs.EOFT_SYMBOL])); - } - } - - @Override - public String[] orderedTerminalSymbols() { return GPPParsersym.orderedTerminalSymbols; } - public String getTokenKindName(int kind) { return GPPParsersym.orderedTerminalSymbols[kind]; } - public int getEOFTokenKind() { return GPPParserprs.EOFT_SYMBOL; } - public PrsStream getParseStream() { return this; } - - // - // Report error message for given error_token. - // - public final void reportErrorTokenMessage(int error_token, String msg) - { - int firsttok = super.getFirstErrorToken(error_token), - lasttok = super.getLastErrorToken(error_token); - String location = super.getFileName() + ':' + - (firsttok > lasttok - ? (super.getEndLine(lasttok) + ":" + super.getEndColumn(lasttok)) - : (super.getLine(error_token) + ":" + - super.getColumn(error_token) + ":" + - super.getEndLine(error_token) + ":" + - super.getEndColumn(error_token))) - + ": "; - super.reportError((firsttok > lasttok ? ParseErrorCodes.INSERTION_CODE : ParseErrorCodes.SUBSTITUTION_CODE), location, msg); - } - - public void parser() - { - parser(null, 0); - } - - public void parser(Monitor monitor) - { - parser(monitor, 0); - } - - public void parser(int error_repair_count) - { - parser(null, error_repair_count); - } - - public void parser(Monitor monitor, int error_repair_count) - { - try - { - btParser = new FixedBacktrackingParser(monitor, this, prs, this); - } - catch (NotBacktrackParseTableException e) - { - throw new Error(new NotBacktrackParseTableException - ("Regenerate GPPParserprs.java with -BACKTRACK option")); - } - catch (BadParseSymFileException e) - { - throw new Error(new BadParseSymFileException("Bad Parser Symbol File -- GPPParsersym.java")); - } - - try - { - btParser.parse(error_repair_count); - } - catch (BadParseException e) - { - reset(e.error_token); // point to error token - DiagnoseParser diagnoseParser = new DiagnoseParser(this, prs); - diagnoseParser.diagnose(e.error_token); - } - } - - -private GPPBuildASTParserAction action; -private IASTCompletionNode compNode; - - -public GPPParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Map<String,String> properties) { - initActions(properties); - action.initializeTranslationUnit(scanner, builtinBindingsProvider, index); - CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap); -} + private static ParseTable prs = new GPPParserprs(); + private FixedBacktrackingParser btParser; -private void initActions(Map<String,String> properties) { - ScopedStack<Object> astStack = new ScopedStack<Object>(); - - action = new GPPBuildASTParserAction (this, astStack, CPPNodeFactory.getDefault() , GPPSecondaryParserFactory.getDefault() ); - action.setParserProperties(properties); - - + public FixedBacktrackingParser getParser() { + return btParser; + } - gnuAction = new GNUBuildASTParserAction (this, astStack, CPPNodeFactory.getDefault() ); - gnuAction.setParserProperties(properties); + private void setResult(Object object) { + btParser.setSym1(object); + } -} + public Object getRhsSym(int i) { + return btParser.getSym(i); + } + public int getRhsTokenIndex(int i) { + return btParser.getToken(i); + } -@Override -public void addToken(IToken token) { - token.setKind(mapKind(token.getKind())); // TODO does mapKind need to be called? - super.addToken(token); -} + public IToken getRhsIToken(int i) { + return super.getIToken(getRhsTokenIndex(i)); + } + public int getRhsFirstTokenIndex(int i) { + return btParser.getFirstToken(i); + } -@Override -public IASTTranslationUnit parse() { - // this has to be done, or... kaboom! - setStreamLength(getSize()); - - final int errorRepairCount = -1; // -1 means full error handling - parser(null, errorRepairCount); // do the actual parse - super.resetTokenStream(); // allow tokens to be garbage collected + public IToken getRhsFirstIToken(int i) { + return super.getIToken(getRhsFirstTokenIndex(i)); + } - compNode = action.getASTCompletionNode(); // the completion node may be null - return ( IASTTranslationUnit ) action.getParseResult(); -} + public int getRhsLastTokenIndex(int i) { + return btParser.getLastToken(i); + } + public IToken getRhsLastIToken(int i) { + return super.getIToken(getRhsLastTokenIndex(i)); + } -@Override -public IASTCompletionNode getCompletionNode() { - return compNode; -} + public int getLeftSpan() { + return btParser.getFirstToken(); + } -// uncomment this method to use with backtracking parser -@Override -public List<IToken> getRuleTokens() { - return getTokens().subList(getLeftSpan(), getRightSpan() + 1); -} + @Override + public IToken getLeftIToken() { + return super.getIToken(getLeftSpan()); + } -@Override -public String[] getOrderedTerminalSymbols() { - return GPPParsersym.orderedTerminalSymbols; -} + public int getRightSpan() { + return btParser.getLastToken(); + } -@Override -@SuppressWarnings("nls") -public String getName() { - return "GPPParser"; -} + @Override + public IToken getRightIToken() { + return super.getIToken(getRightSpan()); + } + public int getRhsErrorTokenIndex(int i) { + int index = btParser.getToken(i); + IToken err = super.getIToken(index); + return (err instanceof ErrorToken ? index : 0); + } -private GNUBuildASTParserAction gnuAction; - - @Override - public void ruleAction(int ruleNumber) - { - switch (ruleNumber) - { - - // - // Rule 1: <openscope-ast> ::= $Empty - // - case 1: { action. openASTScope(); break; - } - - // - // Rule 2: <empty> ::= $Empty - // - case 2: { action. consumeEmpty(); break; - } - - // - // Rule 13: translation_unit ::= declaration_seq_opt - // - case 13: { action. consumeTranslationUnit(); break; - } - - // - // Rule 16: literal ::= integer - // - case 16: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_integer_constant); break; - } - - // - // Rule 17: literal ::= floating - // - case 17: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_float_constant); break; - } - - // - // Rule 18: literal ::= charconst - // - case 18: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_char_constant); break; - } - - // - // Rule 19: literal ::= stringlit - // - case 19: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_string_literal); break; - } - - // - // Rule 20: literal ::= true - // - case 20: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_true); break; - } - - // - // Rule 21: literal ::= false - // - case 21: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_false); break; - } - - // - // Rule 22: literal ::= this - // - case 22: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_this); break; - } - - // - // Rule 24: primary_expression ::= ( expression ) - // - case 24: { action. consumeExpressionBracketed(); break; - } - - // - // Rule 26: id_expression ::= qualified_or_unqualified_name - // - case 26: { action. consumeExpressionName(); break; - } - - // - // Rule 33: unqualified_id_name ::= ~ identifier_token - // - case 33: { action. consumeDestructorName(); break; - } - - // - // Rule 34: unqualified_id_name ::= ~ template_id_name - // - case 34: { action. consumeDestructorNameTemplateId(); break; - } - - // - // Rule 35: identifier_name ::= identifier_token - // - case 35: { action. consumeIdentifierName(); break; - } - - // - // Rule 36: template_opt ::= template - // - case 36: { action. consumePlaceHolder(); break; - } - - // - // Rule 37: template_opt ::= $Empty - // - case 37: { action. consumeEmpty(); break; - } - - // - // Rule 38: dcolon_opt ::= :: - // - case 38: { action. consumeToken(); break; - } - - // - // Rule 39: dcolon_opt ::= $Empty - // - case 39: { action. consumeEmpty(); break; - } - - // - // Rule 40: qualified_id_name ::= dcolon_opt nested_name_specifier template_opt unqualified_id_name - // - case 40: { action. consumeQualifiedId(true); break; - } - - // - // Rule 41: qualified_id_name ::= :: unqualified_id_name - // - case 41: { action. consumeGlobalQualifiedId(); break; - } - - // - // Rule 42: nested_name_specifier ::= class_or_namespace_name :: nested_name_specifier_with_template - // - case 42: { action. consumeNestedNameSpecifier(true); break; - } - - // - // Rule 43: nested_name_specifier ::= class_or_namespace_name :: - // - case 43: { action. consumeNestedNameSpecifier(false); break; - } - - // - // Rule 44: nested_name_specifier_with_template ::= class_or_namespace_name_with_template :: nested_name_specifier_with_template - // - case 44: { action. consumeNestedNameSpecifier(true); break; - } - - // - // Rule 45: nested_name_specifier_with_template ::= class_or_namespace_name_with_template :: - // - case 45: { action. consumeNestedNameSpecifier(false); break; - } - - // - // Rule 46: class_or_namespace_name_with_template ::= template_opt class_or_namespace_name - // - case 46: { action. consumeNameWithTemplateKeyword(); break; - } - - // - // Rule 48: nested_name_specifier_opt ::= $Empty - // - case 48: { action. consumeNestedNameSpecifierEmpty(); break; - } - - // - // Rule 51: postfix_expression ::= postfix_expression [ expression ] - // - case 51: { action. consumeExpressionArraySubscript(); break; - } - - // - // Rule 52: postfix_expression ::= postfix_expression ( expression_list_opt ) - // - case 52: { action. consumeExpressionFunctionCall(); break; - } - - // - // Rule 53: postfix_expression ::= simple_type_specifier ( expression_list_opt ) - // - case 53: { action. consumeExpressionSimpleTypeConstructor(); break; - } - - // - // Rule 54: postfix_expression ::= typename dcolon_opt nested_name_specifier <empty> identifier_name ( expression_list_opt ) - // - case 54: { action. consumeExpressionTypeName(); break; - } - - // - // Rule 55: postfix_expression ::= typename dcolon_opt nested_name_specifier template_opt template_id_name ( expression_list_opt ) - // - case 55: { action. consumeExpressionTypeName(); break; - } - - // - // Rule 56: postfix_expression ::= postfix_expression . qualified_or_unqualified_name - // - case 56: { action. consumeExpressionFieldReference(false, false); break; - } - - // - // Rule 57: postfix_expression ::= postfix_expression -> qualified_or_unqualified_name - // - case 57: { action. consumeExpressionFieldReference(true, false); break; - } - - // - // Rule 58: postfix_expression ::= postfix_expression . template qualified_or_unqualified_name - // - case 58: { action. consumeExpressionFieldReference(false, true); break; - } - - // - // Rule 59: postfix_expression ::= postfix_expression -> template qualified_or_unqualified_name - // - case 59: { action. consumeExpressionFieldReference(true, true); break; - } - - // - // Rule 60: postfix_expression ::= postfix_expression . pseudo_destructor_name - // - case 60: { action. consumeExpressionFieldReference(false, false); break; - } - - // - // Rule 61: postfix_expression ::= postfix_expression -> pseudo_destructor_name - // - case 61: { action. consumeExpressionFieldReference(true, false); break; - } - - // - // Rule 62: postfix_expression ::= postfix_expression ++ - // - case 62: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixIncr); break; - } - - // - // Rule 63: postfix_expression ::= postfix_expression -- - // - case 63: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixDecr); break; - } - - // - // Rule 64: postfix_expression ::= dynamic_cast < type_id > ( expression ) - // - case 64: { action. consumeExpressionCast(ICPPASTCastExpression.op_dynamic_cast); break; - } - - // - // Rule 65: postfix_expression ::= static_cast < type_id > ( expression ) - // - case 65: { action. consumeExpressionCast(ICPPASTCastExpression.op_static_cast); break; - } - - // - // Rule 66: postfix_expression ::= reinterpret_cast < type_id > ( expression ) - // - case 66: { action. consumeExpressionCast(ICPPASTCastExpression.op_reinterpret_cast); break; - } - - // - // Rule 67: postfix_expression ::= const_cast < type_id > ( expression ) - // - case 67: { action. consumeExpressionCast(ICPPASTCastExpression.op_const_cast); break; - } - - // - // Rule 68: postfix_expression ::= typeid ( expression ) - // - case 68: { action. consumeExpressionUnaryOperator(ICPPASTUnaryExpression.op_typeid); break; - } - - // - // Rule 69: postfix_expression ::= typeid ( type_id ) - // - case 69: { action. consumeExpressionTypeId(ICPPASTTypeIdExpression.op_typeid); break; - } - - // - // Rule 70: pseudo_destructor_name ::= dcolon_opt nested_name_specifier_opt type_name :: destructor_type_name - // - case 70: { action. consumePsudoDestructorName(true); break; - } - - // - // Rule 71: pseudo_destructor_name ::= dcolon_opt nested_name_specifier template template_id_name :: destructor_type_name - // - case 71: { action. consumePsudoDestructorName(true); break; - } - - // - // Rule 72: pseudo_destructor_name ::= dcolon_opt nested_name_specifier_opt destructor_type_name - // - case 72: { action. consumePsudoDestructorName(false); break; - } - - // - // Rule 73: destructor_type_name ::= ~ identifier_token - // - case 73: { action. consumeDestructorName(); break; - } - - // - // Rule 74: destructor_type_name ::= ~ template_id_name - // - case 74: { action. consumeDestructorNameTemplateId(); break; - } - - // - // Rule 78: unary_expression ::= ++ cast_expression - // - case 78: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixIncr); break; - } - - // - // Rule 79: unary_expression ::= -- cast_expression - // - case 79: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixDecr); break; - } - - // - // Rule 80: unary_expression ::= & cast_expression - // - case 80: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_amper); break; - } - - // - // Rule 81: unary_expression ::= * cast_expression - // - case 81: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_star); break; - } - - // - // Rule 82: unary_expression ::= + cast_expression - // - case 82: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_plus); break; - } - - // - // Rule 83: unary_expression ::= - cast_expression - // - case 83: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_minus); break; - } - - // - // Rule 84: unary_expression ::= ~ cast_expression - // - case 84: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_tilde); break; - } - - // - // Rule 85: unary_expression ::= ! cast_expression - // - case 85: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_not); break; - } - - // - // Rule 86: unary_expression ::= sizeof unary_expression - // - case 86: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_sizeof); break; - } - - // - // Rule 87: unary_expression ::= sizeof ( type_id ) - // - case 87: { action. consumeExpressionTypeId(ICPPASTTypeIdExpression.op_sizeof); break; - } - - // - // Rule 88: new_expression ::= dcolon_opt new new_placement_opt new_type_id <openscope-ast> new_array_expressions_opt new_initializer_opt - // - case 88: { action. consumeExpressionNew(true); break; - } - - // - // Rule 89: new_expression ::= dcolon_opt new new_placement_opt ( type_id ) <openscope-ast> new_array_expressions_opt new_initializer_opt - // - case 89: { action. consumeExpressionNew(false); break; - } - - // - // Rule 91: new_placement_opt ::= $Empty - // - case 91: { action. consumeEmpty(); break; - } - - // - // Rule 92: new_type_id ::= type_specifier_seq - // - case 92: { action. consumeTypeId(false); break; - } - - // - // Rule 93: new_type_id ::= type_specifier_seq new_declarator - // - case 93: { action. consumeTypeId(true); break; - } - - // - // Rule 94: new_declarator ::= <openscope-ast> new_pointer_operators - // - case 94: { action. consumeNewDeclarator(); break; - } - - // - // Rule 101: new_initializer ::= ( expression_list_opt ) - // - case 101: { action. consumeNewInitializer(); break; - } - - // - // Rule 103: new_initializer_opt ::= $Empty - // - case 103: { action. consumeEmpty(); break; - } - - // - // Rule 104: delete_expression ::= dcolon_opt delete cast_expression - // - case 104: { action. consumeExpressionDelete(false); break; - } - - // - // Rule 105: delete_expression ::= dcolon_opt delete [ ] cast_expression - // - case 105: { action. consumeExpressionDelete(true); break; - } - - // - // Rule 107: cast_expression ::= ( type_id ) cast_expression - // - case 107: { action. consumeExpressionCast(ICPPASTCastExpression.op_cast); break; - } - - // - // Rule 109: pm_expression ::= pm_expression .* cast_expression - // - case 109: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_pmdot); break; - } - - // - // Rule 110: pm_expression ::= pm_expression ->* cast_expression - // - case 110: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_pmarrow); break; - } - - // - // Rule 112: multiplicative_expression ::= multiplicative_expression * pm_expression - // - case 112: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_multiply); break; - } - - // - // Rule 113: multiplicative_expression ::= multiplicative_expression / pm_expression - // - case 113: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_divide); break; - } - - // - // Rule 114: multiplicative_expression ::= multiplicative_expression % pm_expression - // - case 114: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_modulo); break; - } - - // - // Rule 116: additive_expression ::= additive_expression + multiplicative_expression - // - case 116: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_plus); break; - } - - // - // Rule 117: additive_expression ::= additive_expression - multiplicative_expression - // - case 117: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_minus); break; - } - - // - // Rule 119: shift_expression ::= shift_expression << additive_expression - // - case 119: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftLeft); break; - } - - // - // Rule 120: shift_expression ::= shift_expression >> additive_expression - // - case 120: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftRight); break; - } - - // - // Rule 122: relational_expression ::= relational_expression < shift_expression - // - case 122: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessThan); break; - } - - // - // Rule 123: relational_expression ::= relational_expression > shift_expression - // - case 123: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterThan); break; - } - - // - // Rule 124: relational_expression ::= relational_expression <= shift_expression - // - case 124: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessEqual); break; - } - - // - // Rule 125: relational_expression ::= relational_expression >= shift_expression - // - case 125: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterEqual); break; - } - - // - // Rule 127: equality_expression ::= equality_expression == relational_expression - // - case 127: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_equals); break; - } - - // - // Rule 128: equality_expression ::= equality_expression != relational_expression - // - case 128: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_notequals); break; - } - - // - // Rule 130: and_expression ::= and_expression & equality_expression - // - case 130: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAnd); break; - } - - // - // Rule 132: exclusive_or_expression ::= exclusive_or_expression ^ and_expression - // - case 132: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXor); break; - } - - // - // Rule 134: inclusive_or_expression ::= inclusive_or_expression | exclusive_or_expression - // - case 134: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOr); break; - } - - // - // Rule 136: logical_and_expression ::= logical_and_expression && inclusive_or_expression - // - case 136: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalAnd); break; - } - - // - // Rule 138: logical_or_expression ::= logical_or_expression || logical_and_expression - // - case 138: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalOr); break; - } - - // - // Rule 140: conditional_expression ::= logical_or_expression ? expression : assignment_expression - // - case 140: { action. consumeExpressionConditional(); break; - } - - // - // Rule 142: relational_expression_inTemplate ::= relational_expression_inTemplate < shift_expression - // - case 142: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessThan); break; - } - - // - // Rule 143: relational_expression_inTemplate ::= ( relational_expression_inTemplate > shift_expression ) - // - case 143: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterThan); break; - } - - // - // Rule 144: relational_expression_inTemplate ::= relational_expression_inTemplate <= shift_expression - // - case 144: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessEqual); break; - } - - // - // Rule 145: relational_expression_inTemplate ::= relational_expression_inTemplate >= shift_expression - // - case 145: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterEqual); break; - } - - // - // Rule 147: equality_expression_inTemplate ::= equality_expression_inTemplate == relational_expression_inTemplate - // - case 147: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_equals); break; - } - - // - // Rule 148: equality_expression_inTemplate ::= equality_expression_inTemplate != relational_expression_inTemplate - // - case 148: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_notequals); break; - } - - // - // Rule 150: and_expression_inTemplate ::= and_expression_inTemplate & equality_expression_inTemplate - // - case 150: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAnd); break; - } - - // - // Rule 152: exclusive_or_expression_inTemplate ::= exclusive_or_expression_inTemplate ^ and_expression_inTemplate - // - case 152: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXor); break; - } - - // - // Rule 154: inclusive_or_expression_inTemplate ::= inclusive_or_expression_inTemplate | exclusive_or_expression_inTemplate - // - case 154: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOr); break; - } - - // - // Rule 156: logical_and_expression_inTemplate ::= logical_and_expression_inTemplate && inclusive_or_expression_inTemplate - // - case 156: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalAnd); break; - } - - // - // Rule 158: logical_or_expression_inTemplate ::= logical_or_expression_inTemplate || logical_and_expression_inTemplate - // - case 158: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalOr); break; - } - - // - // Rule 160: conditional_expression_inTemplate ::= logical_or_expression_inTemplate ? expression : assignment_expression_inTemplate - // - case 160: { action. consumeExpressionConditional(); break; - } - - // - // Rule 163: assignment_expression_inTemplate ::= logical_or_expression_inTemplate = assignment_expression_inTemplate - // - case 163: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_assign); break; - } - - // - // Rule 164: assignment_expression_inTemplate ::= logical_or_expression_inTemplate *= assignment_expression_inTemplate - // - case 164: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_multiplyAssign); break; - } - - // - // Rule 165: assignment_expression_inTemplate ::= logical_or_expression_inTemplate /= assignment_expression_inTemplate - // - case 165: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_divideAssign); break; - } - - // - // Rule 166: assignment_expression_inTemplate ::= logical_or_expression_inTemplate %= assignment_expression_inTemplate - // - case 166: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_moduloAssign); break; - } - - // - // Rule 167: assignment_expression_inTemplate ::= logical_or_expression_inTemplate += assignment_expression_inTemplate - // - case 167: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_plusAssign); break; - } - - // - // Rule 168: assignment_expression_inTemplate ::= logical_or_expression_inTemplate -= assignment_expression_inTemplate - // - case 168: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_minusAssign); break; - } - - // - // Rule 169: assignment_expression_inTemplate ::= logical_or_expression_inTemplate >>= assignment_expression_inTemplate - // - case 169: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftRightAssign); break; - } - - // - // Rule 170: assignment_expression_inTemplate ::= logical_or_expression_inTemplate <<= assignment_expression_inTemplate - // - case 170: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftLeftAssign); break; - } - - // - // Rule 171: assignment_expression_inTemplate ::= logical_or_expression_inTemplate &= assignment_expression_inTemplate - // - case 171: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAndAssign); break; - } - - // - // Rule 172: assignment_expression_inTemplate ::= logical_or_expression_inTemplate ^= assignment_expression_inTemplate - // - case 172: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXorAssign); break; - } - - // - // Rule 173: assignment_expression_inTemplate ::= logical_or_expression_inTemplate |= assignment_expression_inTemplate - // - case 173: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOrAssign); break; - } - - // - // Rule 174: throw_expression ::= throw - // - case 174: { action. consumeExpressionThrow(false); break; - } - - // - // Rule 175: throw_expression ::= throw assignment_expression - // - case 175: { action. consumeExpressionThrow(true); break; - } - - // - // Rule 178: assignment_expression ::= logical_or_expression = assignment_expression - // - case 178: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_assign); break; - } - - // - // Rule 179: assignment_expression ::= logical_or_expression *= assignment_expression - // - case 179: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_multiplyAssign); break; - } - - // - // Rule 180: assignment_expression ::= logical_or_expression /= assignment_expression - // - case 180: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_divideAssign); break; - } - - // - // Rule 181: assignment_expression ::= logical_or_expression %= assignment_expression - // - case 181: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_moduloAssign); break; - } - - // - // Rule 182: assignment_expression ::= logical_or_expression += assignment_expression - // - case 182: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_plusAssign); break; - } - - // - // Rule 183: assignment_expression ::= logical_or_expression -= assignment_expression - // - case 183: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_minusAssign); break; - } - - // - // Rule 184: assignment_expression ::= logical_or_expression >>= assignment_expression - // - case 184: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftRightAssign); break; - } - - // - // Rule 185: assignment_expression ::= logical_or_expression <<= assignment_expression - // - case 185: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftLeftAssign); break; - } - - // - // Rule 186: assignment_expression ::= logical_or_expression &= assignment_expression - // - case 186: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAndAssign); break; - } - - // - // Rule 187: assignment_expression ::= logical_or_expression ^= assignment_expression - // - case 187: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXorAssign); break; - } - - // - // Rule 188: assignment_expression ::= logical_or_expression |= assignment_expression - // - case 188: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOrAssign); break; - } - - // - // Rule 190: expression_list ::= <openscope-ast> expression_list_actual - // - case 190: { action. consumeExpressionList(); break; - } - - // - // Rule 194: expression_list_opt ::= $Empty - // - case 194: { action. consumeEmpty(); break; - } - - // - // Rule 196: expression_opt ::= $Empty - // - case 196: { action. consumeEmpty(); break; - } - - // - // Rule 199: constant_expression_opt ::= $Empty - // - case 199: { action. consumeEmpty(); break; - } - - // - // Rule 208: statement ::= ERROR_TOKEN - // - case 208: { action. consumeStatementProblem(); break; - } - - // - // Rule 209: labeled_statement ::= identifier : statement - // - case 209: { action. consumeStatementLabeled(); break; - } - - // - // Rule 210: labeled_statement ::= case constant_expression : statement - // - case 210: { action. consumeStatementCase(); break; - } - - // - // Rule 211: labeled_statement ::= default : statement - // - case 211: { action. consumeStatementDefault(); break; - } - - // - // Rule 212: expression_statement ::= expression ; - // - case 212: { action. consumeStatementExpression(); break; - } - - // - // Rule 213: expression_statement ::= ; - // - case 213: { action. consumeStatementNull(); break; - } - - // - // Rule 214: compound_statement ::= { <openscope-ast> statement_seq } - // - case 214: { action. consumeStatementCompoundStatement(true); break; - } - - // - // Rule 215: compound_statement ::= { } - // - case 215: { action. consumeStatementCompoundStatement(false); break; - } - - // - // Rule 218: selection_statement ::= if ( condition ) statement - // - case 218: { action. consumeStatementIf(false); break; - } - - // - // Rule 219: selection_statement ::= if ( condition ) statement else statement - // - case 219: { action. consumeStatementIf(true); break; - } - - // - // Rule 220: selection_statement ::= switch ( condition ) statement - // - case 220: { action. consumeStatementSwitch(); break; - } - - // - // Rule 222: condition ::= type_specifier_seq declarator = assignment_expression - // - case 222: { action. consumeConditionDeclaration(); break; - } - - // - // Rule 224: condition_opt ::= $Empty - // - case 224: { action. consumeEmpty(); break; - } - - // - // Rule 225: iteration_statement ::= while ( condition ) statement - // - case 225: { action. consumeStatementWhileLoop(); break; - } - - // - // Rule 226: iteration_statement ::= do statement while ( expression ) ; - // - case 226: { action. consumeStatementDoLoop(true); break; - } - - // - // Rule 227: iteration_statement ::= do statement - // - case 227: { action. consumeStatementDoLoop(false); break; - } - - // - // Rule 228: iteration_statement ::= for ( for_init_statement condition_opt ; expression_opt ) statement - // - case 228: { action. consumeStatementForLoop(); break; - } - - // - // Rule 230: for_init_statement ::= simple_declaration_with_declspec - // - case 230: { action. consumeStatementDeclaration(); break; - } - - // - // Rule 231: jump_statement ::= break ; - // - case 231: { action. consumeStatementBreak(); break; - } - - // - // Rule 232: jump_statement ::= continue ; - // - case 232: { action. consumeStatementContinue(); break; - } - - // - // Rule 233: jump_statement ::= return expression ; - // - case 233: { action. consumeStatementReturn(true); break; - } - - // - // Rule 234: jump_statement ::= return ; - // - case 234: { action. consumeStatementReturn(false); break; - } - - // - // Rule 235: jump_statement ::= goto identifier_token ; - // - case 235: { action. consumeStatementGoto(); break; - } - - // - // Rule 236: declaration_statement ::= block_declaration - // - case 236: { action. consumeStatementDeclarationWithDisambiguation(); break; - } - - // - // Rule 237: declaration_statement ::= function_definition - // - case 237: { action. consumeStatementDeclaration(); break; - } - - // - // Rule 245: declaration ::= ERROR_TOKEN - // - case 245: { action. consumeDeclarationProblem(); break; - } - - // - // Rule 255: simple_declaration ::= declaration_specifiers_opt <openscope-ast> init_declarator_list_opt ; - // - case 255: { action. consumeDeclarationSimple(true); break; - } - - // - // Rule 256: simple_declaration_with_declspec ::= declaration_specifiers <openscope-ast> init_declarator_list_opt ; - // - case 256: { action. consumeDeclarationSimple(true); break; - } - - // - // Rule 257: declaration_specifiers ::= <openscope-ast> simple_declaration_specifiers - // - case 257: { action. consumeDeclarationSpecifiersSimple(); break; - } - - // - // Rule 258: declaration_specifiers ::= <openscope-ast> class_declaration_specifiers - // - case 258: { action. consumeDeclarationSpecifiersComposite(); break; - } - - // - // Rule 259: declaration_specifiers ::= <openscope-ast> elaborated_declaration_specifiers - // - case 259: { action. consumeDeclarationSpecifiersComposite(); break; - } - - // - // Rule 260: declaration_specifiers ::= <openscope-ast> enum_declaration_specifiers - // - case 260: { action. consumeDeclarationSpecifiersComposite(); break; - } - - // - // Rule 261: declaration_specifiers ::= <openscope-ast> type_name_declaration_specifiers - // - case 261: { action. consumeDeclarationSpecifiersTypeName(); break; - } - - // - // Rule 263: declaration_specifiers_opt ::= $Empty - // - case 263: { action. consumeEmpty(); break; - } - - // - // Rule 267: no_type_declaration_specifier ::= friend - // - case 267: { action. consumeToken(); break; - } - - // - // Rule 268: no_type_declaration_specifier ::= typedef - // - case 268: { action. consumeToken(); break; - } - - // - // Rule 288: storage_class_specifier ::= auto - // - case 288: { action. consumeToken(); break; - } - - // - // Rule 289: storage_class_specifier ::= register - // - case 289: { action. consumeToken(); break; - } - - // - // Rule 290: storage_class_specifier ::= static - // - case 290: { action. consumeToken(); break; - } - - // - // Rule 291: storage_class_specifier ::= extern - // - case 291: { action. consumeToken(); break; - } - - // - // Rule 292: storage_class_specifier ::= mutable - // - case 292: { action. consumeToken(); break; - } - - // - // Rule 293: function_specifier ::= inline - // - case 293: { action. consumeToken(); break; - } - - // - // Rule 294: function_specifier ::= virtual - // - case 294: { action. consumeToken(); break; - } - - // - // Rule 295: function_specifier ::= explicit - // - case 295: { action. consumeToken(); break; - } - - // - // Rule 296: simple_type_specifier ::= simple_type_specifier_token - // - case 296: { action. consumeToken(); break; - } - - // - // Rule 310: type_name_specifier ::= dcolon_opt nested_name_specifier_opt type_name - // - case 310: { action. consumeQualifiedId(false); break; - } - - // - // Rule 311: type_name_specifier ::= dcolon_opt nested_name_specifier template template_id_name - // - case 311: { action. consumeQualifiedId(false); break; - } - - // - // Rule 312: type_name_specifier ::= typename dcolon_opt nested_name_specifier identifier_name - // - case 312: { action. consumeQualifiedId(false); break; - } - - // - // Rule 313: type_name_specifier ::= typename dcolon_opt nested_name_specifier template_opt template_id_name - // - case 313: { action. consumeQualifiedId(true); break; - } - - // - // Rule 315: elaborated_type_specifier ::= class_keyword elaborated_specifier_hook dcolon_opt nested_name_specifier_opt identifier_name - // - case 315: { action. consumeTypeSpecifierElaborated(false); break; - } - - // - // Rule 316: elaborated_type_specifier ::= class_keyword elaborated_specifier_hook dcolon_opt nested_name_specifier_opt template_opt template_id_name - // - case 316: { action. consumeTypeSpecifierElaborated(true); break; - } - - // - // Rule 317: elaborated_type_specifier ::= enum elaborated_specifier_hook dcolon_opt nested_name_specifier_opt identifier_name - // - case 317: { action. consumeTypeSpecifierElaborated(false); break; - } - - // - // Rule 321: enum_specifier ::= enum enum_specifier_hook { <openscope-ast> enumerator_list_opt comma_opt } - // - case 321: { action. consumeTypeSpecifierEnumeration(false); break; - } - - // - // Rule 322: enum_specifier ::= enum enum_specifier_hook identifier_token { <openscope-ast> enumerator_list_opt comma_opt } - // - case 322: { action. consumeTypeSpecifierEnumeration(true); break; - } - - // - // Rule 328: enumerator_definition ::= identifier_token - // - case 328: { action. consumeEnumerator(false); break; - } - - // - // Rule 329: enumerator_definition ::= identifier_token = constant_expression - // - case 329: { action. consumeEnumerator(true); break; - } - - // - // Rule 331: namespace_definition ::= namespace namespace_name namespace_definition_hook { <openscope-ast> declaration_seq_opt } - // - case 331: { action. consumeNamespaceDefinition(true); break; - } - - // - // Rule 332: namespace_definition ::= namespace namespace_definition_hook { <openscope-ast> declaration_seq_opt } - // - case 332: { action. consumeNamespaceDefinition(false); break; - } - - // - // Rule 334: namespace_alias_definition ::= namespace identifier_token = dcolon_opt nested_name_specifier_opt namespace_name ; - // - case 334: { action. consumeNamespaceAliasDefinition(); break; - } - - // - // Rule 335: using_declaration ::= using typename_opt dcolon_opt nested_name_specifier_opt unqualified_id_name ; - // - case 335: { action. consumeUsingDeclaration(); break; - } - - // - // Rule 336: typename_opt ::= typename - // - case 336: { action. consumePlaceHolder(); break; - } - - // - // Rule 337: typename_opt ::= $Empty - // - case 337: { action. consumeEmpty(); break; - } - - // - // Rule 338: using_directive ::= using namespace dcolon_opt nested_name_specifier_opt namespace_name ; - // - case 338: { action. consumeUsingDirective(); break; - } - - // - // Rule 339: linkage_specification ::= extern stringlit { <openscope-ast> declaration_seq_opt } - // - case 339: { action. consumeLinkageSpecification(); break; - } - - // - // Rule 340: linkage_specification ::= extern stringlit <openscope-ast> declaration - // - case 340: { action. consumeLinkageSpecification(); break; - } - - // - // Rule 345: init_declarator_complete ::= init_declarator - // - case 345: { action. consumeInitDeclaratorComplete(); break; - } - - // - // Rule 347: init_declarator ::= complete_declarator initializer - // - case 347: { action. consumeDeclaratorWithInitializer(true); break; - } - - // - // Rule 350: declarator ::= <openscope-ast> ptr_operator_seq direct_declarator - // - case 350: { action. consumeDeclaratorWithPointer(true); break; - } - - // - // Rule 352: function_declarator ::= <openscope-ast> ptr_operator_seq direct_declarator - // - case 352: { action. consumeDeclaratorWithPointer(true); break; - } - - // - // Rule 356: basic_direct_declarator ::= declarator_id_name - // - case 356: { action. consumeDirectDeclaratorIdentifier(); break; - } - - // - // Rule 357: basic_direct_declarator ::= ( declarator ) - // - case 357: { action. consumeDirectDeclaratorBracketed(); break; - } - - // - // Rule 358: function_direct_declarator ::= basic_direct_declarator ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt - // - case 358: { action. consumeDirectDeclaratorFunctionDeclarator(true); break; - } - - // - // Rule 359: array_direct_declarator ::= array_direct_declarator array_modifier - // - case 359: { action. consumeDirectDeclaratorArrayDeclarator(true); break; - } - - // - // Rule 360: array_direct_declarator ::= basic_direct_declarator array_modifier - // - case 360: { action. consumeDirectDeclaratorArrayDeclarator(true); break; - } - - // - // Rule 361: array_modifier ::= [ constant_expression ] - // - case 361: { action. consumeDirectDeclaratorArrayModifier(true); break; - } - - // - // Rule 362: array_modifier ::= [ ] - // - case 362: { action. consumeDirectDeclaratorArrayModifier(false); break; - } - - // - // Rule 363: ptr_operator ::= pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt - // - case 363: { action. consumePointer(); break; - } - - // - // Rule 364: ptr_operator ::= pointer_hook & pointer_hook - // - case 364: { action. consumeReferenceOperator(); break; - } - - // - // Rule 365: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt - // - case 365: { action. consumePointerToMember(); break; - } - - // - // Rule 372: cv_qualifier ::= const - // - case 372: { action. consumeToken(); break; - } - - // - // Rule 373: cv_qualifier ::= volatile - // - case 373: { action. consumeToken(); break; - } - - // - // Rule 375: declarator_id_name ::= dcolon_opt nested_name_specifier_opt type_name - // - case 375: { action. consumeQualifiedId(false); break; - } - - // - // Rule 376: type_id ::= type_specifier_seq - // - case 376: { action. consumeTypeId(false); break; - } - - // - // Rule 377: type_id ::= type_specifier_seq abstract_declarator - // - case 377: { action. consumeTypeId(true); break; - } - - // - // Rule 380: abstract_declarator ::= <openscope-ast> ptr_operator_seq - // - case 380: { action. consumeDeclaratorWithPointer(false); break; - } - - // - // Rule 381: abstract_declarator ::= <openscope-ast> ptr_operator_seq direct_abstract_declarator - // - case 381: { action. consumeDeclaratorWithPointer(true); break; - } - - // - // Rule 385: basic_direct_abstract_declarator ::= ( abstract_declarator ) - // - case 385: { action. consumeDirectDeclaratorBracketed(); break; - } - - // - // Rule 386: basic_direct_abstract_declarator ::= ( ) - // - case 386: { action. consumeAbstractDeclaratorEmpty(); break; - } - - // - // Rule 387: array_direct_abstract_declarator ::= array_modifier - // - case 387: { action. consumeDirectDeclaratorArrayDeclarator(false); break; - } - - // - // Rule 388: array_direct_abstract_declarator ::= array_direct_abstract_declarator array_modifier - // - case 388: { action. consumeDirectDeclaratorArrayDeclarator(true); break; - } - - // - // Rule 389: array_direct_abstract_declarator ::= basic_direct_abstract_declarator array_modifier - // - case 389: { action. consumeDirectDeclaratorArrayDeclarator(true); break; - } - - // - // Rule 390: function_direct_abstract_declarator ::= basic_direct_abstract_declarator ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt - // - case 390: { action. consumeDirectDeclaratorFunctionDeclarator(true); break; - } - - // - // Rule 391: function_direct_abstract_declarator ::= ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt - // - case 391: { action. consumeDirectDeclaratorFunctionDeclarator(false); break; - } - - // - // Rule 392: parameter_declaration_clause ::= parameter_declaration_list_opt ... - // - case 392: { action. consumePlaceHolder(); break; - } - - // - // Rule 393: parameter_declaration_clause ::= parameter_declaration_list_opt - // - case 393: { action. consumeEmpty(); break; - } - - // - // Rule 394: parameter_declaration_clause ::= parameter_declaration_list , ... - // - case 394: { action. consumePlaceHolder(); break; - } - - // - // Rule 400: abstract_declarator_opt ::= $Empty - // - case 400: { action. consumeEmpty(); break; - } - - // - // Rule 401: parameter_declaration ::= declaration_specifiers parameter_init_declarator - // - case 401: { action. consumeParameterDeclaration(); break; - } - - // - // Rule 402: parameter_declaration ::= declaration_specifiers - // - case 402: { action. consumeParameterDeclarationWithoutDeclarator(); break; - } - - // - // Rule 404: parameter_init_declarator ::= declarator = parameter_initializer - // - case 404: { action. consumeDeclaratorWithInitializer(true); break; - } - - // - // Rule 406: parameter_init_declarator ::= abstract_declarator = parameter_initializer - // - case 406: { action. consumeDeclaratorWithInitializer(true); break; - } - - // - // Rule 407: parameter_init_declarator ::= = parameter_initializer - // - case 407: { action. consumeDeclaratorWithInitializer(false); break; - } - - // - // Rule 408: parameter_initializer ::= assignment_expression - // - case 408: { action. consumeInitializer(); break; - } - - // - // Rule 409: function_definition ::= declaration_specifiers_opt function_declarator <openscope-ast> ctor_initializer_list_opt function_body - // - case 409: { action. consumeFunctionDefinition(false); break; - } - - // - // Rule 410: function_definition ::= declaration_specifiers_opt function_declarator try <openscope-ast> ctor_initializer_list_opt function_body <openscope-ast> handler_seq - // - case 410: { action. consumeFunctionDefinition(true); break; - } - - // - // Rule 413: initializer ::= ( expression_list ) - // - case 413: { action. consumeInitializerConstructor(); break; - } - - // - // Rule 414: initializer_clause ::= assignment_expression - // - case 414: { action. consumeInitializer(); break; - } - - // - // Rule 415: initializer_clause ::= initializer_list - // - case 415: { action. consumeInitializer(); break; - } - - // - // Rule 416: initializer_list ::= start_initializer_list { <openscope-ast> initializer_seq , } end_initializer_list - // - case 416: { action. consumeInitializerList(); break; - } - - // - // Rule 417: initializer_list ::= start_initializer_list { <openscope-ast> initializer_seq } end_initializer_list - // - case 417: { action. consumeInitializerList(); break; - } - - // - // Rule 418: initializer_list ::= { <openscope-ast> } - // - case 418: { action. consumeInitializerList(); break; - } - - // - // Rule 419: start_initializer_list ::= $Empty - // - case 419: { action. initializerListStart(); break; - } - - // - // Rule 420: end_initializer_list ::= $Empty - // - case 420: { action. initializerListEnd(); break; - } - - // - // Rule 425: class_specifier ::= class_head { <openscope-ast> member_declaration_list_opt } - // - case 425: { action. consumeClassSpecifier(); break; - } - - // - // Rule 426: class_head ::= class_keyword composite_specifier_hook identifier_name_opt class_name_suffix_hook <openscope-ast> base_clause_opt - // - case 426: { action. consumeClassHead(false); break; - } - - // - // Rule 427: class_head ::= class_keyword composite_specifier_hook template_id_name class_name_suffix_hook <openscope-ast> base_clause_opt - // - case 427: { action. consumeClassHead(false); break; - } - - // - // Rule 428: class_head ::= class_keyword composite_specifier_hook nested_name_specifier identifier_name class_name_suffix_hook <openscope-ast> base_clause_opt - // - case 428: { action. consumeClassHead(true); break; - } - - // - // Rule 429: class_head ::= class_keyword composite_specifier_hook nested_name_specifier template_id_name class_name_suffix_hook <openscope-ast> base_clause_opt - // - case 429: { action. consumeClassHead(true); break; - } - - // - // Rule 433: identifier_name_opt ::= $Empty - // - case 433: { action. consumeEmpty(); break; - } - - // - // Rule 437: visibility_label ::= access_specifier_keyword : - // - case 437: { action. consumeVisibilityLabel(); break; - } - - // - // Rule 438: member_declaration ::= declaration_specifiers_opt <openscope-ast> member_declarator_list ; - // - case 438: { action. consumeDeclarationSimple(true); break; - } - - // - // Rule 439: member_declaration ::= declaration_specifiers_opt ; - // - case 439: { action. consumeDeclarationSimple(false); break; - } - - // - // Rule 442: member_declaration ::= dcolon_opt nested_name_specifier template_opt unqualified_id_name ; - // - case 442: { action. consumeMemberDeclarationQualifiedId(); break; - } - - // - // Rule 448: member_declaration ::= ERROR_TOKEN - // - case 448: { action. consumeDeclarationProblem(); break; - } - - // - // Rule 457: member_declarator ::= declarator constant_initializer - // - case 457: { action. consumeMemberDeclaratorWithInitializer(); break; - } - - // - // Rule 458: member_declarator ::= bit_field_declarator : constant_expression - // - case 458: { action. consumeBitField(true); break; - } - - // - // Rule 459: member_declarator ::= : constant_expression - // - case 459: { action. consumeBitField(false); break; - } - - // - // Rule 460: bit_field_declarator ::= identifier_name - // - case 460: { action. consumeDirectDeclaratorIdentifier(); break; - } - - // - // Rule 461: constant_initializer ::= = constant_expression - // - case 461: { action. consumeInitializer(); break; - } - - // - // Rule 467: base_specifier ::= dcolon_opt nested_name_specifier_opt class_name - // - case 467: { action. consumeBaseSpecifier(false, false); break; - } - - // - // Rule 468: base_specifier ::= virtual access_specifier_keyword_opt dcolon_opt nested_name_specifier_opt class_name - // - case 468: { action. consumeBaseSpecifier(true, true); break; - } - - // - // Rule 469: base_specifier ::= access_specifier_keyword virtual dcolon_opt nested_name_specifier_opt class_name - // - case 469: { action. consumeBaseSpecifier(true, true); break; - } - - // - // Rule 470: base_specifier ::= access_specifier_keyword dcolon_opt nested_name_specifier_opt class_name - // - case 470: { action. consumeBaseSpecifier(true, false); break; - } - - // - // Rule 471: access_specifier_keyword ::= private - // - case 471: { action. consumeToken(); break; - } - - // - // Rule 472: access_specifier_keyword ::= protected - // - case 472: { action. consumeToken(); break; - } - - // - // Rule 473: access_specifier_keyword ::= public - // - case 473: { action. consumeToken(); break; - } - - // - // Rule 475: access_specifier_keyword_opt ::= $Empty - // - case 475: { action. consumeEmpty(); break; - } - - // - // Rule 477: conversion_function_id_name ::= conversion_function_id < <openscope-ast> template_argument_list_opt > - // - case 477: { action. consumeTemplateId(); break; - } - - // - // Rule 478: conversion_function_id ::= operator conversion_type_id - // - case 478: { action. consumeConversionName(); break; - } - - // - // Rule 479: conversion_type_id ::= type_specifier_seq conversion_declarator - // - case 479: { action. consumeTypeId(true); break; - } - - // - // Rule 480: conversion_type_id ::= type_specifier_seq - // - case 480: { action. consumeTypeId(false); break; - } - - // - // Rule 481: conversion_declarator ::= <openscope-ast> ptr_operator_seq - // - case 481: { action. consumeDeclaratorWithPointer(false); break; - } - - // - // Rule 487: mem_initializer ::= mem_initializer_name ( expression_list_opt ) - // - case 487: { action. consumeConstructorChainInitializer(); break; - } - - // - // Rule 488: mem_initializer_name ::= dcolon_opt nested_name_specifier_opt class_name - // - case 488: { action. consumeQualifiedId(false); break; - } - - // - // Rule 491: operator_function_id_name ::= operator_id_name < <openscope-ast> template_argument_list_opt > - // - case 491: { action. consumeTemplateId(); break; - } - - // - // Rule 492: operator_id_name ::= operator overloadable_operator - // - case 492: { action. consumeOperatorName(); break; - } - - // - // Rule 535: template_declaration ::= export_opt template < <openscope-ast> template_parameter_list > declaration - // - case 535: { action. consumeTemplateDeclaration(); break; - } - - // - // Rule 536: export_opt ::= export - // - case 536: { action. consumePlaceHolder(); break; - } - - // - // Rule 537: export_opt ::= $Empty - // - case 537: { action. consumeEmpty(); break; - } - - // - // Rule 541: template_parameter ::= parameter_declaration - // - case 541: { action. consumeTemplateParamterDeclaration(); break; - } - - // - // Rule 542: type_parameter ::= class identifier_name_opt - // - case 542: { action. consumeSimpleTypeTemplateParameter(false); break; - } - - // - // Rule 543: type_parameter ::= class identifier_name_opt = type_id - // - case 543: { action. consumeSimpleTypeTemplateParameter(true); break; - } - - // - // Rule 544: type_parameter ::= typename identifier_name_opt - // - case 544: { action. consumeSimpleTypeTemplateParameter(false); break; - } - - // - // Rule 545: type_parameter ::= typename identifier_name_opt = type_id - // - case 545: { action. consumeSimpleTypeTemplateParameter(true); break; - } - - // - // Rule 546: type_parameter ::= template < <openscope-ast> template_parameter_list > class identifier_name_opt - // - case 546: { action. consumeTemplatedTypeTemplateParameter(false); break; - } - - // - // Rule 547: type_parameter ::= template < <openscope-ast> template_parameter_list > class identifier_name_opt = id_expression - // - case 547: { action. consumeTemplatedTypeTemplateParameter(true); break; - } - - // - // Rule 548: template_id_name ::= identifier_name < <openscope-ast> template_argument_list_opt > - // - case 548: { action. consumeTemplateId(); break; - } - - // - // Rule 555: nested_name_specifier_inTemplate ::= class_or_namespace_name_inTemplate :: nested_name_specifier_with_template_inTemplate - // - case 555: { action. consumeNestedNameSpecifier(true); break; - } - - // - // Rule 556: nested_name_specifier_inTemplate ::= class_or_namespace_name_inTemplate :: - // - case 556: { action. consumeNestedNameSpecifier(false); break; - } - - // - // Rule 557: nested_name_specifier_with_template_inTemplate ::= class_or_namespace_name_with_template_inTemplate :: nested_name_specifier_with_template_inTemplate - // - case 557: { action. consumeNestedNameSpecifier(true); break; - } - - // - // Rule 558: nested_name_specifier_with_template_inTemplate ::= class_or_namespace_name_with_template_inTemplate :: - // - case 558: { action. consumeNestedNameSpecifier(false); break; - } - - // - // Rule 559: class_or_namespace_name_with_template_inTemplate ::= template_opt class_or_namespace_name_inTemplate - // - case 559: { action. consumeNameWithTemplateKeyword(); break; - } - - // - // Rule 561: nested_name_specifier_opt_inTemplate ::= $Empty - // - case 561: { action. consumeNestedNameSpecifierEmpty(); break; - } - - // - // Rule 564: type_name_specifier_inTemplate ::= typename dcolon_opt nested_name_specifier identifier_name - // - case 564: { action. consumeQualifiedId(false); break; - } - - // - // Rule 565: type_name_specifier_inTemplate ::= typename dcolon_opt nested_name_specifier template_opt template_id_name - // - case 565: { action. consumeQualifiedId(true); break; - } - - // - // Rule 570: declaration_specifiers_inTemplate ::= <openscope-ast> simple_declaration_specifiers - // - case 570: { action. consumeDeclarationSpecifiersSimple(); break; - } - - // - // Rule 571: declaration_specifiers_inTemplate ::= <openscope-ast> class_declaration_specifiers - // - case 571: { action. consumeDeclarationSpecifiersComposite(); break; - } - - // - // Rule 572: declaration_specifiers_inTemplate ::= <openscope-ast> elaborated_declaration_specifiers - // - case 572: { action. consumeDeclarationSpecifiersComposite(); break; - } - - // - // Rule 573: declaration_specifiers_inTemplate ::= <openscope-ast> enum_declaration_specifiers - // - case 573: { action. consumeDeclarationSpecifiersComposite(); break; - } - - // - // Rule 574: declaration_specifiers_inTemplate ::= <openscope-ast> type_name_declaration_specifiers_inTemplate - // - case 574: { action. consumeDeclarationSpecifiersTypeName(); break; - } - - // - // Rule 576: type_id_inTemplate ::= type_specifier_seq_inTemplate - // - case 576: { action. consumeTypeId(false); break; - } - - // - // Rule 577: type_id_inTemplate ::= type_specifier_seq_inTemplate abstract_declarator - // - case 577: { action. consumeTypeId(true); break; - } - - // - // Rule 578: template_argument ::= assignment_expression_inTemplate - // - case 578: { action. consumeTemplateArgumentExpression(); break; - } - - // - // Rule 579: template_argument ::= type_id_inTemplate - // - case 579: { action. consumeTemplateArgumentTypeId(); break; - } - - // - // Rule 580: explicit_instantiation ::= template declaration - // - case 580: { action. consumeTemplateExplicitInstantiation(); break; - } - - // - // Rule 581: explicit_specialization ::= template < > declaration - // - case 581: { action. consumeTemplateExplicitSpecialization(); break; - } - - // - // Rule 582: try_block ::= try compound_statement <openscope-ast> handler_seq - // - case 582: { action. consumeStatementTryBlock(true); break; - } - - // - // Rule 583: try_block ::= try compound_statement - // - case 583: { action. consumeStatementTryBlock(false); break; - } - - // - // Rule 586: handler ::= catch ( exception_declaration ) compound_statement - // - case 586: { action. consumeStatementCatchHandler(false); break; - } - - // - // Rule 587: handler ::= catch ( ... ) compound_statement - // - case 587: { action. consumeStatementCatchHandler(true); break; - } - - // - // Rule 588: exception_declaration ::= type_specifier_seq <openscope-ast> declarator - // - case 588: { action. consumeDeclarationSimple(true); break; - } - - // - // Rule 589: exception_declaration ::= type_specifier_seq <openscope-ast> abstract_declarator - // - case 589: { action. consumeDeclarationSimple(true); break; - } - - // - // Rule 590: exception_declaration ::= type_specifier_seq - // - case 590: { action. consumeDeclarationSimple(false); break; - } - - // - // Rule 592: exception_specification ::= throw ( ) - // - case 592: { action. consumePlaceHolder(); break; - } - - // - // Rule 613: attribute_parameter ::= assignment_expression - // - case 613: { action. consumeIgnore(); break; - } - - // - // Rule 624: extended_asm_declaration ::= asm volatile_opt ( extended_asm_param_seq ) ; - // - case 624: { gnuAction.consumeDeclarationASM(); break; - } - - // - // Rule 635: unary_expression ::= __alignof__ unary_expression - // - case 635: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_alignOf); break; - } - - // - // Rule 636: unary_expression ::= __alignof__ ( type_id ) - // - case 636: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_alignof); break; - } - - // - // Rule 637: unary_expression ::= typeof unary_expression - // - case 637: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); break; - } - - // - // Rule 638: unary_expression ::= typeof ( type_id ) - // - case 638: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); break; - } - - // - // Rule 639: relational_expression ::= relational_expression >? shift_expression - // - case 639: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_max); break; - } - - // - // Rule 640: relational_expression ::= relational_expression <? shift_expression - // - case 640: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_min); break; - } - - // - // Rule 641: conditional_expression ::= logical_or_expression ? <empty> : assignment_expression - // - case 641: { action. consumeExpressionConditional(); break; - } - - // - // Rule 642: primary_expression ::= ( compound_statement ) - // - case 642: { gnuAction.consumeCompoundStatementExpression(); break; - } - - // - // Rule 643: labeled_statement ::= case case_range_expression : statement - // - case 643: { action. consumeStatementCase(); break; - } - - // - // Rule 644: case_range_expression ::= constant_expression ... constant_expression - // - case 644: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_assign); break; - } - - // - // Rule 648: typeof_type_specifier ::= typeof unary_expression - // - case 648: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); break; - } - - // - // Rule 649: typeof_type_specifier ::= typeof ( type_id ) - // - case 649: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); break; - } - - // - // Rule 650: declaration_specifiers ::= <openscope-ast> typeof_declaration_specifiers - // - case 650: { action. consumeDeclarationSpecifiersTypeof(); break; - } - - // - // Rule 663: declarator ::= <openscope-ast> ptr_operator_seq attribute_or_decl_specifier_seq direct_declarator - // - case 663: { action. consumeDeclaratorWithPointer(true); break; - } - - // - // Rule 666: simple_type_specifier ::= _Complex - // - case 666: { action. consumeToken(); break; - } - - // - // Rule 667: simple_type_specifier ::= _Imaginary - // - case 667: { action. consumeToken(); break; - } - - // - // Rule 668: cv_qualifier ::= restrict - // - case 668: { action. consumeToken(); break; - } - - // - // Rule 669: explicit_instantiation ::= extern template declaration - // - case 669: { action. consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_extern); break; - } - - // - // Rule 670: explicit_instantiation ::= static template declaration - // - case 670: { action. consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_static); break; - } - - // - // Rule 671: explicit_instantiation ::= inline template declaration - // - case 671: { action. consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_inline); break; - } - - // - // Rule 672: postfix_expression ::= ( type_id ) initializer_list - // - case 672: { action. consumeExpressionTypeIdInitializer(); break; - } - - - default: - break; - } - return; - } -} + public ErrorToken getRhsErrorIToken(int i) { + int index = btParser.getToken(i); + IToken err = super.getIToken(index); + return (ErrorToken) (err instanceof ErrorToken ? err : null); + } + + public GPPParser(LexStream lexStream) { + super(lexStream); + + try { + super.remapTerminalSymbols(orderedTerminalSymbols(), GPPParserprs.EOFT_SYMBOL); + } catch (NullExportedSymbolsException e) { + } catch (NullTerminalSymbolsException e) { + } catch (UnimplementedTerminalsException e) { + java.util.ArrayList unimplemented_symbols = e.getSymbols(); + System.out.println("The Lexer will not scan the following token(s):"); + for (int i = 0; i < unimplemented_symbols.size(); i++) { + Integer id = (Integer) unimplemented_symbols.get(i); + System.out.println(" " + GPPParsersym.orderedTerminalSymbols[id.intValue()]); + } + System.out.println(); + } catch (UndefinedEofSymbolException e) { + throw new Error(new UndefinedEofSymbolException("The Lexer does not implement the Eof symbol " + + GPPParsersym.orderedTerminalSymbols[GPPParserprs.EOFT_SYMBOL])); + } + } + + @Override + public String[] orderedTerminalSymbols() { + return GPPParsersym.orderedTerminalSymbols; + } + + public String getTokenKindName(int kind) { + return GPPParsersym.orderedTerminalSymbols[kind]; + } + + public int getEOFTokenKind() { + return GPPParserprs.EOFT_SYMBOL; + } + + public PrsStream getParseStream() { + return this; + } + + // + // Report error message for given error_token. + // + public final void reportErrorTokenMessage(int error_token, String msg) { + int firsttok = super.getFirstErrorToken(error_token), lasttok = super.getLastErrorToken(error_token); + String location = super.getFileName() + ':' + + (firsttok > lasttok ? (super.getEndLine(lasttok) + ":" + super.getEndColumn(lasttok)) + : (super.getLine(error_token) + ":" + super.getColumn(error_token) + ":" + + super.getEndLine(error_token) + ":" + super.getEndColumn(error_token))) + + ": "; + super.reportError((firsttok > lasttok ? ParseErrorCodes.INSERTION_CODE : ParseErrorCodes.SUBSTITUTION_CODE), + location, msg); + } + + public void parser() { + parser(null, 0); + } + + public void parser(Monitor monitor) { + parser(monitor, 0); + } + + public void parser(int error_repair_count) { + parser(null, error_repair_count); + } + + public void parser(Monitor monitor, int error_repair_count) { + try { + btParser = new FixedBacktrackingParser(monitor, this, prs, this); + } catch (NotBacktrackParseTableException e) { + throw new Error(new NotBacktrackParseTableException("Regenerate GPPParserprs.java with -BACKTRACK option")); + } catch (BadParseSymFileException e) { + throw new Error(new BadParseSymFileException("Bad Parser Symbol File -- GPPParsersym.java")); + } + + try { + btParser.parse(error_repair_count); + } catch (BadParseException e) { + reset(e.error_token); // point to error token + DiagnoseParser diagnoseParser = new DiagnoseParser(this, prs); + diagnoseParser.diagnose(e.error_token); + } + } + + private GPPBuildASTParserAction action; + private IASTCompletionNode compNode; + + public GPPParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, + IIndex index, Map<String, String> properties) { + initActions(properties); + action.initializeTranslationUnit(scanner, builtinBindingsProvider, index); + CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap); + } + + private void initActions(Map<String, String> properties) { + ScopedStack<Object> astStack = new ScopedStack<Object>(); + + action = new GPPBuildASTParserAction(this, astStack, CPPNodeFactory.getDefault(), + GPPSecondaryParserFactory.getDefault()); + action.setParserProperties(properties); + + gnuAction = new GNUBuildASTParserAction(this, astStack, CPPNodeFactory.getDefault()); + gnuAction.setParserProperties(properties); + + } + + @Override + public void addToken(IToken token) { + token.setKind(mapKind(token.getKind())); // TODO does mapKind need to be called? + super.addToken(token); + } + + @Override + public IASTTranslationUnit parse() { + // this has to be done, or... kaboom! + setStreamLength(getSize()); + + final int errorRepairCount = -1; // -1 means full error handling + parser(null, errorRepairCount); // do the actual parse + super.resetTokenStream(); // allow tokens to be garbage collected + + compNode = action.getASTCompletionNode(); // the completion node may be null + return (IASTTranslationUnit) action.getParseResult(); + } + + @Override + public IASTCompletionNode getCompletionNode() { + return compNode; + } + + // uncomment this method to use with backtracking parser + @Override + public List<IToken> getRuleTokens() { + return getTokens().subList(getLeftSpan(), getRightSpan() + 1); + } + + @Override + public String[] getOrderedTerminalSymbols() { + return GPPParsersym.orderedTerminalSymbols; + } + + @Override + @SuppressWarnings("nls") + public String getName() { + return "GPPParser"; + } + + private GNUBuildASTParserAction gnuAction; + + @Override + public void ruleAction(int ruleNumber) { + switch (ruleNumber) { + + // + // Rule 1: <openscope-ast> ::= $Empty + // + case 1: { + action.openASTScope(); + break; + } + + // + // Rule 2: <empty> ::= $Empty + // + case 2: { + action.consumeEmpty(); + break; + } + + // + // Rule 13: translation_unit ::= declaration_seq_opt + // + case 13: { + action.consumeTranslationUnit(); + break; + } + + // + // Rule 16: literal ::= integer + // + case 16: { + action.consumeExpressionLiteral(ICPPASTLiteralExpression.lk_integer_constant); + break; + } + + // + // Rule 17: literal ::= floating + // + case 17: { + action.consumeExpressionLiteral(ICPPASTLiteralExpression.lk_float_constant); + break; + } + + // + // Rule 18: literal ::= charconst + // + case 18: { + action.consumeExpressionLiteral(ICPPASTLiteralExpression.lk_char_constant); + break; + } + + // + // Rule 19: literal ::= stringlit + // + case 19: { + action.consumeExpressionLiteral(ICPPASTLiteralExpression.lk_string_literal); + break; + } + + // + // Rule 20: literal ::= true + // + case 20: { + action.consumeExpressionLiteral(ICPPASTLiteralExpression.lk_true); + break; + } + + // + // Rule 21: literal ::= false + // + case 21: { + action.consumeExpressionLiteral(ICPPASTLiteralExpression.lk_false); + break; + } + + // + // Rule 22: literal ::= this + // + case 22: { + action.consumeExpressionLiteral(ICPPASTLiteralExpression.lk_this); + break; + } + + // + // Rule 24: primary_expression ::= ( expression ) + // + case 24: { + action.consumeExpressionBracketed(); + break; + } + + // + // Rule 26: id_expression ::= qualified_or_unqualified_name + // + case 26: { + action.consumeExpressionName(); + break; + } + + // + // Rule 33: unqualified_id_name ::= ~ identifier_token + // + case 33: { + action.consumeDestructorName(); + break; + } + + // + // Rule 34: unqualified_id_name ::= ~ template_id_name + // + case 34: { + action.consumeDestructorNameTemplateId(); + break; + } + + // + // Rule 35: identifier_name ::= identifier_token + // + case 35: { + action.consumeIdentifierName(); + break; + } + + // + // Rule 36: template_opt ::= template + // + case 36: { + action.consumePlaceHolder(); + break; + } + + // + // Rule 37: template_opt ::= $Empty + // + case 37: { + action.consumeEmpty(); + break; + } + + // + // Rule 38: dcolon_opt ::= :: + // + case 38: { + action.consumeToken(); + break; + } + + // + // Rule 39: dcolon_opt ::= $Empty + // + case 39: { + action.consumeEmpty(); + break; + } + + // + // Rule 40: qualified_id_name ::= dcolon_opt nested_name_specifier template_opt unqualified_id_name + // + case 40: { + action.consumeQualifiedId(true); + break; + } + + // + // Rule 41: qualified_id_name ::= :: unqualified_id_name + // + case 41: { + action.consumeGlobalQualifiedId(); + break; + } + + // + // Rule 42: nested_name_specifier ::= class_or_namespace_name :: nested_name_specifier_with_template + // + case 42: { + action.consumeNestedNameSpecifier(true); + break; + } + + // + // Rule 43: nested_name_specifier ::= class_or_namespace_name :: + // + case 43: { + action.consumeNestedNameSpecifier(false); + break; + } + + // + // Rule 44: nested_name_specifier_with_template ::= class_or_namespace_name_with_template :: nested_name_specifier_with_template + // + case 44: { + action.consumeNestedNameSpecifier(true); + break; + } + + // + // Rule 45: nested_name_specifier_with_template ::= class_or_namespace_name_with_template :: + // + case 45: { + action.consumeNestedNameSpecifier(false); + break; + } + + // + // Rule 46: class_or_namespace_name_with_template ::= template_opt class_or_namespace_name + // + case 46: { + action.consumeNameWithTemplateKeyword(); + break; + } + + // + // Rule 48: nested_name_specifier_opt ::= $Empty + // + case 48: { + action.consumeNestedNameSpecifierEmpty(); + break; + } + + // + // Rule 51: postfix_expression ::= postfix_expression [ expression ] + // + case 51: { + action.consumeExpressionArraySubscript(); + break; + } + + // + // Rule 52: postfix_expression ::= postfix_expression ( expression_list_opt ) + // + case 52: { + action.consumeExpressionFunctionCall(); + break; + } + + // + // Rule 53: postfix_expression ::= simple_type_specifier ( expression_list_opt ) + // + case 53: { + action.consumeExpressionSimpleTypeConstructor(); + break; + } + + // + // Rule 54: postfix_expression ::= typename dcolon_opt nested_name_specifier <empty> identifier_name ( expression_list_opt ) + // + case 54: { + action.consumeExpressionTypeName(); + break; + } + + // + // Rule 55: postfix_expression ::= typename dcolon_opt nested_name_specifier template_opt template_id_name ( expression_list_opt ) + // + case 55: { + action.consumeExpressionTypeName(); + break; + } + + // + // Rule 56: postfix_expression ::= postfix_expression . qualified_or_unqualified_name + // + case 56: { + action.consumeExpressionFieldReference(false, false); + break; + } + + // + // Rule 57: postfix_expression ::= postfix_expression -> qualified_or_unqualified_name + // + case 57: { + action.consumeExpressionFieldReference(true, false); + break; + } + + // + // Rule 58: postfix_expression ::= postfix_expression . template qualified_or_unqualified_name + // + case 58: { + action.consumeExpressionFieldReference(false, true); + break; + } + + // + // Rule 59: postfix_expression ::= postfix_expression -> template qualified_or_unqualified_name + // + case 59: { + action.consumeExpressionFieldReference(true, true); + break; + } + + // + // Rule 60: postfix_expression ::= postfix_expression . pseudo_destructor_name + // + case 60: { + action.consumeExpressionFieldReference(false, false); + break; + } + + // + // Rule 61: postfix_expression ::= postfix_expression -> pseudo_destructor_name + // + case 61: { + action.consumeExpressionFieldReference(true, false); + break; + } + + // + // Rule 62: postfix_expression ::= postfix_expression ++ + // + case 62: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixIncr); + break; + } + + // + // Rule 63: postfix_expression ::= postfix_expression -- + // + case 63: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixDecr); + break; + } + + // + // Rule 64: postfix_expression ::= dynamic_cast < type_id > ( expression ) + // + case 64: { + action.consumeExpressionCast(ICPPASTCastExpression.op_dynamic_cast); + break; + } + + // + // Rule 65: postfix_expression ::= static_cast < type_id > ( expression ) + // + case 65: { + action.consumeExpressionCast(ICPPASTCastExpression.op_static_cast); + break; + } + + // + // Rule 66: postfix_expression ::= reinterpret_cast < type_id > ( expression ) + // + case 66: { + action.consumeExpressionCast(ICPPASTCastExpression.op_reinterpret_cast); + break; + } + + // + // Rule 67: postfix_expression ::= const_cast < type_id > ( expression ) + // + case 67: { + action.consumeExpressionCast(ICPPASTCastExpression.op_const_cast); + break; + } + + // + // Rule 68: postfix_expression ::= typeid ( expression ) + // + case 68: { + action.consumeExpressionUnaryOperator(ICPPASTUnaryExpression.op_typeid); + break; + } + + // + // Rule 69: postfix_expression ::= typeid ( type_id ) + // + case 69: { + action.consumeExpressionTypeId(ICPPASTTypeIdExpression.op_typeid); + break; + } + + // + // Rule 70: pseudo_destructor_name ::= dcolon_opt nested_name_specifier_opt type_name :: destructor_type_name + // + case 70: { + action.consumePsudoDestructorName(true); + break; + } + + // + // Rule 71: pseudo_destructor_name ::= dcolon_opt nested_name_specifier template template_id_name :: destructor_type_name + // + case 71: { + action.consumePsudoDestructorName(true); + break; + } + + // + // Rule 72: pseudo_destructor_name ::= dcolon_opt nested_name_specifier_opt destructor_type_name + // + case 72: { + action.consumePsudoDestructorName(false); + break; + } + + // + // Rule 73: destructor_type_name ::= ~ identifier_token + // + case 73: { + action.consumeDestructorName(); + break; + } + + // + // Rule 74: destructor_type_name ::= ~ template_id_name + // + case 74: { + action.consumeDestructorNameTemplateId(); + break; + } + + // + // Rule 78: unary_expression ::= ++ cast_expression + // + case 78: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixIncr); + break; + } + + // + // Rule 79: unary_expression ::= -- cast_expression + // + case 79: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixDecr); + break; + } + + // + // Rule 80: unary_expression ::= & cast_expression + // + case 80: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_amper); + break; + } + + // + // Rule 81: unary_expression ::= * cast_expression + // + case 81: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_star); + break; + } + + // + // Rule 82: unary_expression ::= + cast_expression + // + case 82: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_plus); + break; + } + + // + // Rule 83: unary_expression ::= - cast_expression + // + case 83: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_minus); + break; + } + + // + // Rule 84: unary_expression ::= ~ cast_expression + // + case 84: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_tilde); + break; + } + + // + // Rule 85: unary_expression ::= ! cast_expression + // + case 85: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_not); + break; + } + + // + // Rule 86: unary_expression ::= sizeof unary_expression + // + case 86: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_sizeof); + break; + } + + // + // Rule 87: unary_expression ::= sizeof ( type_id ) + // + case 87: { + action.consumeExpressionTypeId(ICPPASTTypeIdExpression.op_sizeof); + break; + } + + // + // Rule 88: new_expression ::= dcolon_opt new new_placement_opt new_type_id <openscope-ast> new_array_expressions_opt new_initializer_opt + // + case 88: { + action.consumeExpressionNew(true); + break; + } + + // + // Rule 89: new_expression ::= dcolon_opt new new_placement_opt ( type_id ) <openscope-ast> new_array_expressions_opt new_initializer_opt + // + case 89: { + action.consumeExpressionNew(false); + break; + } + + // + // Rule 91: new_placement_opt ::= $Empty + // + case 91: { + action.consumeEmpty(); + break; + } + + // + // Rule 92: new_type_id ::= type_specifier_seq + // + case 92: { + action.consumeTypeId(false); + break; + } + + // + // Rule 93: new_type_id ::= type_specifier_seq new_declarator + // + case 93: { + action.consumeTypeId(true); + break; + } + + // + // Rule 94: new_declarator ::= <openscope-ast> new_pointer_operators + // + case 94: { + action.consumeNewDeclarator(); + break; + } + + // + // Rule 101: new_initializer ::= ( expression_list_opt ) + // + case 101: { + action.consumeNewInitializer(); + break; + } + + // + // Rule 103: new_initializer_opt ::= $Empty + // + case 103: { + action.consumeEmpty(); + break; + } + + // + // Rule 104: delete_expression ::= dcolon_opt delete cast_expression + // + case 104: { + action.consumeExpressionDelete(false); + break; + } + + // + // Rule 105: delete_expression ::= dcolon_opt delete [ ] cast_expression + // + case 105: { + action.consumeExpressionDelete(true); + break; + } + + // + // Rule 107: cast_expression ::= ( type_id ) cast_expression + // + case 107: { + action.consumeExpressionCast(ICPPASTCastExpression.op_cast); + break; + } + + // + // Rule 109: pm_expression ::= pm_expression .* cast_expression + // + case 109: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_pmdot); + break; + } + + // + // Rule 110: pm_expression ::= pm_expression ->* cast_expression + // + case 110: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_pmarrow); + break; + } + + // + // Rule 112: multiplicative_expression ::= multiplicative_expression * pm_expression + // + case 112: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_multiply); + break; + } + + // + // Rule 113: multiplicative_expression ::= multiplicative_expression / pm_expression + // + case 113: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_divide); + break; + } + + // + // Rule 114: multiplicative_expression ::= multiplicative_expression % pm_expression + // + case 114: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_modulo); + break; + } + + // + // Rule 116: additive_expression ::= additive_expression + multiplicative_expression + // + case 116: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_plus); + break; + } + + // + // Rule 117: additive_expression ::= additive_expression - multiplicative_expression + // + case 117: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_minus); + break; + } + + // + // Rule 119: shift_expression ::= shift_expression << additive_expression + // + case 119: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftLeft); + break; + } + + // + // Rule 120: shift_expression ::= shift_expression >> additive_expression + // + case 120: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftRight); + break; + } + + // + // Rule 122: relational_expression ::= relational_expression < shift_expression + // + case 122: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessThan); + break; + } + + // + // Rule 123: relational_expression ::= relational_expression > shift_expression + // + case 123: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterThan); + break; + } + + // + // Rule 124: relational_expression ::= relational_expression <= shift_expression + // + case 124: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessEqual); + break; + } + + // + // Rule 125: relational_expression ::= relational_expression >= shift_expression + // + case 125: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterEqual); + break; + } + + // + // Rule 127: equality_expression ::= equality_expression == relational_expression + // + case 127: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_equals); + break; + } + + // + // Rule 128: equality_expression ::= equality_expression != relational_expression + // + case 128: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_notequals); + break; + } + + // + // Rule 130: and_expression ::= and_expression & equality_expression + // + case 130: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAnd); + break; + } + + // + // Rule 132: exclusive_or_expression ::= exclusive_or_expression ^ and_expression + // + case 132: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXor); + break; + } + + // + // Rule 134: inclusive_or_expression ::= inclusive_or_expression | exclusive_or_expression + // + case 134: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOr); + break; + } + + // + // Rule 136: logical_and_expression ::= logical_and_expression && inclusive_or_expression + // + case 136: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalAnd); + break; + } + + // + // Rule 138: logical_or_expression ::= logical_or_expression || logical_and_expression + // + case 138: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalOr); + break; + } + + // + // Rule 140: conditional_expression ::= logical_or_expression ? expression : assignment_expression + // + case 140: { + action.consumeExpressionConditional(); + break; + } + + // + // Rule 142: relational_expression_inTemplate ::= relational_expression_inTemplate < shift_expression + // + case 142: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessThan); + break; + } + + // + // Rule 143: relational_expression_inTemplate ::= ( relational_expression_inTemplate > shift_expression ) + // + case 143: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterThan); + break; + } + + // + // Rule 144: relational_expression_inTemplate ::= relational_expression_inTemplate <= shift_expression + // + case 144: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessEqual); + break; + } + + // + // Rule 145: relational_expression_inTemplate ::= relational_expression_inTemplate >= shift_expression + // + case 145: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterEqual); + break; + } + + // + // Rule 147: equality_expression_inTemplate ::= equality_expression_inTemplate == relational_expression_inTemplate + // + case 147: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_equals); + break; + } + + // + // Rule 148: equality_expression_inTemplate ::= equality_expression_inTemplate != relational_expression_inTemplate + // + case 148: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_notequals); + break; + } + + // + // Rule 150: and_expression_inTemplate ::= and_expression_inTemplate & equality_expression_inTemplate + // + case 150: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAnd); + break; + } + + // + // Rule 152: exclusive_or_expression_inTemplate ::= exclusive_or_expression_inTemplate ^ and_expression_inTemplate + // + case 152: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXor); + break; + } + + // + // Rule 154: inclusive_or_expression_inTemplate ::= inclusive_or_expression_inTemplate | exclusive_or_expression_inTemplate + // + case 154: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOr); + break; + } + + // + // Rule 156: logical_and_expression_inTemplate ::= logical_and_expression_inTemplate && inclusive_or_expression_inTemplate + // + case 156: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalAnd); + break; + } + + // + // Rule 158: logical_or_expression_inTemplate ::= logical_or_expression_inTemplate || logical_and_expression_inTemplate + // + case 158: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalOr); + break; + } + + // + // Rule 160: conditional_expression_inTemplate ::= logical_or_expression_inTemplate ? expression : assignment_expression_inTemplate + // + case 160: { + action.consumeExpressionConditional(); + break; + } + + // + // Rule 163: assignment_expression_inTemplate ::= logical_or_expression_inTemplate = assignment_expression_inTemplate + // + case 163: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_assign); + break; + } + + // + // Rule 164: assignment_expression_inTemplate ::= logical_or_expression_inTemplate *= assignment_expression_inTemplate + // + case 164: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_multiplyAssign); + break; + } + + // + // Rule 165: assignment_expression_inTemplate ::= logical_or_expression_inTemplate /= assignment_expression_inTemplate + // + case 165: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_divideAssign); + break; + } + + // + // Rule 166: assignment_expression_inTemplate ::= logical_or_expression_inTemplate %= assignment_expression_inTemplate + // + case 166: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_moduloAssign); + break; + } + + // + // Rule 167: assignment_expression_inTemplate ::= logical_or_expression_inTemplate += assignment_expression_inTemplate + // + case 167: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_plusAssign); + break; + } + + // + // Rule 168: assignment_expression_inTemplate ::= logical_or_expression_inTemplate -= assignment_expression_inTemplate + // + case 168: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_minusAssign); + break; + } + + // + // Rule 169: assignment_expression_inTemplate ::= logical_or_expression_inTemplate >>= assignment_expression_inTemplate + // + case 169: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftRightAssign); + break; + } + + // + // Rule 170: assignment_expression_inTemplate ::= logical_or_expression_inTemplate <<= assignment_expression_inTemplate + // + case 170: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftLeftAssign); + break; + } + + // + // Rule 171: assignment_expression_inTemplate ::= logical_or_expression_inTemplate &= assignment_expression_inTemplate + // + case 171: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAndAssign); + break; + } + + // + // Rule 172: assignment_expression_inTemplate ::= logical_or_expression_inTemplate ^= assignment_expression_inTemplate + // + case 172: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXorAssign); + break; + } + + // + // Rule 173: assignment_expression_inTemplate ::= logical_or_expression_inTemplate |= assignment_expression_inTemplate + // + case 173: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOrAssign); + break; + } + + // + // Rule 174: throw_expression ::= throw + // + case 174: { + action.consumeExpressionThrow(false); + break; + } + + // + // Rule 175: throw_expression ::= throw assignment_expression + // + case 175: { + action.consumeExpressionThrow(true); + break; + } + + // + // Rule 178: assignment_expression ::= logical_or_expression = assignment_expression + // + case 178: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_assign); + break; + } + + // + // Rule 179: assignment_expression ::= logical_or_expression *= assignment_expression + // + case 179: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_multiplyAssign); + break; + } + + // + // Rule 180: assignment_expression ::= logical_or_expression /= assignment_expression + // + case 180: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_divideAssign); + break; + } + + // + // Rule 181: assignment_expression ::= logical_or_expression %= assignment_expression + // + case 181: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_moduloAssign); + break; + } + + // + // Rule 182: assignment_expression ::= logical_or_expression += assignment_expression + // + case 182: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_plusAssign); + break; + } + + // + // Rule 183: assignment_expression ::= logical_or_expression -= assignment_expression + // + case 183: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_minusAssign); + break; + } + + // + // Rule 184: assignment_expression ::= logical_or_expression >>= assignment_expression + // + case 184: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftRightAssign); + break; + } + + // + // Rule 185: assignment_expression ::= logical_or_expression <<= assignment_expression + // + case 185: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftLeftAssign); + break; + } + + // + // Rule 186: assignment_expression ::= logical_or_expression &= assignment_expression + // + case 186: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAndAssign); + break; + } + + // + // Rule 187: assignment_expression ::= logical_or_expression ^= assignment_expression + // + case 187: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXorAssign); + break; + } + + // + // Rule 188: assignment_expression ::= logical_or_expression |= assignment_expression + // + case 188: { + action.consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOrAssign); + break; + } + + // + // Rule 190: expression_list ::= <openscope-ast> expression_list_actual + // + case 190: { + action.consumeExpressionList(); + break; + } + + // + // Rule 194: expression_list_opt ::= $Empty + // + case 194: { + action.consumeEmpty(); + break; + } + + // + // Rule 196: expression_opt ::= $Empty + // + case 196: { + action.consumeEmpty(); + break; + } + + // + // Rule 199: constant_expression_opt ::= $Empty + // + case 199: { + action.consumeEmpty(); + break; + } + + // + // Rule 208: statement ::= ERROR_TOKEN + // + case 208: { + action.consumeStatementProblem(); + break; + } + + // + // Rule 209: labeled_statement ::= identifier : statement + // + case 209: { + action.consumeStatementLabeled(); + break; + } + + // + // Rule 210: labeled_statement ::= case constant_expression : statement + // + case 210: { + action.consumeStatementCase(); + break; + } + + // + // Rule 211: labeled_statement ::= default : statement + // + case 211: { + action.consumeStatementDefault(); + break; + } + + // + // Rule 212: expression_statement ::= expression ; + // + case 212: { + action.consumeStatementExpression(); + break; + } + + // + // Rule 213: expression_statement ::= ; + // + case 213: { + action.consumeStatementNull(); + break; + } + + // + // Rule 214: compound_statement ::= { <openscope-ast> statement_seq } + // + case 214: { + action.consumeStatementCompoundStatement(true); + break; + } + + // + // Rule 215: compound_statement ::= { } + // + case 215: { + action.consumeStatementCompoundStatement(false); + break; + } + + // + // Rule 218: selection_statement ::= if ( condition ) statement + // + case 218: { + action.consumeStatementIf(false); + break; + } + + // + // Rule 219: selection_statement ::= if ( condition ) statement else statement + // + case 219: { + action.consumeStatementIf(true); + break; + } + + // + // Rule 220: selection_statement ::= switch ( condition ) statement + // + case 220: { + action.consumeStatementSwitch(); + break; + } + + // + // Rule 222: condition ::= type_specifier_seq declarator = assignment_expression + // + case 222: { + action.consumeConditionDeclaration(); + break; + } + + // + // Rule 224: condition_opt ::= $Empty + // + case 224: { + action.consumeEmpty(); + break; + } + + // + // Rule 225: iteration_statement ::= while ( condition ) statement + // + case 225: { + action.consumeStatementWhileLoop(); + break; + } + + // + // Rule 226: iteration_statement ::= do statement while ( expression ) ; + // + case 226: { + action.consumeStatementDoLoop(true); + break; + } + + // + // Rule 227: iteration_statement ::= do statement + // + case 227: { + action.consumeStatementDoLoop(false); + break; + } + + // + // Rule 228: iteration_statement ::= for ( for_init_statement condition_opt ; expression_opt ) statement + // + case 228: { + action.consumeStatementForLoop(); + break; + } + + // + // Rule 230: for_init_statement ::= simple_declaration_with_declspec + // + case 230: { + action.consumeStatementDeclaration(); + break; + } + + // + // Rule 231: jump_statement ::= break ; + // + case 231: { + action.consumeStatementBreak(); + break; + } + // + // Rule 232: jump_statement ::= continue ; + // + case 232: { + action.consumeStatementContinue(); + break; + } + + // + // Rule 233: jump_statement ::= return expression ; + // + case 233: { + action.consumeStatementReturn(true); + break; + } + + // + // Rule 234: jump_statement ::= return ; + // + case 234: { + action.consumeStatementReturn(false); + break; + } + + // + // Rule 235: jump_statement ::= goto identifier_token ; + // + case 235: { + action.consumeStatementGoto(); + break; + } + + // + // Rule 236: declaration_statement ::= block_declaration + // + case 236: { + action.consumeStatementDeclarationWithDisambiguation(); + break; + } + + // + // Rule 237: declaration_statement ::= function_definition + // + case 237: { + action.consumeStatementDeclaration(); + break; + } + + // + // Rule 245: declaration ::= ERROR_TOKEN + // + case 245: { + action.consumeDeclarationProblem(); + break; + } + + // + // Rule 255: simple_declaration ::= declaration_specifiers_opt <openscope-ast> init_declarator_list_opt ; + // + case 255: { + action.consumeDeclarationSimple(true); + break; + } + + // + // Rule 256: simple_declaration_with_declspec ::= declaration_specifiers <openscope-ast> init_declarator_list_opt ; + // + case 256: { + action.consumeDeclarationSimple(true); + break; + } + + // + // Rule 257: declaration_specifiers ::= <openscope-ast> simple_declaration_specifiers + // + case 257: { + action.consumeDeclarationSpecifiersSimple(); + break; + } + + // + // Rule 258: declaration_specifiers ::= <openscope-ast> class_declaration_specifiers + // + case 258: { + action.consumeDeclarationSpecifiersComposite(); + break; + } + + // + // Rule 259: declaration_specifiers ::= <openscope-ast> elaborated_declaration_specifiers + // + case 259: { + action.consumeDeclarationSpecifiersComposite(); + break; + } + + // + // Rule 260: declaration_specifiers ::= <openscope-ast> enum_declaration_specifiers + // + case 260: { + action.consumeDeclarationSpecifiersComposite(); + break; + } + + // + // Rule 261: declaration_specifiers ::= <openscope-ast> type_name_declaration_specifiers + // + case 261: { + action.consumeDeclarationSpecifiersTypeName(); + break; + } + + // + // Rule 263: declaration_specifiers_opt ::= $Empty + // + case 263: { + action.consumeEmpty(); + break; + } + + // + // Rule 267: no_type_declaration_specifier ::= friend + // + case 267: { + action.consumeToken(); + break; + } + + // + // Rule 268: no_type_declaration_specifier ::= typedef + // + case 268: { + action.consumeToken(); + break; + } + + // + // Rule 288: storage_class_specifier ::= auto + // + case 288: { + action.consumeToken(); + break; + } + + // + // Rule 289: storage_class_specifier ::= register + // + case 289: { + action.consumeToken(); + break; + } + + // + // Rule 290: storage_class_specifier ::= static + // + case 290: { + action.consumeToken(); + break; + } + + // + // Rule 291: storage_class_specifier ::= extern + // + case 291: { + action.consumeToken(); + break; + } + + // + // Rule 292: storage_class_specifier ::= mutable + // + case 292: { + action.consumeToken(); + break; + } + + // + // Rule 293: function_specifier ::= inline + // + case 293: { + action.consumeToken(); + break; + } + + // + // Rule 294: function_specifier ::= virtual + // + case 294: { + action.consumeToken(); + break; + } + + // + // Rule 295: function_specifier ::= explicit + // + case 295: { + action.consumeToken(); + break; + } + + // + // Rule 296: simple_type_specifier ::= simple_type_specifier_token + // + case 296: { + action.consumeToken(); + break; + } + + // + // Rule 310: type_name_specifier ::= dcolon_opt nested_name_specifier_opt type_name + // + case 310: { + action.consumeQualifiedId(false); + break; + } + + // + // Rule 311: type_name_specifier ::= dcolon_opt nested_name_specifier template template_id_name + // + case 311: { + action.consumeQualifiedId(false); + break; + } + + // + // Rule 312: type_name_specifier ::= typename dcolon_opt nested_name_specifier identifier_name + // + case 312: { + action.consumeQualifiedId(false); + break; + } + + // + // Rule 313: type_name_specifier ::= typename dcolon_opt nested_name_specifier template_opt template_id_name + // + case 313: { + action.consumeQualifiedId(true); + break; + } + + // + // Rule 315: elaborated_type_specifier ::= class_keyword elaborated_specifier_hook dcolon_opt nested_name_specifier_opt identifier_name + // + case 315: { + action.consumeTypeSpecifierElaborated(false); + break; + } + + // + // Rule 316: elaborated_type_specifier ::= class_keyword elaborated_specifier_hook dcolon_opt nested_name_specifier_opt template_opt template_id_name + // + case 316: { + action.consumeTypeSpecifierElaborated(true); + break; + } + + // + // Rule 317: elaborated_type_specifier ::= enum elaborated_specifier_hook dcolon_opt nested_name_specifier_opt identifier_name + // + case 317: { + action.consumeTypeSpecifierElaborated(false); + break; + } + + // + // Rule 321: enum_specifier ::= enum enum_specifier_hook { <openscope-ast> enumerator_list_opt comma_opt } + // + case 321: { + action.consumeTypeSpecifierEnumeration(false); + break; + } + + // + // Rule 322: enum_specifier ::= enum enum_specifier_hook identifier_token { <openscope-ast> enumerator_list_opt comma_opt } + // + case 322: { + action.consumeTypeSpecifierEnumeration(true); + break; + } + + // + // Rule 328: enumerator_definition ::= identifier_token + // + case 328: { + action.consumeEnumerator(false); + break; + } + + // + // Rule 329: enumerator_definition ::= identifier_token = constant_expression + // + case 329: { + action.consumeEnumerator(true); + break; + } + + // + // Rule 331: namespace_definition ::= namespace namespace_name namespace_definition_hook { <openscope-ast> declaration_seq_opt } + // + case 331: { + action.consumeNamespaceDefinition(true); + break; + } + + // + // Rule 332: namespace_definition ::= namespace namespace_definition_hook { <openscope-ast> declaration_seq_opt } + // + case 332: { + action.consumeNamespaceDefinition(false); + break; + } + + // + // Rule 334: namespace_alias_definition ::= namespace identifier_token = dcolon_opt nested_name_specifier_opt namespace_name ; + // + case 334: { + action.consumeNamespaceAliasDefinition(); + break; + } + + // + // Rule 335: using_declaration ::= using typename_opt dcolon_opt nested_name_specifier_opt unqualified_id_name ; + // + case 335: { + action.consumeUsingDeclaration(); + break; + } + + // + // Rule 336: typename_opt ::= typename + // + case 336: { + action.consumePlaceHolder(); + break; + } + + // + // Rule 337: typename_opt ::= $Empty + // + case 337: { + action.consumeEmpty(); + break; + } + + // + // Rule 338: using_directive ::= using namespace dcolon_opt nested_name_specifier_opt namespace_name ; + // + case 338: { + action.consumeUsingDirective(); + break; + } + + // + // Rule 339: linkage_specification ::= extern stringlit { <openscope-ast> declaration_seq_opt } + // + case 339: { + action.consumeLinkageSpecification(); + break; + } + + // + // Rule 340: linkage_specification ::= extern stringlit <openscope-ast> declaration + // + case 340: { + action.consumeLinkageSpecification(); + break; + } + + // + // Rule 345: init_declarator_complete ::= init_declarator + // + case 345: { + action.consumeInitDeclaratorComplete(); + break; + } + + // + // Rule 347: init_declarator ::= complete_declarator initializer + // + case 347: { + action.consumeDeclaratorWithInitializer(true); + break; + } + + // + // Rule 350: declarator ::= <openscope-ast> ptr_operator_seq direct_declarator + // + case 350: { + action.consumeDeclaratorWithPointer(true); + break; + } + + // + // Rule 352: function_declarator ::= <openscope-ast> ptr_operator_seq direct_declarator + // + case 352: { + action.consumeDeclaratorWithPointer(true); + break; + } + + // + // Rule 356: basic_direct_declarator ::= declarator_id_name + // + case 356: { + action.consumeDirectDeclaratorIdentifier(); + break; + } + + // + // Rule 357: basic_direct_declarator ::= ( declarator ) + // + case 357: { + action.consumeDirectDeclaratorBracketed(); + break; + } + + // + // Rule 358: function_direct_declarator ::= basic_direct_declarator ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt + // + case 358: { + action.consumeDirectDeclaratorFunctionDeclarator(true); + break; + } + + // + // Rule 359: array_direct_declarator ::= array_direct_declarator array_modifier + // + case 359: { + action.consumeDirectDeclaratorArrayDeclarator(true); + break; + } + + // + // Rule 360: array_direct_declarator ::= basic_direct_declarator array_modifier + // + case 360: { + action.consumeDirectDeclaratorArrayDeclarator(true); + break; + } + + // + // Rule 361: array_modifier ::= [ constant_expression ] + // + case 361: { + action.consumeDirectDeclaratorArrayModifier(true); + break; + } + + // + // Rule 362: array_modifier ::= [ ] + // + case 362: { + action.consumeDirectDeclaratorArrayModifier(false); + break; + } + + // + // Rule 363: ptr_operator ::= pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt + // + case 363: { + action.consumePointer(); + break; + } + + // + // Rule 364: ptr_operator ::= pointer_hook & pointer_hook + // + case 364: { + action.consumeReferenceOperator(); + break; + } + + // + // Rule 365: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt + // + case 365: { + action.consumePointerToMember(); + break; + } + + // + // Rule 372: cv_qualifier ::= const + // + case 372: { + action.consumeToken(); + break; + } + + // + // Rule 373: cv_qualifier ::= volatile + // + case 373: { + action.consumeToken(); + break; + } + + // + // Rule 375: declarator_id_name ::= dcolon_opt nested_name_specifier_opt type_name + // + case 375: { + action.consumeQualifiedId(false); + break; + } + + // + // Rule 376: type_id ::= type_specifier_seq + // + case 376: { + action.consumeTypeId(false); + break; + } + + // + // Rule 377: type_id ::= type_specifier_seq abstract_declarator + // + case 377: { + action.consumeTypeId(true); + break; + } + + // + // Rule 380: abstract_declarator ::= <openscope-ast> ptr_operator_seq + // + case 380: { + action.consumeDeclaratorWithPointer(false); + break; + } + + // + // Rule 381: abstract_declarator ::= <openscope-ast> ptr_operator_seq direct_abstract_declarator + // + case 381: { + action.consumeDeclaratorWithPointer(true); + break; + } + + // + // Rule 385: basic_direct_abstract_declarator ::= ( abstract_declarator ) + // + case 385: { + action.consumeDirectDeclaratorBracketed(); + break; + } + + // + // Rule 386: basic_direct_abstract_declarator ::= ( ) + // + case 386: { + action.consumeAbstractDeclaratorEmpty(); + break; + } + + // + // Rule 387: array_direct_abstract_declarator ::= array_modifier + // + case 387: { + action.consumeDirectDeclaratorArrayDeclarator(false); + break; + } + + // + // Rule 388: array_direct_abstract_declarator ::= array_direct_abstract_declarator array_modifier + // + case 388: { + action.consumeDirectDeclaratorArrayDeclarator(true); + break; + } + + // + // Rule 389: array_direct_abstract_declarator ::= basic_direct_abstract_declarator array_modifier + // + case 389: { + action.consumeDirectDeclaratorArrayDeclarator(true); + break; + } + + // + // Rule 390: function_direct_abstract_declarator ::= basic_direct_abstract_declarator ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt + // + case 390: { + action.consumeDirectDeclaratorFunctionDeclarator(true); + break; + } + + // + // Rule 391: function_direct_abstract_declarator ::= ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt + // + case 391: { + action.consumeDirectDeclaratorFunctionDeclarator(false); + break; + } + + // + // Rule 392: parameter_declaration_clause ::= parameter_declaration_list_opt ... + // + case 392: { + action.consumePlaceHolder(); + break; + } + + // + // Rule 393: parameter_declaration_clause ::= parameter_declaration_list_opt + // + case 393: { + action.consumeEmpty(); + break; + } + + // + // Rule 394: parameter_declaration_clause ::= parameter_declaration_list , ... + // + case 394: { + action.consumePlaceHolder(); + break; + } + + // + // Rule 400: abstract_declarator_opt ::= $Empty + // + case 400: { + action.consumeEmpty(); + break; + } + + // + // Rule 401: parameter_declaration ::= declaration_specifiers parameter_init_declarator + // + case 401: { + action.consumeParameterDeclaration(); + break; + } + + // + // Rule 402: parameter_declaration ::= declaration_specifiers + // + case 402: { + action.consumeParameterDeclarationWithoutDeclarator(); + break; + } + + // + // Rule 404: parameter_init_declarator ::= declarator = parameter_initializer + // + case 404: { + action.consumeDeclaratorWithInitializer(true); + break; + } + + // + // Rule 406: parameter_init_declarator ::= abstract_declarator = parameter_initializer + // + case 406: { + action.consumeDeclaratorWithInitializer(true); + break; + } + + // + // Rule 407: parameter_init_declarator ::= = parameter_initializer + // + case 407: { + action.consumeDeclaratorWithInitializer(false); + break; + } + + // + // Rule 408: parameter_initializer ::= assignment_expression + // + case 408: { + action.consumeInitializer(); + break; + } + + // + // Rule 409: function_definition ::= declaration_specifiers_opt function_declarator <openscope-ast> ctor_initializer_list_opt function_body + // + case 409: { + action.consumeFunctionDefinition(false); + break; + } + + // + // Rule 410: function_definition ::= declaration_specifiers_opt function_declarator try <openscope-ast> ctor_initializer_list_opt function_body <openscope-ast> handler_seq + // + case 410: { + action.consumeFunctionDefinition(true); + break; + } + + // + // Rule 413: initializer ::= ( expression_list ) + // + case 413: { + action.consumeInitializerConstructor(); + break; + } + + // + // Rule 414: initializer_clause ::= assignment_expression + // + case 414: { + action.consumeInitializer(); + break; + } + + // + // Rule 415: initializer_clause ::= initializer_list + // + case 415: { + action.consumeInitializer(); + break; + } + + // + // Rule 416: initializer_list ::= start_initializer_list { <openscope-ast> initializer_seq , } end_initializer_list + // + case 416: { + action.consumeInitializerList(); + break; + } + + // + // Rule 417: initializer_list ::= start_initializer_list { <openscope-ast> initializer_seq } end_initializer_list + // + case 417: { + action.consumeInitializerList(); + break; + } + + // + // Rule 418: initializer_list ::= { <openscope-ast> } + // + case 418: { + action.consumeInitializerList(); + break; + } + + // + // Rule 419: start_initializer_list ::= $Empty + // + case 419: { + action.initializerListStart(); + break; + } + + // + // Rule 420: end_initializer_list ::= $Empty + // + case 420: { + action.initializerListEnd(); + break; + } + + // + // Rule 425: class_specifier ::= class_head { <openscope-ast> member_declaration_list_opt } + // + case 425: { + action.consumeClassSpecifier(); + break; + } + + // + // Rule 426: class_head ::= class_keyword composite_specifier_hook identifier_name_opt class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 426: { + action.consumeClassHead(false); + break; + } + + // + // Rule 427: class_head ::= class_keyword composite_specifier_hook template_id_name class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 427: { + action.consumeClassHead(false); + break; + } + + // + // Rule 428: class_head ::= class_keyword composite_specifier_hook nested_name_specifier identifier_name class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 428: { + action.consumeClassHead(true); + break; + } + + // + // Rule 429: class_head ::= class_keyword composite_specifier_hook nested_name_specifier template_id_name class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 429: { + action.consumeClassHead(true); + break; + } + + // + // Rule 433: identifier_name_opt ::= $Empty + // + case 433: { + action.consumeEmpty(); + break; + } + + // + // Rule 437: visibility_label ::= access_specifier_keyword : + // + case 437: { + action.consumeVisibilityLabel(); + break; + } + + // + // Rule 438: member_declaration ::= declaration_specifiers_opt <openscope-ast> member_declarator_list ; + // + case 438: { + action.consumeDeclarationSimple(true); + break; + } + + // + // Rule 439: member_declaration ::= declaration_specifiers_opt ; + // + case 439: { + action.consumeDeclarationSimple(false); + break; + } + + // + // Rule 442: member_declaration ::= dcolon_opt nested_name_specifier template_opt unqualified_id_name ; + // + case 442: { + action.consumeMemberDeclarationQualifiedId(); + break; + } + + // + // Rule 448: member_declaration ::= ERROR_TOKEN + // + case 448: { + action.consumeDeclarationProblem(); + break; + } + + // + // Rule 457: member_declarator ::= declarator constant_initializer + // + case 457: { + action.consumeMemberDeclaratorWithInitializer(); + break; + } + + // + // Rule 458: member_declarator ::= bit_field_declarator : constant_expression + // + case 458: { + action.consumeBitField(true); + break; + } + + // + // Rule 459: member_declarator ::= : constant_expression + // + case 459: { + action.consumeBitField(false); + break; + } + + // + // Rule 460: bit_field_declarator ::= identifier_name + // + case 460: { + action.consumeDirectDeclaratorIdentifier(); + break; + } + + // + // Rule 461: constant_initializer ::= = constant_expression + // + case 461: { + action.consumeInitializer(); + break; + } + + // + // Rule 467: base_specifier ::= dcolon_opt nested_name_specifier_opt class_name + // + case 467: { + action.consumeBaseSpecifier(false, false); + break; + } + + // + // Rule 468: base_specifier ::= virtual access_specifier_keyword_opt dcolon_opt nested_name_specifier_opt class_name + // + case 468: { + action.consumeBaseSpecifier(true, true); + break; + } + + // + // Rule 469: base_specifier ::= access_specifier_keyword virtual dcolon_opt nested_name_specifier_opt class_name + // + case 469: { + action.consumeBaseSpecifier(true, true); + break; + } + + // + // Rule 470: base_specifier ::= access_specifier_keyword dcolon_opt nested_name_specifier_opt class_name + // + case 470: { + action.consumeBaseSpecifier(true, false); + break; + } + + // + // Rule 471: access_specifier_keyword ::= private + // + case 471: { + action.consumeToken(); + break; + } + + // + // Rule 472: access_specifier_keyword ::= protected + // + case 472: { + action.consumeToken(); + break; + } + + // + // Rule 473: access_specifier_keyword ::= public + // + case 473: { + action.consumeToken(); + break; + } + + // + // Rule 475: access_specifier_keyword_opt ::= $Empty + // + case 475: { + action.consumeEmpty(); + break; + } + + // + // Rule 477: conversion_function_id_name ::= conversion_function_id < <openscope-ast> template_argument_list_opt > + // + case 477: { + action.consumeTemplateId(); + break; + } + + // + // Rule 478: conversion_function_id ::= operator conversion_type_id + // + case 478: { + action.consumeConversionName(); + break; + } + + // + // Rule 479: conversion_type_id ::= type_specifier_seq conversion_declarator + // + case 479: { + action.consumeTypeId(true); + break; + } + + // + // Rule 480: conversion_type_id ::= type_specifier_seq + // + case 480: { + action.consumeTypeId(false); + break; + } + + // + // Rule 481: conversion_declarator ::= <openscope-ast> ptr_operator_seq + // + case 481: { + action.consumeDeclaratorWithPointer(false); + break; + } + + // + // Rule 487: mem_initializer ::= mem_initializer_name ( expression_list_opt ) + // + case 487: { + action.consumeConstructorChainInitializer(); + break; + } + + // + // Rule 488: mem_initializer_name ::= dcolon_opt nested_name_specifier_opt class_name + // + case 488: { + action.consumeQualifiedId(false); + break; + } + + // + // Rule 491: operator_function_id_name ::= operator_id_name < <openscope-ast> template_argument_list_opt > + // + case 491: { + action.consumeTemplateId(); + break; + } + + // + // Rule 492: operator_id_name ::= operator overloadable_operator + // + case 492: { + action.consumeOperatorName(); + break; + } + + // + // Rule 535: template_declaration ::= export_opt template < <openscope-ast> template_parameter_list > declaration + // + case 535: { + action.consumeTemplateDeclaration(); + break; + } + + // + // Rule 536: export_opt ::= export + // + case 536: { + action.consumePlaceHolder(); + break; + } + + // + // Rule 537: export_opt ::= $Empty + // + case 537: { + action.consumeEmpty(); + break; + } + + // + // Rule 541: template_parameter ::= parameter_declaration + // + case 541: { + action.consumeTemplateParamterDeclaration(); + break; + } + + // + // Rule 542: type_parameter ::= class identifier_name_opt + // + case 542: { + action.consumeSimpleTypeTemplateParameter(false); + break; + } + + // + // Rule 543: type_parameter ::= class identifier_name_opt = type_id + // + case 543: { + action.consumeSimpleTypeTemplateParameter(true); + break; + } + + // + // Rule 544: type_parameter ::= typename identifier_name_opt + // + case 544: { + action.consumeSimpleTypeTemplateParameter(false); + break; + } + + // + // Rule 545: type_parameter ::= typename identifier_name_opt = type_id + // + case 545: { + action.consumeSimpleTypeTemplateParameter(true); + break; + } + + // + // Rule 546: type_parameter ::= template < <openscope-ast> template_parameter_list > class identifier_name_opt + // + case 546: { + action.consumeTemplatedTypeTemplateParameter(false); + break; + } + + // + // Rule 547: type_parameter ::= template < <openscope-ast> template_parameter_list > class identifier_name_opt = id_expression + // + case 547: { + action.consumeTemplatedTypeTemplateParameter(true); + break; + } + + // + // Rule 548: template_id_name ::= identifier_name < <openscope-ast> template_argument_list_opt > + // + case 548: { + action.consumeTemplateId(); + break; + } + + // + // Rule 555: nested_name_specifier_inTemplate ::= class_or_namespace_name_inTemplate :: nested_name_specifier_with_template_inTemplate + // + case 555: { + action.consumeNestedNameSpecifier(true); + break; + } + + // + // Rule 556: nested_name_specifier_inTemplate ::= class_or_namespace_name_inTemplate :: + // + case 556: { + action.consumeNestedNameSpecifier(false); + break; + } + + // + // Rule 557: nested_name_specifier_with_template_inTemplate ::= class_or_namespace_name_with_template_inTemplate :: nested_name_specifier_with_template_inTemplate + // + case 557: { + action.consumeNestedNameSpecifier(true); + break; + } + + // + // Rule 558: nested_name_specifier_with_template_inTemplate ::= class_or_namespace_name_with_template_inTemplate :: + // + case 558: { + action.consumeNestedNameSpecifier(false); + break; + } + + // + // Rule 559: class_or_namespace_name_with_template_inTemplate ::= template_opt class_or_namespace_name_inTemplate + // + case 559: { + action.consumeNameWithTemplateKeyword(); + break; + } + + // + // Rule 561: nested_name_specifier_opt_inTemplate ::= $Empty + // + case 561: { + action.consumeNestedNameSpecifierEmpty(); + break; + } + + // + // Rule 564: type_name_specifier_inTemplate ::= typename dcolon_opt nested_name_specifier identifier_name + // + case 564: { + action.consumeQualifiedId(false); + break; + } + + // + // Rule 565: type_name_specifier_inTemplate ::= typename dcolon_opt nested_name_specifier template_opt template_id_name + // + case 565: { + action.consumeQualifiedId(true); + break; + } + + // + // Rule 570: declaration_specifiers_inTemplate ::= <openscope-ast> simple_declaration_specifiers + // + case 570: { + action.consumeDeclarationSpecifiersSimple(); + break; + } + + // + // Rule 571: declaration_specifiers_inTemplate ::= <openscope-ast> class_declaration_specifiers + // + case 571: { + action.consumeDeclarationSpecifiersComposite(); + break; + } + + // + // Rule 572: declaration_specifiers_inTemplate ::= <openscope-ast> elaborated_declaration_specifiers + // + case 572: { + action.consumeDeclarationSpecifiersComposite(); + break; + } + + // + // Rule 573: declaration_specifiers_inTemplate ::= <openscope-ast> enum_declaration_specifiers + // + case 573: { + action.consumeDeclarationSpecifiersComposite(); + break; + } + + // + // Rule 574: declaration_specifiers_inTemplate ::= <openscope-ast> type_name_declaration_specifiers_inTemplate + // + case 574: { + action.consumeDeclarationSpecifiersTypeName(); + break; + } + + // + // Rule 576: type_id_inTemplate ::= type_specifier_seq_inTemplate + // + case 576: { + action.consumeTypeId(false); + break; + } + + // + // Rule 577: type_id_inTemplate ::= type_specifier_seq_inTemplate abstract_declarator + // + case 577: { + action.consumeTypeId(true); + break; + } + + // + // Rule 578: template_argument ::= assignment_expression_inTemplate + // + case 578: { + action.consumeTemplateArgumentExpression(); + break; + } + + // + // Rule 579: template_argument ::= type_id_inTemplate + // + case 579: { + action.consumeTemplateArgumentTypeId(); + break; + } + + // + // Rule 580: explicit_instantiation ::= template declaration + // + case 580: { + action.consumeTemplateExplicitInstantiation(); + break; + } + + // + // Rule 581: explicit_specialization ::= template < > declaration + // + case 581: { + action.consumeTemplateExplicitSpecialization(); + break; + } + + // + // Rule 582: try_block ::= try compound_statement <openscope-ast> handler_seq + // + case 582: { + action.consumeStatementTryBlock(true); + break; + } + + // + // Rule 583: try_block ::= try compound_statement + // + case 583: { + action.consumeStatementTryBlock(false); + break; + } + + // + // Rule 586: handler ::= catch ( exception_declaration ) compound_statement + // + case 586: { + action.consumeStatementCatchHandler(false); + break; + } + + // + // Rule 587: handler ::= catch ( ... ) compound_statement + // + case 587: { + action.consumeStatementCatchHandler(true); + break; + } + + // + // Rule 588: exception_declaration ::= type_specifier_seq <openscope-ast> declarator + // + case 588: { + action.consumeDeclarationSimple(true); + break; + } + + // + // Rule 589: exception_declaration ::= type_specifier_seq <openscope-ast> abstract_declarator + // + case 589: { + action.consumeDeclarationSimple(true); + break; + } + + // + // Rule 590: exception_declaration ::= type_specifier_seq + // + case 590: { + action.consumeDeclarationSimple(false); + break; + } + + // + // Rule 592: exception_specification ::= throw ( ) + // + case 592: { + action.consumePlaceHolder(); + break; + } + + // + // Rule 613: attribute_parameter ::= assignment_expression + // + case 613: { + action.consumeIgnore(); + break; + } + + // + // Rule 624: extended_asm_declaration ::= asm volatile_opt ( extended_asm_param_seq ) ; + // + case 624: { + gnuAction.consumeDeclarationASM(); + break; + } + + // + // Rule 635: unary_expression ::= __alignof__ unary_expression + // + case 635: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_alignOf); + break; + } + + // + // Rule 636: unary_expression ::= __alignof__ ( type_id ) + // + case 636: { + action.consumeExpressionTypeId(IASTTypeIdExpression.op_alignof); + break; + } + + // + // Rule 637: unary_expression ::= typeof unary_expression + // + case 637: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); + break; + } + + // + // Rule 638: unary_expression ::= typeof ( type_id ) + // + case 638: { + action.consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); + break; + } + + // + // Rule 639: relational_expression ::= relational_expression >? shift_expression + // + case 639: { + action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_max); + break; + } + + // + // Rule 640: relational_expression ::= relational_expression <? shift_expression + // + case 640: { + action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_min); + break; + } + + // + // Rule 641: conditional_expression ::= logical_or_expression ? <empty> : assignment_expression + // + case 641: { + action.consumeExpressionConditional(); + break; + } + + // + // Rule 642: primary_expression ::= ( compound_statement ) + // + case 642: { + gnuAction.consumeCompoundStatementExpression(); + break; + } + + // + // Rule 643: labeled_statement ::= case case_range_expression : statement + // + case 643: { + action.consumeStatementCase(); + break; + } + + // + // Rule 644: case_range_expression ::= constant_expression ... constant_expression + // + case 644: { + action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_assign); + break; + } + + // + // Rule 648: typeof_type_specifier ::= typeof unary_expression + // + case 648: { + action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); + break; + } + + // + // Rule 649: typeof_type_specifier ::= typeof ( type_id ) + // + case 649: { + action.consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); + break; + } + + // + // Rule 650: declaration_specifiers ::= <openscope-ast> typeof_declaration_specifiers + // + case 650: { + action.consumeDeclarationSpecifiersTypeof(); + break; + } + + // + // Rule 663: declarator ::= <openscope-ast> ptr_operator_seq attribute_or_decl_specifier_seq direct_declarator + // + case 663: { + action.consumeDeclaratorWithPointer(true); + break; + } + + // + // Rule 666: simple_type_specifier ::= _Complex + // + case 666: { + action.consumeToken(); + break; + } + + // + // Rule 667: simple_type_specifier ::= _Imaginary + // + case 667: { + action.consumeToken(); + break; + } + + // + // Rule 668: cv_qualifier ::= restrict + // + case 668: { + action.consumeToken(); + break; + } + + // + // Rule 669: explicit_instantiation ::= extern template declaration + // + case 669: { + action.consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_extern); + break; + } + + // + // Rule 670: explicit_instantiation ::= static template declaration + // + case 670: { + action.consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_static); + break; + } + + // + // Rule 671: explicit_instantiation ::= inline template declaration + // + case 671: { + action.consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_inline); + break; + } + + // + // Rule 672: postfix_expression ::= ( type_id ) initializer_list + // + case 672: { + action.consumeExpressionTypeIdInitializer(); + break; + } + + default: + break; + } + return; + } +} |