diff options
author | Mike Kucera | 2008-02-14 22:31:55 +0000 |
---|---|---|
committer | Mike Kucera | 2008-02-14 22:31:55 +0000 |
commit | 30fa8e597b35db5e992061b9ef222f79f29fddd6 (patch) | |
tree | 384ca80efbc192641194595dcce32a38a0e4851d | |
parent | 743d1d04ee3f9f6bfabe651daa18dcee09d36fae (diff) | |
download | org.eclipse.cdt-30fa8e597b35db5e992061b9ef222f79f29fddd6.tar.gz org.eclipse.cdt-30fa8e597b35db5e992061b9ef222f79f29fddd6.tar.xz org.eclipse.cdt-30fa8e597b35db5e992061b9ef222f79f29fddd6.zip |
secondary parser to solve cast ambiguity in C++
9 files changed, 5085 insertions, 18 deletions
diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/c99/C99Tests.java b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/c99/C99Tests.java index 399ba88e1ab..0ed58333fa0 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/c99/C99Tests.java +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/src/org/eclipse/cdt/core/lrparser/tests/c99/C99Tests.java @@ -18,6 +18,8 @@ import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier; import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage; import org.eclipse.cdt.core.dom.lrparser.c99.C99Language; +import org.eclipse.cdt.core.dom.lrparser.cpp.ISOCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.tests.ast2.AST2Tests; import org.eclipse.cdt.internal.core.parser.ParserException; @@ -39,18 +41,21 @@ public class C99Tests extends AST2Tests { } - protected IASTTranslationUnit parse( String code, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems ) throws ParserException { - if(lang != ParserLanguage.C) - return super.parse(code, lang, useGNUExtensions, expectNoProblems); - - return ParseHelper.parse(code, getLanguage(), expectNoProblems); + @Override + protected IASTTranslationUnit parse( String code, ParserLanguage lang, boolean useGNUExtensions, boolean expectNoProblems ) throws ParserException { + ILanguage language = lang.isCPP() ? getCPPLanguage() : getC99Language(); + return ParseHelper.parse(code, language, expectNoProblems); } - protected BaseExtensibleLanguage getLanguage() { + protected ILanguage getC99Language() { return C99Language.getDefault(); } + protected ILanguage getCPPLanguage() { + return ISOCPPLanguage.getDefault(); + } + public void testMultipleHashHash() throws Exception { String code = "#define TWICE(a) int a##tera; int a##ther; \n TWICE(pan)"; diff --git a/lrparser/org.eclipse.cdt.core.lrparser/grammar/build.xml b/lrparser/org.eclipse.cdt.core.lrparser/grammar/build.xml index 44530494367..21fc2186baf 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/grammar/build.xml +++ b/lrparser/org.eclipse.cdt.core.lrparser/grammar/build.xml @@ -60,6 +60,10 @@ <antcall target="generate-cpp"> <param name="grammar_name" value="CPPExpressionStatementParser"/> </antcall> + <!-- Generate parser for disambiguating cast expressions vs binary expressions--> + <antcall target="generate-cpp"> + <param name="grammar_name" value="CPPNoCastExpressionParser"/> + </antcall> </target> diff --git a/lrparser/org.eclipse.cdt.core.lrparser/grammar/cpp/CPPNoCastExpressionParser.g b/lrparser/org.eclipse.cdt.core.lrparser/grammar/cpp/CPPNoCastExpressionParser.g new file mode 100644 index 00000000000..ec9fd912259 --- /dev/null +++ b/lrparser/org.eclipse.cdt.core.lrparser/grammar/cpp/CPPNoCastExpressionParser.g @@ -0,0 +1,36 @@ +----------------------------------------------------------------------------------- +-- Copyright (c) 2006, 2008 IBM Corporation and others. +-- All rights reserved. This program and the accompanying materials +-- are made available under the terms of the Eclipse Public License v1.0 +-- which accompanies this distribution, and is available at +-- http://www.eclipse.org/legal/epl-v10.html +-- +-- Contributors: +-- IBM Corporation - initial API and implementation +----------------------------------------------------------------------------------- + +%options la=2 +%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp +%options template=btParserTemplateD.g + +$Import + CPPGrammar.g +$DropRules + + cast_expression + ::= '(' type_id ')' cast_expression + +$End + +$Start + no_cast_start +$End + +$Rules + + no_cast_start + ::= expression + | ERROR_TOKEN + /. $Build consumeExpressionProblem(); $EndBuild ./ + +$End
\ No newline at end of file diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java index 38ff5e9e0f7..e951ce908b4 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/BuildASTParserAction.java @@ -52,7 +52,6 @@ import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNullStatement; import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTPointer; import org.eclipse.cdt.core.dom.ast.IASTPointerOperator; import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IASTProblemExpression; @@ -65,18 +64,12 @@ import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator; -import org.eclipse.cdt.core.dom.ast.c.ICASTDeclSpecifier; -import org.eclipse.cdt.core.dom.ast.c.ICASTPointer; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCastExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLiteralExpression; import org.eclipse.cdt.core.dom.lrparser.IParser; import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider; import org.eclipse.cdt.core.dom.lrparser.util.DebugUtil; -import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99NoCastExpressionParser; -import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99Parsersym; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; -import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousExpression; -import org.eclipse.cdt.internal.core.dom.parser.c.CASTAmbiguity; /** @@ -138,6 +131,14 @@ public abstract class BuildASTParserAction { /** + * Expression parser that does not recognize cast expressions, + * used to disambiguate casts. + */ + protected abstract IParser getNoCastExpressionParser(); + + + + /** * Create a new parser action. * @param tu Root node of the AST, its list of declarations should be empty. * @throws NullPointerException if any of the parameters are null @@ -538,8 +539,6 @@ public abstract class BuildASTParserAction { /** * @param operator constant for {@link ICPPASTCastExpression} - * - * TODO Remove C99 specific code */ public void consumeExpressionCast(int operator) { if(TRACE_ACTIONS) DebugUtil.printMethodTrace(); @@ -550,7 +549,7 @@ public abstract class BuildASTParserAction { setOffsetAndLength(expr); // try parsing as non-cast to resolve ambiguities - IParser secondaryParser = new C99NoCastExpressionParser(C99Parsersym.orderedTerminalSymbols); + IParser secondaryParser = getNoCastExpressionParser(); IASTNode alternateExpr = runSecondaryParser(secondaryParser); if(alternateExpr == null || alternateExpr instanceof IASTProblemExpression) @@ -881,7 +880,7 @@ public abstract class BuildASTParserAction { decl = nodeFactory.newDeclarator(nodeFactory.newName()); for(Object pointer : astStack.closeScope()) - decl.addPointerOperator((IASTPointer)pointer); + decl.addPointerOperator((IASTPointerOperator)pointer); setOffsetAndLength(decl); astStack.push(decl); diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java index fd90598e69a..b9e4835e9fc 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/c99/C99BuildASTParserAction.java @@ -143,7 +143,10 @@ public class C99BuildASTParserAction extends BuildASTParserAction { return new C99ExpressionStatementParser(C99Parsersym.orderedTerminalSymbols); } - + @Override + protected IParser getNoCastExpressionParser() { + return new C99NoCastExpressionParser(C99Parsersym.orderedTerminalSymbols); + } @@ -152,6 +155,9 @@ public class C99BuildASTParserAction extends BuildASTParserAction { ********************************************************************/ + + + /** * postfix_expression ::= postfix_expression '.' ident * postfix_expression ::= postfix_expression '->' ident diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java index d88202b8abc..4fd2dfa7a4b 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java @@ -89,6 +89,7 @@ import org.eclipse.cdt.core.dom.lrparser.util.DebugUtil; import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99ExpressionStatementParser; import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99Parsersym; import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPExpressionStatementParser; +import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPNoCastExpressionParser; import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPParsersym; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionDeclarator; @@ -127,6 +128,12 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { return new CPPExpressionStatementParser(CPPParsersym.orderedTerminalSymbols); } + @Override + protected IParser getNoCastExpressionParser() { + return new CPPNoCastExpressionParser(CPPParsersym.orderedTerminalSymbols); + } + + // /** // * Used only for debugging purposes. // * @@ -155,6 +162,8 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { + + /** * new_expression * ::= dcolon_opt 'new' new_placement_opt new_type_id <openscope-ast> new_array_expressions_op new_initializer_opt diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java new file mode 100644 index 00000000000..6a85679946e --- /dev/null +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java @@ -0,0 +1,2038 @@ +/******************************************************************************* +* Copyright (c) 2006, 2008 IBM Corporation and others. +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl_v10.html +* +* Contributors: +* IBM Corporation - initial API and implementation +*********************************************************************************/ + +// This file was generated by LPG + +package org.eclipse.cdt.internal.core.dom.lrparser.cpp; + +import lpg.lpgjavaruntime.*; + +import java.util.*; + +import org.eclipse.cdt.core.dom.ast.*; +import org.eclipse.cdt.core.dom.ast.cpp.*; +import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory; +import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction; +import org.eclipse.cdt.core.dom.lrparser.IParser; +import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider; +import org.eclipse.cdt.core.dom.lrparser.util.DebugUtil; + +import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; +import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; + +public class CPPNoCastExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser +{ + private static ParseTable prs = new CPPNoCastExpressionParserprs(); + private BacktrackingParser btParser; + + public BacktrackingParser 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(); } + public IToken getLeftIToken() { return super.getIToken(getLeftSpan()); } + + public int getRightSpan() { return btParser.getLastToken(); } + 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 CPPNoCastExpressionParser(LexStream lexStream) + { + super(lexStream); + + try + { + super.remapTerminalSymbols(orderedTerminalSymbols(), CPPNoCastExpressionParserprs.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(" " + CPPNoCastExpressionParsersym.orderedTerminalSymbols[id.intValue()]); + } + System.out.println(); + } + catch(UndefinedEofSymbolException e) + { + throw new Error(new UndefinedEofSymbolException + ("The Lexer does not implement the Eof symbol " + + CPPNoCastExpressionParsersym.orderedTerminalSymbols[CPPNoCastExpressionParserprs.EOFT_SYMBOL])); + } + } + + public String[] orderedTerminalSymbols() { return CPPNoCastExpressionParsersym.orderedTerminalSymbols; } + public String getTokenKindName(int kind) { return CPPNoCastExpressionParsersym.orderedTerminalSymbols[kind]; } + public int getEOFTokenKind() { return CPPNoCastExpressionParserprs.EOFT_SYMBOL; } + public PrsStream getParseStream() { return (PrsStream) 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 Object parser() + { + return parser(null, 0); + } + + public Object parser(Monitor monitor) + { + return parser(monitor, 0); + } + + public Object parser(int error_repair_count) + { + return parser(null, error_repair_count); + } + + public Object parser(Monitor monitor, int error_repair_count) + { + try + { + btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this); + } + catch (NotBacktrackParseTableException e) + { + throw new Error(new NotBacktrackParseTableException + ("Regenerate CPPNoCastExpressionParserprs.java with -BACKTRACK option")); + } + catch (BadParseSymFileException e) + { + throw new Error(new BadParseSymFileException("Bad Parser Symbol File -- CPPNoCastExpressionParsersym.java")); + } + + try + { + return (Object) 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); + } + + return null; + } + + +private CPPParserAction action; + +// uncomment to use with backtracking parser +public CPPNoCastExpressionParser() { // constructor +} + +private void initActions(IASTTranslationUnit tu) { + // binding resolution actions need access to IASTName nodes, temporary + action = new CPPParserAction (); + //action.resolver = new C99TypedefTrackerParserAction (this); + action.builder = new CPPBuildASTParserAction ( CPPASTNodeFactory.DEFAULT_INSTANCE , this, tu); + //action.builder.setTokenMap(CPPParsersym.orderedTerminalSymbols); + + // comment this line to use with backtracking parser + //setParserAction(action); +} + + +public void addToken(IToken token) { + token.setKind(mapKind(token.getKind())); + super.addToken(token); +} + + +public IASTCompletionNode parse(IASTTranslationUnit tu) { + // this has to be done, or... kaboom! + setStreamLength(getSize()); + initActions(tu); + + final int errorRepairCount = -1; // _1 means full error handling + parser(null, errorRepairCount); // do the actual parse + super.resetTokenStream(); // allow tokens to be garbage collected + + // the completion node may be null + IASTCompletionNode compNode = action.builder.getASTCompletionNode(); + + //action = null; // causes getSecondaryParseResult() to fail + + // Comment this line to use with backtracking parser + //parserAction = null; + + return compNode; +} + + +public int getKind(int i) { + int kind = super.getKind(i); + + // There used to be a special token kind for zero used to parser pure virtual function declarations. + // But it turned out to be easier to just parse them as an init_declarator and programaticaly check + // for pure virtual, see consumeMemberDeclaratorWithInitializer(). + + //if(kind == CPPParsersym.TK_integer && "0".equals(getTokenText(i))) { //$NON-NLS-1$ + // kind = CPPParsersym.TK_zero; + //} + + // lexer feedback hack! + //else if(kind == C99Parsersym.TK_identifier && action.resolver.isTypedef(getTokenText(i))) { + // kind = C99Parsersym.TK_TypedefName; + //} + + return kind; +} + + +// uncomment this method to use with backtracking parser +public List getRuleTokens() { + return Collections.unmodifiableList(getTokens().subList(getLeftSpan(), getRightSpan() + 1)); +} + + +public IASTNode getSecondaryParseResult() { + return action.builder.getSecondaryParseResult(); +} + + +private ITokenMap tokenMap = null; + +public void setTokens(List<IToken> tokens) { + resetTokenStream(); + addToken(new Token(null, 0, 0, 0)); // dummy token + for(IToken token : tokens) { + token.setKind(tokenMap.mapKind(token.getKind())); + addToken(token); + } + addToken(new Token(null, 0, 0, CPPNoCastExpressionParsersym.TK_EOF_TOKEN)); +} + +public CPPNoCastExpressionParser(String[] mapFrom) { // constructor + tokenMap = new TokenMap(CPPNoCastExpressionParsersym.orderedTerminalSymbols, mapFrom); +} + + + + public void ruleAction(int ruleNumber) + { + switch (ruleNumber) + { + + // + // Rule 1: <openscope-ast> ::= $Empty + // + case 1: { action.builder. + openASTScope(); break; + } + + // + // Rule 4: <placeholder> ::= $Empty + // + case 4: { action.builder. + consumePlaceHolder(); break; + } + + // + // Rule 5: <empty> ::= $Empty + // + case 5: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 10: translation_unit ::= declaration_seq + // + case 10: { action.builder. + consumeTranslationUnit(); break; + } + + // + // Rule 11: translation_unit ::= $Empty + // + case 11: { action.builder. + consumeTranslationUnit(); break; + } + + // + // Rule 12: literal ::= integer + // + case 12: { action.builder. + consumeExpressionLiteral(ICPPASTLiteralExpression.lk_integer_constant); break; + } + + // + // Rule 13: literal ::= 0 + // + case 13: { action.builder. + consumeExpressionLiteral(ICPPASTLiteralExpression.lk_integer_constant); break; + } + + // + // Rule 14: literal ::= floating + // + case 14: { action.builder. + consumeExpressionLiteral(ICPPASTLiteralExpression.lk_float_constant); break; + } + + // + // Rule 15: literal ::= charconst + // + case 15: { action.builder. + consumeExpressionLiteral(ICPPASTLiteralExpression.lk_char_constant); break; + } + + // + // Rule 16: literal ::= stringlit + // + case 16: { action.builder. + consumeExpressionLiteral(ICPPASTLiteralExpression.lk_string_literal); break; + } + + // + // Rule 17: literal ::= true + // + case 17: { action.builder. + consumeExpressionLiteral(ICPPASTLiteralExpression.lk_true); break; + } + + // + // Rule 18: literal ::= false + // + case 18: { action.builder. + consumeExpressionLiteral(ICPPASTLiteralExpression.lk_false); break; + } + + // + // Rule 19: literal ::= this + // + case 19: { action.builder. + consumeExpressionLiteral(ICPPASTLiteralExpression.lk_this); break; + } + + // + // Rule 21: primary_expression ::= ( expression ) + // + case 21: { action.builder. + consumeExpressionBracketed(); break; + } + + // + // Rule 23: id_expression ::= qualified_or_unqualified_name + // + case 23: { action.builder. + consumeExpressionName(); break; + } + + // + // Rule 30: unqualified_id_name ::= ~ class_name + // + case 30: { action.builder. + consumeDestructorName(); break; + } + + // + // Rule 31: identifier_name ::= identifier + // + case 31: { action.builder. + consumeIdentifierName(); break; + } + + // + // Rule 32: template_opt ::= template + // + case 32: { action.builder. + consumePlaceHolder(); break; + } + + // + // Rule 33: template_opt ::= $Empty + // + case 33: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 34: dcolon_opt ::= :: + // + case 34: { action.builder. + consumePlaceHolder(); break; + } + + // + // Rule 35: dcolon_opt ::= $Empty + // + case 35: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 36: qualified_id_name ::= dcolon_opt nested_name_specifier template_opt unqualified_id_name + // + case 36: { action.builder. + consumeQualifiedId(true); break; + } + + // + // Rule 37: qualified_id_name ::= :: identifier_name + // + case 37: { action.builder. + consumeGlobalQualifiedId(); break; + } + + // + // Rule 38: qualified_id_name ::= :: operator_function_id_name + // + case 38: { action.builder. + consumeGlobalQualifiedId(); break; + } + + // + // Rule 39: qualified_id_name ::= :: template_id_name + // + case 39: { action.builder. + consumeGlobalQualifiedId(); break; + } + + // + // Rule 40: nested_name_specifier ::= class_or_namespace_name :: nested_name_specifier_with_template + // + case 40: { action.builder. + consumeNestedNameSpecifier(true); break; + } + + // + // Rule 41: nested_name_specifier ::= class_or_namespace_name :: + // + case 41: { action.builder. + consumeNestedNameSpecifier(false); break; + } + + // + // Rule 42: nested_name_specifier_with_template ::= class_or_namespace_name_with_template :: nested_name_specifier_with_template + // + case 42: { action.builder. + consumeNestedNameSpecifier(true); break; + } + + // + // Rule 43: nested_name_specifier_with_template ::= class_or_namespace_name_with_template :: + // + case 43: { action.builder. + consumeNestedNameSpecifier(false); break; + } + + // + // Rule 44: class_or_namespace_name_with_template ::= template_opt class_or_namespace_name + // + case 44: { action.builder. + consumeNameWithTemplateKeyword(); break; + } + + // + // Rule 46: nested_name_specifier_opt ::= $Empty + // + case 46: { action.builder. + consumeNestedNameSpecifierEmpty(); break; + } + + // + // Rule 50: postfix_expression ::= postfix_expression [ expression ] + // + case 50: { action.builder. + consumeExpressionArraySubscript(); break; + } + + // + // Rule 51: postfix_expression ::= postfix_expression ( expression_list_opt ) + // + case 51: { action.builder. + consumeExpressionFunctionCall(); break; + } + + // + // Rule 52: postfix_expression ::= simple_type_specifier ( expression_list_opt ) + // + case 52: { action.builder. + consumeExpressionSimpleTypeConstructor(); break; + } + + // + // Rule 53: postfix_expression ::= typename dcolon_opt nested_name_specifier <empty> identifier_name ( expression_list_opt ) + // + case 53: { action.builder. + consumeExpressionTypeName(); break; + } + + // + // Rule 54: postfix_expression ::= typename dcolon_opt nested_name_specifier template_opt template_id_name ( expression_list_opt ) + // + case 54: { action.builder. + consumeExpressionTypeName(); break; + } + + // + // Rule 55: postfix_expression ::= postfix_expression . qualified_or_unqualified_name + // + case 55: { action.builder. + consumeExpressionFieldReference(false, false); break; + } + + // + // Rule 56: postfix_expression ::= postfix_expression -> qualified_or_unqualified_name + // + case 56: { action.builder. + consumeExpressionFieldReference(true, false); break; + } + + // + // Rule 57: postfix_expression ::= postfix_expression . template qualified_or_unqualified_name + // + case 57: { action.builder. + consumeExpressionFieldReference(false, true); break; + } + + // + // Rule 58: postfix_expression ::= postfix_expression -> template qualified_or_unqualified_name + // + case 58: { action.builder. + consumeExpressionFieldReference(true, true); break; + } + + // + // Rule 59: postfix_expression ::= postfix_expression . pseudo_destructor_name + // + case 59: { action.builder. + consumeExpressionFieldReference(false, false); break; + } + + // + // Rule 60: postfix_expression ::= postfix_expression -> pseudo_destructor_name + // + case 60: { action.builder. + consumeExpressionFieldReference(true, false); break; + } + + // + // Rule 61: postfix_expression ::= postfix_expression ++ + // + case 61: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixIncr); break; + } + + // + // Rule 62: postfix_expression ::= postfix_expression -- + // + case 62: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixDecr); break; + } + + // + // Rule 63: postfix_expression ::= dynamic_cast < type_id > ( expression ) + // + case 63: { action.builder. + consumeExpressionCast(ICPPASTCastExpression.op_dynamic_cast); break; + } + + // + // Rule 64: postfix_expression ::= static_cast < type_id > ( expression ) + // + case 64: { action.builder. + consumeExpressionCast(ICPPASTCastExpression.op_static_cast); break; + } + + // + // Rule 65: postfix_expression ::= reinterpret_cast < type_id > ( expression ) + // + case 65: { action.builder. + consumeExpressionCast(ICPPASTCastExpression.op_reinterpret_cast); break; + } + + // + // Rule 66: postfix_expression ::= const_cast < type_id > ( expression ) + // + case 66: { action.builder. + consumeExpressionCast(ICPPASTCastExpression.op_const_cast); break; + } + + // + // Rule 67: postfix_expression ::= typeid ( expression ) + // + case 67: { action.builder. + consumeExpressionUnaryOperator(ICPPASTUnaryExpression.op_typeid); break; + } + + // + // Rule 68: postfix_expression ::= typeid ( type_id ) + // + case 68: { action.builder. + consumeExpressionTypeId(ICPPASTTypeIdExpression.op_typeid); break; + } + + // + // Rule 69: pseudo_destructor_name ::= dcolon_opt nested_name_specifier_opt type_name :: ~ type_name + // + case 69: { action.builder. + consumePsudoDestructorName(true); break; + } + + // + // Rule 70: pseudo_destructor_name ::= dcolon_opt nested_name_specifier template template_id_name :: ~ type_name + // + case 70: { action.builder. + consumePsudoDestructorName(true); break; + } + + // + // Rule 71: pseudo_destructor_name ::= dcolon_opt nested_name_specifier_opt ~ type_name + // + case 71: { action.builder. + consumePsudoDestructorName(false); break; + } + + // + // Rule 75: unary_expression ::= ++ cast_expression + // + case 75: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixIncr); break; + } + + // + // Rule 76: unary_expression ::= -- cast_expression + // + case 76: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixDecr); break; + } + + // + // Rule 77: unary_expression ::= & cast_expression + // + case 77: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_amper); break; + } + + // + // Rule 78: unary_expression ::= * cast_expression + // + case 78: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_star); break; + } + + // + // Rule 79: unary_expression ::= + cast_expression + // + case 79: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_plus); break; + } + + // + // Rule 80: unary_expression ::= - cast_expression + // + case 80: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_minus); break; + } + + // + // Rule 81: unary_expression ::= ~ cast_expression + // + case 81: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_tilde); break; + } + + // + // Rule 82: unary_expression ::= ! cast_expression + // + case 82: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_not); break; + } + + // + // Rule 83: unary_expression ::= sizeof unary_expression + // + case 83: { action.builder. + consumeExpressionUnaryOperator(IASTUnaryExpression.op_sizeof); break; + } + + // + // Rule 84: unary_expression ::= sizeof ( type_id ) + // + case 84: { action.builder. + consumeExpressionTypeId(ICPPASTTypeIdExpression.op_sizeof); break; + } + + // + // Rule 85: new_expression ::= dcolon_opt new new_placement_opt new_type_id <openscope-ast> new_array_expressions_opt new_initializer_opt + // + case 85: { action.builder. + consumeExpressionNew(false); break; + } + + // + // Rule 86: new_expression ::= dcolon_opt new new_placement_opt ( type_id ) new_initializer_opt + // + case 86: { action.builder. + consumeExpressionNew(true); break; + } + + // + // Rule 89: new_placement_opt ::= $Empty + // + case 89: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 90: new_type_id ::= type_specifier_seq + // + case 90: { action.builder. + consumeTypeId(false); break; + } + + // + // Rule 91: new_type_id ::= type_specifier_seq new_declarator + // + case 91: { action.builder. + consumeTypeId(true); break; + } + + // + // Rule 92: new_declarator ::= <openscope-ast> new_pointer_operators + // + case 92: { action.builder. + consumeNewDeclarator(); break; + } + + // + // Rule 101: new_initializer_opt ::= $Empty + // + case 101: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 102: delete_expression ::= dcolon_opt delete cast_expression + // + case 102: { action.builder. + consumeExpressionDelete(false); break; + } + + // + // Rule 103: delete_expression ::= dcolon_opt delete [ ] cast_expression + // + case 103: { action.builder. + consumeExpressionDelete(true); break; + } + + // + // Rule 106: pm_expression ::= pm_expression .* cast_expression + // + case 106: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_pmdot); break; + } + + // + // Rule 107: pm_expression ::= pm_expression ->* cast_expression + // + case 107: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_pmarrow); break; + } + + // + // Rule 109: multiplicative_expression ::= multiplicative_expression * pm_expression + // + case 109: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_multiply); break; + } + + // + // Rule 110: multiplicative_expression ::= multiplicative_expression / pm_expression + // + case 110: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_divide); break; + } + + // + // Rule 111: multiplicative_expression ::= multiplicative_expression % pm_expression + // + case 111: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_modulo); break; + } + + // + // Rule 113: additive_expression ::= additive_expression + multiplicative_expression + // + case 113: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_plus); break; + } + + // + // Rule 114: additive_expression ::= additive_expression - multiplicative_expression + // + case 114: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_minus); break; + } + + // + // Rule 116: shift_expression ::= shift_expression << additive_expression + // + case 116: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftLeft); break; + } + + // + // Rule 117: shift_expression ::= shift_expression >> additive_expression + // + case 117: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftRight); break; + } + + // + // Rule 119: relational_expression ::= relational_expression < shift_expression + // + case 119: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessThan); break; + } + + // + // Rule 120: relational_expression ::= relational_expression > shift_expression + // + case 120: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterThan); break; + } + + // + // Rule 121: relational_expression ::= relational_expression <= shift_expression + // + case 121: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessEqual); break; + } + + // + // Rule 122: relational_expression ::= relational_expression >= shift_expression + // + case 122: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterEqual); break; + } + + // + // Rule 124: equality_expression ::= equality_expression == relational_expression + // + case 124: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_equals); break; + } + + // + // Rule 125: equality_expression ::= equality_expression != relational_expression + // + case 125: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_notequals); break; + } + + // + // Rule 127: and_expression ::= and_expression & equality_expression + // + case 127: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAnd); break; + } + + // + // Rule 129: exclusive_or_expression ::= exclusive_or_expression ^ and_expression + // + case 129: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXor); break; + } + + // + // Rule 131: inclusive_or_expression ::= inclusive_or_expression | exclusive_or_expression + // + case 131: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOr); break; + } + + // + // Rule 133: logical_and_expression ::= logical_and_expression && inclusive_or_expression + // + case 133: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalAnd); break; + } + + // + // Rule 135: logical_or_expression ::= logical_or_expression || logical_and_expression + // + case 135: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalOr); break; + } + + // + // Rule 137: conditional_expression ::= logical_or_expression ? expression : assignment_expression + // + case 137: { action.builder. + consumeExpressionConditional(); break; + } + + // + // Rule 138: throw_expression ::= throw + // + case 138: { action.builder. + consumeExpressionThrow(false); break; + } + + // + // Rule 139: throw_expression ::= throw assignment_expression + // + case 139: { action.builder. + consumeExpressionThrow(true); break; + } + + // + // Rule 142: assignment_expression ::= logical_or_expression = assignment_expression + // + case 142: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_assign); break; + } + + // + // Rule 143: assignment_expression ::= logical_or_expression *= assignment_expression + // + case 143: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_multiplyAssign); break; + } + + // + // Rule 144: assignment_expression ::= logical_or_expression /= assignment_expression + // + case 144: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_divideAssign); break; + } + + // + // Rule 145: assignment_expression ::= logical_or_expression %= assignment_expression + // + case 145: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_moduloAssign); break; + } + + // + // Rule 146: assignment_expression ::= logical_or_expression += assignment_expression + // + case 146: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_plusAssign); break; + } + + // + // Rule 147: assignment_expression ::= logical_or_expression -= assignment_expression + // + case 147: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_minusAssign); break; + } + + // + // Rule 148: assignment_expression ::= logical_or_expression >>= assignment_expression + // + case 148: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftRightAssign); break; + } + + // + // Rule 149: assignment_expression ::= logical_or_expression <<= assignment_expression + // + case 149: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftLeftAssign); break; + } + + // + // Rule 150: assignment_expression ::= logical_or_expression &= assignment_expression + // + case 150: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAndAssign); break; + } + + // + // Rule 151: assignment_expression ::= logical_or_expression ^= assignment_expression + // + case 151: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXorAssign); break; + } + + // + // Rule 152: assignment_expression ::= logical_or_expression |= assignment_expression + // + case 152: { action.builder. + consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOrAssign); break; + } + + // + // Rule 154: expression ::= ERROR_TOKEN + // + case 154: { action.builder. + consumeExpressionProblem(); break; + } + + // + // Rule 155: expression_list ::= <openscope-ast> expression_list_actual + // + case 155: { action.builder. + consumeExpressionList(); break; + } + + // + // Rule 159: expression_list_opt ::= $Empty + // + case 159: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 161: expression_opt ::= $Empty + // + case 161: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 164: constant_expression_opt ::= $Empty + // + case 164: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 173: statement ::= ERROR_TOKEN + // + case 173: { action.builder. + consumeStatementProblem(); break; + } + + // + // Rule 174: labeled_statement ::= identifier : statement + // + case 174: { action.builder. + consumeStatementLabeled(); break; + } + + // + // Rule 175: labeled_statement ::= case constant_expression : + // + case 175: { action.builder. + consumeStatementCase(); break; + } + + // + // Rule 176: labeled_statement ::= default : + // + case 176: { action.builder. + consumeStatementDefault(); break; + } + + // + // Rule 177: expression_statement ::= expression ; + // + case 177: { action.builder. + consumeStatementExpression(); break; + } + + // + // Rule 178: expression_statement ::= ; + // + case 178: { action.builder. + consumeStatementNull(); break; + } + + // + // Rule 179: compound_statement ::= { <openscope-ast> statement_seq } + // + case 179: { action.builder. + consumeStatementCompoundStatement(true); break; + } + + // + // Rule 180: compound_statement ::= { } + // + case 180: { action.builder. + consumeStatementCompoundStatement(false); break; + } + + // + // Rule 183: selection_statement ::= if ( condition ) statement + // + case 183: { action.builder. + consumeStatementIf(false); break; + } + + // + // Rule 184: selection_statement ::= if ( condition ) statement else statement + // + case 184: { action.builder. + consumeStatementIf(true); break; + } + + // + // Rule 185: selection_statement ::= switch ( condition ) statement + // + case 185: { action.builder. + consumeStatementSwitch(); break; + } + + // + // Rule 187: condition ::= type_specifier_seq declarator = assignment_expression + // + case 187: { action.builder. + consumeConditionDeclaration(); break; + } + + // + // Rule 188: iteration_statement ::= while ( condition ) statement + // + case 188: { action.builder. + consumeStatementWhileLoop(); break; + } + + // + // Rule 189: iteration_statement ::= do statement while ( expression ) ; + // + case 189: { action.builder. + consumeStatementDoLoop(); break; + } + + // + // Rule 190: iteration_statement ::= for ( expression_opt ; expression_opt ; expression_opt ) statement + // + case 190: { action.builder. + consumeStatementForLoop(); break; + } + + // + // Rule 191: iteration_statement ::= for ( simple_declaration expression_opt ; expression_opt ) statement + // + case 191: { action.builder. + consumeStatementForLoop(); break; + } + + // + // Rule 192: jump_statement ::= break ; + // + case 192: { action.builder. + consumeStatementBreak(); break; + } + + // + // Rule 193: jump_statement ::= continue ; + // + case 193: { action.builder. + consumeStatementContinue(); break; + } + + // + // Rule 194: jump_statement ::= return expression ; + // + case 194: { action.builder. + consumeStatementReturn(true); break; + } + + // + // Rule 195: jump_statement ::= return ; + // + case 195: { action.builder. + consumeStatementReturn(false); break; + } + + // + // Rule 196: jump_statement ::= goto identifier ; + // + case 196: { action.builder. + consumeStatementGoto(); break; + } + + // + // Rule 197: declaration_statement ::= block_declaration + // + case 197: { action.builder. + consumeStatementDeclaration(); break; + } + + // + // Rule 214: simple_declaration ::= declaration_specifiers_opt <openscope-ast> init_declarator_list_opt ; + // + case 214: { action.builder. + consumeDeclarationSimple(true); break; + } + + // + // Rule 215: declaration_specifiers ::= <openscope-ast> simple_declaration_specifiers + // + case 215: { action.builder. + consumeDeclarationSpecifiersSimple(); break; + } + + // + // Rule 216: declaration_specifiers ::= <openscope-ast> class_declaration_specifiers + // + case 216: { action.builder. + consumeDeclarationSpecifiersComposite(); break; + } + + // + // Rule 217: declaration_specifiers ::= <openscope-ast> elaborated_declaration_specifiers + // + case 217: { action.builder. + consumeDeclarationSpecifiersComposite(); break; + } + + // + // Rule 218: declaration_specifiers ::= <openscope-ast> enum_declaration_specifiers + // + case 218: { action.builder. + consumeDeclarationSpecifiersComposite(); break; + } + + // + // Rule 219: declaration_specifiers ::= <openscope-ast> type_name_declaration_specifiers + // + case 219: { action.builder. + consumeDeclarationSpecifiersTypeName(); break; + } + + // + // Rule 221: declaration_specifiers_opt ::= $Empty + // + case 221: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 225: no_type_declaration_specifier ::= friend + // + case 225: { action.builder. + consumeDeclSpecToken(); break; + } + + // + // Rule 226: no_type_declaration_specifier ::= typedef + // + case 226: { action.builder. + consumeDeclSpecToken(); break; + } + + // + // Rule 254: simple_type_specifier ::= simple_type_specifier_token + // + case 254: { action.builder. + consumeDeclSpecToken(); break; + } + + // + // Rule 270: type_name_specifier ::= dcolon_opt nested_name_specifier_opt type_name + // + case 270: { action.builder. + consumeQualifiedId(false); break; + } + + // + // Rule 271: type_name_specifier ::= dcolon_opt nested_name_specifier template template_id_name + // + case 271: { action.builder. + consumeQualifiedId(false); break; + } + + // + // Rule 272: type_name_specifier ::= typename dcolon_opt nested_name_specifier identifier_name + // + case 272: { action.builder. + consumeQualifiedId(false); break; + } + + // + // Rule 273: type_name_specifier ::= typename dcolon_opt nested_name_specifier template_opt template_id_name + // + case 273: { action.builder. + consumeQualifiedId(true); break; + } + + // + // Rule 274: elaborated_type_specifier ::= class_keyword dcolon_opt nested_name_specifier_opt identifier_name + // + case 274: { action.builder. + consumeTypeSpecifierElaborated(false); break; + } + + // + // Rule 275: elaborated_type_specifier ::= class_keyword dcolon_opt nested_name_specifier_opt template_opt template_id_name + // + case 275: { action.builder. + consumeTypeSpecifierElaborated(true); break; + } + + // + // Rule 276: elaborated_type_specifier ::= enum dcolon_opt nested_name_specifier_opt identifier_name + // + case 276: { action.builder. + consumeTypeSpecifierElaborated(false); break; + } + + // + // Rule 278: enum_specifier ::= enum { <openscope-ast> enumerator_list_opt } + // + case 278: { action.builder. + consumeTypeSpecifierEnumeration(false); break; + } + + // + // Rule 279: enum_specifier ::= enum identifier { <openscope-ast> enumerator_list_opt } + // + case 279: { action.builder. + consumeTypeSpecifierEnumeration(true); break; + } + + // + // Rule 284: enumerator_definition ::= enumerator + // + case 284: { action.builder. + consumeEnumerator(false); break; + } + + // + // Rule 285: enumerator_definition ::= enumerator = constant_expression + // + case 285: { action.builder. + consumeEnumerator(true); break; + } + + // + // Rule 294: original_namespace_definition ::= namespace identifier_name { <openscope-ast> declaration_seq_opt } + // + case 294: { action.builder. + consumeNamespaceDefinition(true); break; + } + + // + // Rule 295: extension_namespace_definition ::= namespace original_namespace_name { <openscope-ast> declaration_seq_opt } + // + case 295: { action.builder. + consumeNamespaceDefinition(true); break; + } + + // + // Rule 296: unnamed_namespace_definition ::= namespace { <openscope-ast> declaration_seq_opt } + // + case 296: { action.builder. + consumeNamespaceDefinition(false); break; + } + + // + // Rule 298: namespace_alias_definition ::= namespace identifier = dcolon_opt nested_name_specifier_opt namespace_name ; + // + case 298: { action.builder. + consumeNamespaceAliasDefinition(); break; + } + + // + // Rule 299: using_declaration ::= using typename_opt dcolon_opt nested_name_specifier_opt unqualified_id_name ; + // + case 299: { action.builder. + consumeUsingDeclaration(); break; + } + + // + // Rule 300: typename_opt ::= typename + // + case 300: { action.builder. + consumePlaceHolder(); break; + } + + // + // Rule 301: typename_opt ::= $Empty + // + case 301: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 302: using_directive ::= using namespace dcolon_opt nested_name_specifier_opt namespace_name ; + // + case 302: { action.builder. + consumeUsingDirective(); break; + } + + // + // Rule 303: asm_definition ::= asm ( stringlit ) ; + // + case 303: { action.builder. + consumeDeclarationASM(); break; + } + + // + // Rule 304: linkage_specification ::= extern stringlit { <openscope-ast> declaration_seq_opt } + // + case 304: { action.builder. + consumeLinkageSpecification(); break; + } + + // + // Rule 305: linkage_specification ::= extern stringlit <openscope-ast> declaration + // + case 305: { action.builder. + consumeLinkageSpecification(); break; + } + + // + // Rule 311: init_declarator ::= declarator initializer + // + case 311: { action.builder. + consumeDeclaratorWithInitializer(true); break; + } + + // + // Rule 313: declarator ::= <openscope-ast> ptr_operator_seq direct_declarator + // + case 313: { action.builder. + consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 317: basic_direct_declarator ::= declarator_id_name + // + case 317: { action.builder. + consumeDirectDeclaratorIdentifier(); break; + } + + // + // Rule 318: basic_direct_declarator ::= ( declarator ) + // + case 318: { action.builder. + consumeDirectDeclaratorBracketed(); break; + } + + // + // Rule 319: function_direct_declarator ::= basic_direct_declarator ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt + // + case 319: { action.builder. + consumeDirectDeclaratorFunctionDeclarator(true); break; + } + + // + // Rule 320: array_direct_declarator ::= array_direct_declarator array_modifier + // + case 320: { action.builder. + consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 321: array_direct_declarator ::= basic_direct_declarator array_modifier + // + case 321: { action.builder. + consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 322: array_modifier ::= [ constant_expression ] + // + case 322: { action.builder. + consumeDirectDeclaratorArrayModifier(true); break; + } + + // + // Rule 323: array_modifier ::= [ ] + // + case 323: { action.builder. + consumeDirectDeclaratorArrayModifier(false); break; + } + + // + // Rule 324: ptr_operator ::= * <openscope-ast> cv_qualifier_seq_opt + // + case 324: { action.builder. + consumePointer(); break; + } + + // + // Rule 325: ptr_operator ::= & + // + case 325: { action.builder. + consumeReferenceOperator(); break; + } + + // + // Rule 326: ptr_operator ::= dcolon_opt nested_name_specifier * <openscope-ast> cv_qualifier_seq_opt + // + case 326: { action.builder. + consumePointerToMember(); break; + } + + // + // Rule 332: cv_qualifier ::= const + // + case 332: { action.builder. + consumeDeclSpecToken(); break; + } + + // + // Rule 333: cv_qualifier ::= volatile + // + case 333: { action.builder. + consumeDeclSpecToken(); break; + } + + // + // Rule 335: declarator_id_name ::= dcolon_opt nested_name_specifier_opt type_name + // + case 335: { action.builder. + consumeQualifiedId(false); break; + } + + // + // Rule 336: type_id ::= type_specifier_seq + // + case 336: { action.builder. + consumeTypeId(false); break; + } + + // + // Rule 337: type_id ::= type_specifier_seq abstract_declarator + // + case 337: { action.builder. + consumeTypeId(true); break; + } + + // + // Rule 340: abstract_declarator ::= <openscope-ast> ptr_operator_seq + // + case 340: { action.builder. + consumeDeclaratorWithPointer(false); break; + } + + // + // Rule 341: abstract_declarator ::= <openscope-ast> ptr_operator_seq direct_abstract_declarator + // + case 341: { action.builder. + consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 345: basic_direct_abstract_declarator ::= ( abstract_declarator ) + // + case 345: { action.builder. + consumeDirectDeclaratorBracketed(); break; + } + + // + // Rule 346: array_direct_abstract_declarator ::= array_modifier + // + case 346: { action.builder. + consumeDirectDeclaratorArrayDeclarator(false); break; + } + + // + // Rule 347: array_direct_abstract_declarator ::= array_direct_abstract_declarator array_modifier + // + case 347: { action.builder. + consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 348: array_direct_abstract_declarator ::= basic_direct_abstract_declarator array_modifier + // + case 348: { action.builder. + consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 349: 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 349: { action.builder. + consumeDirectDeclaratorFunctionDeclarator(true); break; + } + + // + // Rule 350: function_direct_abstract_declarator ::= ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt + // + case 350: { action.builder. + consumeDirectDeclaratorFunctionDeclarator(false); break; + } + + // + // Rule 351: parameter_declaration_clause ::= parameter_declaration_list_opt ... + // + case 351: { action.builder. + consumePlaceHolder(); break; + } + + // + // Rule 352: parameter_declaration_clause ::= parameter_declaration_list_opt + // + case 352: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 353: parameter_declaration_clause ::= parameter_declaration_list , ... + // + case 353: { action.builder. + consumePlaceHolder(); break; + } + + // + // Rule 359: abstract_declarator_opt ::= $Empty + // + case 359: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 360: parameter_declaration ::= declaration_specifiers parameter_init_declarator + // + case 360: { action.builder. + consumeParameterDeclaration(); break; + } + + // + // Rule 361: parameter_declaration ::= declaration_specifiers + // + case 361: { action.builder. + consumeParameterDeclarationWithoutDeclarator(); break; + } + + // + // Rule 363: parameter_init_declarator ::= declarator = parameter_initializer + // + case 363: { action.builder. + consumeDeclaratorWithInitializer(true); break; + } + + // + // Rule 365: parameter_init_declarator ::= abstract_declarator = parameter_initializer + // + case 365: { action.builder. + consumeDeclaratorWithInitializer(true); break; + } + + // + // Rule 366: parameter_init_declarator ::= = parameter_initializer + // + case 366: { action.builder. + consumeDeclaratorWithInitializer(false); break; + } + + // + // Rule 367: parameter_initializer ::= assignment_expression + // + case 367: { action.builder. + consumeInitializer(); break; + } + + // + // Rule 368: function_definition ::= declaration_specifiers_opt function_direct_declarator <openscope-ast> ctor_initializer_list_opt function_body + // + case 368: { action.builder. + consumeFunctionDefinition(false); break; + } + + // + // Rule 369: function_definition ::= declaration_specifiers_opt function_direct_declarator try <openscope-ast> ctor_initializer_list_opt function_body <openscope-ast> handler_seq + // + case 369: { action.builder. + consumeFunctionDefinition(true); break; + } + + // + // Rule 372: initializer ::= ( expression_list ) + // + case 372: { action.builder. + consumeInitializerConstructor(); break; + } + + // + // Rule 373: initializer_clause ::= assignment_expression + // + case 373: { action.builder. + consumeInitializer(); break; + } + + // + // Rule 374: initializer_clause ::= { <openscope-ast> initializer_list , } + // + case 374: { action.builder. + consumeInitializerList(); break; + } + + // + // Rule 375: initializer_clause ::= { <openscope-ast> initializer_list } + // + case 375: { action.builder. + consumeInitializerList(); break; + } + + // + // Rule 376: initializer_clause ::= { <openscope-ast> } + // + case 376: { action.builder. + consumeInitializerList(); break; + } + + // + // Rule 381: class_specifier ::= class_head { <openscope-ast> member_declaration_list_opt } + // + case 381: { action.builder. + consumeClassSpecifier(); break; + } + + // + // Rule 382: class_head ::= class_keyword identifier_name_opt <openscope-ast> base_clause_opt + // + case 382: { action.builder. + consumeClassHead(false); break; + } + + // + // Rule 383: class_head ::= class_keyword template_id_name <openscope-ast> base_clause_opt + // + case 383: { action.builder. + consumeClassHead(false); break; + } + + // + // Rule 384: class_head ::= class_keyword nested_name_specifier identifier_name <openscope-ast> base_clause_opt + // + case 384: { action.builder. + consumeClassHead(true); break; + } + + // + // Rule 385: class_head ::= class_keyword nested_name_specifier template_id_name <openscope-ast> base_clause_opt + // + case 385: { action.builder. + consumeClassHead(true); break; + } + + // + // Rule 389: identifier_name_opt ::= $Empty + // + case 389: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 393: visibility_label ::= access_specifier_keyword : + // + case 393: { action.builder. + consumeVisibilityLabel(); break; + } + + // + // Rule 394: member_declaration ::= declaration_specifiers_opt <openscope-ast> member_declarator_list ; + // + case 394: { action.builder. + consumeDeclarationSimple(true); break; + } + + // + // Rule 395: member_declaration ::= declaration_specifiers_opt ; + // + case 395: { action.builder. + consumeDeclarationSimple(false); break; + } + + // + // Rule 398: member_declaration ::= dcolon_opt nested_name_specifier template_opt unqualified_id_name ; + // + case 398: { action.builder. + consumeMemberDeclarationQualifiedId(); break; + } + + // + // Rule 409: member_declarator ::= declarator constant_initializer + // + case 409: { action.builder. + consumeMemberDeclaratorWithInitializer(); break; + } + + // + // Rule 410: member_declarator ::= bit_field_declarator : constant_expression + // + case 410: { action.builder. + consumeBitField(true); break; + } + + // + // Rule 411: member_declarator ::= : constant_expression + // + case 411: { action.builder. + consumeBitField(false); break; + } + + // + // Rule 412: bit_field_declarator ::= identifier_name + // + case 412: { action.builder. + consumeDirectDeclaratorIdentifier(); break; + } + + // + // Rule 419: base_specifier ::= dcolon_opt nested_name_specifier_opt class_name + // + case 419: { action.builder. + consumeBaseSpecifier(false); break; + } + + // + // Rule 420: base_specifier ::= virtual_opt access_specifier_keyword virtual_opt dcolon_opt nested_name_specifier_opt class_name + // + case 420: { action.builder. + consumeBaseSpecifier(true); break; + } + + // + // Rule 421: virtual_opt ::= virtual + // + case 421: { action.builder. + consumePlaceHolder(); break; + } + + // + // Rule 422: virtual_opt ::= $Empty + // + case 422: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 428: conversion_function_id_name ::= operator conversion_type_id + // + case 428: { action.builder. + consumeConversionName(); break; + } + + // + // Rule 429: conversion_type_id ::= type_specifier_seq conversion_declarator + // + case 429: { action.builder. + consumeTypeId(true); break; + } + + // + // Rule 430: conversion_type_id ::= type_specifier_seq + // + case 430: { action.builder. + consumeTypeId(false); break; + } + + // + // Rule 431: conversion_declarator ::= <openscope-ast> ptr_operator_seq + // + case 431: { action.builder. + consumeDeclaratorWithPointer(false); break; + } + + // + // Rule 437: mem_initializer ::= mem_initializer_name ( expression_list_opt ) + // + case 437: { action.builder. + consumeConstructorChainInitializer(); break; + } + + // + // Rule 438: mem_initializer_name ::= dcolon_opt nested_name_specifier_opt class_name + // + case 438: { action.builder. + consumeQualifiedId(false); break; + } + + // + // Rule 441: operator_function_id_name ::= operator_id_name < <openscope-ast> template_argument_list_opt > + // + case 441: { action.builder. + consumeTemplateId(); break; + } + + // + // Rule 442: operator_id_name ::= operator overloadable_operator + // + case 442: { action.builder. + consumeOperatorName(); break; + } + + // + // Rule 485: template_declaration ::= export_opt template < <openscope-ast> template_parameter_list > declaration + // + case 485: { action.builder. + consumeTemplateDeclaration(); break; + } + + // + // Rule 486: export_opt ::= export + // + case 486: { action.builder. + consumePlaceHolder(); break; + } + + // + // Rule 487: export_opt ::= $Empty + // + case 487: { action.builder. + consumeEmpty(); break; + } + + // + // Rule 492: type_parameter ::= class identifier_name_opt + // + case 492: { action.builder. + consumeSimpleTypeTemplateParameter(false); break; + } + + // + // Rule 493: type_parameter ::= class identifier_name_opt = type_id + // + case 493: { action.builder. + consumeSimpleTypeTemplateParameter(true); break; + } + + // + // Rule 494: type_parameter ::= typename identifier_name_opt + // + case 494: { action.builder. + consumeSimpleTypeTemplateParameter(false); break; + } + + // + // Rule 495: type_parameter ::= typename identifier_name_opt = type_id + // + case 495: { action.builder. + consumeSimpleTypeTemplateParameter(true); break; + } + + // + // Rule 496: type_parameter ::= template < <openscope-ast> template_parameter_list > class identifier_name_opt + // + case 496: { action.builder. + consumeTemplatedTypeTemplateParameter(false); break; + } + + // + // Rule 497: type_parameter ::= template < <openscope-ast> template_parameter_list > class identifier_name_opt = id_expression + // + case 497: { action.builder. + consumeTemplatedTypeTemplateParameter(true); break; + } + + // + // Rule 498: template_id_name ::= template_identifier < <openscope-ast> template_argument_list_opt > + // + case 498: { action.builder. + consumeTemplateId(); break; + } + + // + // Rule 507: explicit_instantiation ::= template declaration + // + case 507: { action.builder. + consumeTemplateExplicitInstantiation(); break; + } + + // + // Rule 508: explicit_specialization ::= template < > declaration + // + case 508: { action.builder. + consumeTemplateExplicitSpecialization(); break; + } + + // + // Rule 509: try_block ::= try compound_statement <openscope-ast> handler_seq + // + case 509: { action.builder. + consumeStatementTryBlock(); break; + } + + // + // Rule 512: handler ::= catch ( exception_declaration ) compound_statement + // + case 512: { action.builder. + consumeStatementCatchHandler(false); break; + } + + // + // Rule 513: handler ::= catch ( ... ) compound_statement + // + case 513: { action.builder. + consumeStatementCatchHandler(true); break; + } + + // + // Rule 514: exception_declaration ::= type_specifier_seq <openscope-ast> declarator + // + case 514: { action.builder. + consumeDeclarationSimple(true); break; + } + + // + // Rule 515: exception_declaration ::= type_specifier_seq <openscope-ast> abstract_declarator + // + case 515: { action.builder. + consumeDeclarationSimple(true); break; + } + + // + // Rule 516: exception_declaration ::= type_specifier_seq + // + case 516: { action.builder. + consumeDeclarationSimple(false); break; + } + + // + // Rule 524: no_cast_start ::= ERROR_TOKEN + // + case 524: { action.builder. + consumeExpressionProblem(); break; + } + + + default: + break; + } + return; + } +} + diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParserprs.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParserprs.java new file mode 100644 index 00000000000..b991fa2f0b8 --- /dev/null +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParserprs.java @@ -0,0 +1,2700 @@ +/******************************************************************************* +* Copyright (c) 2006, 2008 IBM Corporation and others. +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl_v10.html +* +* Contributors: +* IBM Corporation - initial API and implementation +*********************************************************************************/ + +// This file was generated by LPG + +package org.eclipse.cdt.internal.core.dom.lrparser.cpp; + +public class CPPNoCastExpressionParserprs implements lpg.lpgjavaruntime.ParseTable, CPPNoCastExpressionParsersym { + + public interface IsKeyword { + public final static byte isKeyword[] = {0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0 + }; + }; + public final static byte isKeyword[] = IsKeyword.isKeyword; + public final boolean isKeyword(int index) { return isKeyword[index] != 0; } + + public interface BaseCheck { + public final static short baseCheck[] = {0, + 0,0,0,0,0,1,1,1,1,1, + 0,1,1,1,1,1,1,1,1,1, + 3,1,1,1,1,1,1,1,1,2, + 1,1,0,1,0,4,2,2,2,3, + 2,3,2,2,1,0,1,1,1,4, + 4,4,8,8,3,3,4,4,3,3, + 2,2,7,7,7,7,4,4,6,7, + 4,1,1,1,2,2,2,2,2,2, + 2,2,2,4,7,7,3,1,0,1, + 2,2,1,2,3,4,1,0,3,1, + 0,3,5,1,1,3,3,1,3,3, + 3,1,3,3,1,3,3,1,3,3, + 3,3,1,3,3,1,3,1,3,1, + 3,1,3,1,3,1,5,1,2,1, + 1,3,3,3,3,3,3,3,3,3, + 3,3,1,1,2,1,3,1,0,1, + 0,1,1,0,1,1,1,1,1,1, + 1,1,1,3,3,2,2,1,4,2, + 1,2,5,7,5,1,4,5,7,9, + 8,2,2,3,2,3,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 2,1,0,4,2,2,2,2,2,1, + 0,1,1,1,1,1,1,2,1,2, + 2,2,1,2,2,1,2,2,1,2, + 2,1,2,2,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,3, + 4,4,5,4,5,4,1,5,6,1, + 3,1,0,1,3,1,1,1,1,1, + 1,1,1,6,6,5,1,7,6,1, + 0,6,5,6,4,1,3,1,0,1, + 2,1,3,1,1,1,1,3,9,2, + 2,3,2,3,1,5,1,2,2,1, + 0,1,1,1,3,1,2,1,1,2, + 3,1,1,1,3,1,2,2,9,8, + 2,1,3,1,3,1,0,1,0,2, + 1,1,3,1,3,2,1,5,8,1, + 2,3,1,5,4,3,1,3,1,1, + 5,4,4,5,5,1,0,1,0,1, + 1,1,2,4,2,2,1,5,1,1, + 1,1,2,1,0,1,3,1,2,3, + 2,1,2,2,1,0,1,3,3,6, + 1,0,1,1,1,1,0,2,2,1, + 2,2,1,0,1,3,4,3,1,1, + 5,2,1,1,3,3,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,2,2,7,1,0,1,3,1, + 1,2,4,2,4,7,9,5,1,1, + 3,1,0,1,1,1,2,4,4,1, + 2,5,5,3,3,1,4,3,1,0, + 1,3,1,1,-107,0,0,0,-303,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-11,0,0, + 0,0,0,0,0,0,0,0,-50,0, + 0,0,0,-2,0,0,-134,0,0,0, + -4,-54,0,0,0,0,-5,-79,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -6,0,0,0,0,0,-235,-324,0,0, + 0,0,0,0,0,0,0,0,0,0, + -22,0,0,0,-7,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-183,0,0, + 0,0,0,-137,0,0,0,0,0,0, + 0,0,0,0,0,-256,0,0,0,0, + 0,0,0,-114,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-8,0,0,-222,0,0,-366,0,0, + 0,0,-9,0,0,-10,-236,-347,0,0, + 0,0,0,0,0,0,0,0,-53,0, + -130,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-447,0, + 0,0,0,0,-198,0,0,0,0,0, + 0,0,-175,0,-192,0,0,0,0,0, + 0,0,-76,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -220,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-165,0,0,0,-51,-57, + 0,0,0,0,0,-61,0,-362,0,0, + -335,0,0,0,-307,0,0,-505,0,0, + 0,-59,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -12,0,0,0,0,0,0,0,0,0, + 0,-122,0,0,0,0,0,0,0,-68, + 0,0,0,0,0,0,0,0,0,0, + 0,-174,-166,0,0,-349,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-515, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-58,0,0,0,0,-13,0,0, + 0,0,0,-15,0,0,0,-363,0,0, + 0,-227,0,-16,0,0,0,0,0,0, + 0,0,0,0,0,-29,-255,-3,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-181,0,0,0,0,0,0,0,-17, + 0,0,0,-30,0,0,0,0,0,-69, + 0,0,0,0,0,0,0,0,0,0, + 0,-428,-281,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-31,0,0,0,0, + 0,0,0,-336,0,0,-32,0,0,0, + 0,0,0,0,-128,-314,0,0,0,-104, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-62,0,0,-33,0,0,0, + 0,0,0,0,-133,0,0,-129,0,-315, + 0,0,0,-34,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -131,0,0,0,0,0,0,0,0,0, + 0,-142,-467,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-115,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -105,0,0,0,-334,-207,-40,0,0,0, + -113,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-332,0,0, + 0,0,0,0,0,0,0,0,-261,0, + -42,0,0,0,-352,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-126,0,0,0,0,0,0, + 0,-136,0,0,0,0,0,0,0,0, + 0,0,-91,0,0,0,-35,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -36,0,0,-258,0,0,-37,0,0,0, + -391,0,0,0,-92,0,0,0,-38,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-168,0, + 0,0,0,0,0,0,-93,0,0,0, + -141,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-39,0,0,0,0,0, + -41,0,0,0,0,0,0,0,-94,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-297,0,0,0,0,0,0,0,-199, + 0,0,-182,0,0,0,0,-209,0,0, + -95,0,0,0,-55,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-310,0, + 0,0,0,0,-184,0,0,0,0,-234, + 0,0,-96,0,0,0,-56,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-63,0,0,0,0, + -339,0,0,0,0,0,-186,0,0,0, + 0,-241,0,0,-97,0,0,0,-64,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-66,0,0,0,0,0,-189,0, + 0,0,0,-248,0,0,-98,0,0,0, + -67,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-108,0,0,0,0,0, + -197,0,0,0,0,-249,0,0,-99,0, + 0,0,-109,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-355,0,0,0,0,0,0,0,0, + 0,0,-211,0,0,0,0,-250,0,0, + -100,0,0,0,-392,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-426,0,0,0,0,0,0, + 0,0,0,0,-224,0,0,0,0,-251, + 0,0,-101,0,0,0,-284,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-204,0,0,0,0, + -110,0,0,0,0,0,-225,0,0,0, + 0,-111,0,0,-163,0,0,0,-118,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-353,0,0, + 0,0,-112,0,0,0,0,0,-229,0, + 0,0,0,-125,-205,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-162,0,0, + 0,0,0,0,0,0,0,0,-143,0, + 0,0,0,0,0,0,-327,-476,0,-138, + 0,0,0,-231,0,0,-345,-500,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-290,0, + 0,0,0,0,0,0,-144,0,0,-306, + 0,0,0,-269,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-145,0,0,0,-309,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-226,0, + 0,-146,0,0,0,-507,0,0,0,-147, + 0,0,0,0,0,0,0,-364,-233,0, + 0,0,-330,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-453,0,0,0,0, + 0,0,0,-148,0,0,0,0,0,0, + -350,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-228,0,0,0,0,-365,0, + 0,-413,0,0,-149,0,0,0,-140,0, + 0,0,-150,0,0,0,0,0,0,0, + -466,-356,0,0,0,-351,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-475, + 0,0,0,-399,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-151,0,0,0, + 0,-152,0,0,-153,0,0,-154,0,0, + 0,0,0,0,-155,-254,-156,0,0,0, + -337,0,0,0,-157,-158,-246,0,-103,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-179, + 0,0,0,0,0,0,-90,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-373,0,0,-159,0,0, + -88,0,0,0,-273,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-493,0, + 0,-274,0,-89,0,0,0,-160,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-161,0,0,0, + 0,0,0,0,-52,0,0,0,-206,0, + 0,0,0,0,-280,-401,0,0,0,-301, + 0,0,0,0,0,0,0,0,0,0, + 0,-85,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-292,-409,-285,-397,-213,-18,0,0, + -299,0,0,-240,0,0,0,0,0,0, + 0,-232,0,0,0,0,0,0,0,-167, + -497,0,0,0,-295,0,0,0,0,0, + 0,-293,0,0,0,0,0,0,0,0, + 0,0,0,0,-305,0,0,0,0,0, + 0,-170,0,0,0,0,0,0,-247,0, + 0,0,0,0,-171,0,0,0,0,0, + 0,0,0,0,0,0,-410,0,0,0, + 0,0,0,-86,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-87,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-318,0,0,0,0,-80, + 0,0,0,-172,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-173,0,0,0,-81,0,0,0, + -264,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-176, + 0,0,0,-82,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-437,0,0,0, + -243,0,0,0,0,0,0,0,0,0, + 0,0,-83,0,0,0,-177,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-20,0, + 0,0,-319,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-396,-338,0,0,-178,0,0,0, + -135,-382,0,0,0,-316,0,-354,0,0, + -187,0,0,-287,0,0,0,0,0,0, + 0,0,0,0,0,-188,-438,0,0,0, + 0,0,0,-84,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-193,0,0,-120, + 0,0,0,0,0,0,-194,-200,-203,0, + 0,0,0,0,0,-450,-446,-208,-487,0, + 0,0,0,-218,-263,-219,-265,-117,0,0, + 0,-322,-221,-325,0,0,-434,0,0,0, + 0,0,0,0,0,-333,0,0,0,0, + 0,0,0,0,0,0,-358,-119,-341,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-359,0,-470,0,0,0,0,-442,-465, + 0,0,0,0,0,0,0,0,0,0, + 0,-239,-357,-488,0,0,0,0,0,0, + 0,0,0,-242,0,0,0,0,-244,0, + 0,0,0,-259,0,-201,0,0,0,0, + 0,0,0,0,0,0,0,0,-260,0, + 0,0,0,0,0,0,-384,0,0,0, + 0,0,0,-472,0,0,0,0,-270,0, + 0,0,0,0,-271,0,-415,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-275,-127,0,0,0,-278,-372,-279, + 0,0,0,-238,0,0,0,0,0,0, + 0,0,-282,0,0,0,0,0,-44,-283, + -277,-461,0,0,0,0,-376,-473,0,0, + 0,0,0,0,0,0,0,0,0,-45, + 0,0,-416,0,-296,0,0,0,0,0, + 0,0,0,0,0,0,-139,0,0,0, + 0,-464,0,-300,-106,-379,-432,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-245,0,0,-302,0,0,0,0, + 0,0,0,0,0,0,-312,0,0,0, + 0,0,-411,0,0,0,0,-449,-323,0, + 0,0,0,0,0,0,0,0,0,0, + -499,0,0,0,0,0,0,0,0,0, + 0,0,-457,0,-329,0,0,-74,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-331,-49,-360, + -460,0,0,-267,0,0,0,0,0,0, + 0,0,-417,0,-361,-288,0,0,0,0, + 0,-418,0,0,0,0,0,-367,0,-456, + -369,0,-371,0,-321,0,0,0,0,0, + 0,0,0,0,0,0,0,-377,0,0, + 0,0,0,-75,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-380,0,0,0, + 0,-262,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-378,-491,0,0, + 0,0,0,0,0,-459,0,-272,-70,0, + 0,-387,0,-164,0,0,-390,0,0,-422, + 0,-289,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-398,-400,0, + 0,0,0,-291,0,0,0,0,0,0, + 0,0,0,0,0,-77,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-78,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-237,-440,-375,-444,-451,0,0,0,0, + 0,0,0,0,0,-452,-463,0,0,0, + 0,-469,-21,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-477,-478,-402,-403,-404,0, + 0,0,0,0,0,0,0,0,-388,-498, + 0,-479,0,-230,0,0,-381,0,0,0, + -116,0,-406,0,-169,0,0,0,0,0, + -342,0,0,0,0,0,0,0,0,0, + -407,-412,0,0,0,0,-414,-43,-1,-492, + -483,0,0,0,0,0,0,-419,0,0, + 0,0,0,-421,0,-494,0,0,0,0, + 0,0,-489,0,0,0,0,0,0,-405, + -252,-294,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-423,0,0,0,0, + 0,-424,0,0,0,-346,0,0,0,0, + -504,0,-132,0,0,0,0,0,0,-253, + -431,-425,-427,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-429, + 0,0,0,0,0,-490,-430,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -443,0,0,0,0,-509,0,-435,0,-512, + 0,0,0,0,0,0,-439,-503,0,0, + 0,-506,0,0,-385,0,0,-448,0,-455, + -511,0,0,0,0,0,0,0,0,0, + -210,0,-462,-481,0,0,0,0,0,-495, + 0,0,0,0,0,-445,0,0,0,0, + 0,0,-313,0,-14,0,0,-496,0,0, + 0,0,-501,0,0,-46,0,0,0,0, + 0,-514,0,0,0,0,0,0,0,0, + 0,0,0,-374,-268,-320,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -471,0,0,0,0,0,0,-121,0,0, + 0,0,0,0,0,0,-185,0,0,0, + -47,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-480,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-482,-328,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-19,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-486,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-344,-508,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -48,0,0,0,0,-308,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-513,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-516,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-180,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-23,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-24,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-25, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-26,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-27,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-28,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-60,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-72, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-73,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-124,0,0,0,0,0,0, + -386,0,0,0,0,0,0,0,-298,0, + 0,0,0,0,0,0,0,0,0,0, + -195,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-408,0,0,0,0,0, + 0,0,0,0,-196,0,0,0,0,-123, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -420,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-190,0,0, + 0,0,-348,0,0,0,0,0,0,0, + 0,0,0,0,-468,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-484,-383, + -71,0,0,0,0,0,-311,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-266,0,0,0,0,0, + -191,0,0,0,0,0,-458,0,0,0, + 0,0,0,0,0,0,0,0,-389,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-102,0,-223,0,0,0, + 0,0,0,0,0,0,0,0,0,-286, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-394,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-304,0,0, + 0,0,0,0,0,0,0,0,-214,0, + 0,0,0,0,-326,0,0,0,-317,0, + 0,0,-215,0,0,-216,0,0,0,0, + 0,-343,0,0,0,0,0,0,0,0, + 0,0,0,-217,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-368,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-370,0,0,0,0,0,0, + 0,-502,0,0,0,0,0,0,0,0, + -454,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-474,0,0,0,-393,0,0,0, + 0,0,0,0,0,0,0,0,0,-202, + 0,0,0,-340,0,0,0,0,0,0, + 0,0,0,0,-212,0,0,0,0,0, + -257,0,0,0,0,0,0,0,0,0, + 0,0,-65,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-433,-436, + -395,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-510,0,0,0,0,0, + -441,0,0,0,0,-276,0,0,0,0, + 0,0,-485,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0 + }; + }; + public final static short baseCheck[] = BaseCheck.baseCheck; + public final int baseCheck(int index) { return baseCheck[index]; } + public final static short rhs[] = baseCheck; + public final int rhs(int index) { return rhs[index]; }; + + public interface BaseAction { + public final static char baseAction[] = { + 169,4,192,193,194,135,79,34,62,39, + 195,195,15,15,15,15,15,15,15,15, + 16,16,16,14,10,10,8,8,8,8, + 8,1,63,63,5,5,11,11,11,11, + 47,47,136,136,137,58,58,45,45,17, + 17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,138, + 138,138,18,18,18,18,18,18,18,18, + 18,18,18,18,18,19,19,173,170,170, + 171,171,174,140,140,175,175,172,172,141, + 139,139,20,20,21,22,22,22,24,24, + 24,24,25,25,25,26,26,26,27,27, + 27,27,27,29,29,29,30,30,32,32, + 33,33,35,35,36,36,37,37,41,41, + 40,40,40,40,40,40,40,40,40,40, + 40,40,40,38,38,28,142,142,102,102, + 106,106,97,196,196,71,71,71,71,71, + 71,71,71,71,72,72,72,73,73,55, + 55,176,176,74,74,74,117,117,75,75, + 75,75,76,76,76,76,76,77,82,82, + 82,82,82,82,82,51,51,51,51,51, + 108,108,109,109,50,23,23,23,23,23, + 46,46,93,93,93,93,93,148,148,143, + 143,143,143,144,144,144,145,145,145,146, + 146,146,147,147,147,94,94,94,94,94, + 95,95,95,87,12,13,13,13,13,13, + 13,13,13,13,13,13,80,80,80,121, + 121,121,121,121,119,119,119,88,120,120, + 150,150,149,149,123,123,124,43,43,42, + 86,86,89,89,91,92,90,44,53,48, + 151,151,54,52,85,85,178,178,177,177, + 152,152,81,81,67,67,67,59,59,60, + 68,68,69,69,64,64,64,103,103,105, + 104,104,57,57,61,61,56,56,49,107, + 107,107,98,98,98,99,100,100,100,101, + 101,110,110,110,112,112,111,111,197,197, + 96,96,180,180,180,180,180,126,65,65, + 154,179,179,127,127,127,127,181,181,31, + 31,118,128,128,128,128,198,198,113,113, + 122,122,122,156,157,157,157,157,157,157, + 157,157,184,184,182,182,183,183,158,158, + 158,158,159,185,115,114,114,186,186,160, + 160,130,130,129,129,129,199,199,9,187, + 187,188,161,153,153,162,162,163,164,164, + 6,6,7,166,166,166,166,166,166,166, + 166,166,166,166,166,166,166,166,166,166, + 166,166,166,166,166,166,166,166,166,166, + 166,166,166,166,166,166,166,166,166,166, + 166,166,166,166,166,66,70,70,167,167, + 131,131,132,132,132,132,132,132,2,3, + 168,168,165,165,133,133,133,83,84,78, + 155,155,116,116,189,189,189,134,134,125, + 125,190,190,169,169,1385,1621,1603,968,1308, + 3375,27,974,24,28,23,25,2420,254,22, + 20,49,996,104,73,74,105,1044,499,1097, + 1086,1154,1137,3831,1351,1327,266,1369,1357,46, + 1435,1441,140,674,304,156,141,2709,26,29, + 968,476,2740,27,974,36,28,64,3211,26, + 29,968,224,3749,27,974,24,28,23,25, + 891,254,22,20,49,996,104,73,74,105, + 1044,146,1097,1086,2044,269,483,3291,2709,26, + 29,968,268,267,27,974,1877,28,227,222, + 223,3211,1621,1603,968,157,3749,27,974,24, + 28,23,25,891,254,22,20,49,996,104, + 73,74,81,233,236,239,242,2750,1311,1777, + 1735,968,30,1789,1957,26,29,968,1094,4640, + 27,974,24,28,58,25,1173,577,3371,2778, + 2808,3628,4240,4174,2146,26,29,968,2335,3749, + 27,974,24,28,2637,25,891,254,22,20, + 49,996,104,73,74,105,1044,338,1097,1086, + 1154,1137,673,1351,1327,879,1369,1357,1444,1435, + 1441,140,3177,838,504,141,1313,871,2709,26, + 29,968,3913,2995,27,974,2008,28,381,2605, + 505,2146,26,29,968,2335,3749,27,974,24, + 28,2637,25,891,254,22,20,49,996,104, + 73,74,105,1044,338,1097,1086,1154,1137,1172, + 1351,1327,997,1369,1357,1626,1435,1441,140,717, + 180,504,141,2721,2776,2853,379,380,968,2302, + 2995,2951,2923,3211,26,29,968,505,3749,27, + 974,24,28,23,25,891,254,22,20,49, + 996,104,73,74,105,1954,266,500,484,324, + 330,2522,26,29,968,2335,3749,27,974,24, + 28,2637,25,891,254,22,20,49,996,104, + 73,74,105,1044,338,1097,1086,1154,1137,2590, + 1351,1327,2687,1369,1357,2804,1435,1441,140,918, + 46,504,141,1216,731,270,845,92,2950,388, + 2995,2824,268,267,500,2948,4488,505,2564,26, + 29,968,2740,3749,27,974,24,28,23,25, + 891,254,22,20,49,996,104,73,74,105, + 1044,748,1097,1086,1154,1137,2757,1351,1327,2687, + 1369,1357,843,1435,1441,140,21,4298,373,141, + 2691,26,29,968,347,2987,27,974,24,28, + 56,25,2477,1888,2774,968,891,26,29,968, + 376,4522,27,974,24,28,334,25,311,91, + 2636,26,29,968,501,3749,27,974,24,28, + 23,25,891,254,22,20,49,996,104,73, + 74,105,1044,2788,1097,1086,1154,1137,1381,1351, + 1327,3148,1369,1357,1518,1435,1441,140,2950,388, + 373,141,2297,274,1575,2395,315,317,281,2899, + 328,529,348,313,1747,377,2700,879,2958,26, + 29,968,374,3749,27,974,24,28,23,25, + 891,254,22,20,49,996,104,73,74,105, + 1044,418,1097,1086,1154,1137,3463,1351,1327,88, + 1369,1357,46,1435,1441,140,705,429,156,141, + 1862,37,39,968,62,3104,38,974,60,3520, + 3314,26,29,968,997,2987,27,974,24,28, + 55,25,3052,2958,26,29,968,378,3749,27, + 974,24,28,23,25,891,254,22,20,49, + 996,104,73,74,105,1044,234,1097,1086,1154, + 1137,3197,1351,1327,3450,1369,1357,69,1435,1441, + 140,329,330,367,141,2605,2958,26,29,968, + 2740,3749,27,974,24,28,23,25,891,254, + 22,20,49,996,104,73,74,105,1044,442, + 1097,1086,1154,1137,1607,1351,1327,2742,1369,1357, + 577,1435,1441,140,68,46,367,141,2605,998, + 2958,26,29,968,327,3749,27,974,24,28, + 23,25,891,254,22,20,49,996,104,73, + 74,105,1044,1480,1097,1086,1154,1137,511,1351, + 1327,2605,1369,1357,446,1435,1441,140,59,366, + 367,141,2605,2900,26,29,968,567,3749,27, + 974,24,28,23,25,891,254,22,20,49, + 996,104,73,74,105,1044,871,1097,1086,1154, + 1137,3913,1351,1327,1682,1369,1357,445,1435,1441, + 140,2740,365,373,141,3440,2605,2480,26,29, + 968,2740,3749,27,974,24,28,23,25,891, + 254,22,20,49,996,104,73,74,105,1044, + 4201,1097,1086,1154,1137,67,1351,1327,3439,1369, + 1357,50,1435,1441,140,52,363,139,141,318, + 327,2958,26,29,968,3440,3749,27,974,24, + 28,23,25,891,254,22,20,49,996,104, + 73,74,105,1044,499,1097,1086,1154,1137,4391, + 1351,1327,2740,1369,1357,322,1435,1441,140,2230, + 371,157,141,2958,26,29,968,1459,3749,27, + 974,24,28,23,25,891,254,22,20,49, + 996,104,73,74,105,1044,84,1097,1086,1154, + 1137,320,1351,1327,2696,1369,1357,1536,1435,1441, + 140,1456,3452,152,141,2958,26,29,968,1429, + 3749,27,974,24,28,23,25,891,254,22, + 20,49,996,104,73,74,105,1044,1808,1097, + 1086,1154,1137,396,1351,1327,433,1369,1357,499, + 1435,1441,140,3446,4655,151,141,2958,26,29, + 968,2740,3749,27,974,24,28,23,25,891, + 254,22,20,49,996,104,73,74,105,1044, + 1472,1097,1086,1154,1137,939,1351,1327,2079,1369, + 1357,1378,1435,1441,140,51,433,150,141,2958, + 26,29,968,409,3749,27,974,24,28,23, + 25,891,254,22,20,49,996,104,73,74, + 105,1044,499,1097,1086,1154,1137,4505,1351,1327, + 2740,1369,1357,46,1435,1441,140,4427,2740,149, + 141,2958,26,29,968,1583,3749,27,974,24, + 28,23,25,891,254,22,20,49,996,104, + 73,74,105,1044,87,1097,1086,1154,1137,2605, + 1351,1327,345,1369,1357,46,1435,1441,140,1989, + 2740,148,141,2958,26,29,968,2698,3749,27, + 974,24,28,23,25,891,254,22,20,49, + 996,104,73,74,105,1044,1223,1097,1086,1154, + 1137,2605,1351,1327,2275,1369,1357,1291,1435,1441, + 140,2074,2740,147,141,2958,26,29,968,329, + 3749,27,974,24,28,23,25,891,254,22, + 20,49,996,104,73,74,105,1044,95,1097, + 1086,1154,1137,1453,1351,1327,2345,1369,1357,46, + 1435,1441,140,3364,2740,146,141,2958,26,29, + 968,1569,3749,27,974,24,28,23,25,891, + 254,22,20,49,996,104,73,74,105,1044, + 96,1097,1086,1154,1137,1243,1351,1327,66,1369, + 1357,46,1435,1441,140,607,2740,145,141,2958, + 26,29,968,2190,3749,27,974,24,28,23, + 25,891,254,22,20,49,996,104,73,74, + 105,1044,499,1097,1086,1154,1137,4574,1351,1327, + 65,1369,1357,46,1435,1441,140,3013,2740,144, + 141,2958,26,29,968,1587,3749,27,974,24, + 28,23,25,891,254,22,20,49,996,104, + 73,74,105,1044,499,1097,1086,1154,1137,4591, + 1351,1327,64,1369,1357,46,1435,1441,140,2571, + 2740,143,141,2958,26,29,968,3373,3749,27, + 974,24,28,23,25,891,254,22,20,49, + 996,104,73,74,105,1044,2807,1097,1086,1154, + 1137,2743,1351,1327,63,1369,1357,46,1435,1441, + 140,2777,2802,142,141,3058,26,29,968,1818, + 3749,27,974,24,28,23,25,891,254,22, + 20,49,996,104,73,74,105,1044,3445,1097, + 1086,1154,1137,1448,1351,1327,320,1369,1357,46, + 1435,2768,162,3605,861,2958,26,29,968,567, + 3749,27,974,24,28,23,25,891,254,22, + 20,49,996,104,73,74,105,1044,871,1097, + 1086,1154,1137,3913,1351,1327,1472,1369,1357,155, + 1435,1441,140,370,323,137,141,1582,2950,388, + 1311,379,380,968,2721,276,922,3409,3097,26, + 29,968,1236,3749,27,974,24,28,23,25, + 891,254,22,20,49,996,104,73,74,105, + 1044,30,1097,1086,1154,1137,394,1351,1327,2740, + 1369,1357,327,1435,1441,140,398,241,187,141, + 3211,26,29,968,1173,3749,27,974,24,28, + 23,25,891,254,22,20,49,996,104,73, + 74,105,1044,2782,1097,1086,1154,1137,773,1351, + 1327,2339,1369,1357,406,1435,2768,162,3211,26, + 29,968,368,3749,27,974,24,28,23,25, + 891,254,22,20,49,996,104,73,74,105, + 1044,3578,1097,1086,1154,1137,278,1351,1327,2761, + 1369,1357,492,1435,2768,162,2623,26,29,968, + 578,4640,27,974,24,28,23,25,3409,2477, + 497,271,968,3211,26,29,968,285,3749,27, + 974,24,28,23,25,891,254,22,20,49, + 996,104,73,74,105,1044,499,1097,1086,1154, + 1137,4623,1351,1327,417,1369,1357,299,1435,2768, + 162,3211,26,29,968,1561,3749,27,974,24, + 28,23,25,891,254,22,20,49,996,104, + 73,74,105,1044,2761,1097,1086,1154,1137,3445, + 1351,1327,3445,1369,1357,501,1435,2768,162,1957, + 26,29,968,589,4640,27,974,24,28,57, + 25,46,836,382,415,998,3211,26,29,968, + 411,3749,27,974,24,28,23,25,891,254, + 22,20,49,996,104,73,74,105,1044,3423, + 1097,1086,1154,1137,370,1351,1327,3303,1369,1357, + 3148,1435,2768,162,3250,26,29,968,410,3749, + 27,974,24,28,23,25,891,254,22,20, + 49,996,104,73,74,105,1044,671,1097,1086, + 1154,1137,752,1351,1327,1511,1369,1357,848,1435, + 2768,162,287,3416,288,3329,46,3519,383,415, + 3432,1311,379,380,968,1773,1865,2769,272,3211, + 26,29,968,413,3749,27,974,24,28,23, + 25,891,254,22,20,49,996,104,73,74, + 105,1044,419,1097,1086,1154,1137,350,1351,1327, + 1491,1369,1357,2996,2327,3913,519,3211,26,29, + 968,3497,3749,27,974,24,28,23,25,891, + 254,22,20,49,996,104,73,74,105,1044, + 3244,1097,1086,1154,1137,836,1351,1327,2607,1369, + 2268,3211,26,29,968,2632,3749,27,974,24, + 28,23,25,891,254,22,20,49,996,104, + 73,74,105,1044,328,1097,1086,1154,1137,3148, + 1351,1327,2632,2195,3211,26,29,968,1376,3749, + 27,974,24,28,23,25,891,254,22,20, + 49,996,104,73,74,105,1044,1380,1097,1086, + 1154,1137,773,1351,2196,3289,379,380,968,1884, + 2924,287,3532,288,3913,46,3409,229,254,3573, + 934,26,29,968,3734,4440,27,974,24,28, + 334,25,3211,26,29,968,266,3749,27,974, + 24,28,23,25,891,254,22,20,49,996, + 104,73,74,105,1044,177,1097,1086,1154,1137, + 349,2178,224,2740,3409,2631,1,2143,2011,519, + 525,3331,998,328,2940,1235,2930,968,346,2395, + 315,317,2297,272,86,269,100,312,1747,220, + 1651,3445,268,267,153,1607,153,54,227,222, + 223,2663,2740,193,2346,178,872,341,923,845, + 344,85,3033,100,208,1173,205,197,206,207, + 209,167,1954,233,236,239,242,2750,179,2940, + 567,271,968,1789,321,1962,53,182,165,166, + 168,169,170,171,172,3208,513,3409,3371,2778, + 2808,3628,4240,4174,3211,26,29,968,608,3749, + 27,974,24,28,23,25,891,254,22,20, + 49,996,104,73,74,105,1044,279,1097,1086, + 1154,2185,3211,26,29,968,192,3749,27,974, + 24,28,23,25,891,254,22,20,49,996, + 104,73,74,105,1044,3327,1097,1086,1154,2187, + 3211,26,29,968,2189,3749,27,974,24,28, + 23,25,891,254,22,20,49,996,104,73, + 74,105,1044,2205,1097,1086,2085,3211,26,29, + 968,2761,3749,27,974,24,28,23,25,891, + 254,22,20,49,996,104,73,74,105,1044, + 2818,1097,1086,2093,3211,26,29,968,567,3749, + 27,974,24,28,23,25,891,254,22,20, + 49,996,104,73,74,105,1044,3409,1097,1086, + 2167,1876,26,29,968,3116,4440,27,974,24, + 28,334,25,3211,26,29,968,1039,3749,27, + 974,24,28,23,25,891,254,22,20,49, + 996,104,73,74,105,1044,196,1097,2172,3172, + 26,29,968,2740,3749,27,974,24,28,23, + 25,891,254,22,20,49,996,83,73,74, + 2395,315,317,3038,2740,385,415,1022,312,1747, + 346,2053,1311,379,380,968,46,318,70,439, + 3381,1359,2950,4557,1949,26,29,968,3606,4440, + 27,974,24,28,334,25,2625,3409,99,339, + 923,845,344,438,3211,26,29,968,2943,3749, + 27,974,24,28,23,25,891,254,22,20, + 49,996,104,73,74,105,1044,2816,1097,2175, + 2703,2701,1567,968,2866,3637,194,2882,2855,1036, + 379,380,968,2395,315,317,3382,3409,562,3294, + 2335,312,1747,346,2604,2749,2628,2761,834,2335, + 4661,47,46,1936,46,2663,3814,977,3456,220, + 266,525,287,48,288,1556,46,648,220,510, + 1285,360,339,923,845,344,214,3407,2677,46, + 220,1488,4409,2102,208,153,205,198,206,207, + 209,3182,46,399,1173,160,2265,40,2758,836, + 3456,199,200,3033,2335,224,2879,3101,1062,2842, + 1354,400,2869,2740,1173,2879,268,267,210,201, + 202,203,204,220,1635,290,291,292,293,3325, + 432,3128,3131,1525,2873,224,1175,379,380,968, + 567,235,222,223,3621,2824,4409,2929,208,3301, + 205,198,206,207,209,511,296,1311,379,380, + 968,384,415,2952,3472,199,200,47,2335,1430, + 2879,238,222,223,2864,3360,304,2740,287,48, + 288,44,210,201,202,203,204,220,420,290, + 291,292,293,3293,1309,379,380,968,232,46, + 2944,401,403,4181,2853,379,380,968,3621,2844, + 4409,437,208,3353,205,198,206,207,209,46, + 3357,1939,3409,2335,319,47,3913,46,3480,199, + 200,4627,2335,519,2879,266,287,48,288,1556, + 46,2747,338,1170,2335,1948,210,201,202,203, + 204,220,775,290,291,292,293,1609,379,380, + 968,4349,3038,338,2846,2758,46,1181,2995,1848, + 2683,525,3621,3198,4409,1645,208,517,205,198, + 206,207,209,1445,71,2951,3429,2335,47,2995, + 338,268,267,199,200,153,1663,404,2879,287, + 48,288,1556,46,1766,186,2621,4271,2740,2862, + 210,201,202,203,204,2759,4397,290,291,292, + 293,2193,26,29,968,3116,4440,27,974,24, + 28,334,25,2740,346,3430,3621,3400,3211,26, + 29,968,3322,3749,27,974,24,28,23,25, + 891,254,22,20,49,996,104,73,74,105, + 1044,94,1859,339,923,845,344,3692,3433,576, + 1041,1730,337,998,2477,998,275,968,510,354, + 2395,315,317,46,3063,3443,871,2829,312,1747, + 346,3913,3454,1909,2854,2859,3511,158,3437,153, + 3054,2952,514,2953,2335,1589,26,29,968,160, + 4522,27,974,24,28,334,25,2769,3539,339, + 923,845,344,338,3211,26,29,968,515,3749, + 27,974,24,28,23,25,891,254,22,20, + 49,996,104,73,74,105,1044,87,1917,3362, + 327,525,1602,26,29,968,4189,4440,27,974, + 24,28,334,25,2395,315,317,3547,1173,328, + 220,1241,313,1747,346,153,2740,3401,2477,576, + 273,968,3137,998,1584,2346,178,3037,3551,3135, + 46,395,2099,3033,2766,208,2335,205,197,206, + 207,209,167,341,923,845,344,158,3549,3555, + 3733,2994,2401,317,2477,2621,3039,968,181,165, + 166,168,169,170,171,172,3211,26,29,968, + 295,3749,27,974,24,28,23,25,891,254, + 22,20,49,996,104,73,74,105,1992,3211, + 26,29,968,346,3749,27,974,24,28,23, + 25,891,254,22,20,49,996,104,73,74, + 105,2000,2387,46,3488,46,46,2992,2335,2830, + 2894,1411,339,923,845,344,46,2740,355,3346, + 2958,1488,3409,3211,26,29,968,220,3749,27, + 974,24,28,23,25,891,254,22,20,49, + 996,104,73,74,82,2740,2740,3040,3041,3044, + 4409,3774,208,2396,205,198,206,207,209,3374, + 3445,303,3583,2335,2859,2866,3051,1105,439,199, + 200,1454,4557,3045,2879,905,379,380,968,2421, + 3360,1445,220,231,254,2335,485,201,202,203, + 204,3048,3050,290,291,292,293,3512,1045,1966, + 1173,3409,525,998,2621,4409,47,208,3546,205, + 198,206,207,209,3138,512,3409,287,48,288, + 1556,338,2397,2740,199,200,153,153,224,2879, + 173,576,879,775,525,998,1231,523,42,2758, + 4582,507,201,202,203,204,3521,2995,290,291, + 292,293,3541,220,1110,302,1527,372,153,158, + 2335,2740,294,1377,232,222,223,2335,2346,178, + 576,259,2741,1177,998,525,3033,354,208,2621, + 205,197,206,207,209,167,338,280,2899,997, + 3053,2843,2854,2859,220,3541,46,3557,158,153, + 868,3518,165,166,168,169,170,171,172,2346, + 178,3562,765,1924,2905,2335,2740,3033,2871,208, + 1087,205,197,206,207,209,167,3559,3409,436, + 3128,3131,3409,2393,220,3441,326,330,3579,2335, + 3556,3409,174,165,166,168,169,170,171,172, + 3856,1866,491,3141,3560,2335,3913,4409,338,208, + 3558,205,198,206,207,209,3570,4715,564,518, + 2335,298,2432,879,2621,2676,199,200,3595,2335, + 189,2879,375,3298,2995,5049,46,488,490,220, + 2335,521,2740,305,201,202,203,204,338,5049, + 290,291,292,293,1527,2859,1866,5049,2335,338, + 2335,3913,4409,5049,208,327,205,198,206,207, + 209,3464,5049,3100,849,2335,3897,2621,2789,2621, + 997,199,200,5049,1651,2995,2879,1609,379,380, + 968,46,1771,5049,220,2335,5049,354,508,201, + 202,203,204,5049,2339,290,291,292,293,5049, + 5049,1572,2854,2859,338,5049,5049,4409,47,208, + 327,205,198,206,207,209,5049,2809,330,287, + 48,288,1556,5049,45,224,199,200,5049,5049, + 2995,2879,345,5049,5049,982,525,1782,5049,5049, + 491,5049,354,211,201,202,203,204,5049,3135, + 290,291,292,293,5049,220,1572,2854,2859,5049, + 153,241,222,223,5049,2973,5049,5049,280,2899, + 2346,178,5049,431,871,489,490,525,3033,3913, + 208,442,205,197,206,207,209,167,5049,901, + 379,380,968,5049,2445,2905,220,5049,5049,5049, + 5049,153,428,185,165,166,168,169,170,171, + 172,2346,178,5049,517,5049,5049,5049,525,3033, + 47,208,5049,205,197,206,207,209,167,5049, + 5049,287,48,288,1556,5049,1134,220,327,5049, + 5049,5049,153,5049,3583,165,166,168,169,170, + 171,172,2346,178,879,603,5049,5049,5049,525, + 3033,5049,208,5049,205,197,206,207,209,167, + 5049,1175,379,380,968,5049,576,926,220,5049, + 998,5049,5049,153,5049,188,165,166,168,169, + 170,171,172,2346,178,5049,689,5049,5049,5049, + 525,3033,47,208,158,205,197,206,207,209, + 167,997,5049,287,48,288,1556,5049,1813,220, + 5049,5049,5049,5049,153,5049,184,165,166,168, + 169,170,171,172,2346,178,5049,775,5049,5049, + 5049,525,3033,5049,208,5049,205,197,206,207, + 209,167,5049,1175,379,380,968,5049,2822,330, + 220,5049,5049,5049,5049,153,5049,191,165,166, + 168,169,170,171,172,2346,178,5049,2684,5049, + 5049,5049,5049,3033,47,208,5049,205,197,206, + 207,209,167,5049,5049,287,48,288,1556,5049, + 2783,5049,5049,5049,5049,5049,5049,5049,190,165, + 166,168,169,170,171,172,3211,26,29,968, + 5049,3749,27,974,24,28,23,25,891,254, + 22,20,49,996,104,73,74,80,3211,26, + 29,968,5049,3749,27,974,24,28,23,25, + 891,254,22,20,49,996,104,73,74,79, + 3211,26,29,968,5049,3749,27,974,24,28, + 23,25,891,254,22,20,49,996,104,73, + 74,78,3211,26,29,968,5049,3749,27,974, + 24,28,23,25,891,254,22,20,49,996, + 104,73,74,77,3211,26,29,968,5049,3749, + 27,974,24,28,23,25,891,254,22,20, + 49,996,104,73,74,76,3211,26,29,968, + 5049,3749,27,974,24,28,23,25,891,254, + 22,20,49,996,104,73,74,75,2998,26, + 29,968,5049,3749,27,974,24,28,23,25, + 891,254,22,20,49,996,104,73,74,102, + 3211,26,29,968,5049,3749,27,974,24,28, + 23,25,891,254,22,20,49,996,104,73, + 74,107,3211,26,29,968,5049,3749,27,974, + 24,28,23,25,891,254,22,20,49,996, + 104,73,74,106,3348,379,380,968,5049,2924, + 5049,879,5049,5049,5049,5049,230,254,5049,2609, + 3065,29,968,3734,4440,27,974,24,28,334, + 25,3211,26,29,968,266,3749,27,974,24, + 28,23,25,891,254,22,20,49,996,104, + 73,74,103,5049,5049,1685,5049,5049,5049,998, + 5049,224,5049,5049,5049,46,5049,5049,997,2335, + 3538,5049,5049,5049,5049,5049,5049,5049,2395,315, + 317,5049,5049,153,269,5049,312,1747,338,5049, + 5049,268,267,2717,195,5049,5049,228,222,223, + 1268,1612,26,29,968,3734,4440,27,974,24, + 28,334,25,5049,2995,3113,330,5049,5049,5049, + 5049,1530,234,237,240,243,2750,224,1309,379, + 380,968,1789,2616,3065,29,968,3734,4440,27, + 974,24,28,334,25,2200,26,29,968,3734, + 4440,27,974,24,28,334,25,5049,5049,47, + 2395,315,317,244,222,223,5049,5049,312,1747, + 287,48,288,1556,5049,45,5049,406,3098,1775, + 576,2056,759,998,998,998,1874,2853,379,380, + 968,5049,2395,315,317,5049,5049,5049,5049,5049, + 312,1747,1867,5049,2395,315,317,153,158,153, + 5049,5049,312,1747,1268,2824,5049,160,266,1192, + 4488,1175,379,380,968,5049,759,934,26,29, + 968,3734,4440,27,974,24,28,334,25,1619, + 26,29,968,4271,4440,27,974,24,28,334, + 25,5049,47,306,5049,2101,5049,1528,5049,998, + 5049,2335,4661,287,48,288,1556,69,2412,5049, + 1309,379,380,968,268,267,5049,5049,2767,3538, + 220,5049,2907,153,5049,3528,2395,315,317,5049, + 5049,407,3098,2308,312,1747,5049,307,2994,2401, + 317,47,46,3182,5049,399,2335,5049,3554,5049, + 5049,5049,287,48,288,1556,5049,2535,1309,379, + 380,968,1354,400,5049,338,5049,2879,4509,2210, + 5049,5049,5049,998,5049,1609,379,380,968,2853, + 379,380,968,2255,5049,529,2300,998,5049,47, + 998,2995,1309,379,380,968,5049,153,495,5049, + 287,48,288,1556,2345,45,47,1614,998,5049, + 266,153,5049,5049,153,417,2191,287,48,288, + 1556,1656,45,47,1698,5049,2864,1309,379,380, + 968,5049,153,718,287,48,288,1556,5049,2807, + 5049,3016,1740,5049,1309,379,380,968,5049,5049, + 4509,5049,1820,401,402,5049,998,5049,47,335, + 5049,3139,379,380,968,5049,268,267,5049,287, + 48,288,1556,5049,45,47,5049,5049,5049,666, + 153,2775,5049,5049,5049,2692,287,48,288,1556, + 160,45,47,3144,379,380,968,2689,5049,5049, + 5049,2335,2887,287,48,288,1556,5049,45,5049, + 1175,379,380,968,2853,379,380,968,5049,2140, + 2621,5049,5049,5049,47,1175,379,380,968,5049, + 5049,1175,379,380,968,287,48,288,1556,5049, + 45,47,5049,1113,5049,266,5049,525,5049,5049, + 5049,2299,287,48,288,1556,47,1134,3516,1249, + 1317,46,47,525,525,2335,338,287,48,288, + 1556,153,2197,287,48,288,1556,5049,2425,5049, + 5049,872,338,338,338,1893,5049,153,153,998, + 5049,46,2995,491,70,2335,2390,186,186,1312, + 998,268,267,2435,5049,5049,5049,998,4397,4397, + 2995,5049,5049,153,338,5049,5049,493,5049,5049, + 5049,5049,5049,160,153,5049,5049,5049,488,490, + 5049,153,5049,5049,1519,5049,5049,5049,5049,5049, + 2995,3461,5049,5049,5049,5049,5049,522,5049,5049, + 5049,5049,5049,5049,5049,5049,5049,5049,5049,5049, + 5049,5049,5049,5049,3473,5049,5049,5049,5049,5049, + 5049,5049,5049,5049,5049,5049,3206,3317,5049,5049, + 5049,5049,5049,5049,5049,5049,5049,5049,5049,5049, + 5049,3592,5049,0,984,35,0,154,524,0, + 440,850,0,31,499,0,984,34,0,2567, + 123,0,1,430,0,1824,35,0,444,1105, + 0,443,1148,0,1145,89,0,31,289,297, + 0,29,380,0,26,379,0,1870,35,0, + 1,548,0,1,5314,0,1,5313,0,1, + 5312,0,1,5311,0,1,5310,0,1,5309, + 0,1,5308,0,1,5307,0,1,5306,0, + 1,5305,0,1,5304,0,1,984,35,0, + 1,1040,0,1579,35,0,31,277,253,0, + 31,499,277,253,0,1579,46,0,41,5081, + 0,41,33,0,2567,125,0,2567,124,0, + 3099,229,0,23,506,0,5374,431,0,1032, + 431,0,1,90,0,45,33,0,1,5083, + 0,1,35,0,1,5083,221,0,1,35, + 221,0,5080,33,0,5081,43,0,33,43, + 0,5548,32,0,5080,5,33,0,5058,397, + 0,1,1870,0,1,3575,0,1,2350,0, + 5374,93,0,1032,93,0,2696,314,0,3431, + 273,0,1,858,0,1,978,0,5080,35, + 0,487,3359,0,1,221,0,1,221,3239, + 0,5058,221,0,154,173,0,31,289,0, + 221,161,0,289,297,0,183,3815,0 + }; + }; + public final static char baseAction[] = BaseAction.baseAction; + public final int baseAction(int index) { return baseAction[index]; } + public final static char lhs[] = baseAction; + public final int lhs(int index) { return lhs[index]; }; + + public interface TermCheck { + public final static byte termCheck[] = {0, + 0,1,2,3,4,5,6,7,8,9, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,33,34,35,36,37,38,39, + 40,41,42,43,44,0,46,47,48,49, + 50,51,52,53,54,55,56,57,58,0, + 60,0,62,0,64,65,66,67,0,0, + 1,71,3,5,74,75,76,77,78,79, + 80,81,82,83,84,85,0,1,2,3, + 4,5,6,7,8,9,10,11,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43, + 44,68,46,47,48,49,50,51,52,53, + 54,55,56,57,58,0,60,2,62,88, + 64,65,66,67,0,94,0,89,90,5, + 74,75,76,77,78,79,80,81,82,83, + 84,85,0,1,2,3,4,5,6,7, + 8,9,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27, + 28,29,30,31,32,33,34,35,36,37, + 38,39,40,41,42,43,44,61,46,47, + 48,49,50,51,52,53,54,55,56,57, + 58,0,60,0,62,4,64,65,66,67, + 0,8,9,89,90,5,74,75,76,77, + 78,79,80,81,82,83,84,85,0,1, + 2,3,4,5,6,7,8,9,10,11, + 12,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31, + 32,33,34,35,36,37,38,39,40,41, + 42,43,44,0,46,47,48,49,50,51, + 52,53,54,55,56,57,58,0,60,0, + 62,0,64,65,66,67,0,10,0,89, + 90,3,74,75,76,77,78,79,80,81, + 82,83,84,85,0,1,2,3,4,5, + 6,7,8,9,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,42,43,44,61, + 46,47,48,49,50,51,52,53,54,55, + 56,57,58,0,60,0,62,4,64,65, + 66,67,86,87,95,96,0,114,74,75, + 76,77,78,79,80,81,82,83,84,85, + 0,1,2,3,4,5,6,7,8,9, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,33,34,35,36,37,38,39, + 40,41,42,43,44,0,46,47,48,49, + 50,51,52,53,54,55,56,57,58,0, + 60,0,62,88,64,65,66,67,0,94, + 0,3,86,87,74,75,76,77,78,79, + 80,81,82,83,84,85,0,1,2,3, + 4,5,6,7,8,9,10,11,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43, + 44,0,46,47,48,49,50,51,52,53, + 54,55,56,57,58,0,60,0,62,88, + 64,65,66,67,0,94,86,87,0,114, + 74,75,76,77,78,79,80,81,82,83, + 84,85,0,1,2,3,4,5,6,7, + 8,9,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27, + 28,29,30,31,32,33,34,35,36,37, + 38,39,40,41,42,43,44,72,46,47, + 48,49,50,51,52,53,54,55,56,57, + 58,100,60,0,62,88,64,65,66,67, + 0,94,0,112,86,87,74,75,76,77, + 78,79,80,81,82,83,84,85,0,1, + 2,3,4,5,6,7,8,9,10,11, + 12,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31, + 32,33,34,35,36,37,38,39,40,41, + 42,43,44,61,46,47,48,49,50,51, + 52,53,54,55,56,57,58,0,60,2, + 62,0,64,65,66,67,86,87,0,8, + 9,3,74,75,76,77,78,79,80,81, + 82,83,84,85,0,1,2,3,4,5, + 6,7,8,9,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,42,43,44,61, + 46,47,48,49,50,51,52,53,54,55, + 56,57,58,0,60,0,62,0,64,65, + 66,67,0,1,0,3,2,0,74,75, + 76,77,78,79,80,81,82,83,84,85, + 0,1,2,3,4,5,6,7,8,9, + 0,11,12,3,39,5,43,7,0,46, + 47,48,49,50,51,52,53,54,55,56, + 0,1,2,3,4,5,6,7,61,57, + 0,1,42,43,0,1,46,47,48,49, + 50,51,52,53,54,55,56,0,1,59, + 3,61,5,63,7,47,48,0,68,69, + 70,71,72,0,1,2,3,4,0,6, + 40,41,95,96,40,41,86,87,88,89, + 90,91,92,93,94,95,96,97,98,99, + 100,101,102,103,104,105,106,107,108,109, + 110,111,112,113,114,115,0,1,2,3, + 4,5,6,7,8,9,10,11,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43, + 44,0,46,47,48,49,50,51,52,53, + 54,55,56,0,58,0,1,99,0,4, + 0,65,66,67,0,1,2,3,4,5, + 6,7,8,9,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,0,43,44,68, + 46,47,48,49,50,51,52,53,54,55, + 56,63,58,63,0,1,68,3,68,65, + 66,67,0,1,2,3,4,5,6,7, + 8,9,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27, + 28,29,30,31,32,33,34,35,36,37, + 38,39,40,41,68,43,44,71,46,47, + 48,49,50,51,52,53,54,55,56,0, + 58,0,0,2,0,1,0,65,66,67, + 0,1,2,3,4,5,6,7,8,9, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,33,34,35,36,37,38,39, + 40,41,0,43,44,3,46,47,48,49, + 50,51,52,53,54,55,56,68,58,63, + 69,72,0,71,68,65,66,67,0,1, + 2,3,4,5,6,7,8,9,10,11, + 12,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31, + 32,33,34,35,36,37,38,39,40,41, + 0,43,44,3,46,47,48,49,50,51, + 52,53,54,55,56,63,58,0,0,1, + 0,1,0,65,66,67,0,1,2,3, + 4,5,6,7,8,9,10,11,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,0,43, + 44,3,46,47,48,49,50,51,52,53, + 54,55,56,61,58,0,0,0,2,0, + 0,65,66,67,0,1,2,3,4,5, + 6,7,8,9,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,117,118,119,43,0,0, + 46,47,48,49,50,51,52,53,54,55, + 56,61,58,0,0,70,69,0,1,65, + 66,67,0,0,2,0,1,5,0,7, + 8,9,0,11,12,7,13,14,15,16, + 17,18,19,20,21,22,23,100,99,102, + 103,104,105,106,107,108,109,110,111,112, + 0,1,45,3,42,5,43,7,69,46, + 47,48,49,50,51,52,53,54,55,56, + 0,59,57,61,71,63,72,0,8,9, + 68,69,70,71,72,97,0,0,1,2, + 3,4,5,6,7,0,10,93,86,87, + 88,89,90,91,92,93,94,95,96,97, + 98,99,100,101,102,103,104,105,106,107, + 108,109,110,111,112,113,114,115,0,42, + 2,45,45,5,0,7,8,9,61,11, + 12,0,0,0,58,2,0,60,0,1, + 2,3,4,5,6,7,10,70,71,0, + 73,0,1,2,3,4,0,6,0,1, + 42,0,1,2,3,4,0,6,0,1, + 2,3,4,42,6,0,1,59,3,61, + 5,63,7,98,0,61,68,69,70,71, + 72,59,59,42,117,118,119,59,62,68, + 0,45,2,42,86,87,88,89,90,91, + 92,93,94,95,96,97,98,99,100,101, + 102,103,104,105,106,107,108,109,110,111, + 112,113,114,115,0,1,2,3,4,5, + 6,7,8,9,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,42,93,44,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31,32,33,34,35,36,37,38,39,40, + 41,42,0,44,0,1,2,3,4,5, + 6,7,8,9,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,42,0,44,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31,32,33,34,35,36,37,38,39,40, + 41,0,1,44,0,0,1,6,3,97, + 5,7,7,0,57,0,1,2,3,4, + 5,6,7,0,1,2,3,0,5,2, + 7,72,0,1,2,3,4,5,6,7, + 8,9,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27, + 28,29,30,31,32,33,34,35,36,37, + 38,39,40,41,59,0,44,72,0,1, + 5,3,59,5,69,7,59,0,0,1, + 2,3,4,0,6,2,0,1,93,3, + 4,0,6,2,72,0,1,2,3,4, + 5,6,7,8,9,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,59,61,44, + 0,1,2,3,4,5,6,7,8,9, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,33,34,35,36,37,38,39, + 40,41,0,1,44,0,1,2,3,4, + 5,6,7,8,9,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,45,0,44, + 0,1,2,3,4,5,6,7,8,9, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,33,34,35,36,37,38,39, + 40,41,0,1,44,0,1,2,3,4, + 5,6,7,8,9,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,45,0,0, + 2,93,0,1,2,3,4,0,6,0, + 1,2,3,4,0,6,2,0,63,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31,32,33,34,35,36,37,38,39,40, + 41,59,63,44,0,1,2,3,4,5, + 6,7,8,9,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,0,1,44,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31,32,33,34,35,36,37,38,39,40, + 41,45,0,44,0,1,2,3,4,5, + 6,7,8,9,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,0,1,44,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31,32,33,34,35,36,37,38,39,40, + 41,45,0,44,0,1,2,3,4,5, + 6,7,8,9,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,0,1,44,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31,32,33,34,35,36,37,38,39,40, + 41,0,1,2,3,4,5,6,7,8, + 9,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28, + 29,30,31,32,33,34,35,36,37,38, + 39,40,41,0,1,2,3,4,5,6, + 7,8,9,10,11,12,13,14,15,16, + 17,18,19,20,21,22,23,24,25,26, + 27,28,29,30,31,32,33,34,35,36, + 37,38,39,0,0,2,0,0,0,1, + 2,3,4,0,6,0,1,2,3,4, + 57,6,0,1,0,3,4,0,6,2, + 0,0,2,2,71,0,1,2,3,4, + 5,6,7,8,9,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,0,0,2,70,4, + 5,57,7,8,9,70,11,12,0,59, + 0,1,57,3,4,0,6,0,10,0, + 25,2,0,1,98,3,71,0,0,1, + 11,12,4,0,6,40,41,113,0,43, + 0,1,46,47,48,49,50,51,52,53, + 54,55,56,45,59,45,61,42,63,0, + 0,0,0,68,69,0,58,45,0,1, + 2,3,4,5,6,7,59,0,59,2, + 0,86,87,88,89,90,91,92,0,1, + 95,96,97,98,99,100,101,102,103,104, + 105,106,107,108,109,110,111,0,0,2, + 42,4,5,45,7,8,9,57,11,12, + 101,0,61,0,63,63,0,1,60,69, + 4,72,25,45,115,0,59,0,70,71, + 63,73,0,0,1,68,3,40,41,72, + 70,43,91,92,46,47,48,49,50,51, + 52,53,54,55,56,0,59,2,61,0, + 63,45,0,1,0,68,69,3,0,1, + 45,0,59,2,63,117,118,119,0,46, + 0,3,0,86,87,88,89,90,91,92, + 63,0,95,96,97,98,99,100,101,102, + 103,104,105,106,107,108,109,110,111,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31,32,33,34,35,36,37,38,39,0, + 1,0,70,0,63,75,3,0,1,0, + 1,0,0,2,2,0,57,0,1,2, + 3,4,5,6,7,8,9,10,11,12, + 13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,0,1,2, + 3,4,5,6,7,8,9,10,11,12, + 13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,0,0,2,0, + 0,2,2,0,0,2,2,0,1,0, + 1,0,0,0,2,0,59,0,1,2, + 3,4,5,6,7,8,9,10,11,12, + 13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,0,1,2,3, + 4,5,6,7,8,9,10,11,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,0,0,0,1, + 0,0,2,0,1,0,93,0,1,0, + 0,0,0,116,0,0,0,0,0,0, + 24,24,0,0,0,24,0,116,0,0, + 113,0,1,2,3,4,5,6,7,8, + 9,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28, + 29,30,31,32,33,34,35,36,37,38, + 0,1,2,3,4,5,6,7,8,9, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,33,34,35,36,37,38,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31,32,33,34,35,36,37,38,0,1, + 0,3,0,0,0,0,0,0,10,0, + 0,13,14,15,16,17,18,19,20,21, + 22,23,0,0,1,0,3,4,0,6, + 0,0,0,0,0,0,0,1,0,0, + 0,43,0,0,46,47,48,49,50,51, + 52,53,54,55,56,45,58,0,1,59, + 3,59,0,65,66,67,0,10,45,0, + 13,14,15,16,17,18,19,20,21,22, + 23,45,0,0,1,2,3,4,5,6, + 7,0,1,2,3,4,5,6,7,61, + 43,63,68,46,47,48,49,50,51,52, + 53,54,55,56,74,58,0,1,0,116, + 0,5,65,66,67,42,43,120,45,91, + 92,69,0,42,43,69,45,68,0,0, + 0,59,0,60,61,62,0,64,0,0, + 0,60,0,62,0,64,73,0,0,0, + 42,45,71,0,73,0,1,2,3,4, + 5,6,7,0,1,2,3,4,5,6, + 7,0,1,2,3,4,5,6,7,0, + 1,2,3,4,5,6,7,0,1,2, + 3,4,5,6,7,46,68,42,43,70, + 45,57,70,61,68,42,43,69,45,70, + 57,0,72,42,43,60,45,62,0,64, + 0,42,43,60,45,62,71,64,73,42, + 43,60,45,62,71,64,73,0,0,60, + 0,62,71,64,73,0,0,60,0,62, + 71,64,73,42,0,0,0,0,0,0, + 73,0,1,2,3,4,5,6,7,0, + 1,2,3,4,5,6,7,57,0,61, + 43,63,0,46,47,48,49,50,51,52, + 53,54,55,56,0,0,0,57,0,42, + 0,0,0,42,43,0,45,69,63,91, + 92,42,43,58,45,69,0,0,70,0, + 0,60,0,62,70,64,70,69,69,60, + 0,62,0,64,73,0,0,0,0,0, + 0,0,73,0,0,0,68,0,0,0, + 0,0,0,57,72,0,61,0,0,0, + 0,0,0,69,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0 + }; + }; + public final static byte termCheck[] = TermCheck.termCheck; + public final int termCheck(int index) { return termCheck[index]; } + + public interface TermAction { + public final static char termAction[] = {0, + 5049,5027,5024,5024,5024,5024,5024,5024,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,5031,1,3397,1,1,1,1,1, + 1,1,1,1,1,1,1,708,1,5049, + 1705,108,3392,155,3217,1,1,1,112,5049, + 5018,5057,5083,3279,2082,3373,2477,2144,2394,3238, + 3430,3349,3391,3348,4225,3347,5049,5027,5024,5024, + 5024,5024,5024,5024,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,5031,1, + 3397,1281,1,1,1,1,1,1,1,1, + 1,1,1,708,1,5049,1705,3398,3392,4130, + 3217,1,1,1,114,4152,5049,3256,783,3279, + 2082,3373,2477,2144,2394,3238,3430,3349,3391,3348, + 4225,3347,5049,5027,5024,5024,5024,5024,5024,5024, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,5031,1,3397,2949,1,1, + 1,1,1,1,1,1,1,1,1,708, + 1,5049,1705,115,3392,4357,3217,1,1,1, + 113,3154,3068,3256,783,3279,2082,3373,2477,2144, + 2394,3238,3430,3349,3391,3348,4225,3347,5049,5027, + 5024,5024,5024,5024,5024,5024,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 5031,1,3397,5049,1,1,1,1,1,1, + 1,1,1,1,1,708,1,301,1705,126, + 3392,5049,3217,1,1,1,118,5349,31,3256, + 783,4857,2082,3373,2477,2144,2394,3238,3430,3349, + 3391,3348,4225,3347,5049,5027,5024,5024,5024,5024, + 5024,5024,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,5031,1,3397,499, + 1,1,1,1,1,1,1,1,1,1, + 1,708,1,5049,1705,111,3392,4644,3217,1, + 1,1,2633,2724,2512,2484,122,4823,2082,3373, + 2477,2144,2394,3238,3430,3349,3391,3348,4225,3347, + 5049,5027,5024,5024,5024,5024,5024,5024,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,5031,1,3397,5049,1,1,1,1, + 1,1,1,1,1,1,1,708,1,5049, + 1705,110,3392,4130,3217,1,1,1,35,4152, + 121,5083,2633,2724,2082,3373,2477,2144,2394,3238, + 3430,3349,3391,3348,4225,3347,5049,5027,5024,5024, + 5024,5024,5024,5024,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,5031,1, + 3397,136,1,1,1,1,1,1,1,1, + 1,1,1,708,1,1,1705,109,3392,4130, + 3217,1,1,1,5049,4152,2633,2724,120,4827, + 2082,3373,2477,2144,2394,3238,3430,3349,3391,3348, + 4225,3347,5049,5027,5024,5024,5024,5024,5024,5024, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,5031,1,3397,159,1,1, + 1,1,1,1,1,1,1,1,1,708, + 1,2199,1705,5049,3392,4130,3217,1,1,1, + 119,4152,5049,4425,2633,2724,2082,3373,2477,2144, + 2394,3238,3430,3349,3391,3348,4225,3347,5049,5027, + 5024,5024,5024,5024,5024,5024,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 5031,1,3397,2970,1,1,1,1,1,1, + 1,1,1,1,1,708,1,5049,1705,3099, + 3392,117,3217,1,1,1,2633,2724,46,3154, + 3068,1579,2082,3373,2477,2144,2394,3238,3430,3349, + 3391,3348,4225,3347,5049,3239,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,5058,1,3397,1579, + 1,1,1,1,1,1,1,1,1,1, + 1,708,1,216,1705,520,3392,5049,3217,1, + 1,1,5049,9170,89,5083,4854,127,2082,3373, + 2477,2144,2394,3238,3430,3349,3391,3348,4225,3347, + 5049,4916,4916,4916,4916,4916,4916,4916,4916,4916, + 35,4916,4916,5083,3133,1032,5297,5374,331,5300, + 5381,5382,5294,5301,5274,5299,5298,5295,5296,5275, + 5049,4824,2350,1040,1870,1032,3575,5374,3586,1609, + 5049,1579,4916,4916,5049,4925,4916,4916,4916,4916, + 4916,4916,4916,4916,4916,4916,4916,430,1,4916, + 1,4920,4842,4916,4842,5381,5382,5049,4916,4916, + 4916,4916,4916,1,4906,2350,4910,1870,134,3575, + 4108,856,2512,2484,4108,856,4916,4916,4916,4916, + 4916,4916,4916,4916,4916,4916,4916,4916,4916,4916, + 4916,4916,4916,4916,4916,4916,4916,4916,4916,4916, + 4916,4916,4916,4916,4916,4916,5049,5024,5024,5024, + 5024,5024,5024,5024,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,5040,1, + 5203,502,1,1,1,1,1,1,1,1, + 1,1,1,5049,1,5049,1824,2237,23,2934, + 5049,1,1,1,5049,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,5049,1,5203,811, + 1,1,1,1,1,1,1,1,1,1, + 1,4943,1,3304,5049,5018,4943,5083,3604,1, + 1,1,5049,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,940,1,5203,5057,1,1, + 1,1,1,1,1,1,1,1,1,5049, + 1,310,5049,2101,5049,1579,5049,1,1,1, + 5049,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,5049,1,5203,2691,1,1,1,1, + 1,1,1,1,1,1,1,4721,1,3540, + 1193,5056,5049,5057,3604,1,1,1,5049,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,5203,380,1,1,1,1,1,1, + 1,1,1,1,1,2452,1,5049,5049,4925, + 5049,984,5049,1,1,1,5049,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,388,1, + 5203,379,1,1,1,1,1,1,1,1, + 1,1,1,3641,1,5049,1,136,4235,135, + 5049,1,1,1,35,4845,2398,1040,621,4020, + 3575,4042,3998,3976,1399,4086,4064,5306,5304,5313, + 5312,5308,5309,5307,5310,5311,5314,5305,5065,3323, + 625,716,5067,702,2659,713,5068,5066,601,5061, + 5063,5064,5062,1237,5472,5473,5474,5297,130,284, + 5300,5381,5382,5294,5301,5274,5299,5298,5295,5296, + 5275,559,5439,1,1,1825,1743,5049,9169,902, + 5440,5441,380,215,4861,5049,3472,4861,128,4861, + 4861,4861,5049,4861,4861,2362,5306,5304,5313,5312, + 5308,5309,5307,5310,5311,5314,5305,2199,2237,1701, + 1659,1617,1575,1533,1491,1449,1407,1365,1323,4425, + 431,35,5081,5083,4861,4949,5297,4946,1920,5300, + 5381,5382,5294,5301,5274,5299,5298,5295,5296,5275, + 116,4861,3220,4861,5057,4861,357,440,3154,3068, + 4861,4861,4861,4861,4861,2304,1,1,4968,221, + 4964,221,221,221,221,132,5012,357,4861,4861, + 4861,4861,4861,4861,4861,4861,4861,4861,4861,4861, + 4861,4861,4861,4861,4861,4861,4861,4861,4861,4861, + 4861,4861,4861,4861,4861,4861,4861,4861,379,221, + 4864,3115,487,4864,31,4864,4864,4864,4830,4864, + 4864,5049,444,1,5015,3214,301,1279,340,4824, + 2704,1040,1870,1032,3575,5374,5349,221,405,5049, + 5535,1,4906,4997,4910,4991,33,4994,46,4925, + 4864,1,4906,2350,4910,1870,5049,3575,1,4906, + 4997,4910,4991,5058,4994,90,1,4864,1,4864, + 4952,4864,4952,2271,352,4833,4864,4864,4864,4864, + 4864,4848,1785,5058,5472,5473,5474,1785,1724,4303, + 229,5081,4940,309,4864,4864,4864,4864,4864,4864, + 4864,4864,4864,4864,4864,4864,4864,4864,4864,4864, + 4864,4864,4864,4864,4864,4864,4864,4864,4864,4864, + 4864,4864,4864,4864,5049,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,5058,5400,5203,5049, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,161,131,5203,5049,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,161,5049,5203,5049, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,34,4836,5203,129,1,4961,963,4958,2304, + 1032,2362,5374,5049,1483,361,4906,2704,4910,1870, + 1,3575,1,340,35,3214,5083,342,1032,1693, + 5374,161,5049,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1785,5049,5203,357,93,35, + 2186,5083,1785,5003,1063,5000,1785,5049,1,4906, + 2704,4910,1870,5049,3575,4499,5049,4824,357,1040, + 1870,5049,3575,4513,161,5049,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1785,2784,571, + 5049,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,41,4931,5203,5049,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,4928,1,5203, + 5049,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,33,4955,5203,1,4906,2398,4910,621, + 4020,3575,4042,3998,3976,4870,4086,4064,4897,4903, + 4876,4879,4891,4888,4894,4885,4882,4873,4900,5065, + 3323,625,716,5067,702,2659,713,5068,5066,601, + 5061,5063,5064,5062,1237,35,35,2459,5049,5049, + 4516,5402,1,4906,2704,4910,1870,5049,3575,1, + 4906,2350,4910,1870,5049,3575,4534,5049,503,5049, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1785,2465,5203,5049,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,5049,4972,5203,5049, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,5081,5049,5203,5049,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,43,4978,5203,5049, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,4975,5049,5203,5049,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,5049,5548,5203,138, + 4824,2398,1040,621,4020,3575,4042,3998,3976,548, + 4086,4064,5306,5304,5313,5312,5308,5309,5307,5310, + 5311,5314,5305,5065,3323,625,716,5067,702,2659, + 713,5068,5066,601,5061,5063,5064,5062,1237,35, + 35,1,4906,2398,4910,621,4020,3575,4042,3998, + 3976,4870,4086,4064,4897,4903,4876,4879,4891,4888, + 4894,4885,4882,4873,4900,5065,3323,625,716,5067, + 702,2659,713,5068,5066,601,5061,5063,5064,5062, + 1237,35,35,35,4824,2398,1040,621,4020,3575, + 4042,3998,3976,548,4086,4064,5306,5304,5313,5312, + 5308,5309,5307,5310,5311,5314,5305,5065,3323,625, + 716,5067,702,2659,713,5068,5066,601,5061,5063, + 5064,5062,1237,5049,5049,3431,133,5049,1,4906, + 2350,4910,1870,5049,3575,1,4906,2350,4910,1870, + 3496,3575,5049,4824,5049,1040,1870,5049,3575,3470, + 314,101,5006,3836,5057,35,4824,2398,1040,621, + 4020,3575,4042,3998,3976,548,4086,4064,5306,5304, + 5313,5312,5308,5309,5307,5310,5311,5314,5305,5065, + 3323,625,716,5067,702,2659,713,5068,5066,601, + 5061,5063,5064,5062,1237,1,217,572,2013,5504, + 5498,1819,5502,5496,5497,2013,5527,5528,1,1785, + 5049,4824,3496,1040,4867,397,3575,443,5012,72, + 5505,3209,389,4913,2271,5083,5057,5049,5049,984, + 5110,5111,1870,5049,3575,1495,1537,5055,5049,5297, + 5049,5080,5300,5381,5382,5294,5301,5274,5299,5298, + 5295,5296,5275,3115,729,654,5507,4988,5508,5049, + 5049,123,5049,5529,5506,5049,5015,35,1,4968, + 221,4964,221,221,221,221,4851,1,4351,3214, + 416,5518,5517,5530,5499,5500,5523,5524,5049,4984, + 5521,5522,5501,5503,5525,5526,5531,5511,5512,5513, + 5509,5510,5519,5520,5515,5514,5516,5049,218,572, + 221,5504,5498,487,5502,5496,5497,5037,5527,5528, + 910,5049,2594,343,4839,2544,33,4955,1279,2036, + 4955,5056,5505,5081,1050,45,1785,5049,221,404, + 336,5535,5049,422,35,336,5083,1495,1537,336, + 4385,5297,2540,578,5300,5381,5382,5294,5301,5274, + 5299,5298,5295,5296,5275,5049,729,2696,5507,5049, + 5508,2404,5049,1824,5049,5529,5506,3302,283,5335, + 2009,273,1785,5009,2563,5472,5473,5474,5049,5470, + 5049,2928,5049,5518,5517,5530,5499,5500,5523,5524, + 5547,5049,5521,5522,5501,5503,5525,5526,5531,5511, + 5512,5513,5509,5510,5519,5520,5515,5514,5516,35, + 4824,2398,1040,621,4020,3575,4042,3998,3976,548, + 4086,4064,5306,5304,5313,5312,5308,5309,5307,5310, + 5311,5314,5305,5065,3323,625,716,5067,702,2659, + 713,5068,5066,601,5061,5063,5064,5062,1237,32, + 4981,5049,5442,5049,5490,3553,3027,5049,5335,389, + 5080,5049,5049,4350,3535,5049,3496,35,4824,2398, + 1040,621,4020,3575,4042,3998,3976,548,4086,4064, + 5306,5304,5313,5312,5308,5309,5307,5310,5311,5314, + 5305,5065,3323,625,716,5067,702,2659,713,5068, + 5066,601,5061,5063,5064,5062,1237,35,4824,2398, + 1040,621,4020,3575,4042,3998,3976,548,4086,4064, + 5306,5304,5313,5312,5308,5309,5307,5310,5311,5314, + 5305,5065,3323,625,716,5067,702,2659,713,5068, + 5066,601,5061,5063,5064,5062,5049,5049,3414,5049, + 5049,2997,4689,5049,5049,2787,4690,5049,2617,5049, + 3527,369,5049,1,3130,5049,1181,35,4824,2398, + 1040,621,4020,3575,4042,3998,3976,548,4086,4064, + 5306,5304,5313,5312,5308,5309,5307,5310,5311,5314, + 5305,5065,3323,625,716,5067,702,2659,713,5068, + 5066,601,5061,5063,5064,5062,35,4824,2398,1040, + 621,4020,3575,4042,3998,3976,548,4086,4064,5306, + 5304,5313,5312,5308,5309,5307,5310,5311,5314,5305, + 5065,3323,625,716,5067,702,2659,713,5068,5066, + 601,5061,5063,5064,5062,1237,5049,5049,5049,6332, + 5049,1,4733,5049,6332,5049,3345,5049,3560,5049, + 5049,5049,5049,3490,5049,5049,5049,5049,5049,5049, + 3122,3038,5049,5049,5049,3212,5049,3490,5049,5049, + 5055,35,4824,4673,1040,621,4020,3575,4042,3998, + 3976,548,4086,4064,5306,5304,5313,5312,5308,5309, + 5307,5310,5311,5314,5305,5065,3323,625,716,5067, + 702,2659,713,5068,5066,601,5061,5063,5064,5062, + 35,4824,2398,1040,621,4020,3575,4042,3998,3976, + 548,4086,4064,5306,5304,5313,5312,5308,5309,5307, + 5310,5311,5314,5305,5065,3323,625,716,5067,702, + 2659,713,5068,5066,601,5061,5063,5064,5062,35, + 4824,2398,1040,621,4020,3575,4042,3998,3976,548, + 4086,4064,5306,5304,5313,5312,5308,5309,5307,5310, + 5311,5314,5305,5065,3323,625,716,5067,702,2659, + 713,5068,5066,601,5061,5063,5064,5062,5049,4845, + 98,5083,97,509,5049,5049,5049,183,1304,5049, + 5049,5306,5304,5313,5312,5308,5309,5307,5310,5311, + 5314,5305,5049,5049,4824,5049,1040,4867,5049,3575, + 5049,5049,5049,5049,356,5049,33,4955,125,5049, + 1,5297,5049,5049,5300,5381,5382,5294,5301,5274, + 5299,5298,5295,5296,5275,2975,5439,5049,4845,4726, + 5083,1958,364,902,5440,5441,362,1304,2089,282, + 5306,5304,5313,5312,5308,5309,5307,5310,5311,5314, + 5305,5081,316,1,5024,221,5024,221,221,221, + 221,1,5024,221,5024,221,221,221,221,2594, + 5297,4934,3222,5300,5381,5382,5294,5301,5274,5299, + 5298,5295,5296,5275,2796,5439,33,4955,5049,3490, + 5049,2186,902,5440,5441,221,8715,5046,5021,2540, + 578,1106,5049,221,8715,1150,5021,865,414,26, + 5049,1785,5049,1705,3408,1361,435,3217,408,434, + 1,1705,5049,1361,5049,3217,5535,5049,5049,422, + 5058,5081,213,1,5535,1,5024,221,5024,221, + 221,221,221,1,5024,221,5024,221,221,221, + 221,1,5024,221,5024,221,221,221,221,1, + 5024,221,5024,221,221,221,221,1,5024,221, + 5024,221,221,221,221,5470,861,221,8715,412, + 5021,708,2051,2957,3367,221,8715,2106,5021,2698, + 3305,173,5056,221,8715,1705,5021,1361,124,3217, + 5049,221,8715,1705,5021,1361,213,3217,5535,221, + 8715,1705,5021,1361,212,3217,5535,219,494,1705, + 5049,1361,213,3217,5535,5049,492,1705,5049,1361, + 213,3217,5535,5034,5049,5049,5049,5049,5049,5049, + 5535,1,5024,221,5024,221,221,221,221,1, + 5024,221,5024,221,221,221,221,3306,308,2594, + 5297,4937,1,5300,5381,5382,5294,5301,5274,5299, + 5298,5295,5296,5275,496,5,35,3316,5049,5043, + 5049,5049,5049,221,8715,5049,5021,4472,3566,2540, + 578,221,8715,1868,5021,4691,5049,5049,5225,5049, + 5049,1705,5049,1361,3471,3217,5224,2036,1878,1705, + 5049,1361,5049,3217,5535,5049,5049,5049,5049,5049, + 5049,5049,5535,5049,5049,5049,4315,5049,5049,5049, + 5049,5049,5049,2716,516,5049,33,5049,5049,5049, + 5049,5049,5049,1996 + }; + }; + public final static char termAction[] = TermAction.termAction; + public final int termAction(int index) { return termAction[index]; } + + public interface Asb { + public final static char asb[] = {0, + 1007,60,476,60,62,997,277,277,277,277, + 57,997,277,842,746,127,1044,1007,1046,477, + 477,477,477,477,477,477,477,477,746,752, + 757,754,761,759,766,764,768,767,769,223, + 770,476,459,29,29,29,29,272,231,1, + 744,29,67,378,746,746,1,872,378,913, + 28,586,58,274,459,730,730,713,713,231, + 1007,477,477,477,477,477,477,477,477,477, + 477,477,477,477,477,477,477,477,477,477, + 476,476,476,476,476,476,476,476,476,476, + 476,1007,477,378,378,104,460,911,911,911, + 911,220,378,1,109,719,730,838,730,433, + 730,836,730,29,730,57,272,67,67,1, + 67,28,476,514,585,378,513,272,515,513, + 378,67,754,754,752,752,752,759,759,759, + 759,757,757,764,761,761,767,766,768,599, + 769,109,291,396,387,386,346,57,1046,997, + 997,997,997,272,272,911,135,910,744,272, + 740,178,272,436,220,435,435,838,279,272, + 272,272,220,911,477,29,750,69,378,58, + 272,272,515,586,476,104,67,785,378,398, + 400,272,586,1007,1007,1007,1007,997,997,460, + 112,740,178,436,436,436,220,436,279,279, + 272,220,272,378,750,109,585,272,58,514, + 378,391,380,532,400,220,514,378,378,378, + 378,231,231,740,119,520,272,178,599,221, + 268,591,178,436,436,999,272,279,520,518, + 519,272,751,751,750,1007,69,516,58,333, + 476,530,530,282,282,272,394,109,644,378, + 272,378,378,740,586,277,513,592,342,997, + 510,538,1002,272,520,477,272,231,477,67, + 272,516,333,476,476,400,272,586,378,398, + 380,333,357,514,191,514,790,109,541,477, + 599,287,436,436,999,56,272,378,67,272, + 529,400,272,333,791,191,514,592,510,477, + 477,436,838,57,57,529,378,585,529,910, + 277,114,114,791,838,441,538,272,997,272, + 997,522,529,191,602,191,909,909,536,442, + 57,272,231,272,401,522,331,676,990,997, + 837,637,191,29,29,536,441,599,477,599, + 791,997,997,997,442,997,272,955,791,791, + 990,272,838,440,378,533,524,548,911,990, + 331,601,838,838,793,57,910,175,997,599, + 442,459,459,458,840,459,791,791,173,536, + 29,524,602,601,602,791,286,790,378,601, + 601,601,57,272,431,644,378,510,378,955, + 791,997,378,536,601,476,797,510,791,520, + 601,601,601,272,272,114,378,378,370,442, + 173,442,791,955,1007,442,439,520,378,796, + 520,520,272,791,791,909,838,838,946,476, + 440,1006,791,378,796,791,513,442,378,1006, + 791,519,442,378,796,442 + }; + }; + public final static char asb[] = Asb.asb; + public final int asb(int index) { return asb[index]; } + + public interface Asr { + public final static byte asr[] = {0, + 26,40,27,28,41,6,29,30,31,32, + 39,33,34,35,36,37,24,11,12,7, + 5,8,9,4,25,63,38,2,49,13, + 14,58,47,15,65,50,43,16,51,52, + 17,18,53,54,19,20,55,66,56,10, + 67,21,22,48,23,46,1,3,0,114, + 0,70,72,42,114,68,113,0,94,88, + 8,9,89,90,86,87,61,91,92,95, + 96,97,98,99,100,112,70,93,69,102, + 103,104,105,106,107,108,109,110,111,113, + 71,42,114,63,68,72,2,59,1,7, + 3,5,0,63,69,68,1,0,6,39, + 74,1,4,3,47,48,57,70,93,113, + 72,71,42,114,59,2,115,94,101,88, + 11,12,7,5,8,9,89,90,86,87, + 61,91,92,95,96,97,98,99,100,112, + 102,103,104,105,106,107,108,109,110,111, + 63,68,69,0,64,62,116,73,6,117, + 118,119,60,2,7,5,4,70,71,42, + 49,13,14,58,47,15,65,50,43,16, + 51,52,17,18,53,54,19,20,55,66, + 56,10,67,21,46,22,48,23,3,1, + 45,0,63,70,93,68,113,71,42,114, + 72,13,14,26,40,15,27,28,16,17, + 18,41,29,19,20,30,31,32,39,33, + 34,21,22,23,35,36,37,24,2,11, + 12,7,5,8,9,25,38,6,4,3, + 10,1,0,57,70,3,61,0,1,71, + 0,63,93,72,59,2,68,42,69,0, + 40,41,113,10,27,31,29,26,34,14, + 23,13,19,17,18,20,21,16,15,22, + 35,38,36,37,33,28,32,4,6,3, + 2,11,12,7,5,8,9,25,30,1, + 24,0,47,39,48,63,93,69,68,72, + 0,57,70,74,0,13,14,15,16,17, + 18,19,20,21,22,23,49,47,50,43, + 51,52,53,54,55,56,46,48,42,6, + 1,59,2,7,5,4,3,72,0,7, + 5,6,4,3,1,2,63,69,68,59, + 72,93,0,4,6,2,59,5,7,93, + 49,13,14,47,15,65,50,43,16,51, + 52,17,18,53,54,19,20,55,66,56, + 10,67,21,46,22,48,23,1,3,72, + 58,0,45,1,3,57,70,0,116,120, + 71,74,60,62,64,76,78,84,82,75, + 80,81,83,85,57,77,79,42,44,65, + 58,66,67,49,54,55,43,53,52,46, + 50,47,48,51,56,39,40,41,10,27, + 31,29,26,34,14,23,13,19,17,18, + 20,21,16,15,22,35,38,36,37,24, + 33,28,32,11,12,8,9,25,30,7, + 5,2,3,6,1,4,0,69,68,71, + 0,47,48,74,2,57,70,42,39,63, + 69,93,72,68,0,116,0,57,68,0, + 70,59,2,69,68,42,0,64,49,13, + 14,58,47,15,65,50,73,43,16,51, + 52,17,18,53,62,54,19,20,55,66, + 56,10,67,21,60,46,22,48,23,2, + 7,3,42,57,5,6,1,4,45,0, + 42,7,5,4,6,2,1,3,70,0, + 71,14,58,47,15,65,50,16,51,52, + 17,18,53,54,19,20,55,66,56,67, + 21,46,22,48,23,13,49,2,7,5, + 42,60,64,73,43,45,6,1,4,3, + 10,62,0,49,13,14,58,47,15,65, + 50,43,16,51,52,17,18,53,54,19, + 20,55,66,56,10,67,21,46,22,48, + 23,1,3,93,0,14,58,47,15,65, + 50,16,51,52,17,18,53,54,19,20, + 55,66,56,10,67,21,46,22,48,23, + 13,49,2,7,5,42,60,62,64,73, + 43,61,6,3,45,4,1,0,14,23, + 13,19,17,18,20,21,16,15,22,46, + 56,55,54,53,52,51,43,50,49,47, + 6,48,4,1,3,115,101,11,12,59, + 2,94,88,5,89,90,8,9,87,86, + 61,91,92,95,96,7,97,98,99,63, + 93,72,114,69,102,103,104,105,106,107, + 108,109,110,111,70,113,71,100,112,68, + 42,0,69,57,0,71,40,41,39,11, + 12,7,5,8,9,4,25,30,2,6, + 35,38,36,37,24,33,28,32,14,23, + 13,19,17,18,20,21,16,15,22,10, + 27,31,29,26,34,3,1,57,0,75, + 0,49,13,14,58,47,15,65,50,43, + 16,51,52,17,18,53,54,19,20,55, + 66,56,10,67,21,46,22,48,23,1, + 3,41,40,8,9,5,89,90,97,7, + 98,4,25,61,105,106,102,103,104,110, + 109,111,87,86,107,108,95,96,91,92, + 99,100,11,12,88,101,2,59,69,68, + 63,0,40,41,11,12,8,9,25,30, + 35,38,36,37,24,33,28,32,14,23, + 13,19,17,18,20,21,16,15,22,10, + 27,31,29,26,34,7,5,2,59,4, + 6,1,3,0,13,14,26,40,15,27, + 28,16,17,18,41,29,19,20,30,31, + 32,39,33,34,10,21,22,23,35,36, + 37,24,11,12,8,9,25,38,44,7, + 5,42,4,1,6,3,2,0,1,46, + 3,117,118,119,0,72,13,14,26,15, + 27,28,16,17,18,29,19,20,30,31, + 32,39,33,34,10,21,22,23,35,36, + 37,24,2,11,12,7,5,8,9,25, + 3,38,44,4,6,1,41,40,0 + }; + }; + public final static byte asr[] = Asr.asr; + public final int asr(int index) { return asr[index]; } + + public interface Nasb { + public final static char nasb[] = {0, + 201,12,17,12,12,12,12,12,12,12, + 112,12,12,213,12,12,8,122,221,17, + 17,6,17,17,17,17,17,17,12,12, + 12,12,12,12,12,12,12,12,12,17, + 12,17,197,164,164,164,164,221,167,131, + 37,104,80,206,12,12,131,215,206,17, + 40,100,12,12,197,12,12,54,54,167, + 122,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17, + 17,122,17,206,206,159,1,12,12,12, + 12,84,206,15,64,232,233,12,233,143, + 233,112,233,225,12,112,221,80,80,15, + 80,164,61,175,135,206,174,87,221,174, + 206,80,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12, + 12,64,76,159,35,35,12,112,221,12, + 12,12,12,10,240,12,12,12,116,221, + 131,131,9,131,217,131,12,12,131,217, + 221,32,12,12,17,164,131,29,206,12, + 218,221,32,100,17,114,80,12,206,208, + 131,221,100,122,122,122,122,12,12,15, + 12,22,250,131,131,90,99,90,131,195, + 240,99,10,206,13,116,135,32,12,10, + 206,12,125,12,210,98,10,206,206,206, + 206,167,167,131,22,52,221,244,12,12, + 71,183,250,90,90,246,10,195,52,12, + 12,10,102,102,12,122,116,12,12,131, + 17,12,12,35,35,221,125,64,210,206, + 10,206,206,22,100,12,112,235,131,12, + 127,12,255,217,52,17,195,167,17,80, + 32,12,22,17,17,131,32,100,206,208, + 170,131,12,175,131,217,244,64,12,17, + 12,69,131,67,44,46,87,206,80,32, + 131,210,221,22,244,210,175,235,172,17, + 17,67,82,139,112,94,206,100,131,12, + 12,42,42,244,82,24,12,217,12,217, + 12,131,94,210,190,131,12,12,131,178, + 139,87,167,87,204,22,12,190,184,12, + 73,71,210,164,164,133,119,12,17,12, + 244,12,12,12,120,12,12,242,244,244, + 131,12,92,12,206,206,131,131,12,127, + 12,131,12,12,12,112,12,59,12,12, + 120,163,163,154,12,163,244,244,12,131, + 164,94,190,131,190,244,27,12,206,149, + 131,131,112,217,12,164,206,127,206,156, + 244,12,206,133,149,61,17,127,244,52, + 190,149,149,217,96,42,206,206,131,120, + 12,120,244,156,122,120,59,52,206,131, + 52,52,96,244,12,12,92,92,125,17, + 12,156,244,206,48,244,174,120,206,156, + 244,52,120,206,48,120 + }; + }; + public final static char nasb[] = Nasb.nasb; + public final int nasb(int index) { return nasb[index]; } + + public interface Nasr { + public final static char nasr[] = {0, + 148,146,122,145,144,5,12,7,1,3, + 2,0,175,0,49,4,5,7,3,12, + 0,57,0,4,62,0,179,0,4,174, + 0,3,80,0,69,0,4,188,0,170, + 0,113,0,5,160,130,0,12,3,7, + 5,62,0,5,3,7,138,0,116,0, + 4,28,0,5,103,0,153,0,185,0, + 151,0,1,42,0,12,3,7,5,79, + 0,154,0,135,63,0,3,31,0,114, + 0,55,0,125,0,43,0,135,1,63, + 0,139,0,3,148,147,146,122,145,144, + 143,5,0,100,99,5,64,0,62,46, + 71,4,38,0,100,99,68,5,3,7, + 4,0,155,0,63,137,136,0,164,5, + 163,0,1,2,3,5,47,0,108,4, + 46,70,0,46,50,4,106,0,99,100, + 4,0,117,4,49,0,4,102,0,100, + 99,68,64,5,7,3,0,4,46,38, + 176,0,39,5,7,3,4,60,0,4, + 46,70,82,0,124,0,4,49,38,0, + 4,169,0,49,4,34,0,5,103,23, + 4,0,4,49,166,0,58,3,45,0, + 3,45,47,0,3,5,122,118,119,120, + 121,12,93,0,68,5,3,7,4,1, + 0,4,38,39,0,5,130,186,0,4, + 46,70,65,5,129,0 + }; + }; + public final static char nasr[] = Nasr.nasr; + public final int nasr(int index) { return nasr[index]; } + + public interface TerminalIndex { + public final static char terminalIndex[] = {0, + 115,2,32,14,11,81,10,12,13,102, + 8,9,50,54,62,70,76,77,88,89, + 104,107,109,114,15,57,63,69,86,90, + 92,96,99,101,111,112,113,46,97,60, + 80,122,68,123,95,106,56,108,49,66, + 72,75,78,85,91,100,3,55,1,105, + 20,79,21,48,65,93,103,45,34,31, + 121,120,67,98,110,51,52,58,59,61, + 71,73,74,87,94,18,19,7,16,17, + 22,23,33,5,24,25,26,27,28,29, + 6,35,36,37,38,39,40,41,42,43, + 44,30,119,124,4,53,82,83,84,64, + 116,117,118 + }; + }; + public final static char terminalIndex[] = TerminalIndex.terminalIndex; + public final int terminalIndex(int index) { return terminalIndex[index]; } + + public interface NonterminalIndex { + public final static char nonterminalIndex[] = {0, + 135,137,238,0,0,136,234,134,0,133, + 0,145,0,132,0,0,144,149,0,0, + 150,159,180,160,161,162,163,152,164,165, + 138,166,167,127,168,169,0,131,129,170, + 0,197,143,0,140,0,139,0,153,177, + 0,0,0,0,173,147,187,0,203,204, + 0,128,0,156,179,0,201,205,206,0, + 172,0,0,0,0,0,0,0,126,148, + 176,178,0,0,0,0,0,0,0,0, + 0,0,186,0,0,212,158,208,209,210, + 0,0,202,0,0,0,207,130,0,0, + 0,211,0,0,0,241,175,189,190,191, + 192,193,195,196,0,214,217,219,220,0, + 237,0,240,0,0,141,142,146,0,155, + 0,171,181,182,183,184,185,188,0,194, + 0,199,0,215,216,0,221,224,226,228, + 0,231,232,233,0,235,236,239,125,0, + 151,0,0,154,157,174,0,198,200,213, + 218,0,222,223,225,227,229,230,242,243, + 0,0,0,0,0,0,0,0,0 + }; + }; + public final static char nonterminalIndex[] = NonterminalIndex.nonterminalIndex; + public final int nonterminalIndex(int index) { return nonterminalIndex[index]; } + + public interface ScopePrefix { + public final static char scopePrefix[] = { + 138,574,593,359,525,541,552,563,339,71, + 244,258,280,286,292,42,269,384,422,468, + 146,582,367,20,51,77,114,174,275,298, + 309,320,250,264,27,493,349,320,601,27, + 196,223,1,14,61,93,128,303,316,325, + 332,440,461,486,517,521,611,615,619,84, + 7,84,128,402,418,431,451,508,431,477, + 532,548,559,570,186,373,56,56,135,201, + 204,56,218,239,204,56,336,446,458,465, + 135,634,97,211,406,56,103,103,211,56, + 393,211,156,91,444,623,630,623,630,65, + 412,121,91,91,228 + }; + }; + public final static char scopePrefix[] = ScopePrefix.scopePrefix; + public final int scopePrefix(int index) { return scopePrefix[index]; } + + public interface ScopeSuffix { + public final static char scopeSuffix[] = { + 18,5,5,346,5,5,5,5,346,59, + 119,82,119,119,119,48,255,390,428,474, + 152,67,354,25,25,82,119,179,119,119, + 314,314,255,88,38,498,354,588,606,32, + 190,190,5,18,5,82,119,307,307,307, + 82,119,221,5,5,5,5,5,221,632, + 11,88,132,346,346,346,455,498,435,481, + 536,536,536,536,190,377,59,59,5,5, + 207,209,221,5,242,209,82,449,5,221, + 5,5,100,329,409,490,106,110,214,512, + 396,502,159,82,82,625,625,627,627,67, + 414,123,181,166,230 + }; + }; + public final static char scopeSuffix[] = ScopeSuffix.scopeSuffix; + public final int scopeSuffix(int index) { return scopeSuffix[index]; } + + public interface ScopeLhs { + public final static char scopeLhs[] = { + 65,17,17,75,17,17,17,17,75,160, + 85,48,92,91,120,66,53,75,74,19, + 65,17,75,2,6,157,118,65,90,120, + 119,121,54,48,132,138,75,17,17,132, + 101,60,134,78,163,157,127,119,119,121, + 50,55,175,18,17,17,17,17,17,11, + 116,157,127,75,74,74,37,138,74,19, + 17,17,17,17,101,75,164,160,179,99, + 107,61,69,59,81,121,76,72,141,175, + 173,16,157,121,117,138,128,128,64,138, + 75,138,65,157,73,136,47,136,47,163, + 117,118,65,65,60 + }; + }; + public final static char scopeLhs[] = ScopeLhs.scopeLhs; + public final int scopeLhs(int index) { return scopeLhs[index]; } + + public interface ScopeLa { + public final static byte scopeLa[] = { + 116,72,72,72,72,72,72,72,72,1, + 71,42,71,71,71,63,1,72,120,72, + 57,2,42,63,63,42,71,57,71,71, + 1,1,1,1,63,3,42,1,1,63, + 72,72,72,116,72,42,71,1,1,1, + 42,71,113,72,72,72,72,72,113,1, + 72,1,68,72,72,72,70,3,72,2, + 63,63,63,63,72,42,1,1,72,72, + 2,1,113,72,1,1,42,70,72,113, + 72,72,1,45,69,4,1,1,5,1, + 75,45,74,42,42,3,3,3,3,2, + 1,57,1,1,2 + }; + }; + public final static byte scopeLa[] = ScopeLa.scopeLa; + public final int scopeLa(int index) { return scopeLa[index]; } + + public interface ScopeStateSet { + public final static char scopeStateSet[] = { + 82,239,239,105,239,239,239,239,105,63, + 23,94,23,23,149,82,96,105,105,239, + 82,239,105,175,217,91,149,82,23,149, + 149,149,96,94,56,144,105,239,239,56, + 136,66,33,105,37,91,300,149,149,149, + 12,40,80,239,239,239,239,239,239,221, + 7,91,300,105,105,105,270,144,105,239, + 239,239,239,239,136,105,37,63,1,136, + 138,66,132,66,70,149,105,105,60,80, + 147,239,91,149,3,144,149,149,119,144, + 105,144,82,91,105,116,153,116,153,37, + 3,149,82,82,66 + }; + }; + public final static char scopeStateSet[] = ScopeStateSet.scopeStateSet; + public final int scopeStateSet(int index) { return scopeStateSet[index]; } + + public interface ScopeRhs { + public final static char scopeRhs[] = {0, + 313,2,39,0,127,0,312,2,116,0, + 127,173,0,127,178,74,0,216,0,288, + 127,61,126,0,21,0,290,127,61,45, + 0,21,55,0,34,132,0,21,55,0, + 0,290,127,61,45,193,0,21,178,0, + 288,127,61,130,0,181,128,0,138,0, + 225,2,287,0,287,0,2,0,127,0, + 181,128,253,252,253,0,131,186,170,128, + 0,129,0,186,170,128,0,134,129,0, + 169,0,306,127,169,0,127,169,0,222, + 129,0,170,245,0,137,0,0,0,135, + 0,0,0,305,127,57,251,0,128,0, + 251,0,3,0,0,128,0,304,127,57, + 0,45,128,0,151,2,0,127,277,276, + 127,74,183,169,0,276,127,74,183,169, + 0,215,0,216,0,183,169,0,98,0, + 0,215,0,216,0,204,98,0,0,215, + 0,216,0,276,127,183,169,0,215,0, + 204,0,0,215,0,233,127,2,0,127, + 0,0,0,0,0,233,127,2,222,0, + 230,2,0,226,127,0,208,0,148,0, + 170,128,0,11,0,0,0,220,59,0, + 126,0,233,127,2,182,0,182,0,2, + 0,0,127,0,0,0,0,0,204,2, + 0,201,0,232,127,57,24,43,0,181, + 128,62,60,0,143,129,0,131,181,128, + 274,60,0,181,128,274,60,0,181,128, + 69,1,62,0,232,127,57,62,0,232, + 127,57,165,62,0,232,127,57,124,62, + 0,272,127,57,1,65,0,272,127,57, + 65,0,181,128,65,0,135,0,186,181, + 128,245,0,137,0,181,128,245,0,186, + 170,128,10,0,170,128,10,0,95,137, + 0,300,127,169,0,161,84,0,229,162, + 229,173,2,81,0,127,172,0,229,173, + 2,81,0,129,0,127,172,0,229,162, + 229,162,229,2,81,0,229,162,229,2, + 81,0,229,2,81,0,129,0,129,0, + 127,172,0,161,2,75,194,80,0,127, + 129,0,194,80,0,110,2,131,127,129, + 0,240,2,75,0,204,172,0,34,170, + 0,172,0,176,34,170,0,240,2,85, + 0,194,157,240,2,83,0,64,172,0, + 240,2,83,0,127,172,64,172,0,299, + 127,57,0,161,0,220,77,0,31,0, + 161,112,159,0,31,170,0,225,2,0, + 220,59,298,0,161,59,0,179,2,293, + 41,128,0,127,0,0,293,41,128,0, + 2,147,127,0,0,179,2,30,0,14, + 148,0,125,45,170,128,0,32,14,148, + 0,95,137,32,14,148,0,203,181,128, + 0,148,32,14,148,0,179,2,34,0, + 161,2,34,0,161,2,63,179,61,26, + 0,179,61,26,0,21,2,131,127,0, + 161,2,63,179,61,29,0,179,61,29, + 0,161,2,63,179,61,31,0,179,61, + 31,0,161,2,63,179,61,27,0,179, + 61,27,0,225,2,125,186,170,128,10, + 0,125,186,170,128,10,0,137,2,0, + 127,0,225,2,124,258,170,128,10,0, + 258,170,128,10,0,135,2,0,127,0, + 225,2,135,0,225,2,140,0,161,59, + 140,0,260,0,32,0,32,141,0,168, + 0,134,0,161,2,0 + }; + }; + public final static char scopeRhs[] = ScopeRhs.scopeRhs; + public final int scopeRhs(int index) { return scopeRhs[index]; } + + public interface ScopeState { + public final static char scopeState[] = {0, + 759,0,4690,4689,2997,0,2769,2992,1062,2683, + 0,3897,3856,3815,3774,3733,3692,2787,3471,3430, + 2396,3177,2958,2894,3621,2830,2766,3566,3511,3359, + 3304,0,2829,2265,2102,0,3367,2698,0,3897, + 3856,3815,3360,2421,3774,3733,3692,3471,2082,3430, + 2396,3177,2079,1808,0,4627,3604,3456,0,2302, + 2275,0,861,4385,0,4409,926,3135,3182,3051, + 4315,4397,4271,4303,2350,4189,2704,2621,0,607, + 0,2958,2894,3621,2830,2766,3566,3511,3359,3304, + 2775,4427,0,2775,4427,2958,2894,3621,2830,2766, + 3566,3511,3359,3304,3897,3856,3815,3774,3733,3692, + 3471,3430,2396,3177,0,3302,2691,0,926,3734, + 3135,3606,3116,2951,717,3551,2339,2230,1848,1216, + 0,2395,1747,923,845,3135,2339,3051,2704,2621, + 3214,2995,0,1050,910,0,856,0,4174,525, + 2335,0,4623,4591,4574,4557,4522,4505,4488,4440, + 4661,4655,4640,4391,4298,3637,3913,3375,2987,2924, + 2750,3831,3749,0,4623,4591,2887,2692,4574,4557, + 4522,4644,2191,4505,4509,4357,4488,3244,4440,3208, + 3104,4661,2459,2404,2934,2009,4655,2759,4640,2866, + 775,4391,4298,3637,648,3913,922,3375,2987,1870, + 2924,4174,2750,2335,3831,3749,718,608,567,1040, + 1996,3051,4315,4397,4271,4409,926,4303,3135,2350, + 4189,2704,3182,2621,2089,654,1050,910,4201,2199, + 2237,2304,2271,2512,2484,2362,2724,2633,2594,2567, + 2540,578,3279,3256,783,3154,3068,4152,4130,4108, + 4086,4064,4042,4020,3998,3976,621,3323,2659,1878, + 2144,2106,2051,2013,1150,1106,1958,1920,1063,811, + 1825,1785,731,674,525,1743,1701,1659,1617,1575, + 1533,1491,1449,1407,1365,1323,1281,1237,998,940, + 868,1193,0 + }; + }; + public final static char scopeState[] = ScopeState.scopeState; + public final int scopeState(int index) { return scopeState[index]; } + + public interface InSymb { + public final static char inSymb[] = {0, + 0,292,127,44,265,34,26,29,31,27, + 10,135,126,6,130,1,3,2,128,30, + 25,4,9,8,5,7,12,11,140,145, + 148,147,150,149,153,152,156,155,158,39, + 159,68,2,61,61,61,61,128,2,61, + 172,127,59,2,40,41,61,6,161,40, + 41,170,168,1,2,125,124,101,115,2, + 59,88,94,9,8,90,89,5,92,91, + 63,61,86,87,7,96,95,98,97,99, + 111,110,109,108,107,106,105,104,103,102, + 69,112,100,179,161,172,127,179,179,179, + 179,170,225,127,127,266,267,251,268,245, + 269,65,270,271,1,10,128,59,59,127, + 59,293,2,186,3,179,45,4,128,45, + 225,161,147,147,145,145,145,149,149,149, + 149,148,148,152,150,150,155,153,156,161, + 158,127,59,2,223,222,135,10,128,63, + 63,63,63,186,258,288,133,291,226,128, + 5,57,170,236,128,125,124,1,57,128, + 128,181,170,288,202,2,294,172,151,260, + 186,128,181,170,70,226,220,159,230,127, + 2,128,170,2,2,2,2,125,124,68, + 170,127,127,125,124,127,181,127,57,127, + 181,170,45,179,127,127,3,4,203,45, + 233,234,146,235,127,170,45,161,161,161, + 161,2,2,5,180,305,128,188,252,193, + 60,169,307,127,127,70,186,127,272,247, + 273,186,157,295,298,59,187,3,125,157, + 69,230,204,191,182,128,2,127,68,233, + 186,225,225,127,170,45,274,127,183,182, + 2,309,253,128,272,69,68,2,59,161, + 4,3,127,69,69,2,181,170,204,127, + 226,157,125,186,61,128,306,127,124,70, + 282,204,74,127,68,252,181,225,220,4, + 227,127,128,127,131,127,181,68,226,70, + 69,127,276,70,253,127,233,170,227,290, + 45,10,58,131,276,57,286,128,287,128, + 39,157,127,68,63,61,236,236,277,127, + 68,181,2,181,2,127,43,45,169,64, + 62,60,127,69,69,127,299,79,77,1, + 161,85,83,81,80,75,82,84,78,76, + 169,62,74,44,225,313,227,24,61,127, + 2,57,165,124,1,62,290,278,116,220, + 70,2,2,2,194,2,1,161,1,178, + 68,127,127,57,63,300,204,301,24,127, + 57,57,69,128,63,2,240,172,240,173, + 229,75,240,127,127,2,69,68,157,232, + 231,127,127,128,181,58,93,312,172,157, + 204,157,229,162,2,157,278,232,151,57, + 232,232,181,166,1,236,157,157,127,69, + 194,162,229,161,127,166,69,120,229,162, + 157,304,157,229,68,157 + }; + }; + public final static char inSymb[] = InSymb.inSymb; + public final int inSymb(int index) { return inSymb[index]; } + + public interface Name { + public final static String name[] = { + "", + "[", + "(", + "{", + ".", + ".*", + "->", + "->*", + "++", + "--", + "&", + "*", + "+", + "-", + "~", + "!", + "/", + "%", + ">>", + "<<", + "<", + ">", + "<=", + ">=", + "==", + "!=", + "^", + "|", + "&&", + "||", + "?", + ":", + "::", + "...", + "=", + "*=", + "/=", + "%=", + "+=", + "-=", + ">>=", + "<<=", + "&=", + "^=", + "|=", + ",", + "0", + "$empty", + "asm", + "auto", + "bool", + "break", + "case", + "catch", + "char", + "class", + "const", + "const_cast", + "continue", + "default", + "delete", + "do", + "double", + "dynamic_cast", + "else", + "enum", + "explicit", + "export", + "extern", + "false", + "float", + "for", + "friend", + "goto", + "if", + "inline", + "int", + "long", + "mutable", + "namespace", + "new", + "operator", + "private", + "protected", + "public", + "register", + "reinterpret_cast", + "return", + "short", + "signed", + "sizeof", + "static", + "static_cast", + "struct", + "switch", + "template", + "this", + "throw", + "try", + "true", + "typedef", + "typeid", + "typename", + "union", + "unsigned", + "using", + "virtual", + "void", + "volatile", + "wchar_t", + "while", + "integer", + "floating", + "charconst", + "stringlit", + "identifier", + "Completion", + "EndOfCompletion", + "Invalid", + "RightBracket", + "RightParen", + "RightBrace", + "SemiColon", + "ERROR_TOKEN", + "EOF_TOKEN", + "no_cast_start", + "]", + ")", + "}", + ";", + "declaration_seq", + "expression", + "id_expression", + "qualified_or_unqualified_name", + "unqualified_id_name", + "identifier_name", + "operator_function_id_name", + "template_id_name", + "class_name", + "nested_name_specifier", + "class_or_namespace_name", + "nested_name_specifier_with_tem" + + "plate", + "class_or_namespace_name_with_t" + + "emplate", + "namespace_name", + "postfix_expression", + "simple_type_specifier", + "pseudo_destructor_name", + "type_id", + "type_name", + "unary_expression", + "cast_expression", + "new_type_id", + "expression_list", + "type_specifier_seq", + "new_declarator", + "new_pointer_operators", + "ptr_operator", + "new_array_expressions", + "constant_expression", + "pm_expression", + "multiplicative_expression", + "additive_expression", + "shift_expression", + "relational_expression", + "equality_expression", + "and_expression", + "exclusive_or_expression", + "inclusive_or_expression", + "logical_and_expression", + "logical_or_expression", + "assignment_expression", + "expression_list_actual", + "statement", + "compound_statement", + "statement_seq", + "condition", + "declarator", + "simple_declaration", + "declaration", + "function_definition", + "declaration_specifiers", + "simple_declaration_specifiers", + "class_declaration_specifiers", + "elaborated_declaration_specifi" + + "ers", + "enum_declaration_specifiers", + "type_name_declaration_specifie" + + "rs", + "no_type_declaration_specifier", + "cv_qualifier", + "no_type_declaration_specifiers", + "class_specifier", + "elaborated_type_specifier", + "enum_specifier", + "type_name_specifier", + "class_keyword", + "enumerator_list", + "enumerator_definition", + "enumerator", + "original_namespace_name", + "init_declarator_list", + "init_declarator", + "initializer", + "direct_declarator", + "ptr_operator_seq", + "basic_direct_declarator", + "function_direct_declarator", + "array_direct_declarator", + "array_modifier", + "abstract_declarator", + "direct_abstract_declarator", + "basic_direct_abstract_declarat" + + "or", + "array_direct_abstract_declarat" + + "or", + "parameter_declaration_list", + "parameter_declaration", + "parameter_init_declarator", + "parameter_initializer", + "function_body", + "handler_seq", + "initializer_clause", + "initializer_list", + "class_head", + "access_specifier_keyword", + "member_declaration", + "member_declarator_list", + "member_declaration_list", + "member_declarator", + "constant_initializer", + "bit_field_declarator", + "base_specifier_list", + "base_specifier", + "conversion_type_id", + "conversion_declarator", + "mem_initializer_list", + "mem_initializer", + "mem_initializer_name", + "operator_id_name", + "overloadable_operator", + "template_parameter_list", + "template_parameter", + "template_identifier", + "template_argument_list", + "template_argument", + "handler", + "exception_declaration", + "type_id_list" + }; + }; + public final static String name[] = Name.name; + public final String name(int index) { return name[index]; } + + public final static int + ERROR_SYMBOL = 44, + SCOPE_UBOUND = 114, + SCOPE_SIZE = 115, + MAX_NAME_LENGTH = 37; + + public final int getErrorSymbol() { return ERROR_SYMBOL; } + public final int getScopeUbound() { return SCOPE_UBOUND; } + public final int getScopeSize() { return SCOPE_SIZE; } + public final int getMaxNameLength() { return MAX_NAME_LENGTH; } + + public final static int + NUM_STATES = 516, + NT_OFFSET = 123, + LA_STATE_OFFSET = 5573, + MAX_LA = 2147483647, + NUM_RULES = 524, + NUM_NONTERMINALS = 199, + NUM_SYMBOLS = 322, + SEGMENT_SIZE = 8192, + START_STATE = 3399, + IDENTIFIER_SYMBOL = 0, + EOFT_SYMBOL = 114, + EOLT_SYMBOL = 114, + ACCEPT_ACTION = 4823, + ERROR_ACTION = 5049; + + public final static boolean BACKTRACK = true; + + public final int getNumStates() { return NUM_STATES; } + public final int getNtOffset() { return NT_OFFSET; } + public final int getLaStateOffset() { return LA_STATE_OFFSET; } + public final int getMaxLa() { return MAX_LA; } + public final int getNumRules() { return NUM_RULES; } + public final int getNumNonterminals() { return NUM_NONTERMINALS; } + public final int getNumSymbols() { return NUM_SYMBOLS; } + public final int getSegmentSize() { return SEGMENT_SIZE; } + public final int getStartState() { return START_STATE; } + public final int getStartSymbol() { return lhs[0]; } + public final int getIdentifierSymbol() { return IDENTIFIER_SYMBOL; } + public final int getEoftSymbol() { return EOFT_SYMBOL; } + public final int getEoltSymbol() { return EOLT_SYMBOL; } + public final int getAcceptAction() { return ACCEPT_ACTION; } + public final int getErrorAction() { return ERROR_ACTION; } + public final boolean isValidForParser() { return isValidForParser; } + public final boolean getBacktrack() { return BACKTRACK; } + + public final int originalState(int state) { + return -baseCheck[state]; + } + public final int asi(int state) { + return asb[originalState(state)]; + } + public final int nasi(int state) { + return nasb[originalState(state)]; + } + public final int inSymbol(int state) { + return inSymb[originalState(state)]; + } + + public final int ntAction(int state, int sym) { + return baseAction[state + sym]; + } + + public final int tAction(int state, int sym) { + int i = baseAction[state], + k = i + sym; + return termAction[termCheck[k] == sym ? k : i]; + } + public final int lookAhead(int la_state, int sym) { + int k = la_state + sym; + return termAction[termCheck[k] == sym ? k : la_state]; + } +} diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParsersym.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParsersym.java new file mode 100644 index 00000000000..7b7794eda96 --- /dev/null +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParsersym.java @@ -0,0 +1,270 @@ +/******************************************************************************* +* Copyright (c) 2006, 2008 IBM Corporation and others. +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl_v10.html +* +* Contributors: +* IBM Corporation - initial API and implementation +*********************************************************************************/ + +// This file was generated by LPG + +package org.eclipse.cdt.internal.core.dom.lrparser.cpp; + +public interface CPPNoCastExpressionParsersym { + public final static int + TK_asm = 64, + TK_auto = 49, + TK_bool = 13, + TK_break = 76, + TK_case = 77, + TK_catch = 116, + TK_char = 14, + TK_class = 58, + TK_const = 47, + TK_const_cast = 26, + TK_continue = 78, + TK_default = 79, + TK_delete = 40, + TK_do = 80, + TK_double = 15, + TK_dynamic_cast = 27, + TK_else = 120, + TK_enum = 65, + TK_explicit = 50, + TK_export = 73, + TK_extern = 43, + TK_false = 28, + TK_float = 16, + TK_for = 81, + TK_friend = 51, + TK_goto = 82, + TK_if = 83, + TK_inline = 52, + TK_int = 17, + TK_long = 18, + TK_mutable = 53, + TK_namespace = 62, + TK_new = 41, + TK_operator = 6, + TK_private = 117, + TK_protected = 118, + TK_public = 119, + TK_register = 54, + TK_reinterpret_cast = 29, + TK_return = 84, + TK_short = 19, + TK_signed = 20, + TK_sizeof = 30, + TK_static = 55, + TK_static_cast = 31, + TK_struct = 66, + TK_switch = 85, + TK_template = 45, + TK_this = 32, + TK_throw = 39, + TK_try = 74, + TK_true = 33, + TK_typedef = 56, + TK_typeid = 34, + TK_typename = 10, + TK_union = 67, + TK_unsigned = 21, + TK_using = 60, + TK_virtual = 46, + TK_void = 22, + TK_volatile = 48, + TK_wchar_t = 23, + TK_while = 75, + TK_integer = 35, + TK_floating = 36, + TK_charconst = 37, + TK_stringlit = 24, + TK_identifier = 1, + TK_Completion = 121, + TK_EndOfCompletion = 122, + TK_Invalid = 123, + TK_LeftBracket = 59, + TK_LeftParen = 2, + TK_LeftBrace = 57, + TK_Dot = 115, + TK_DotStar = 94, + TK_Arrow = 101, + TK_ArrowStar = 88, + TK_PlusPlus = 11, + TK_MinusMinus = 12, + TK_And = 7, + TK_Star = 5, + TK_Plus = 8, + TK_Minus = 9, + TK_Tilde = 4, + TK_Bang = 25, + TK_Slash = 89, + TK_Percent = 90, + TK_RightShift = 86, + TK_LeftShift = 87, + TK_LT = 61, + TK_GT = 63, + TK_LE = 91, + TK_GE = 92, + TK_EQ = 95, + TK_NE = 96, + TK_Caret = 97, + TK_Or = 98, + TK_AndAnd = 99, + TK_OrOr = 100, + TK_Question = 112, + TK_Colon = 70, + TK_ColonColon = 3, + TK_DotDotDot = 93, + TK_Assign = 69, + TK_StarAssign = 102, + TK_SlashAssign = 103, + TK_PercentAssign = 104, + TK_PlusAssign = 105, + TK_MinusAssign = 106, + TK_RightShiftAssign = 107, + TK_LeftShiftAssign = 108, + TK_AndAssign = 109, + TK_CaretAssign = 110, + TK_OrAssign = 111, + TK_Comma = 68, + TK_zero = 38, + TK_RightBracket = 113, + TK_RightParen = 72, + TK_RightBrace = 71, + TK_SemiColon = 42, + TK_ERROR_TOKEN = 44, + TK_EOF_TOKEN = 114; + + public final static String orderedTerminalSymbols[] = { + "", + "identifier", + "LeftParen", + "ColonColon", + "Tilde", + "Star", + "operator", + "And", + "Plus", + "Minus", + "typename", + "PlusPlus", + "MinusMinus", + "bool", + "char", + "double", + "float", + "int", + "long", + "short", + "signed", + "unsigned", + "void", + "wchar_t", + "stringlit", + "Bang", + "const_cast", + "dynamic_cast", + "false", + "reinterpret_cast", + "sizeof", + "static_cast", + "this", + "true", + "typeid", + "integer", + "floating", + "charconst", + "zero", + "throw", + "delete", + "new", + "SemiColon", + "extern", + "ERROR_TOKEN", + "template", + "virtual", + "const", + "volatile", + "auto", + "explicit", + "friend", + "inline", + "mutable", + "register", + "static", + "typedef", + "LeftBrace", + "class", + "LeftBracket", + "using", + "LT", + "namespace", + "GT", + "asm", + "enum", + "struct", + "union", + "Comma", + "Assign", + "Colon", + "RightBrace", + "RightParen", + "export", + "try", + "while", + "break", + "case", + "continue", + "default", + "do", + "for", + "goto", + "if", + "return", + "switch", + "RightShift", + "LeftShift", + "ArrowStar", + "Slash", + "Percent", + "LE", + "GE", + "DotDotDot", + "DotStar", + "EQ", + "NE", + "Caret", + "Or", + "AndAnd", + "OrOr", + "Arrow", + "StarAssign", + "SlashAssign", + "PercentAssign", + "PlusAssign", + "MinusAssign", + "RightShiftAssign", + "LeftShiftAssign", + "AndAssign", + "CaretAssign", + "OrAssign", + "Question", + "RightBracket", + "EOF_TOKEN", + "Dot", + "catch", + "private", + "protected", + "public", + "else", + "Completion", + "EndOfCompletion", + "Invalid" + }; + + public final static boolean isValidForParser = true; +} |