blob: 19e0999a64912a5d2f22b5c05f51033b8ea5cc9d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2010 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*********************************************************************************/
// This file was generated by LPG
package org.eclipse.cdt.internal.core.lrparser.xlc.c;
import java.util.List;
import java.util.Map;
import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression;
import org.eclipse.cdt.core.dom.ast.IASTCastExpression;
import org.eclipse.cdt.core.dom.ast.IASTCompletionNode;
import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTLiteralExpression;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression;
import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression;
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
import org.eclipse.cdt.core.dom.lrparser.action.gnu.GCCSecondaryParserFactory;
import org.eclipse.cdt.core.dom.lrparser.action.gnu.GNUBuildASTParserAction;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.lrparser.xlc.action.XlcCBuildASTParserAction;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.internal.core.lrparser.xlc.ast.XlcCNodeFactory;
import lpg.lpgjavaruntime.BadParseException;
import lpg.lpgjavaruntime.BadParseSymFileException;
import lpg.lpgjavaruntime.DiagnoseParser;
import lpg.lpgjavaruntime.ErrorToken;
import lpg.lpgjavaruntime.IToken;
import lpg.lpgjavaruntime.LexStream;
import lpg.lpgjavaruntime.Monitor;
import lpg.lpgjavaruntime.NotBacktrackParseTableException;
import lpg.lpgjavaruntime.NullExportedSymbolsException;
import lpg.lpgjavaruntime.NullTerminalSymbolsException;
import lpg.lpgjavaruntime.ParseErrorCodes;
import lpg.lpgjavaruntime.ParseTable;
import lpg.lpgjavaruntime.PrsStream;
import lpg.lpgjavaruntime.RuleAction;
import lpg.lpgjavaruntime.TokenStream;
import lpg.lpgjavaruntime.UndefinedEofSymbolException;
import lpg.lpgjavaruntime.UnimplementedTerminalsException;
public class XlcCParser extends PrsStream
implements RuleAction, ITokenStream, ITokenCollector, IParser<IASTTranslationUnit>
{
private static ParseTable prs = new XlcCParserprs();
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 XlcCParser(LexStream lexStream) {
super(lexStream);
try {
super.remapTerminalSymbols(orderedTerminalSymbols(), XlcCParserprs.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(" " + XlcCParsersym.orderedTerminalSymbols[id.intValue()]);
}
System.out.println();
} catch (UndefinedEofSymbolException e) {
throw new Error(new UndefinedEofSymbolException("The Lexer does not implement the Eof symbol "
+ XlcCParsersym.orderedTerminalSymbols[XlcCParserprs.EOFT_SYMBOL]));
}
}
@Override
public String[] orderedTerminalSymbols() {
return XlcCParsersym.orderedTerminalSymbols;
}
public String getTokenKindName(int kind) {
return XlcCParsersym.orderedTerminalSymbols[kind];
}
public int getEOFTokenKind() {
return XlcCParserprs.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 XlcCParserprs.java with -BACKTRACK option"));
} catch (BadParseSymFileException e) {
throw new Error(new BadParseSymFileException("Bad Parser Symbol File -- XlcCParsersym.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 XlcCBuildASTParserAction action;
private IASTCompletionNode compNode;
public XlcCParser(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<>();
action = new XlcCBuildASTParserAction(this, astStack, XlcCNodeFactory.getDefault(),
GCCSecondaryParserFactory.getDefault());
action.setParserProperties(properties);
gnuAction = new GNUBuildASTParserAction(this, astStack, XlcCNodeFactory.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 XlcCParsersym.orderedTerminalSymbols;
}
@Override
@SuppressWarnings("nls")
public String getName() {
return "XlcCParser";
}
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: literal ::= integer
//
case 13: {
action.consumeExpressionLiteral(IASTLiteralExpression.lk_integer_constant);
break;
}
//
// Rule 14: literal ::= floating
//
case 14: {
action.consumeExpressionLiteral(IASTLiteralExpression.lk_float_constant);
break;
}
//
// Rule 15: literal ::= charconst
//
case 15: {
action.consumeExpressionLiteral(IASTLiteralExpression.lk_char_constant);
break;
}
//
// Rule 16: literal ::= stringlit
//
case 16: {
action.consumeExpressionLiteral(IASTLiteralExpression.lk_string_literal);
break;
}
//
// Rule 18: primary_expression ::= primary_expression_id
//
case 18: {
action.consumeExpressionID();
break;
}
//
// Rule 19: primary_expression ::= ( expression )
//
case 19: {
action.consumeExpressionBracketed();
break;
}
//
// Rule 22: postfix_expression ::= postfix_expression [ expression ]
//
case 22: {
action.consumeExpressionArraySubscript();
break;
}
//
// Rule 23: postfix_expression ::= postfix_expression ( expression_list_opt )
//
case 23: {
action.consumeExpressionFunctionCall();
break;
}
//
// Rule 24: postfix_expression ::= postfix_expression . member_name
//
case 24: {
action.consumeExpressionFieldReference(false);
break;
}
//
// Rule 25: postfix_expression ::= postfix_expression -> member_name
//
case 25: {
action.consumeExpressionFieldReference(true);
break;
}
//
// Rule 26: postfix_expression ::= postfix_expression ++
//
case 26: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixIncr);
break;
}
//
// Rule 27: postfix_expression ::= postfix_expression --
//
case 27: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixDecr);
break;
}
//
// Rule 28: postfix_expression ::= ( type_id ) initializer_list
//
case 28: {
action.consumeExpressionTypeIdInitializer();
break;
}
//
// Rule 33: unary_expression ::= ++ unary_expression
//
case 33: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixIncr);
break;
}
//
// Rule 34: unary_expression ::= -- unary_expression
//
case 34: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixDecr);
break;
}
//
// Rule 35: unary_expression ::= & cast_expression
//
case 35: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_amper);
break;
}
//
// Rule 36: unary_expression ::= * cast_expression
//
case 36: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_star);
break;
}
//
// Rule 37: unary_expression ::= + cast_expression
//
case 37: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_plus);
break;
}
//
// Rule 38: unary_expression ::= - cast_expression
//
case 38: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_minus);
break;
}
//
// Rule 39: unary_expression ::= ~ cast_expression
//
case 39: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_tilde);
break;
}
//
// Rule 40: unary_expression ::= ! cast_expression
//
case 40: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_not);
break;
}
//
// Rule 41: unary_expression ::= sizeof unary_expression
//
case 41: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_sizeof);
break;
}
//
// Rule 42: unary_expression ::= sizeof ( type_id )
//
case 42: {
action.consumeExpressionTypeId(IASTTypeIdExpression.op_sizeof);
break;
}
//
// Rule 44: cast_expression ::= ( type_id ) cast_expression
//
case 44: {
action.consumeExpressionCast(IASTCastExpression.op_cast);
break;
}
//
// Rule 46: multiplicative_expression ::= multiplicative_expression * cast_expression
//
case 46: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_multiply);
break;
}
//
// Rule 47: multiplicative_expression ::= multiplicative_expression / cast_expression
//
case 47: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_divide);
break;
}
//
// Rule 48: multiplicative_expression ::= multiplicative_expression % cast_expression
//
case 48: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_modulo);
break;
}
//
// Rule 50: additive_expression ::= additive_expression + multiplicative_expression
//
case 50: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_plus);
break;
}
//
// Rule 51: additive_expression ::= additive_expression - multiplicative_expression
//
case 51: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_minus);
break;
}
//
// Rule 53: shift_expression ::= shift_expression << additive_expression
//
case 53: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_shiftLeft);
break;
}
//
// Rule 54: shift_expression ::= shift_expression >> additive_expression
//
case 54: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_shiftRight);
break;
}
//
// Rule 56: relational_expression ::= relational_expression < shift_expression
//
case 56: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_lessThan);
break;
}
//
// Rule 57: relational_expression ::= relational_expression > shift_expression
//
case 57: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_greaterThan);
break;
}
//
// Rule 58: relational_expression ::= relational_expression <= shift_expression
//
case 58: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_lessEqual);
break;
}
//
// Rule 59: relational_expression ::= relational_expression >= shift_expression
//
case 59: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_greaterEqual);
break;
}
//
// Rule 61: equality_expression ::= equality_expression == relational_expression
//
case 61: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_equals);
break;
}
//
// Rule 62: equality_expression ::= equality_expression != relational_expression
//
case 62: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_notequals);
break;
}
//
// Rule 64: and_expression ::= and_expression & equality_expression
//
case 64: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryAnd);
break;
}
//
// Rule 66: exclusive_or_expression ::= exclusive_or_expression ^ and_expression
//
case 66: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryXor);
break;
}
//
// Rule 68: inclusive_or_expression ::= inclusive_or_expression | exclusive_or_expression
//
case 68: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryOr);
break;
}
//
// Rule 70: logical_and_expression ::= logical_and_expression && inclusive_or_expression
//
case 70: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_logicalAnd);
break;
}
//
// Rule 72: logical_or_expression ::= logical_or_expression || logical_and_expression
//
case 72: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_logicalOr);
break;
}
//
// Rule 74: conditional_expression ::= logical_or_expression ? expression : assignment_expression
//
case 74: {
action.consumeExpressionConditional();
break;
}
//
// Rule 76: assignment_expression ::= unary_expression = assignment_expression
//
case 76: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_assign);
break;
}
//
// Rule 77: assignment_expression ::= unary_expression *= assignment_expression
//
case 77: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_multiplyAssign);
break;
}
//
// Rule 78: assignment_expression ::= unary_expression /= assignment_expression
//
case 78: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_divideAssign);
break;
}
//
// Rule 79: assignment_expression ::= unary_expression %= assignment_expression
//
case 79: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_moduloAssign);
break;
}
//
// Rule 80: assignment_expression ::= unary_expression += assignment_expression
//
case 80: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_plusAssign);
break;
}
//
// Rule 81: assignment_expression ::= unary_expression -= assignment_expression
//
case 81: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_minusAssign);
break;
}
//
// Rule 82: assignment_expression ::= unary_expression <<= assignment_expression
//
case 82: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_shiftLeftAssign);
break;
}
//
// Rule 83: assignment_expression ::= unary_expression >>= assignment_expression
//
case 83: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_shiftRightAssign);
break;
}
//
// Rule 84: assignment_expression ::= unary_expression &= assignment_expression
//
case 84: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryAndAssign);
break;
}
//
// Rule 85: assignment_expression ::= unary_expression ^= assignment_expression
//
case 85: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryXorAssign);
break;
}
//
// Rule 86: assignment_expression ::= unary_expression |= assignment_expression
//
case 86: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryOrAssign);
break;
}
//
// Rule 89: expression_list ::= <openscope-ast> expression_list_actual
//
case 89: {
action.consumeExpressionList();
break;
}
//
// Rule 91: expression_list_opt ::= $Empty
//
case 91: {
action.consumeEmpty();
break;
}
//
// Rule 101: statement ::= ERROR_TOKEN
//
case 101: {
action.consumeStatementProblem();
break;
}
//
// Rule 102: labeled_statement ::= identifier_token : statement
//
case 102: {
action.consumeStatementLabeled();
break;
}
//
// Rule 103: labeled_statement ::= case constant_expression : statement
//
case 103: {
action.consumeStatementCase();
break;
}
//
// Rule 104: labeled_statement ::= default : statement
//
case 104: {
action.consumeStatementDefault();
break;
}
//
// Rule 105: compound_statement ::= { }
//
case 105: {
action.consumeStatementCompoundStatement(false);
break;
}
//
// Rule 106: compound_statement ::= { <openscope-ast> block_item_list }
//
case 106: {
action.consumeStatementCompoundStatement(true);
break;
}
//
// Rule 110: block_item ::= declaration
//
case 110: {
action.consumeStatementDeclarationWithDisambiguation();
break;
}
//
// Rule 111: expression_statement ::= ;
//
case 111: {
action.consumeStatementNull();
break;
}
//
// Rule 112: expression_statement ::= expression_in_statement ;
//
case 112: {
action.consumeStatementExpression();
break;
}
//
// Rule 113: selection_statement ::= if ( expression ) statement
//
case 113: {
action.consumeStatementIf(false);
break;
}
//
// Rule 114: selection_statement ::= if ( expression ) statement else statement
//
case 114: {
action.consumeStatementIf(true);
break;
}
//
// Rule 115: selection_statement ::= switch ( expression ) statement
//
case 115: {
action.consumeStatementSwitch();
break;
}
//
// Rule 117: expression_opt ::= $Empty
//
case 117: {
action.consumeEmpty();
break;
}
//
// Rule 118: iteration_statement ::= do statement while ( expression ) ;
//
case 118: {
action.consumeStatementDoLoop(true);
break;
}
//
// Rule 119: iteration_statement ::= do statement
//
case 119: {
action.consumeStatementDoLoop(false);
break;
}
//
// Rule 120: iteration_statement ::= while ( expression ) statement
//
case 120: {
action.consumeStatementWhileLoop();
break;
}
//
// Rule 121: iteration_statement ::= for ( expression_opt ; expression_opt ; expression_opt ) statement
//
case 121: {
action.consumeStatementForLoop();
break;
}
//
// Rule 122: iteration_statement ::= for ( declaration expression_opt ; expression_opt ) statement
//
case 122: {
action.consumeStatementForLoop();
break;
}
//
// Rule 123: jump_statement ::= goto identifier_token ;
//
case 123: {
action.consumeStatementGoto();
break;
}
//
// Rule 124: jump_statement ::= continue ;
//
case 124: {
action.consumeStatementContinue();
break;
}
//
// Rule 125: jump_statement ::= break ;
//
case 125: {
action.consumeStatementBreak();
break;
}
//
// Rule 126: jump_statement ::= return ;
//
case 126: {
action.consumeStatementReturn(false);
break;
}
//
// Rule 127: jump_statement ::= return expression ;
//
case 127: {
action.consumeStatementReturn(true);
break;
}
//
// Rule 128: declaration ::= declaration_specifiers ;
//
case 128: {
action.consumeDeclarationSimple(false);
break;
}
//
// Rule 129: declaration ::= declaration_specifiers <openscope-ast> init_declarator_list ;
//
case 129: {
action.consumeDeclarationSimple(true);
break;
}
//
// Rule 130: declaration_specifiers ::= <openscope-ast> simple_declaration_specifiers
//
case 130: {
action.consumeDeclarationSpecifiersSimple();
break;
}
//
// Rule 131: declaration_specifiers ::= <openscope-ast> struct_or_union_declaration_specifiers
//
case 131: {
action.consumeDeclarationSpecifiersStructUnionEnum();
break;
}
//
// Rule 132: declaration_specifiers ::= <openscope-ast> elaborated_declaration_specifiers
//
case 132: {
action.consumeDeclarationSpecifiersStructUnionEnum();
break;
}
//
// Rule 133: declaration_specifiers ::= <openscope-ast> enum_declaration_specifiers
//
case 133: {
action.consumeDeclarationSpecifiersStructUnionEnum();
break;
}
//
// Rule 134: declaration_specifiers ::= <openscope-ast> typdef_name_declaration_specifiers
//
case 134: {
action.consumeDeclarationSpecifiersTypedefName();
break;
}
//
// Rule 159: init_declarator ::= complete_declarator = initializer
//
case 159: {
action.consumeDeclaratorWithInitializer(true);
break;
}
//
// Rule 161: storage_class_specifier ::= storage_class_specifier_token
//
case 161: {
action.consumeToken();
break;
}
//
// Rule 167: simple_type_specifier ::= simple_type_specifier_token
//
case 167: {
action.consumeToken();
break;
}
//
// Rule 180: type_name_specifier ::= identifier_token
//
case 180: {
action.consumeToken();
break;
}
//
// Rule 181: struct_or_union_specifier ::= struct_or_union struct_or_union_specifier_hook { <openscope-ast> struct_declaration_list_opt }
//
case 181: {
action.consumeTypeSpecifierComposite(false);
break;
}
//
// Rule 182: struct_or_union_specifier ::= struct_or_union struct_or_union_specifier_hook identifier_token struct_or_union_specifier_suffix_hook { <openscope-ast> struct_declaration_list_opt }
//
case 182: {
action.consumeTypeSpecifierComposite(true);
break;
}
//
// Rule 187: elaborated_specifier ::= struct elaborated_specifier_hook identifier_token
//
case 187: {
action.consumeTypeSpecifierElaborated(IASTCompositeTypeSpecifier.k_struct);
break;
}
//
// Rule 188: elaborated_specifier ::= union elaborated_specifier_hook identifier_token
//
case 188: {
action.consumeTypeSpecifierElaborated(IASTCompositeTypeSpecifier.k_union);
break;
}
//
// Rule 189: elaborated_specifier ::= enum elaborated_specifier_hook identifier_token
//
case 189: {
action.consumeTypeSpecifierElaborated(IASTElaboratedTypeSpecifier.k_enum);
break;
}
//
// Rule 195: struct_declaration ::= specifier_qualifier_list <openscope-ast> struct_declarator_list ;
//
case 195: {
action.consumeStructDeclaration(true);
break;
}
//
// Rule 196: struct_declaration ::= specifier_qualifier_list ;
//
case 196: {
action.consumeStructDeclaration(false);
break;
}
//
// Rule 197: struct_declaration ::= ERROR_TOKEN
//
case 197: {
action.consumeDeclarationProblem();
break;
}
//
// Rule 203: struct_declarator ::= : constant_expression
//
case 203: {
action.consumeBitField(false);
break;
}
//
// Rule 204: struct_declarator ::= declarator : constant_expression
//
case 204: {
action.consumeBitField(true);
break;
}
//
// Rule 205: enum_specifier ::= enum enum_specifier_hook { <openscope-ast> enumerator_list_opt comma_opt }
//
case 205: {
action.consumeTypeSpecifierEnumeration(false);
break;
}
//
// Rule 206: enum_specifier ::= enum enum_specifier_hook identifier_token { <openscope-ast> enumerator_list_opt comma_opt }
//
case 206: {
action.consumeTypeSpecifierEnumeration(true);
break;
}
//
// Rule 212: enumerator ::= identifier_token
//
case 212: {
action.consumeEnumerator(false);
break;
}
//
// Rule 213: enumerator ::= identifier_token = constant_expression
//
case 213: {
action.consumeEnumerator(true);
break;
}
//
// Rule 214: type_qualifier ::= type_qualifier_token
//
case 214: {
action.consumeToken();
break;
}
//
// Rule 218: function_specifier ::= inline
//
case 218: {
action.consumeToken();
break;
}
//
// Rule 220: declarator ::= <openscope-ast> pointer_seq direct_declarator
//
case 220: {
action.consumeDeclaratorWithPointer(true);
break;
}
//
// Rule 225: basic_direct_declarator ::= declarator_id_name
//
case 225: {
action.consumeDirectDeclaratorIdentifier();
break;
}
//
// Rule 226: basic_direct_declarator ::= ( declarator )
//
case 226: {
action.consumeDirectDeclaratorBracketed();
break;
}
//
// Rule 227: declarator_id_name ::= identifier
//
case 227: {
action.consumeIdentifierName();
break;
}
//
// Rule 228: array_direct_declarator ::= basic_direct_declarator array_modifier
//
case 228: {
action.consumeDirectDeclaratorArrayDeclarator(true);
break;
}
//
// Rule 229: array_direct_declarator ::= array_direct_declarator array_modifier
//
case 229: {
action.consumeDirectDeclaratorArrayDeclarator(true);
break;
}
//
// Rule 231: function_direct_declarator ::= basic_direct_declarator ( <openscope-ast> parameter_type_list )
//
case 231: {
action.consumeDirectDeclaratorFunctionDeclarator(true, true);
break;
}
//
// Rule 232: function_direct_declarator ::= basic_direct_declarator ( )
//
case 232: {
action.consumeDirectDeclaratorFunctionDeclarator(true, false);
break;
}
//
// Rule 234: function_declarator ::= <openscope-ast> pointer_seq function_direct_declarator
//
case 234: {
action.consumeDeclaratorWithPointer(true);
break;
}
//
// Rule 235: knr_direct_declarator ::= basic_direct_declarator ( <openscope-ast> identifier_list )
//
case 235: {
action.consumeDirectDeclaratorFunctionDeclaratorKnR();
break;
}
//
// Rule 237: knr_function_declarator ::= <openscope-ast> pointer_seq knr_direct_declarator
//
case 237: {
action.consumeDeclaratorWithPointer(true);
break;
}
//
// Rule 238: identifier_list ::= identifier
//
case 238: {
action.consumeIdentifierKnR();
break;
}
//
// Rule 239: identifier_list ::= identifier_list , identifier
//
case 239: {
action.consumeIdentifierKnR();
break;
}
//
// Rule 240: array_modifier ::= [ ]
//
case 240: {
action.consumeDirectDeclaratorArrayModifier(false);
break;
}
//
// Rule 241: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers ]
//
case 241: {
action.consumeDirectDeclaratorModifiedArrayModifier(false, false, true, false);
break;
}
//
// Rule 242: array_modifier ::= [ assignment_expression ]
//
case 242: {
action.consumeDirectDeclaratorArrayModifier(true);
break;
}
//
// Rule 243: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers assignment_expression ]
//
case 243: {
action.consumeDirectDeclaratorModifiedArrayModifier(false, false, true, true);
break;
}
//
// Rule 244: array_modifier ::= [ static assignment_expression ]
//
case 244: {
action.consumeDirectDeclaratorModifiedArrayModifier(true, false, false, true);
break;
}
//
// Rule 245: array_modifier ::= [ static <openscope-ast> array_modifier_type_qualifiers assignment_expression ]
//
case 245: {
action.consumeDirectDeclaratorModifiedArrayModifier(true, false, true, true);
break;
}
//
// Rule 246: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers static assignment_expression ]
//
case 246: {
action.consumeDirectDeclaratorModifiedArrayModifier(true, false, true, true);
break;
}
//
// Rule 247: array_modifier ::= [ * ]
//
case 247: {
action.consumeDirectDeclaratorModifiedArrayModifier(false, true, false, false);
break;
}
//
// Rule 248: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers * ]
//
case 248: {
action.consumeDirectDeclaratorModifiedArrayModifier(false, true, true, false);
break;
}
//
// Rule 250: pointer_seq ::= pointer_hook * pointer_hook
//
case 250: {
action.consumePointer();
break;
}
//
// Rule 251: pointer_seq ::= pointer_seq pointer_hook * pointer_hook
//
case 251: {
action.consumePointer();
break;
}
//
// Rule 252: pointer_seq ::= pointer_hook * pointer_hook <openscope-ast> type_qualifier_list
//
case 252: {
action.consumePointerTypeQualifierList();
break;
}
//
// Rule 253: pointer_seq ::= pointer_seq pointer_hook * pointer_hook <openscope-ast> type_qualifier_list
//
case 253: {
action.consumePointerTypeQualifierList();
break;
}
//
// Rule 257: parameter_type_list ::= parameter_list
//
case 257: {
action.consumeEmpty();
break;
}
//
// Rule 258: parameter_type_list ::= parameter_list , ...
//
case 258: {
action.consumePlaceHolder();
break;
}
//
// Rule 259: parameter_type_list ::= ...
//
case 259: {
action.consumePlaceHolder();
break;
}
//
// Rule 262: parameter_declaration ::= declaration_specifiers complete_parameter_declarator
//
case 262: {
action.consumeParameterDeclaration();
break;
}
//
// Rule 263: parameter_declaration ::= declaration_specifiers
//
case 263: {
action.consumeParameterDeclarationWithoutDeclarator();
break;
}
//
// Rule 266: type_id ::= specifier_qualifier_list
//
case 266: {
action.consumeTypeId(false);
break;
}
//
// Rule 267: type_id ::= specifier_qualifier_list abstract_declarator
//
case 267: {
action.consumeTypeId(true);
break;
}
//
// Rule 269: abstract_declarator ::= <openscope-ast> pointer_seq
//
case 269: {
action.consumeDeclaratorWithPointer(false);
break;
}
//
// Rule 270: abstract_declarator ::= <openscope-ast> pointer_seq direct_abstract_declarator
//
case 270: {
action.consumeDeclaratorWithPointer(true);
break;
}
//
// Rule 274: basic_direct_abstract_declarator ::= ( abstract_declarator )
//
case 274: {
action.consumeDirectDeclaratorBracketed();
break;
}
//
// Rule 275: array_direct_abstract_declarator ::= array_modifier
//
case 275: {
action.consumeDirectDeclaratorArrayDeclarator(false);
break;
}
//
// Rule 276: array_direct_abstract_declarator ::= array_direct_abstract_declarator array_modifier
//
case 276: {
action.consumeDirectDeclaratorArrayDeclarator(true);
break;
}
//
// Rule 277: array_direct_abstract_declarator ::= basic_direct_abstract_declarator array_modifier
//
case 277: {
action.consumeDirectDeclaratorArrayDeclarator(true);
break;
}
//
// Rule 278: function_direct_abstract_declarator ::= ( )
//
case 278: {
action.consumeDirectDeclaratorFunctionDeclarator(false, false);
break;
}
//
// Rule 279: function_direct_abstract_declarator ::= basic_direct_abstract_declarator ( )
//
case 279: {
action.consumeDirectDeclaratorFunctionDeclarator(true, false);
break;
}
//
// Rule 280: function_direct_abstract_declarator ::= ( <openscope-ast> parameter_type_list )
//
case 280: {
action.consumeDirectDeclaratorFunctionDeclarator(false, true);
break;
}
//
// Rule 281: function_direct_abstract_declarator ::= basic_direct_abstract_declarator ( <openscope-ast> parameter_type_list )
//
case 281: {
action.consumeDirectDeclaratorFunctionDeclarator(true, true);
break;
}
//
// Rule 282: initializer ::= assignment_expression
//
case 282: {
action.consumeInitializer();
break;
}
//
// Rule 283: initializer ::= initializer_list
//
case 283: {
action.consumeInitializer();
break;
}
//
// Rule 284: initializer_list ::= start_initializer_list { <openscope-ast> initializer_seq comma_opt } end_initializer_list
//
case 284: {
action.consumeInitializerList();
break;
}
//
// Rule 285: initializer_list ::= { <openscope-ast> }
//
case 285: {
action.consumeInitializerList();
break;
}
//
// Rule 286: start_initializer_list ::= $Empty
//
case 286: {
action.initializerListStart();
break;
}
//
// Rule 287: end_initializer_list ::= $Empty
//
case 287: {
action.initializerListEnd();
break;
}
//
// Rule 292: designated_initializer ::= <openscope-ast> designation = initializer
//
case 292: {
action.consumeInitializerDesignated();
break;
}
//
// Rule 296: designator_base ::= [ constant_expression ]
//
case 296: {
action.consumeDesignatorArray();
break;
}
//
// Rule 297: designator_base ::= . identifier_token
//
case 297: {
action.consumeDesignatorField();
break;
}
//
// Rule 298: designator ::= [ constant_expression ]
//
case 298: {
action.consumeDesignatorArray();
break;
}
//
// Rule 299: designator ::= . identifier_token
//
case 299: {
action.consumeDesignatorField();
break;
}
//
// Rule 300: translation_unit ::= external_declaration_list
//
case 300: {
action.consumeTranslationUnit();
break;
}
//
// Rule 301: translation_unit ::= $Empty
//
case 301: {
action.consumeTranslationUnit();
break;
}
//
// Rule 306: external_declaration ::= ;
//
case 306: {
action.consumeDeclarationEmpty();
break;
}
//
// Rule 307: external_declaration ::= ERROR_TOKEN
//
case 307: {
action.consumeDeclarationProblem();
break;
}
//
// Rule 311: function_definition ::= <openscope-ast> function_declarator function_body
//
case 311: {
action.consumeFunctionDefinition(false);
break;
}
//
// Rule 312: function_definition ::= declaration_specifiers <openscope-ast> knr_function_declarator <openscope-ast> declaration_list compound_statement
//
case 312: {
action.consumeFunctionDefinitionKnR();
break;
}
//
// Rule 313: normal_function_definition ::= declaration_specifiers <openscope-ast> function_declarator function_body
//
case 313: {
action.consumeFunctionDefinition(true);
break;
}
//
// Rule 314: function_body ::= { }
//
case 314: {
action.consumeStatementCompoundStatement(false);
break;
}
//
// Rule 315: function_body ::= { <openscope-ast> block_item_list }
//
case 315: {
action.consumeStatementCompoundStatement(true);
break;
}
//
// Rule 332: attribute_parameter ::= assignment_expression
//
case 332: {
action.consumeIgnore();
break;
}
//
// Rule 343: extended_asm_declaration ::= asm volatile_opt ( extended_asm_param_seq ) ;
//
case 343: {
gnuAction.consumeDeclarationASM();
break;
}
//
// Rule 354: unary_expression ::= __alignof__ unary_expression
//
case 354: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_alignOf);
break;
}
//
// Rule 355: unary_expression ::= __alignof__ ( type_id )
//
case 355: {
action.consumeExpressionTypeId(IASTTypeIdExpression.op_alignof);
break;
}
//
// Rule 356: unary_expression ::= typeof unary_expression
//
case 356: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof);
break;
}
//
// Rule 357: unary_expression ::= typeof ( type_id )
//
case 357: {
action.consumeExpressionTypeId(IASTTypeIdExpression.op_typeof);
break;
}
//
// Rule 358: relational_expression ::= relational_expression >? shift_expression
//
case 358: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_max);
break;
}
//
// Rule 359: relational_expression ::= relational_expression <? shift_expression
//
case 359: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_min);
break;
}
//
// Rule 360: conditional_expression ::= logical_or_expression ? <empty> : assignment_expression
//
case 360: {
action.consumeExpressionConditional();
break;
}
//
// Rule 361: primary_expression ::= ( compound_statement )
//
case 361: {
gnuAction.consumeCompoundStatementExpression();
break;
}
//
// Rule 362: labeled_statement ::= case case_range_expression : statement
//
case 362: {
action.consumeStatementCase();
break;
}
//
// Rule 363: case_range_expression ::= constant_expression ... constant_expression
//
case 363: {
action.consumeExpressionBinaryOperator(IASTBinaryExpression.op_assign);
break;
}
//
// Rule 367: typeof_type_specifier ::= typeof unary_expression
//
case 367: {
action.consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof);
break;
}
//
// Rule 368: typeof_type_specifier ::= typeof ( type_id )
//
case 368: {
action.consumeExpressionTypeId(IASTTypeIdExpression.op_typeof);
break;
}
//
// Rule 369: declaration_specifiers ::= <openscope-ast> typeof_declaration_specifiers
//
case 369: {
action.consumeDeclarationSpecifiersTypeof();
break;
}
//
// Rule 385: field_name_designator ::= identifier_token :
//
case 385: {
action.consumeDesignatorFieldGCC();
break;
}
//
// Rule 386: array_range_designator ::= [ constant_expression ... constant_expression ]
//
case 386: {
action.consumeDesignatorArrayRange();
break;
}
//
// Rule 387: designated_initializer ::= <openscope-ast> field_name_designator initializer
//
case 387: {
action.consumeInitializerDesignated();
break;
}
//
// Rule 388: block_item ::= normal_function_definition
//
case 388: {
action.consumeStatementDeclaration();
break;
}
//
// Rule 392: type_id ::= vector_type
//
case 392: {
action.consumeTypeId(false);
break;
}
//
// Rule 393: type_id ::= vector_type abstract_declarator
//
case 393: {
action.consumeTypeId(true);
break;
}
//
// Rule 394: vector_declaration ::= vector_type <openscope-ast> init_declarator_list ;
//
case 394: {
action.consumeDeclarationSimple(true);
break;
}
//
// Rule 395: vector_type ::= <openscope-ast> no_type_declaration_specifiers_opt vector vector_type_specifier all_specifier_qualifier_list_opt
//
case 395: {
action.consumeVectorTypeSpecifier();
break;
}
//
// Rule 396: vector_type_specifier ::= vector_type_specifier_token
//
case 396: {
action.consumeToken();
break;
}
//
// Rule 418: declarator_id_name ::= pixel
//
case 418: {
action.consumeIdentifierName();
break;
}
//
// Rule 419: declarator_id_name ::= vector
//
case 419: {
action.consumeIdentifierName();
break;
}
//
// Rule 420: declarator_id_name ::= bool
//
case 420: {
action.consumeIdentifierName();
break;
}
default:
break;
}
return;
}
}