diff options
author | Mike Kucera | 2009-10-21 20:02:30 +0000 |
---|---|---|
committer | Mike Kucera | 2009-10-21 20:02:30 +0000 |
commit | bf53c0b68ee092b47c9e7d38795e9ebd25a2bdc0 (patch) | |
tree | 50978085d5af0c588441384468d224984ba98f6b | |
parent | 7b97f230cca8963374abaeae61dcf9a8cb85747f (diff) | |
download | org.eclipse.cdt-bf53c0b68ee092b47c9e7d38795e9ebd25a2bdc0.tar.gz org.eclipse.cdt-bf53c0b68ee092b47c9e7d38795e9ebd25a2bdc0.tar.xz org.eclipse.cdt-bf53c0b68ee092b47c9e7d38795e9ebd25a2bdc0.zip |
Bug 292909 - backport XLC parser into 5.0 branch
84 files changed, 13815 insertions, 3 deletions
diff --git a/lrparser/org.eclipse.cdt.core.lrparser.tests/META-INF/MANIFEST.MF b/lrparser/org.eclipse.cdt.core.lrparser.tests/META-INF/MANIFEST.MF index afe29df131e..92f6f2f6669 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser.tests/META-INF/MANIFEST.MF +++ b/lrparser/org.eclipse.cdt.core.lrparser.tests/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name.0 Bundle-SymbolicName: org.eclipse.cdt.core.lrparser.tests -Bundle-Version: 5.1.0.qualifier +Bundle-Version: 5.0.2.qualifier Require-Bundle: org.eclipse.core.runtime, org.junit, org.eclipse.cdt.core.tests, diff --git a/lrparser/org.eclipse.cdt.core.lrparser/.project b/lrparser/org.eclipse.cdt.core.lrparser/.project index b101bd0e58f..80cab22b5fa 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/.project +++ b/lrparser/org.eclipse.cdt.core.lrparser/.project @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <projectDescription> - <name>org.eclipse.cdt.core.parser.c99</name> + <name>org.eclipse.cdt.core.lrparser</name> <comment></comment> <projects> </projects> diff --git a/lrparser/org.eclipse.cdt.core.lrparser/META-INF/MANIFEST.MF b/lrparser/org.eclipse.cdt.core.lrparser/META-INF/MANIFEST.MF index 5f6adddfeeb..c2361a8db7a 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/META-INF/MANIFEST.MF +++ b/lrparser/org.eclipse.cdt.core.lrparser/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name.1 Bundle-SymbolicName: org.eclipse.cdt.core.lrparser;singleton:=true -Bundle-Version: 5.0.1.qualifier +Bundle-Version: 5.0.2.qualifier Bundle-ClassPath: . Require-Bundle: org.eclipse.cdt.core, net.sourceforge.lpg.lpgjavaruntime;bundle-version="1.1.0";visibility:=reexport, diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/.classpath b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/.classpath new file mode 100644 index 00000000000..64c5e31b7a2 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/.classpath @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/.project b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/.project new file mode 100644 index 00000000000..78df19795f6 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/.project @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.cdt.core.lrparser.xlc.tests</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/.settings/org.eclipse.jdt.core.prefs b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..3b4cf4f033d --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +#Mon Mar 30 15:57:59 EDT 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/META-INF/MANIFEST.MF b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..4585010ad28 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/META-INF/MANIFEST.MF @@ -0,0 +1,14 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: XLC Parser Tests +Bundle-SymbolicName: org.eclipse.cdt.core.lrparser.xlc.tests +Bundle-Version: 5.0.2.qualifier +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Require-Bundle: org.junit, + org.eclipse.cdt.core.lrparser, + org.eclipse.cdt.core.lrparser.xlc, + org.eclipse.cdt.core.tests, + org.eclipse.cdt.core, + org.eclipse.cdt.core.lrparser.tests, + org.eclipse.core.runtime, + org.eclipse.core.resources diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/about.html b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/about.html new file mode 100644 index 00000000000..3b35b65391d --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/about.html @@ -0,0 +1,24 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About</title></head> + +<body lang="EN-US"> +<h2>About This Content</h2> + +<p>April 17, 2009</p> +<h3>License</h3> + +<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>. +For purposes of the EPL, "Program" will mean the Content.</p> + +<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p> + +</body></html>
\ No newline at end of file diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/build.properties b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/build.properties new file mode 100644 index 00000000000..6e948c2375e --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/build.properties @@ -0,0 +1,15 @@ +############################################################################### +# Copyright (c) 2009 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 +############################################################################### + +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/VectorExtensionsTest.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/VectorExtensionsTest.java new file mode 100644 index 00000000000..2a23e0b60f7 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/VectorExtensionsTest.java @@ -0,0 +1,203 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests; + +import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; +import org.eclipse.cdt.core.dom.ast.IASTDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement; +import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression; +import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; +import org.eclipse.cdt.core.dom.ast.IASTIdExpression; +import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTStatement; +import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; + + +public class VectorExtensionsTest extends XlcTestBase { + + public VectorExtensionsTest() { + } + + public VectorExtensionsTest(String name) { + super(name); + } + + + + public void testVector1() { + String code = + "int test() { \n" + + " vector unsigned int a = {1,2,3,4}; \n" + + " vector unsigned int b = {2,4,6,8}; \n" + + " vector unsigned int c = a + b; \n" + + " int e = b > a; \n" + + " int f = a[2]; \n" + + " vector unsigned int d = ++a; \n" + + "}\n"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testVectorDeclarations() { + String code = + "vector unsigned char a; \n" + + "vector signed char b; \n" + + "vector bool char c; \n" + + "vector unsigned short d; \n" + + "vector unsigned short int e; \n" + + "vector signed short f; \n" + + "vector signed short int g; \n" + + "vector bool short h; \n" + + "vector bool short int i; \n" + + "vector unsigned int j; \n" + + "vector unsigned long k; \n" + + "vector unsigned long int l; \n" + + "vector signed int m; \n" + + "vector signed long n; \n" + + "vector signed long int o; \n" + + "vector bool int p; \n" + + "vector bool long q; \n" + + "vector bool long int r; \n" + + "vector float s; \n" + + "vector pixel t; \n" + + "__vector __pixel u; \n"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + // these are only treated as keywords inside a vector declaration + public void testReservedWords() { + String code = + "int pixel; " + + "int bool; "; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + + public void testVectorLiterals() { + String code = + "int test() {" + + " (vector unsigned int)(10); " + + " (vector unsigned int)(14, 82, 73, 700); " + + " (vector pixel)(14, 82, 73, 700); " + + " (vector bool int)(10); " + + "}"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testVectorInitializers() { + String code = + "int test() {" + + " vector unsigned int v3 = {1,2,3,4}; " + + "}"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + + public void testVectorTypedefs() { + String code = + "int test() {" + + " typedef vector pixel vint16; " + + " vint16 v1;" + + "}"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testVectorCompoundLiterals() { + String code = + "int test() {" + + " (vector unsigned int){10}; " + + " (vector unsigned int){14, 82, 73, 700}; " + + " (vector pixel){14, 82, 73, 700}; " + + " (vector bool int){10}; " + + "}"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testVectorAlignof() { + String code = + "int test() {" + + " vector unsigned int v1 = (vector unsigned int)(10); \n" + + " vector unsigned int *pv1 = &v1; \n" + + " __alignof__(v1); \n" + + " __alignof__(&v1); \n" + + " __alignof__(*pv1); \n" + + " __alignof__(pv1); \n" + + " __alignof__(vector signed char); \n" + + "}"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testVectorTypeof() { + String code = + "int test() {" + + " vector unsigned int v1 = (vector unsigned int)(10); \n" + + " vector unsigned int *pv1 = &v1; \n" + + " __typeof__(v1); \n" + + " __typeof__(&v1); \n" + + " __typeof__(*pv1); \n" + + " __typeof__(pv1); \n" + + " __typeof__(vector signed char); \n" + + "}"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void _testOverloads() { + String code = + "void foo(int); \n" + + "void foo(vector unsigned int); \n" + + "void foo(vector pixel) \n" + + "int test() { \n" + + " int x; \n" + + " vector unsigned int y; \n" + + " vector pixel z; \n" + + " foo(x); \n" + + " foo(y); \n" + + " foo(z); \n" + + "} \n"; + + IASTTranslationUnit tu = parse(code, getCPPLanguage(), true); + + + IASTDeclaration[] decls = tu.getDeclarations(); + IASTName foo1 = ((IASTSimpleDeclaration)decls[0]).getDeclarators()[0].getName(); + IASTName foo2 = ((IASTSimpleDeclaration)decls[1]).getDeclarators()[0].getName(); + IASTName foo3 = ((IASTSimpleDeclaration)decls[2]).getDeclarators()[0].getName(); + + IASTFunctionDefinition func = (IASTFunctionDefinition) decls[4]; + IASTStatement[] stats = ((IASTCompoundStatement)func.getBody()).getStatements(); + + IASTName fooCall1 = ((IASTIdExpression)((IASTFunctionCallExpression)((IASTExpressionStatement)stats[3]).getExpression()).getFunctionNameExpression()).getName(); + IASTName fooCall2 = ((IASTIdExpression)((IASTFunctionCallExpression)((IASTExpressionStatement)stats[4]).getExpression()).getFunctionNameExpression()).getName(); + IASTName fooCall3 = ((IASTIdExpression)((IASTFunctionCallExpression)((IASTExpressionStatement)stats[5]).getExpression()).getFunctionNameExpression()).getName(); + + assertSame(foo1.resolveBinding(), fooCall1.resolveBinding()); + assertSame(foo2.resolveBinding(), fooCall2.resolveBinding()); + assertSame(foo3.resolveBinding(), fooCall3.resolveBinding()); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/XlcExtensionsTest.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/XlcExtensionsTest.java new file mode 100644 index 00000000000..acebb2011ad --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/XlcExtensionsTest.java @@ -0,0 +1,278 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests; + +import org.eclipse.cdt.core.lrparser.xlc.preferences.XlcLanguagePreferences; +import org.eclipse.cdt.core.lrparser.xlc.preferences.XlcPref; + + +public class XlcExtensionsTest extends XlcTestBase { + + public XlcExtensionsTest() { + } + + public XlcExtensionsTest(String name) { + super(name); + } + + public void testHexadecimalFloatingPointLiterals() throws Exception { + String code = + "int test() { \n"+ + " 0x0A2B.0FDp+2f; \n"+ + " 0X12D.p-44F; \n"+ + " 0xBACP+2L; \n"+ + "}\n"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testFuncPredefinedIdentifier() { + String code = + "void test() { \n" + + " __func__; \n" + + " } \n"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testStringConcatenation() { + String code = + "void test() { \n" + + " \"hello \" \"there\"; \n" + + " \"hello \" L\"there\"; \n" + + " } \n"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testLongLong() { + String code = + "void test() { \n" + + " long long x; \n" + + " } \n"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testComplex() { + String code = + "void test() { \n" + + " float _Complex x; \n" + + " double _Complex y; \n" + + " long double _Complex z; \n" + + " } \n"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testBool() { + String code = + "_Bool f(int a, int b) { \n" + + " return a==b; \n" + + " } \n"; + + parse(code, getCLanguage(), true); + } + + public void testTrailingCommaInEnum() { + String code = + "void test() { \n" + + " enum grain { oats, wheat, barley, corn, rice, }; \n" + + " } \n"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + + public void testNonLValueArraySubscript() { + String code = + "struct trio{int a[3];}; \n" + + "struct trio f(); \n" + + "foo (int index) \n" + + "{ \n" + + " return f().a[index]; \n" + + "} \n"; + + parse(code, getCLanguage(), true); + } + + public void testStaticArrayIndices() { + String code = + "void test() { \n" + + " void foo1(int arr [static 10]); \n" + + " int i = 10; \n" + + " void foo2(int arr [static const i]); \n" + + " } \n"; + + parse(code, getCLanguage(), true); + } + + public void testFunctionLikeMacrosVariableArguments() { + String code = + "#define debug(...) fprintf(stderr, __VA_ARGS__) \n" + + "int test() { \n" + + " debug(\"flag\"); \n" + + " } \n"; + + parse(code, getCLanguage(), false); + } + + public void testFunctionLikeMacrosEmptyArgument() { + String code = + "#define SUM(a,b,c) a + b + c \n" + + "int test() { \n" + + " SUM(1,,3); \n" + + " } \n"; + + parse(code, getCLanguage(), true); + } + + public void testPredefinedMacroNamesC() { + String code = + "void test() { \n" + + " __DATE__; \n" + + " __FILE__; \n" + + " __LINE__; \n" + + " __STDC_HOSTED__; \n" + + " __STDC_VERSION__; \n" + + " __TIME__; \n" + + "} \n"; + + parse(code, getCLanguage(), true); + } + + public void testPredefinedMacroNamesCpp() { + String code = + "void test() { \n" + + " __DATE__; \n" + + " __FILE__; \n" + + " __LINE__; \n" + + " __TIME__; \n" + + // " __cplusplus; \n" + + "} \n"; + + parse(code, getCPPLanguage(), true); + } + + + public void testCompoundLiterals() { + String code = + "void test() { \n" + + " drawline((struct point){6,7}); \n" + + " } \n"; + + parse(code, getCLanguage(), false); + } + + + + public void testPragma() { + String code = + "void test() { \n" + + " _Pragma ( \"pack(full)\" ) \n" + + " } \n"; + + parse(code, getCLanguage(), true); + } + + + public void testStandardPragmas() { + String code = + "#pragma STDC FP_CONTRACT ON \n" + + "#pragma STDC FENV_ACCESS OFF \n" + + "#pragma STDC CX_LIMITED_RANGE DEFAULT \n"; + + parse(code, getCLanguage(), true); + } + + public void testLineDirective() { + String code = + "#define LINE200 200 \n" + + "#line 100 \n" + + "#line LINE200 \n"; + + parse(code, getCLanguage(), true); + } + + + /** + * https://bugs.eclipse.org/bugs/show_bug.cgi?id=228826 + * http://publib.boulder.ibm.com/infocenter/comphelp/v101v121/index.jsp?topic=/com.ibm.xlcpp101.aix.doc/language_ref/restrict_type_qualifier.html + * + * TODO Need a properties page so that things like this can be configured by the user. + */ + public void testRestrictC() { + String code = + "void foo(int n, int * restrict a, int * __restrict b, int * __restrict__ c) {} "; + + parse(code, getCLanguage(), true); + } + + public void testRestrictCPPOn() { + String code = + "void foo(int n, int * restrict a, int * __restrict b, int * __restrict__ c) {} "; + + parse(code, getCPPLanguage(), true); + } + public void testRestrictCPPOff() { + XlcLanguagePreferences.setWorkspacePreference(XlcPref.SUPPORT_RESTRICT_IN_CPP, String.valueOf(false)); + String code = + "void restrict(); \n " + + "void foo(int n, int * __restrict b, int * __restrict__ c) {} "; + + parse(code, getCPPLanguage(), true); + } + + + + public void testUTFLiterals() { + String code = + "void test() { \n " + + " u\"ucs characters \\u1234 and \\u8180 \"; \n " + + " U\"ucs characters \\u1234 and \\u8180 \"; \n " + + " U\"concatenation \\u1234 \" u\"is allowed \\u8180 \"; \n " + + " u'\\u1234'; \n " + + " U'\\u1234'; \n " + + "}"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + + public void testFloatingPointTypes() { + String code = + " _Decimal32 x = 22.2df; \n " + + " _Decimal64 y = 33.3dd; \n " + + " _Decimal128 z = 33.3dl; \n "; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); + } + + public void testVariableLengthArrays() { + String code = + "double maximum1(int n, int m, double a[n][m]);\n" + + "double maximum2(int n, int m, double a[*][*]);\n" + + "double maximum3(int n, int m, double a[ ][*]);\n" + + "double maximum4(int n, int m, double a[ ][m]);\n"; + + parse(code, getCLanguage(), true); + parse(code, getCPPLanguage(), true); // xlc supports this in C++ + } + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/XlcExtensionsTestSuite.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/XlcExtensionsTestSuite.java new file mode 100644 index 00000000000..e5434d9a535 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/XlcExtensionsTestSuite.java @@ -0,0 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests; + +import junit.framework.Test; +import junit.framework.TestSuite; + +public class XlcExtensionsTestSuite extends TestSuite { + + public static Test suite() { + return new TestSuite() {{ + addTestSuite(VectorExtensionsTest.class); + addTestSuite(XlcExtensionsTest.class); + }}; + } +}
\ No newline at end of file diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/XlcTestBase.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/XlcTestBase.java new file mode 100644 index 00000000000..55943dab30e --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/XlcTestBase.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests; + +import junit.framework.TestCase; + +import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; +import org.eclipse.cdt.core.lrparser.tests.ParseHelper; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcTestBase extends TestCase { + + public XlcTestBase() { + } + + public XlcTestBase(String name) { + super(name); + } + + protected IASTTranslationUnit parse(String code, ILanguage language, boolean checkBindings) { + ParseHelper.Options options = new ParseHelper.Options(); + options.setCheckSyntaxProblems(true); + options.setCheckPreprocessorProblems(true); + options.setCheckBindings(checkBindings); + return ParseHelper.parse(code, language, options); + } + + protected XlcCLanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected XlcCPPLanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCPPSpecTest.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCPPSpecTest.java new file mode 100644 index 00000000000..9d4329d6b03 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCPPSpecTest.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRCPPSpecTest; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRCPPSpecTest extends LRCPPSpecTest { + public static TestSuite suite() { + return suite(XlcLRCPPSpecTest.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCPPTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCPPTests.java new file mode 100644 index 00000000000..46a39b5d9c6 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCPPTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRCPPTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRCPPTests extends LRCPPTests { + public static TestSuite suite() { + return suite(XlcLRCPPTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCSpecTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCSpecTests.java new file mode 100644 index 00000000000..2821ad00edc --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCSpecTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRCSpecTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRCSpecTests extends LRCSpecTests { + public static TestSuite suite() { + return suite(XlcLRCSpecTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCommentTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCommentTests.java new file mode 100644 index 00000000000..282a6001b16 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCommentTests.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRCommentTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRCommentTests extends LRCommentTests { + + + public static TestSuite suite() { + return suite(XlcLRCommentTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCompleteParser2Tests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCompleteParser2Tests.java new file mode 100644 index 00000000000..74708eeef59 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCompleteParser2Tests.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRCompleteParser2Tests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRCompleteParser2Tests extends LRCompleteParser2Tests { + + public static TestSuite suite() { + return suite(XlcLRCompleteParser2Tests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCompletionBasicTest.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCompletionBasicTest.java new file mode 100644 index 00000000000..dae39fc6abf --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCompletionBasicTest.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRCompletionBasicTest; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRCompletionBasicTest extends LRCompletionBasicTest { + public static TestSuite suite() { + return new TestSuite(XlcLRCompletionBasicTest.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCompletionParseTest.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCompletionParseTest.java new file mode 100644 index 00000000000..55a8e06b157 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRCompletionParseTest.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRCompletionParseTest; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRCompletionParseTest extends LRCompletionParseTest { + public static TestSuite suite() { + return new TestSuite(XlcLRCompletionParseTest.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMLocationInclusionTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMLocationInclusionTests.java new file mode 100644 index 00000000000..bd593c97705 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMLocationInclusionTests.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRDOMLocationInclusionTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRDOMLocationInclusionTests extends LRDOMLocationInclusionTests { + + public XlcLRDOMLocationInclusionTests() { + super(); + } + + public XlcLRDOMLocationInclusionTests(String name, Class<Object> className) { + super(name, className); + } + + public XlcLRDOMLocationInclusionTests(String name) { + super(name); + } + + public static TestSuite suite() { + return new TestSuite(XlcLRDOMLocationInclusionTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMLocationMacroTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMLocationMacroTests.java new file mode 100644 index 00000000000..2fc7eca528e --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMLocationMacroTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRDOMLocationMacroTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRDOMLocationMacroTests extends LRDOMLocationMacroTests { + public static TestSuite suite() { + return suite(XlcLRDOMLocationMacroTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMLocationTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMLocationTests.java new file mode 100644 index 00000000000..df69eee2134 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMLocationTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRDOMLocationTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRDOMLocationTests extends LRDOMLocationTests { + public static TestSuite suite() { + return suite(XlcLRDOMLocationTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMPreprocessorInformationTest.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMPreprocessorInformationTest.java new file mode 100644 index 00000000000..a2df090a3f9 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDOMPreprocessorInformationTest.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRDOMPreprocessorInformationTest; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRDOMPreprocessorInformationTest extends LRDOMPreprocessorInformationTest { + public static TestSuite suite() { + return suite(XlcLRDOMPreprocessorInformationTest.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDigraphTrigraphTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDigraphTrigraphTests.java new file mode 100644 index 00000000000..b4c145fd8d3 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRDigraphTrigraphTests.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRDigraphTrigraphTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRDigraphTrigraphTests extends LRDigraphTrigraphTests { + + public static TestSuite suite() { + return new TestSuite(XlcLRDigraphTrigraphTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRGCCCompleteParseExtensionsTest.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRGCCCompleteParseExtensionsTest.java new file mode 100644 index 00000000000..64e0b5f4855 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRGCCCompleteParseExtensionsTest.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRGCCCompleteParseExtensionsTest; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRGCCCompleteParseExtensionsTest extends LRGCCCompleteParseExtensionsTest { + public static TestSuite suite() { + return suite(XlcLRGCCCompleteParseExtensionsTest.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRGCCTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRGCCTests.java new file mode 100644 index 00000000000..8c00ee22b21 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRGCCTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRGCCTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRGCCTests extends LRGCCTests { + public static TestSuite suite() { + return suite(XlcLRGCCTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRImageLocationTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRImageLocationTests.java new file mode 100644 index 00000000000..93391459d9a --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRImageLocationTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRImageLocationTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRImageLocationTests extends LRImageLocationTests { + public static TestSuite suite() { + return suite(XlcLRImageLocationTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRKnRTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRKnRTests.java new file mode 100644 index 00000000000..aecdb3e2e3f --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRKnRTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRKnRTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRKnRTests extends LRKnRTests { + public static TestSuite suite() { + return suite(XlcLRKnRTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRNodeSelectorTest.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRNodeSelectorTest.java new file mode 100644 index 00000000000..1f45d3b2af0 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRNodeSelectorTest.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRNodeSelectorTest; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRNodeSelectorTest extends LRNodeSelectorTest { + public static TestSuite suite() { + return suite(XlcLRNodeSelectorTest.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRParserTestSuite.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRParserTestSuite.java new file mode 100644 index 00000000000..033768cb052 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRParserTestSuite.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + + + +import junit.framework.Test; +import junit.framework.TestSuite; + +public class XlcLRParserTestSuite extends TestSuite { + + // TODO: the following test are not being reused + // + // DOMGCCSelectionParseExtensionsTest + // DOMSelectionParseTest + // GCCCompleteParseExtensionsTest + // QuickParser2Tests + // + // and perhaps others + + public static Test suite() { + return new TestSuite() {{ + + addTest(XlcLRCommentTests.suite()); + addTest(XlcLRCompleteParser2Tests.suite()); + addTest(XlcLRCompletionBasicTest.suite()); + addTest(XlcLRCompletionParseTest.suite()); + addTest(XlcLRCPPSpecTest.suite()); + addTest(XlcLRCPPTests.suite()); + addTest(XlcLRCSpecTests.suite()); // a couple of failures + addTest(XlcLRDigraphTrigraphTests.suite()); + addTest(XlcLRDOMLocationInclusionTests.suite()); + addTest(XlcLRDOMLocationMacroTests.suite()); + addTest(XlcLRDOMLocationTests.suite()); + addTest(XlcLRDOMPreprocessorInformationTest.suite()); + addTest(XlcLRGCCTests.suite()); + addTest(XlcLRGCCCompleteParseExtensionsTest.suite()); + addTest(XlcLRImageLocationTests.suite()); + addTest(XlcLRKnRTests.suite()); // mostly fail due to ambiguities + addTest(XlcLRNodeSelectorTest.suite()); + addTest(XlcLRQuickParser2Tests.suite()); + addTest(XlcLRSelectionParseTest.suite()); // this one still has a lot of failing tests though + addTest(XlcLRSemanticsTests.suite()); + addTest(XlcLRTaskParserTest.suite()); + addTest(XlcLRTemplateTests.suite()); + addTest(XlcLRTests.suite()); // has some tests that do fail + addTest(XlcLRUtilOldTests.suite()); + addTest(XlcLRUtilTests.suite()); + //addTest(XlcLRCPPImplicitNameTests.suite()); + //addTest(LRInactiveCodeTests.suite()); + + }}; + } +} + diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRQuickParser2Tests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRQuickParser2Tests.java new file mode 100644 index 00000000000..eae58926aec --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRQuickParser2Tests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRQuickParser2Tests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRQuickParser2Tests extends LRQuickParser2Tests { + public static TestSuite suite() { + return new TestSuite(XlcLRQuickParser2Tests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRSelectionParseTest.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRSelectionParseTest.java new file mode 100644 index 00000000000..4fc4be89bda --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRSelectionParseTest.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRSelectionParseTest; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRSelectionParseTest extends LRSelectionParseTest { + + public XlcLRSelectionParseTest() { + } + + public XlcLRSelectionParseTest(String name) { + super(name); + } + + public static TestSuite suite() { + return new TestSuite(XlcLRSelectionParseTest.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRSemanticsTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRSemanticsTests.java new file mode 100644 index 00000000000..24449764d5c --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRSemanticsTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRSemanticsTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRSemanticsTests extends LRSemanticsTests { + public static TestSuite suite() { + return suite(XlcLRSemanticsTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRTaskParserTest.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRTaskParserTest.java new file mode 100644 index 00000000000..cbad9af4c2b --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRTaskParserTest.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRTaskParserTest; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRTaskParserTest extends LRTaskParserTest { + public static TestSuite suite() { + return suite(XlcLRTaskParserTest.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRTemplateTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRTemplateTests.java new file mode 100644 index 00000000000..c797e6ad59d --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRTemplateTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRTemplateTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRTemplateTests extends LRTemplateTests { + public static TestSuite suite() { + return suite(XlcLRTemplateTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRTests.java new file mode 100644 index 00000000000..6cb19033f28 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRTests.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRTests extends LRTests { + + public XlcLRTests(String name) { + super(name); + // TODO Auto-generated constructor stub + } + + public static TestSuite suite() { + return suite(XlcLRTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRUtilOldTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRUtilOldTests.java new file mode 100644 index 00000000000..2fbfbf88747 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRUtilOldTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRUtilOldTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRUtilOldTests extends LRUtilOldTests { + public static TestSuite suite() { + return suite(XlcLRUtilOldTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRUtilTests.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRUtilTests.java new file mode 100644 index 00000000000..1eae1701af6 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/base/XlcLRUtilTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.base; + +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.lrparser.tests.LRUtilTests; +import org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage; +import org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage; +import org.eclipse.cdt.core.model.ILanguage; + +public class XlcLRUtilTests extends LRUtilTests { + public static TestSuite suite() { + return suite(XlcLRUtilTests.class); + } + + protected ILanguage getCLanguage() { + return XlcCLanguage.getDefault(); + } + + protected ILanguage getCPPLanguage() { + return XlcCPPLanguage.getDefault(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/suite/XlcTestSuite.java b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/suite/XlcTestSuite.java new file mode 100644 index 00000000000..5c03a495158 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc.tests/src/org/eclipse/cdt/core/parser/xlc/tests/suite/XlcTestSuite.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.parser.xlc.tests.suite; + + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.parser.xlc.tests.XlcExtensionsTestSuite; +import org.eclipse.cdt.core.parser.xlc.tests.base.XlcLRParserTestSuite; + +public class XlcTestSuite extends TestSuite { + + public static Test suite() { + return new TestSuite() {{ + addTest(XlcExtensionsTestSuite.suite()); + addTest(XlcLRParserTestSuite.suite()); + }}; + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/.classpath b/xlc/org.eclipse.cdt.core.lrparser.xlc/.classpath new file mode 100644 index 00000000000..bc645e1d3be --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/.classpath @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="src" path="parser"/> + <classpathentry kind="src" path="ui"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/.settings/org.eclipse.jdt.core.prefs b/xlc/org.eclipse.cdt.core.lrparser.xlc/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..570ff24edd2 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +#Mon Mar 30 15:50:28 EDT 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/META-INF/MANIFEST.MF b/xlc/org.eclipse.cdt.core.lrparser.xlc/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..cbceb90b47e --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/META-INF/MANIFEST.MF @@ -0,0 +1,25 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %Bundle-Name.1 +Bundle-SymbolicName: org.eclipse.cdt.core.lrparser.xlc;singleton:=true +Bundle-Version: 5.0.2.qualifier +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Bundle-Localization: plugin +Require-Bundle: org.eclipse.cdt.core, + org.eclipse.cdt.core.lrparser, + org.eclipse.core.runtime, + org.eclipse.core.resources, + org.eclipse.cdt.ui, + org.eclipse.ui +Export-Package: org.eclipse.cdt.core.lrparser.xlc, + org.eclipse.cdt.core.lrparser.xlc.action, + org.eclipse.cdt.core.lrparser.xlc.activator, + org.eclipse.cdt.core.lrparser.xlc.ast, + org.eclipse.cdt.core.lrparser.xlc.preferences, + org.eclipse.cdt.internal.core.lrparser.xlc.ast, + org.eclipse.cdt.internal.core.lrparser.xlc.c, + org.eclipse.cdt.internal.core.lrparser.xlc.cpp, + org.eclipse.cdt.internal.core.lrparser.xlc.ui.preferences +Bundle-ActivationPolicy: lazy +Bundle-Activator: org.eclipse.cdt.core.lrparser.xlc.activator.XlcParserPlugin +Bundle-Vendor: %Bundle-Vendor.0 diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/about.html b/xlc/org.eclipse.cdt.core.lrparser.xlc/about.html new file mode 100644 index 00000000000..0277ef73095 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/about.html @@ -0,0 +1,24 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"><head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About</title></head> + +<body lang="EN-US"> +<h2>About This Content</h2> + +<p>April 17, 2009</p> +<h3>License</h3> + +<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>. +For purposes of the EPL, "Program" will mean the Content.</p> + +<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p> + +</body></html>
\ No newline at end of file diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/build.properties b/xlc/org.eclipse.cdt.core.lrparser.xlc/build.properties new file mode 100644 index 00000000000..3195255db16 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/build.properties @@ -0,0 +1,20 @@ +############################################################################### +# Copyright (c) 2009 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 +############################################################################### + +source.. = parser/,\ + ui/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml,\ + plugin.properties,\ + about.html +src.includes = about.html diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/build.xml b/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/build.xml new file mode 100644 index 00000000000..99a4603a956 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/build.xml @@ -0,0 +1,49 @@ +<!-- + Copyright (c) 2009 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 +--> + +<project name="XLC Parsers" default="c" basedir="."> + + <import file="../../org.eclipse.cdt.core.lrparser/grammar/generate.xml"/> + + <property name="c_location" value="../parser/org/eclipse/cdt/internal/core/lrparser/xlc/c"/> + <property name="cpp_location" value="../parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp"/> + + + <target name="c"> + <antcall target="generate_c"> + <param name="grammar_name" value="XlcCParser"/> + </antcall> + </target> + + <target name="cpp"> + <antcall target="generate_cpp"> + <param name="grammar_name" value="XlcCPPParser"/> + </antcall> + </target> + + + <target name="generate_c"> + <antcall target="generate"> + <param name="grammar_dir" value="xlc"/> + <param name="output_dir" value="${c_location}"/> + <param name="grammar_name" value="${grammar_name}"/> + </antcall> + </target> + + <target name="generate_cpp"> + <antcall target="generate"> + <param name="grammar_dir" value="xlc"/> + <param name="output_dir" value="${cpp_location}"/> + <param name="grammar_name" value="${grammar_name}"/> + </antcall> + </target> + +</project>
\ No newline at end of file diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcCPPParser.g b/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcCPPParser.g new file mode 100644 index 00000000000..b2bc76c4685 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcCPPParser.g @@ -0,0 +1,99 @@ +----------------------------------------------------------------------------------- +-- Copyright (c) 2009 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.lrparser.xlc.cpp +%options template=LRParserTemplate.g + + +$Import + GPPGrammar.g +$End + +$Import + XlcGrammarExtensions.g +$End + +$Globals +/. + import org.eclipse.cdt.core.lrparser.xlc.action.XlcCPPBuildASTParserAction; + import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPSecondaryParserFactory; + import org.eclipse.cdt.internal.core.lrparser.xlc.ast.XlcCPPNodeFactory; +./ +$End + +$Define + + $build_action_class /. XlcCPPBuildASTParserAction ./ + $parser_factory_create_expression /. GPPSecondaryParserFactory.getDefault() ./ + $node_factory_create_expression /. XlcCPPNodeFactory.getDefault() ./ + +$End + + + +$Terminals + + restrict + +$End + + +$Start + translation_unit +$End + + +$Rules + + +cv_qualifier + ::= 'restrict' + +block_declaration + ::= vector_declaration + + +identifier_token + ::= 'vector' + | 'pixel' + + +specifier_qualifier + ::= 'typedef' + /. $Build consumeToken(); $EndBuild ./ + + +array_modifier + ::= '[' <openscope-ast> array_modifier_type_qualifiers ']' + /. $Build consumeDirectDeclaratorModifiedArrayModifier(false, false, true, false); $EndBuild ./ + | '[' <openscope-ast> array_modifier_type_qualifiers assignment_expression ']' + /. $Build consumeDirectDeclaratorModifiedArrayModifier(false, false, true, true); $EndBuild ./ + | '[' 'static' assignment_expression ']' + /. $Build consumeDirectDeclaratorModifiedArrayModifier(true, false, false, true); $EndBuild ./ + | '[' 'static' <openscope-ast> array_modifier_type_qualifiers assignment_expression ']' + /. $Build consumeDirectDeclaratorModifiedArrayModifier(true, false, true, true); $EndBuild ./ + | '[' <openscope-ast> array_modifier_type_qualifiers 'static' assignment_expression ']' + /. $Build consumeDirectDeclaratorModifiedArrayModifier(true, false, true, true); $EndBuild ./ + | '[' '*' ']' + /. $Build consumeDirectDeclaratorModifiedArrayModifier(false, true, false, false); $EndBuild ./ + | '[' <openscope-ast> array_modifier_type_qualifiers '*' ']' + /. $Build consumeDirectDeclaratorModifiedArrayModifier(false, true, true, false); $EndBuild ./ + + +array_modifier_type_qualifiers + ::= type_qualifier_list + +type_qualifier_list + ::= cv_qualifier + | type_qualifier_list cv_qualifier + +$End
\ No newline at end of file diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcCParser.g b/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcCParser.g new file mode 100644 index 00000000000..a6c7ae9669a --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcCParser.g @@ -0,0 +1,67 @@ +----------------------------------------------------------------------------------- +-- Copyright (c) 2009 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.lrparser.xlc.c +%options template=LRParserTemplate.g + + +$Import + GCCGrammar.g +$End + +$Import + XlcGrammarExtensions.g +$End + + +$Globals +/. + import org.eclipse.cdt.core.lrparser.xlc.action.XlcCBuildASTParserAction; + import org.eclipse.cdt.core.dom.lrparser.action.gnu.GCCSecondaryParserFactory; + import org.eclipse.cdt.internal.core.lrparser.xlc.ast.XlcCNodeFactory; +./ +$End + + +$Define + + $build_action_class /. XlcCBuildASTParserAction ./ + $parser_factory_create_expression /. GCCSecondaryParserFactory.getDefault() ./ + $node_factory_create_expression /. XlcCNodeFactory.getDefault() ./ + +$End + + +$Start + translation_unit +$End + + +$Rules + +declaration + ::= vector_declaration + +identifier_token + ::= 'pixel' + | 'vector' + | 'bool' + +declarator_id_name + ::= 'pixel' + /. $Build consumeIdentifierName(); $EndBuild ./ + | 'vector' + /. $Build consumeIdentifierName(); $EndBuild ./ + | 'bool' + /. $Build consumeIdentifierName(); $EndBuild ./ + +$End
\ No newline at end of file diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcGrammarExtensions.g b/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcGrammarExtensions.g new file mode 100644 index 00000000000..58fe3cf505e --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcGrammarExtensions.g @@ -0,0 +1,94 @@ +----------------------------------------------------------------------------------- +-- Copyright (c) 2009 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 +----------------------------------------------------------------------------------- + + +-- These are additional rules that allow for parsing of GNU extensions. +-- This file is intended to be mixed-in with C99Parser.g or GPPParser.g + + +$Terminals + + vector + pixel + bool + + _Decimal32 + _Decimal64 + _Decimal128 + +$End + + + + + +$Rules + + + +simple_type_specifier_token + ::= '_Decimal32' + | '_Decimal64' + | '_Decimal128' + + +type_id + ::= vector_type + /. $Build consumeTypeId(false); $EndBuild ./ + | vector_type abstract_declarator + /. $Build consumeTypeId(true); $EndBuild ./ + +vector_declaration + ::= vector_type <openscope-ast> init_declarator_list ';' + /. $Build consumeDeclarationSimple(true); $EndBuild ./ + + +vector_type + ::= <openscope-ast> no_type_declaration_specifiers_opt 'vector' vector_type_specifier all_specifier_qualifier_list_opt + /. $Build consumeVectorTypeSpecifier(); $EndBuild ./ + + +vector_type_specifier + ::= vector_type_specifier_token + /. $Build consumeToken(); $EndBuild ./ + +vector_type_specifier_token + ::= 'pixel' + | 'float' + | 'bool' + | 'signed' + | 'unsigned' + | 'char' + | 'short' + | 'int' + | 'long' + + + +all_specifier_qualifiers + ::= vector_type_specifier + | no_type_declaration_specifiers + +all_specifier_qualifier_list + ::= all_specifier_qualifiers + | all_specifier_qualifier_list all_specifier_qualifiers + +all_specifier_qualifier_list_opt + ::= all_specifier_qualifier_list + | $empty + +no_type_declaration_specifiers_opt + ::= no_type_declaration_specifiers + | $empty + + +$End + diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCLanguage.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCLanguage.java new file mode 100644 index 00000000000..261c40fb763 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCLanguage.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc; + +import static org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage.getPref; +import static org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage.getProject; + +import java.util.Map; + +import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; +import org.eclipse.cdt.core.dom.lrparser.IParser; +import org.eclipse.cdt.core.dom.lrparser.gnu.GCCLanguage; +import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration; +import org.eclipse.cdt.core.index.IIndex; +import org.eclipse.cdt.core.lrparser.xlc.preferences.XlcPref; +import org.eclipse.cdt.core.model.ICLanguageKeywords; +import org.eclipse.cdt.core.parser.IScanner; +import org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParser; +import org.eclipse.core.resources.IProject; + +/** + * + * @author Mike Kucera + */ +public class XlcCLanguage extends GCCLanguage { + + public static final String ID = "org.eclipse.cdt.core.lrparser.xlc.c"; //$NON-NLS-1$ + + private static XlcCLanguage DEFAULT = new XlcCLanguage(); + + public static XlcCLanguage getDefault() { + return DEFAULT; + } + + @Override + protected IParser<IASTTranslationUnit> getParser(IScanner scanner, IIndex index, Map<String,String> properties) { + IProject project = getProject(properties); + boolean supportVectors = getPref(XlcPref.SUPPORT_VECTOR_TYPES, project); + boolean supportDecimals = getPref(XlcPref.SUPPORT_DECIMAL_FLOATING_POINT_TYPES, project); + + return new XlcCParser(scanner, new XlcCTokenMap(supportVectors, supportDecimals), getBuiltinBindingsProvider(), index, properties); + } + + public String getId() { + return ID; + } + + @Override + protected IScannerExtensionConfiguration getScannerExtensionConfiguration() { + return XlcCScannerExtensionConfiguration.getInstance(); + } + + @Override + public ICLanguageKeywords getCLanguageKeywords() { + return XlcKeywords.ALL_C_KEYWORDS; + } + +}
\ No newline at end of file diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPLanguage.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPLanguage.java new file mode 100644 index 00000000000..33ba8a75cbe --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPLanguage.java @@ -0,0 +1,94 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc; + +import java.util.Map; + +import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; +import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; +import org.eclipse.cdt.core.dom.lrparser.IParser; +import org.eclipse.cdt.core.dom.lrparser.LRParserProperties; +import org.eclipse.cdt.core.dom.lrparser.gnu.GPPLanguage; +import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration; +import org.eclipse.cdt.core.index.IIndex; +import org.eclipse.cdt.core.lrparser.xlc.preferences.XlcLanguagePreferences; +import org.eclipse.cdt.core.lrparser.xlc.preferences.XlcPref; +import org.eclipse.cdt.core.model.ICLanguageKeywords; +import org.eclipse.cdt.core.parser.IScanner; +import org.eclipse.cdt.internal.core.lrparser.xlc.cpp.XlcCPPParser; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.Path; + +/** + * + * @author Mike Kucera + */ +public class XlcCPPLanguage extends GPPLanguage { + + public static final String ID = "org.eclipse.cdt.core.lrparser.xlc.cpp"; //$NON-NLS-1$ + + private static XlcCPPLanguage DEFAULT = new XlcCPPLanguage(); + + public static XlcCPPLanguage getDefault() { + return DEFAULT; + } + + + static IProject getProject(Map<String,String> properties) { + String path = properties.get(LRParserProperties.TRANSLATION_UNIT_PATH); + IFile[] file = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(new Path(path)); + + IProject project = null; + if(file != null && file.length > 0) { + project = file[0].getProject(); + } + + return project; + } + + + static boolean getPref(XlcPref key, IProject project) { + return Boolean.valueOf(XlcLanguagePreferences.get(key, project)); + } + + + @Override + protected IParser<IASTTranslationUnit> getParser(IScanner scanner, IIndex index, Map<String,String> properties) { + IProject project = getProject(properties); + boolean supportVectors = getPref(XlcPref.SUPPORT_VECTOR_TYPES, project); + boolean supportDecimals = getPref(XlcPref.SUPPORT_DECIMAL_FLOATING_POINT_TYPES, project); + boolean supportComplex = getPref(XlcPref.SUPPORT_COMPLEX_IN_CPP, project); + boolean supportRestrict = getPref(XlcPref.SUPPORT_RESTRICT_IN_CPP, project); + IDOMTokenMap tokenMap = new XlcCPPTokenMap(supportVectors, supportDecimals, supportComplex, supportRestrict); + + XlcCPPParser parser = new XlcCPPParser(scanner, tokenMap, getBuiltinBindingsProvider(), index, properties); + return parser; + } + + + public String getId() { + return ID; + } + + @Override + protected IScannerExtensionConfiguration getScannerExtensionConfiguration() { + return XlcCPPScannerExtensionConfiguration.getInstance(); + } + + + @Override + public ICLanguageKeywords getCLanguageKeywords() { + return XlcKeywords.ALL_CPP_KEYWORDS; + } + +}
\ No newline at end of file diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPScannerExtensionConfiguration.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPScannerExtensionConfiguration.java new file mode 100644 index 00000000000..c7b07c71c66 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPScannerExtensionConfiguration.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc; + +import org.eclipse.cdt.core.dom.parser.cpp.GPPScannerExtensionConfiguration; + +public class XlcCPPScannerExtensionConfiguration extends GPPScannerExtensionConfiguration { + + private static XlcCPPScannerExtensionConfiguration instance; + + + private XlcCPPScannerExtensionConfiguration() {} + + public static synchronized XlcCPPScannerExtensionConfiguration getInstance() { + if(instance == null) + instance = new XlcCPPScannerExtensionConfiguration(); + return instance; + } + + // CHANGED need to add this back in +// @Override +// public boolean supportUTFLiterals() { +// return true; +// } + + @Override + public char[] supportAdditionalNumericLiteralSuffixes() { + return "dflij".toCharArray(); //$NON-NLS-1$ + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPTokenMap.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPTokenMap.java new file mode 100644 index 00000000000..41e7fc66976 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPTokenMap.java @@ -0,0 +1,198 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc; + +import static org.eclipse.cdt.core.parser.IToken.*; +import static org.eclipse.cdt.internal.core.lrparser.xlc.cpp.XlcCPPParsersym.*; + +import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; +import org.eclipse.cdt.core.parser.IGCCToken; +import org.eclipse.cdt.core.parser.IToken; + +/** + * Maps tokens types returned by CPreprocessor to token types + * expected by the C++ parser. + * + * @author Mike Kucera + */ +public class XlcCPPTokenMap implements IDOMTokenMap { + + private final XlcKeywords keywordMap; + + public XlcCPPTokenMap(boolean supportVectors, boolean supportDecimalFloatingPoint, boolean supportComplex, boolean supportRestrict) { + keywordMap = XlcKeywords.createCPP(supportVectors, supportDecimalFloatingPoint, supportComplex, supportRestrict); + } + + + public int getEOFTokenKind() { + return TK_EOF_TOKEN; + } + + public int getEOCTokenKind() { + return TK_EndOfCompletion; + } + + public int mapKind(IToken token) { + + switch(token.getType()) { + case t__Complex : + case tIDENTIFIER : + Integer keywordKind = keywordMap.getTokenKind(token.getCharImage()); + return keywordKind == null ? TK_identifier : keywordKind; + + case tINTEGER : return TK_integer; + case tCOLONCOLON : return TK_ColonColon; + case tCOLON : return TK_Colon; + case tSEMI : return TK_SemiColon; + case tCOMMA : return TK_Comma; + case tQUESTION : return TK_Question; + case tLPAREN : return TK_LeftParen; + case tRPAREN : return TK_RightParen; + case tLBRACKET : return TK_LeftBracket; + case tRBRACKET : return TK_RightBracket; + case tLBRACE : return TK_LeftBrace; + case tRBRACE : return TK_RightBrace; + case tPLUSASSIGN : return TK_PlusAssign; + case tINCR : return TK_PlusPlus; + case tPLUS : return TK_Plus; + case tMINUSASSIGN : return TK_MinusAssign; + case tDECR : return TK_MinusMinus; + case tARROWSTAR : return TK_ArrowStar; + case tARROW : return TK_Arrow; + case tMINUS : return TK_Minus; + case tSTARASSIGN : return TK_StarAssign; + case tSTAR : return TK_Star; + case tMODASSIGN : return TK_PercentAssign; + case tMOD : return TK_Percent; + case tXORASSIGN : return TK_CaretAssign; + case tXOR : return TK_Caret; + case tAMPERASSIGN : return TK_AndAssign; + case tAND : return TK_AndAnd; + case tAMPER : return TK_And; + case tBITORASSIGN : return TK_OrAssign; + case tOR : return TK_OrOr; + case tBITOR : return TK_Or; + case tBITCOMPLEMENT: return TK_Tilde; + case tNOTEQUAL : return TK_NE; + case tNOT : return TK_Bang; + case tEQUAL : return TK_EQ; + case tASSIGN : return TK_Assign; + case tUNKNOWN_CHAR : return TK_Invalid; + case tSHIFTL : return TK_LeftShift; + case tLTEQUAL : return TK_LE; + case tLT : return TK_LT; + case tSHIFTRASSIGN : return TK_RightShiftAssign; + case tSHIFTR : return TK_RightShift; + case tGTEQUAL : return TK_GE; + case tGT : return TK_GT; + case tSHIFTLASSIGN : return TK_LeftShiftAssign; + case tELLIPSIS : return TK_DotDotDot; + case tDOTSTAR : return TK_DotStar; + case tDOT : return TK_Dot; + case tDIVASSIGN : return TK_SlashAssign; + case tDIV : return TK_Slash; + + case t_asm : return TK_asm; + case t_auto : return TK_auto; + case t_bool : return TK_bool; + case t_break : return TK_break; + case t_case : return TK_case; + case t_catch : return TK_catch; + case t_char : return TK_char; + case t_class : return TK_class; + case t_const : return TK_const; + case t_const_cast : return TK_const_cast; + case t_continue : return TK_continue; + case t_default : return TK_default; + case t_delete : return TK_delete; + case t_do : return TK_do; + case t_double : return TK_double; + case t_dynamic_cast: return TK_dynamic_cast; + case t_else : return TK_else; + case t_enum : return TK_enum; + case t_explicit : return TK_explicit; + case t_export : return TK_export; + case t_extern : return TK_extern; + case t_false : return TK_false; + case t_float : return TK_float; + case t_for : return TK_for; + case t_friend : return TK_friend; + case t_goto : return TK_goto; + case t_if : return TK_if; + case t_inline : return TK_inline; + case t_int : return TK_int; + case t_long : return TK_long; + case t_mutable : return TK_mutable; + case t_namespace : return TK_namespace; + case t_new : return TK_new; + case t_operator : return TK_operator; + case t_private : return TK_private; + case t_protected : return TK_protected; + case t_public : return TK_public; + case t_register : return TK_register; + case t_reinterpret_cast : return TK_reinterpret_cast; + case t_return : return TK_return; + case t_short : return TK_short; + case t_sizeof : return TK_sizeof; + case t_static : return TK_static; + case t_static_cast : return TK_static_cast; + case t_signed : return TK_signed; + case t_struct : return TK_struct; + case t_switch : return TK_switch; + case t_template : return TK_template; + case t_this : return TK_this; + case t_throw : return TK_throw; + case t_true : return TK_true; + case t_try : return TK_try; + case t_typedef : return TK_typedef; + case t_typeid : return TK_typeid; + case t_typename : return TK_typename; + case t_union : return TK_union; + case t_unsigned : return TK_unsigned; + case t_using : return TK_using; + case t_virtual : return TK_virtual; + case t_void : return TK_void; + case t_volatile : return TK_volatile; + case t_wchar_t : return TK_wchar_t; + case t_while : return TK_while; + + case tFLOATINGPT : return TK_floating; + case tSTRING : return TK_stringlit; + case tLSTRING : return TK_stringlit; + //case tUTF16STRING : return TK_stringlit; + //case tUTF32STRING : return TK_stringlit; + //case tUTF16CHAR : return TK_charconst; + //case tUTF32CHAR : return TK_charconst; + case tCHAR : return TK_charconst; + case tLCHAR : return TK_charconst; + case tCOMPLETION : return TK_Completion; + case tEOC : return TK_EndOfCompletion; + case tEND_OF_INPUT : return TK_EOF_TOKEN; + + case IGCCToken.t_typeof : return TK_typeof; + case IGCCToken.t___alignof__ : return TK___alignof__; + case IGCCToken.tMAX : return TK_MAX; + case IGCCToken.tMIN : return TK_MIN; + case IGCCToken.t__attribute__ : return TK___attribute__; + case IGCCToken.t__declspec : return TK___declspec; + + // GNU supports these but they are not in the C++ spec + + case t__Imaginary : return TK__Imaginary; + case t_restrict : return TK_restrict; + + default: + assert false : "token not recognized: " + token.getType(); //$NON-NLS-1$ + return TK_Invalid; + } + } + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCScannerExtensionConfiguration.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCScannerExtensionConfiguration.java new file mode 100644 index 00000000000..3da1e030f9a --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCScannerExtensionConfiguration.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc; + +import org.eclipse.cdt.core.dom.parser.c.GCCScannerExtensionConfiguration; + +public class XlcCScannerExtensionConfiguration extends GCCScannerExtensionConfiguration { + + private static XlcCScannerExtensionConfiguration instance; + + + private XlcCScannerExtensionConfiguration() {} + + public static synchronized XlcCScannerExtensionConfiguration getInstance() { + if(instance == null) + instance = new XlcCScannerExtensionConfiguration(); + return instance; + } + + // CHANGED need to add this back in +// @Override +// public boolean supportUTFLiterals() { +// return true; +// } + + @Override + public char[] supportAdditionalNumericLiteralSuffixes() { + return "dflij".toCharArray(); //$NON-NLS-1$ + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCTokenMap.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCTokenMap.java new file mode 100644 index 00000000000..732bf3a652b --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCTokenMap.java @@ -0,0 +1,165 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc; + +import static org.eclipse.cdt.core.parser.IToken.*; +import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.*; + +import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; +import org.eclipse.cdt.core.parser.IGCCToken; +import org.eclipse.cdt.core.parser.IToken; + +/** + * Maps tokens types returned by CPreprocessor to token types + * expected by the C99 parser. + * + * @author Mike Kucera + */ +public final class XlcCTokenMap implements IDOMTokenMap { + + private final XlcKeywords keywordMap; + + public XlcCTokenMap(boolean supportVectors, boolean supportDecimalFloatingPoint) { + keywordMap = XlcKeywords.createC(supportVectors, supportDecimalFloatingPoint); + } + + + public int getEOFTokenKind() { + return TK_EOF_TOKEN; + } + + public int getEOCTokenKind() { + return TK_EndOfCompletion; + } + + public int mapKind(IToken token) { + + switch(token.getType()) { + case tIDENTIFIER : + Integer keywordKind = keywordMap.getTokenKind(token.getCharImage()); + return keywordKind == null ? TK_identifier : keywordKind; + + case tINTEGER : return TK_integer; + case tCOLON : return TK_Colon; + case tSEMI : return TK_SemiColon; + case tCOMMA : return TK_Comma; + case tQUESTION : return TK_Question; + case tLPAREN : return TK_LeftParen; + case tRPAREN : return TK_RightParen; + case tLBRACKET : return TK_LeftBracket; + case tRBRACKET : return TK_RightBracket; + case tLBRACE : return TK_LeftBrace; + case tRBRACE : return TK_RightBrace; + case tPLUSASSIGN : return TK_PlusAssign; + case tINCR : return TK_PlusPlus; + case tPLUS : return TK_Plus; + case tMINUSASSIGN : return TK_MinusAssign; + case tDECR : return TK_MinusMinus; + case tARROW : return TK_Arrow; + case tMINUS : return TK_Minus; + case tSTARASSIGN : return TK_StarAssign; + case tSTAR : return TK_Star; + case tMODASSIGN : return TK_PercentAssign; + case tMOD : return TK_Percent; + case tXORASSIGN : return TK_CaretAssign; + case tXOR : return TK_Caret; + case tAMPERASSIGN : return TK_AndAssign; + case tAND : return TK_AndAnd; + case tAMPER : return TK_And; + case tBITORASSIGN : return TK_OrAssign; + case tOR : return TK_OrOr; + case tBITOR : return TK_Or; + case tBITCOMPLEMENT: return TK_Tilde; + case tNOTEQUAL : return TK_NE; + case tNOT : return TK_Bang; + case tEQUAL : return TK_EQ; + case tASSIGN : return TK_Assign; + case tUNKNOWN_CHAR : return TK_Invalid; + case tSHIFTL : return TK_LeftShift; + case tLTEQUAL : return TK_LE; + case tLT : return TK_LT; + case tSHIFTRASSIGN : return TK_RightShiftAssign; + case tSHIFTR : return TK_RightShift; + case tGTEQUAL : return TK_GE; + case tGT : return TK_GT; + case tSHIFTLASSIGN : return TK_LeftShiftAssign; + case tELLIPSIS : return TK_DotDotDot; + case tDOT : return TK_Dot; + case tDIVASSIGN : return TK_SlashAssign; + case tDIV : return TK_Slash; + + case t_auto : return TK_auto; + case t_break : return TK_break; + case t_case : return TK_case; + case t_char : return TK_char; + case t_const : return TK_const; + case t_continue : return TK_continue; + case t_default : return TK_default; + case t_do : return TK_do; + case t_double : return TK_double; + case t_else : return TK_else; + case t_enum : return TK_enum; + case t_extern : return TK_extern; + case t_float : return TK_float; + case t_for : return TK_for; + case t_goto : return TK_goto; + case t_if : return TK_if; + case t_inline : return TK_inline; + case t_int : return TK_int; + case t_long : return TK_long; + case t_register : return TK_register; + case t_return : return TK_return; + case t_short : return TK_short; + case t_sizeof : return TK_sizeof; + case t_static : return TK_static; + case t_signed : return TK_signed; + case t_struct : return TK_struct; + case t_switch : return TK_switch; + case t_typedef : return TK_typedef; + case t_union : return TK_union; + case t_unsigned : return TK_unsigned; + case t_void : return TK_void; + case t_volatile : return TK_volatile; + case t_while : return TK_while; + case tFLOATINGPT : return TK_floating; + case tSTRING : return TK_stringlit; + case tLSTRING : return TK_stringlit; + //case tUTF16STRING : return TK_stringlit; + //case tUTF32STRING : return TK_stringlit; + case tCHAR : return TK_charconst; + case tLCHAR : return TK_charconst; + //case tUTF16CHAR : return TK_charconst; + //case tUTF32CHAR : return TK_charconst; + case t__Bool : return TK__Bool; + case t__Complex : return TK__Complex; + case t__Imaginary : return TK__Imaginary; + case t_restrict : return TK_restrict; + case tCOMPLETION : return TK_Completion; + case tEOC : return TK_EndOfCompletion; + case tEND_OF_INPUT : return TK_EOF_TOKEN; + + + case IGCCToken.t_typeof : return TK_typeof; + case IGCCToken.t___alignof__ : return TK___alignof__; + case IGCCToken.tMAX : return TK_MAX; + case IGCCToken.tMIN : return TK_MIN; + case IGCCToken.t__attribute__ : return TK___attribute__; + case IGCCToken.t__declspec : return TK___declspec; + + case t_asm: return TK_asm; + + + default: + assert false : "token not recognized by the XLC parser: " + token.getType(); //$NON-NLS-1$ + return TK_Invalid; + } + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcKeywords.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcKeywords.java new file mode 100644 index 00000000000..38d5b54e778 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcKeywords.java @@ -0,0 +1,112 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.eclipse.cdt.core.dom.lrparser.CLanguageKeywords; +import org.eclipse.cdt.core.model.ICLanguageKeywords; +import org.eclipse.cdt.core.parser.ParserLanguage; +import org.eclipse.cdt.core.parser.util.CharArrayMap; +import org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym; +import org.eclipse.cdt.internal.core.lrparser.xlc.cpp.XlcCPPParsersym; + +public class XlcKeywords extends CLanguageKeywords { + + public static final XlcKeywords ALL_C_KEYWORDS = createC(true, true); + public static final XlcKeywords ALL_CPP_KEYWORDS = createCPP(true, true, true, true); + + + private final CharArrayMap<Integer> map = new CharArrayMap<Integer>(); + private final ParserLanguage language; + private String[] allKeywords = null; + + // TODO is this called anywhere else? + public static XlcKeywords createC(boolean supportVectors, boolean supportDecimalFloatingPoint) { + XlcKeywords keywords = new XlcKeywords(ParserLanguage.C); + CharArrayMap<Integer> map = keywords.map; + if(supportVectors) { + map.put("vector".toCharArray(), XlcCParsersym.TK_vector); + map.put("__vector".toCharArray(), XlcCParsersym.TK_vector); + map.put("pixel".toCharArray(), XlcCParsersym.TK_pixel); + map.put("__pixel".toCharArray(), XlcCParsersym.TK_pixel); + map.put("bool".toCharArray(), XlcCParsersym.TK_bool); + } + if(supportDecimalFloatingPoint) { + map.put("_Decimal32".toCharArray(), XlcCParsersym.TK__Decimal32); + map.put("_Decimal64".toCharArray(), XlcCParsersym.TK__Decimal64); + map.put("_Decimal128".toCharArray(), XlcCParsersym.TK__Decimal128); + } + return keywords; + } + + public static XlcKeywords createCPP(boolean supportVectors, boolean supportDecimalFloatingPoint, boolean supportComplex, boolean supportRestrict) { + XlcKeywords keywords = new XlcKeywords(ParserLanguage.CPP); + CharArrayMap<Integer> map = keywords.map; + if(supportVectors) { + map.put("vector".toCharArray(), XlcCPPParsersym.TK_vector); + map.put("__vector".toCharArray(), XlcCPPParsersym.TK_vector); + map.put("pixel".toCharArray(), XlcCPPParsersym.TK_pixel); + map.put("__pixel".toCharArray(), XlcCPPParsersym.TK_pixel); + } + if(supportDecimalFloatingPoint) { + map.put("_Decimal32".toCharArray(), XlcCPPParsersym.TK__Decimal32); + map.put("_Decimal64".toCharArray(), XlcCPPParsersym.TK__Decimal64); + map.put("_Decimal128".toCharArray(), XlcCPPParsersym.TK__Decimal128); + } + if(supportComplex) { + map.put("_Complex".toCharArray(), XlcCPPParsersym.TK__Complex); + } + if(supportRestrict) { + map.put("restrict".toCharArray(), XlcCPPParsersym.TK_restrict); + map.put("__restrict".toCharArray(), XlcCPPParsersym.TK_restrict); + map.put("__restrict__".toCharArray(), XlcCPPParsersym.TK_restrict); + } + + return keywords; + } + + + private XlcKeywords(ParserLanguage language) { + super(language, XlcCScannerExtensionConfiguration.getInstance()); + this.language = language; + } + + /** + * Returns the LPG token kind for additional keywords defined by + * the XLC extensions, null otherwise. + */ + public Integer getTokenKind(char[] keyword) { + return map.get(keyword); + } + + @Override + public synchronized String[] getKeywords() { + if(allKeywords == null) { + ICLanguageKeywords base = new CLanguageKeywords(language, XlcCScannerExtensionConfiguration.getInstance()); + String[] baseKeywords = base.getKeywords(); + + List<String> keywords = new ArrayList<String>(); + keywords.addAll(Arrays.asList(baseKeywords)); + + for(char[] keyword : map.keys()) { + keywords.add(String.valueOf(keyword)); + } + + allKeywords = keywords.toArray(new String[keywords.size()]); + } + + return allKeywords; + } + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/action/XlcCBuildASTParserAction.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/action/XlcCBuildASTParserAction.java new file mode 100644 index 00000000000..e0f69801b6d --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/action/XlcCBuildASTParserAction.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.action; + +import lpg.lpgjavaruntime.IToken; + +import org.eclipse.cdt.core.dom.lrparser.action.ISecondaryParserFactory; +import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream; +import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack; +import org.eclipse.cdt.core.dom.lrparser.action.gnu.GCCBuildASTParserAction; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCASTVectorTypeSpecifier; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCNodeFactory; +import org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym; + +public class XlcCBuildASTParserAction extends GCCBuildASTParserAction { + + private IXlcCNodeFactory nodeFactory; + + + public XlcCBuildASTParserAction(ITokenStream parser, + ScopedStack<Object> astStack, IXlcCNodeFactory nodeFactory, + ISecondaryParserFactory parserFactory) { + super(parser, astStack, nodeFactory, parserFactory); + this.nodeFactory = nodeFactory; + } + + /* + * vector_type + * ::= <openscope-ast> sqlist_op 'vector' vector_type_specifier all_specifier_qualifier_list + */ + public void consumeVectorTypeSpecifier() { + IXlcCASTVectorTypeSpecifier declSpec = nodeFactory.newVectorTypeSpecifier(); + + for(Object specifier : astStack.closeScope()) { + if(specifier instanceof IToken) { + switch(((IToken)specifier).getKind()) { + case XlcCParsersym.TK_pixel : + declSpec.setPixel(true); + continue; + case XlcCParsersym.TK_bool : + declSpec.setBool(true); + continue; + case XlcCParsersym.TK_vector : + continue; + } + } + + setSpecifier(declSpec, specifier); + } + + setOffsetAndLength(declSpec); + astStack.push(declSpec); + } + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/action/XlcCPPBuildASTParserAction.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/action/XlcCPPBuildASTParserAction.java new file mode 100644 index 00000000000..7505e2be10a --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/action/XlcCPPBuildASTParserAction.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.action; + +import lpg.lpgjavaruntime.IToken; + +import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap; +import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream; +import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack; +import org.eclipse.cdt.core.dom.lrparser.action.TokenMap; +import org.eclipse.cdt.core.dom.lrparser.action.cpp.ICPPSecondaryParserFactory; +import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPBuildASTParserAction; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPASTModifiedArrayModifier; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPASTVectorTypeSpecifier; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPNodeFactory; +import org.eclipse.cdt.internal.core.lrparser.xlc.cpp.XlcCPPParsersym; + +public class XlcCPPBuildASTParserAction extends GPPBuildASTParserAction { + + private IXlcCPPNodeFactory nodeFactory; + private final ITokenMap tokenMap; + + + public XlcCPPBuildASTParserAction(ITokenStream parser, + ScopedStack<Object> astStack, IXlcCPPNodeFactory nodeFactory, + ICPPSecondaryParserFactory parserFactory) { + super(parser, astStack, nodeFactory, parserFactory); + this.nodeFactory = nodeFactory; + this.tokenMap = new TokenMap(XlcCPPParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols()); + } + + /* + * vector_type + * ::= <openscope-ast> sqlist_op 'vector' vector_type_specifier all_specifier_qualifier_list + */ + public void consumeVectorTypeSpecifier() { + IXlcCPPASTVectorTypeSpecifier declSpec = nodeFactory.newVectorTypeSpecifier(); + + for(Object specifier : astStack.closeScope()) { + if(specifier instanceof IToken) { + switch(tokenMap.mapKind(((IToken)specifier).getKind())) { + case XlcCPPParsersym.TK_pixel : + declSpec.setPixel(true); + continue; + case XlcCPPParsersym.TK_vector : + continue; + } + } + + setSpecifier(declSpec, specifier); + } + + setOffsetAndLength(declSpec); + astStack.push(declSpec); + } + + + public void consumeDirectDeclaratorModifiedArrayModifier(boolean isStatic, + boolean isVarSized, boolean hasTypeQualifierList, boolean hasAssignmentExpr) { + assert isStatic || isVarSized || hasTypeQualifierList; + + IXlcCPPASTModifiedArrayModifier arrayModifier = nodeFactory.newModifiedArrayModifier(null); + + // consume all the stuff between the square brackets into an array modifier + arrayModifier.setStatic(isStatic); + arrayModifier.setVariableSized(isVarSized); + + if(hasAssignmentExpr) + arrayModifier.setConstantExpression((IASTExpression)astStack.pop()); + + if(hasTypeQualifierList) + collectArrayModifierTypeQualifiers(arrayModifier); + + setOffsetAndLength(arrayModifier); + astStack.push(arrayModifier); + } + + private void collectArrayModifierTypeQualifiers(IXlcCPPASTModifiedArrayModifier arrayModifier) { + for(Object o : astStack.closeScope()) { + switch(tokenMap.mapKind(((IToken)o).getKind())) { + case XlcCPPParsersym.TK_const: arrayModifier.setConst(true); break; + case XlcCPPParsersym.TK_restrict: arrayModifier.setRestrict(true); break; + case XlcCPPParsersym.TK_volatile: arrayModifier.setVolatile(true); break; + } + } + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/activator/XlcParserPlugin.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/activator/XlcParserPlugin.java new file mode 100644 index 00000000000..0035b2cb6b3 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/activator/XlcParserPlugin.java @@ -0,0 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.activator; + +import org.eclipse.core.runtime.Plugin; + +public class XlcParserPlugin extends Plugin { + + public static final String PLUGIN_ID = "org.eclipse.cdt.core.lrparser.xlc"; + + + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCASTVectorTypeSpecifier.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCASTVectorTypeSpecifier.java new file mode 100644 index 00000000000..ca2233b2a86 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCASTVectorTypeSpecifier.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.dom.ast.c.ICASTDeclSpecifier; + +public interface IXlcCASTVectorTypeSpecifier extends ICASTDeclSpecifier { + + public boolean isPixel(); + + public void setPixel(boolean isPixel); + + public boolean isBool(); + + public void setBool(boolean isBool); + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCNodeFactory.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCNodeFactory.java new file mode 100644 index 00000000000..9a832ff325e --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCNodeFactory.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.dom.lrparser.action.c99.ICNodeFactory; + + + +public interface IXlcCNodeFactory extends ICNodeFactory { + + public IXlcCASTVectorTypeSpecifier newVectorTypeSpecifier(); +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPASTModifiedArrayModifier.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPASTModifiedArrayModifier.java new file mode 100644 index 00000000000..d9ac929dd2b --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPASTModifiedArrayModifier.java @@ -0,0 +1,98 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; + +/** + * Allow C99 style variable length arrays in XL C++. + * + */ +public interface IXlcCPPASTModifiedArrayModifier extends IASTArrayModifier { + + + /** + * Is the const modifier used? + * + * @return boolean + */ + public boolean isConst(); + + /** + * Is the static modifier used? + * + * @return boolean + */ + public boolean isStatic(); + + /** + * Is the restrict modifier used? + * + * @return boolean + */ + public boolean isRestrict(); + + /** + * Is the volatile modifier used? + * + * @return boolean + */ + public boolean isVolatile(); + + /** + * Set true/false that the const modifier is used. + * + * @param value + * boolean + */ + public void setConst(boolean value); + + /** + * Set true/false that the volatile modifier is used. + * + * @param value + * boolean + */ + public void setVolatile(boolean value); + + /** + * Set true/false that the restrict modifier is used. + * + * @param value + * boolean + */ + public void setRestrict(boolean value); + + /** + * Set true/false that the static modifier is used. + * + * @param value + * boolean + */ + public void setStatic(boolean value); + + /** + * Is the array variable sized? ( used ... ) + * + * @return boolean + */ + public boolean isVariableSized(); + + /** + * Set the array to be variable sized dependent upon value. + * + * @param value + * boolean + */ + public void setVariableSized(boolean value); + + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPASTVectorTypeSpecifier.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPASTVectorTypeSpecifier.java new file mode 100644 index 00000000000..a1d0d04dd92 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPASTVectorTypeSpecifier.java @@ -0,0 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier; + +public interface IXlcCPPASTVectorTypeSpecifier extends ICPPASTDeclSpecifier { + + public boolean isPixel(); + + public void setPixel(boolean isPixel); + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPNodeFactory.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPNodeFactory.java new file mode 100644 index 00000000000..caacac907a8 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPNodeFactory.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.dom.lrparser.action.cpp.ICPPNodeFactory; + + +public interface IXlcCPPNodeFactory extends ICPPNodeFactory { + + public IXlcCPPASTVectorTypeSpecifier newVectorTypeSpecifier(); + + public IXlcCPPASTModifiedArrayModifier newModifiedArrayModifier(IASTExpression expr); +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/PreferenceInitializer.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/PreferenceInitializer.java new file mode 100644 index 00000000000..d5eef63b71e --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/PreferenceInitializer.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.preferences; + +import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; + +public class PreferenceInitializer extends AbstractPreferenceInitializer { + + @Override + public void initializeDefaultPreferences() { + XlcLanguagePreferences.initializeDefaultPreferences(); + } + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/XlcLanguagePreferences.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/XlcLanguagePreferences.java new file mode 100644 index 00000000000..1e201483041 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/XlcLanguagePreferences.java @@ -0,0 +1,111 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.preferences; + +import org.eclipse.cdt.core.lrparser.xlc.activator.XlcParserPlugin; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ProjectScope; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.preferences.DefaultScope; +import org.eclipse.core.runtime.preferences.IScopeContext; +import org.eclipse.core.runtime.preferences.InstanceScope; +import org.osgi.service.prefs.Preferences; + +/** + * TODO trigger the indexer? + * + * @author Mike Kucera + */ +public class XlcLanguagePreferences { + + private static final String QUALIFIER = XlcParserPlugin.PLUGIN_ID; + private static final String XLC_PREFERENCES_NODE = "xlc.preferences"; + + + static void initializeDefaultPreferences() { + Preferences defaultNode = getDefaultPreferences(); + + for(XlcPref p : XlcPref.values()) { + defaultNode.put(p.toString(), p.getDefaultValue()); + } + } + + + + public static void setProjectPreference(XlcPref key, String value, IProject project) { + getProjectPreferences(project).put(key.toString(), value); + } + + public static void setWorkspacePreference(XlcPref key, String value) { + getWorkspacePreferences().put(key.toString(), value); + } + + + + public static String getProjectPreference(XlcPref key, IProject project) { + return getProjectPreferences(project).get(key.toString(), null); + } + + public static String getWorkspacePreference(XlcPref key) { + return getWorkspacePreferences().get(key.toString(), null); + } + + public static String getDefaultPreference(XlcPref key) { + return getDefaultPreferences().get(key.toString(), null); + } + + + /** + * Returns the preference for the given key. + * + * @param project If null then just the workspace and default preferences will be checked. + */ + public static String get(XlcPref key, IProject project) { + return Platform.getPreferencesService().get(key.toString(), null, getPreferences(project)); + } + + private static Preferences[] getPreferences(IProject project) { + if(project == null) { + return new Preferences[] { + getWorkspacePreferences(), + getDefaultPreferences() + }; + } + else { + return new Preferences[] { + getProjectPreferences(project), + getWorkspacePreferences(), + getDefaultPreferences() + }; + } + } + + + + private static Preferences getDefaultPreferences() { + return getPreferences(new DefaultScope()); + } + + private static Preferences getWorkspacePreferences() { + return getPreferences(new InstanceScope()); + } + + private static Preferences getProjectPreferences(IProject project) { + return getPreferences(new ProjectScope(project)); + } + + private static Preferences getPreferences(IScopeContext scope) { + return scope.getNode(QUALIFIER).node(XLC_PREFERENCES_NODE); + } + + + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/XlcPref.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/XlcPref.java new file mode 100644 index 00000000000..9900b575e56 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/XlcPref.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.core.lrparser.xlc.preferences; + + +public enum XlcPref { + + + SUPPORT_VECTOR_TYPES("true"), + SUPPORT_DECIMAL_FLOATING_POINT_TYPES("true"), + SUPPORT_COMPLEX_IN_CPP("true"), + SUPPORT_RESTRICT_IN_CPP("true"); + + + private final String defaultVal; + + private XlcPref(String defaultVal) { + this.defaultVal = defaultVal; + } + + public String getDefaultValue() { + return defaultVal; + } +} + + + diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCASTVectorTypeSpecifier.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCASTVectorTypeSpecifier.java new file mode 100644 index 00000000000..5cc2179c4fb --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCASTVectorTypeSpecifier.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.internal.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCASTVectorTypeSpecifier; +import org.eclipse.cdt.internal.core.dom.parser.c.CASTSimpleDeclSpecifier; + +@SuppressWarnings("restriction") +public class XlcCASTVectorTypeSpecifier extends CASTSimpleDeclSpecifier implements IXlcCASTVectorTypeSpecifier { + + private boolean isPixel; + private boolean isBool; + + public XlcCASTVectorTypeSpecifier() { + super(); + } + + + public boolean isPixel() { + return isPixel; + } + + public void setPixel(boolean isPixel) { + this.isPixel = isPixel; + } + + public boolean isBool() { + return isBool; + } + + public void setBool(boolean isBool) { + this.isBool = isBool; + } + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCNodeFactory.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCNodeFactory.java new file mode 100644 index 00000000000..ca5c50a7c4b --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCNodeFactory.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.internal.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.dom.lrparser.action.c99.CNodeFactory; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCASTVectorTypeSpecifier; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCNodeFactory; + + + +public class XlcCNodeFactory extends CNodeFactory implements IXlcCNodeFactory { + + private static final XlcCNodeFactory DEFAULT_INSTANCE = new XlcCNodeFactory(); + + public static XlcCNodeFactory getDefault() { + return DEFAULT_INSTANCE; + } + + public IXlcCASTVectorTypeSpecifier newVectorTypeSpecifier() { + return new XlcCASTVectorTypeSpecifier(); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPASTModifiedArrayModifier.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPASTModifiedArrayModifier.java new file mode 100644 index 00000000000..93e5c40344a --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPASTModifiedArrayModifier.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.internal.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPASTModifiedArrayModifier; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTArrayModifier; + +@SuppressWarnings("restriction") +public class XlcCPPASTModifiedArrayModifier extends CPPASTArrayModifier implements IXlcCPPASTModifiedArrayModifier { + + private boolean isVolatile; + private boolean isRestrict; + private boolean isStatic; + private boolean isConst; + private boolean varSized; + + public XlcCPPASTModifiedArrayModifier() { + } + + public XlcCPPASTModifiedArrayModifier(IASTExpression exp) { + super(exp); + } + + public boolean isConst() { + return isConst; + } + + public boolean isStatic() { + return isStatic; + } + + public boolean isRestrict() { + return isRestrict; + } + + public boolean isVolatile() { + return isVolatile; + } + + public void setConst(boolean value) { + this.isConst = value; + } + + public void setVolatile(boolean value) { + this.isVolatile = value; + } + + public void setRestrict(boolean value) { + this.isRestrict = value; + } + + public void setStatic(boolean value) { + this.isStatic = value; + } + + public boolean isVariableSized() { + return varSized; + } + + public void setVariableSized(boolean value) { + varSized = value; + } + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPASTVectorTypeSpecifier.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPASTVectorTypeSpecifier.java new file mode 100644 index 00000000000..2cf942e9f4b --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPASTVectorTypeSpecifier.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.internal.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPASTVectorTypeSpecifier; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleDeclSpecifier; + +@SuppressWarnings("restriction") +public class XlcCPPASTVectorTypeSpecifier extends CPPASTSimpleDeclSpecifier implements IXlcCPPASTVectorTypeSpecifier { + + private boolean isPixel; + + public XlcCPPASTVectorTypeSpecifier() { + super(); + } + + public boolean isPixel() { + return isPixel; + } + + public void setPixel(boolean isPixel) { + this.isPixel = isPixel; + } + +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPNodeFactory.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPNodeFactory.java new file mode 100644 index 00000000000..aeac4daec70 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPNodeFactory.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.internal.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPNodeFactory; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPASTModifiedArrayModifier; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPASTVectorTypeSpecifier; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPNodeFactory; +public class XlcCPPNodeFactory extends CPPNodeFactory implements IXlcCPPNodeFactory { + +private static final XlcCPPNodeFactory DEFAULT_INSTANCE = new XlcCPPNodeFactory(); + + public static XlcCPPNodeFactory getDefault() { + return DEFAULT_INSTANCE; + } + + public IXlcCPPASTVectorTypeSpecifier newVectorTypeSpecifier() { + return new XlcCPPASTVectorTypeSpecifier(); + } + + public IXlcCPPASTModifiedArrayModifier newModifiedArrayModifier(IASTExpression expr) { + return new XlcCPPASTModifiedArrayModifier(expr); + } +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParser.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParser.java new file mode 100644 index 00000000000..89a5ebe05ed --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParser.java @@ -0,0 +1,1433 @@ +/******************************************************************************* +* Copyright (c) 2006, 2009 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.lrparser.xlc.c; + +import lpg.lpgjavaruntime.*; + +import java.util.*; +import org.eclipse.cdt.core.dom.ast.*; +import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; +import org.eclipse.cdt.core.dom.lrparser.IParser; +import org.eclipse.cdt.core.dom.lrparser.ITokenCollector; +import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter; +import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream; +import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; +import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack; +import org.eclipse.cdt.core.parser.IScanner; +import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider; +import org.eclipse.cdt.core.index.IIndex; + +import org.eclipse.cdt.core.dom.lrparser.action.c99.CNodeFactory; +import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction; +import org.eclipse.cdt.core.dom.lrparser.action.c99.C99SecondaryParserFactory; + +import org.eclipse.cdt.core.dom.lrparser.action.gnu.GNUBuildASTParserAction; + +import org.eclipse.cdt.core.dom.lrparser.action.gnu.GCCBuildASTParserAction; +import org.eclipse.cdt.core.dom.lrparser.action.gnu.GCCSecondaryParserFactory; + +import org.eclipse.cdt.core.lrparser.xlc.action.XlcCBuildASTParserAction; +import org.eclipse.cdt.core.dom.lrparser.action.gnu.GCCSecondaryParserFactory; +import org.eclipse.cdt.internal.core.lrparser.xlc.ast.XlcCNodeFactory; + +public class XlcCParser extends PrsStream implements RuleAction, ITokenStream, + ITokenCollector, IParser< IASTTranslationUnit > + +{ + private static ParseTable prs = new XlcCParserprs(); + private FixedBacktrackingParser btParser; + + public FixedBacktrackingParser getParser() { return btParser; } + private void setResult(Object object) { btParser.setSym1(object); } + public Object getRhsSym(int i) { return btParser.getSym(i); } + + public int getRhsTokenIndex(int i) { return btParser.getToken(i); } + public IToken getRhsIToken(int i) { return super.getIToken(getRhsTokenIndex(i)); } + + public int getRhsFirstTokenIndex(int i) { return btParser.getFirstToken(i); } + public IToken getRhsFirstIToken(int i) { return super.getIToken(getRhsFirstTokenIndex(i)); } + + public int getRhsLastTokenIndex(int i) { return btParser.getLastToken(i); } + public IToken getRhsLastIToken(int i) { return super.getIToken(getRhsLastTokenIndex(i)); } + + public int getLeftSpan() { return btParser.getFirstToken(); } + 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 XlcCParser(LexStream lexStream) + { + super(lexStream); + + try + { + super.remapTerminalSymbols(orderedTerminalSymbols(), XlcCParserprs.EOFT_SYMBOL); + } + catch(NullExportedSymbolsException e) { + } + catch(NullTerminalSymbolsException e) { + } + catch(UnimplementedTerminalsException e) + { + java.util.ArrayList unimplemented_symbols = e.getSymbols(); + System.out.println("The Lexer will not scan the following token(s):"); + for (int i = 0; i < unimplemented_symbols.size(); i++) + { + Integer id = (Integer) unimplemented_symbols.get(i); + System.out.println(" " + XlcCParsersym.orderedTerminalSymbols[id.intValue()]); + } + System.out.println(); + } + catch(UndefinedEofSymbolException e) + { + throw new Error(new UndefinedEofSymbolException + ("The Lexer does not implement the Eof symbol " + + XlcCParsersym.orderedTerminalSymbols[XlcCParserprs.EOFT_SYMBOL])); + } + } + + public String[] orderedTerminalSymbols() { return XlcCParsersym.orderedTerminalSymbols; } + public String getTokenKindName(int kind) { return XlcCParsersym.orderedTerminalSymbols[kind]; } + public int getEOFTokenKind() { return XlcCParserprs.EOFT_SYMBOL; } + public PrsStream getParseStream() { return (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 void parser() + { + parser(null, 0); + } + + public void parser(Monitor monitor) + { + parser(monitor, 0); + } + + public void parser(int error_repair_count) + { + parser(null, error_repair_count); + } + + public void parser(Monitor monitor, int error_repair_count) + { + try + { + btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this); + } + catch (NotBacktrackParseTableException e) + { + throw new Error(new NotBacktrackParseTableException + ("Regenerate XlcCParserprs.java with -BACKTRACK option")); + } + catch (BadParseSymFileException e) + { + throw new Error(new BadParseSymFileException("Bad Parser Symbol File -- XlcCParsersym.java")); + } + + try + { + btParser.parse(error_repair_count); + } + catch (BadParseException e) + { + reset(e.error_token); // point to error token + DiagnoseParser diagnoseParser = new DiagnoseParser(this, prs); + diagnoseParser.diagnose(e.error_token); + } + } + + +private XlcCBuildASTParserAction action; +private IASTCompletionNode compNode; + + +public XlcCParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Map<String,String> properties) { + initActions(properties); + action.initializeTranslationUnit(scanner, builtinBindingsProvider, index); + CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap); +} + +private void initActions(Map<String,String> properties) { + ScopedStack<Object> astStack = new ScopedStack<Object>(); + + action = new XlcCBuildASTParserAction (this, astStack, XlcCNodeFactory.getDefault() , GCCSecondaryParserFactory.getDefault() ); + action.setParserProperties(properties); + + + + gnuAction = new GNUBuildASTParserAction (this, astStack, XlcCNodeFactory.getDefault() ); + gnuAction.setParserProperties(properties); + +} + + +public void addToken(IToken token) { + token.setKind(mapKind(token.getKind())); // TODO does mapKind need to be called? + super.addToken(token); +} + + +public IASTTranslationUnit parse() { + // this has to be done, or... kaboom! + setStreamLength(getSize()); + + final int errorRepairCount = -1; // -1 means full error handling + parser(null, errorRepairCount); // do the actual parse + super.resetTokenStream(); // allow tokens to be garbage collected + + compNode = action.getASTCompletionNode(); // the completion node may be null + return ( IASTTranslationUnit ) action.getParseResult(); +} + + +public IASTCompletionNode getCompletionNode() { + return compNode; +} + +// uncomment this method to use with backtracking parser +public List<IToken> getRuleTokens() { + return getTokens().subList(getLeftSpan(), getRightSpan() + 1); +} + +public String[] getOrderedTerminalSymbols() { + return XlcCParsersym.orderedTerminalSymbols; +} + +@SuppressWarnings("nls") +public String getName() { + return "XlcCParser"; +} + + +private GNUBuildASTParserAction gnuAction; + + public void ruleAction(int ruleNumber) + { + switch (ruleNumber) + { + + // + // Rule 1: <openscope-ast> ::= $Empty + // + case 1: { action. openASTScope(); break; + } + + // + // Rule 2: <empty> ::= $Empty + // + case 2: { action. consumeEmpty(); break; + } + + // + // Rule 13: literal ::= integer + // + case 13: { action. consumeExpressionLiteral(IASTLiteralExpression.lk_integer_constant); break; + } + + // + // Rule 14: literal ::= floating + // + case 14: { action. consumeExpressionLiteral(IASTLiteralExpression.lk_float_constant); break; + } + + // + // Rule 15: literal ::= charconst + // + case 15: { action. consumeExpressionLiteral(IASTLiteralExpression.lk_char_constant); break; + } + + // + // Rule 16: literal ::= stringlit + // + case 16: { action. consumeExpressionLiteral(IASTLiteralExpression.lk_string_literal); break; + } + + // + // Rule 18: primary_expression ::= primary_expression_id + // + case 18: { action. consumeExpressionID(); break; + } + + // + // Rule 19: primary_expression ::= ( expression ) + // + case 19: { action. consumeExpressionBracketed(); break; + } + + // + // Rule 22: postfix_expression ::= postfix_expression [ expression ] + // + case 22: { action. consumeExpressionArraySubscript(); break; + } + + // + // Rule 23: postfix_expression ::= postfix_expression ( expression_list_opt ) + // + case 23: { action. consumeExpressionFunctionCall(); break; + } + + // + // Rule 24: postfix_expression ::= postfix_expression . member_name + // + case 24: { action. consumeExpressionFieldReference(false); break; + } + + // + // Rule 25: postfix_expression ::= postfix_expression -> member_name + // + case 25: { action. consumeExpressionFieldReference(true); break; + } + + // + // Rule 26: postfix_expression ::= postfix_expression ++ + // + case 26: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixIncr); break; + } + + // + // Rule 27: postfix_expression ::= postfix_expression -- + // + case 27: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixDecr); break; + } + + // + // Rule 28: postfix_expression ::= ( type_id ) initializer_list + // + case 28: { action. consumeExpressionTypeIdInitializer(); break; + } + + // + // Rule 33: unary_expression ::= ++ unary_expression + // + case 33: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixIncr); break; + } + + // + // Rule 34: unary_expression ::= -- unary_expression + // + case 34: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixDecr); break; + } + + // + // Rule 35: unary_expression ::= & cast_expression + // + case 35: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_amper); break; + } + + // + // Rule 36: unary_expression ::= * cast_expression + // + case 36: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_star); break; + } + + // + // Rule 37: unary_expression ::= + cast_expression + // + case 37: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_plus); break; + } + + // + // Rule 38: unary_expression ::= - cast_expression + // + case 38: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_minus); break; + } + + // + // Rule 39: unary_expression ::= ~ cast_expression + // + case 39: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_tilde); break; + } + + // + // Rule 40: unary_expression ::= ! cast_expression + // + case 40: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_not); break; + } + + // + // Rule 41: unary_expression ::= sizeof unary_expression + // + case 41: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_sizeof); break; + } + + // + // Rule 42: unary_expression ::= sizeof ( type_id ) + // + case 42: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_sizeof); break; + } + + // + // Rule 44: cast_expression ::= ( type_id ) cast_expression + // + case 44: { action. consumeExpressionCast(IASTCastExpression.op_cast); break; + } + + // + // Rule 46: multiplicative_expression ::= multiplicative_expression * cast_expression + // + case 46: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_multiply); break; + } + + // + // Rule 47: multiplicative_expression ::= multiplicative_expression / cast_expression + // + case 47: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_divide); break; + } + + // + // Rule 48: multiplicative_expression ::= multiplicative_expression % cast_expression + // + case 48: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_modulo); break; + } + + // + // Rule 50: additive_expression ::= additive_expression + multiplicative_expression + // + case 50: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_plus); break; + } + + // + // Rule 51: additive_expression ::= additive_expression - multiplicative_expression + // + case 51: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_minus); break; + } + + // + // Rule 53: shift_expression ::= shift_expression << additive_expression + // + case 53: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_shiftLeft); break; + } + + // + // Rule 54: shift_expression ::= shift_expression >> additive_expression + // + case 54: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_shiftRight); break; + } + + // + // Rule 56: relational_expression ::= relational_expression < shift_expression + // + case 56: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_lessThan); break; + } + + // + // Rule 57: relational_expression ::= relational_expression > shift_expression + // + case 57: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_greaterThan); break; + } + + // + // Rule 58: relational_expression ::= relational_expression <= shift_expression + // + case 58: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_lessEqual); break; + } + + // + // Rule 59: relational_expression ::= relational_expression >= shift_expression + // + case 59: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_greaterEqual); break; + } + + // + // Rule 61: equality_expression ::= equality_expression == relational_expression + // + case 61: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_equals); break; + } + + // + // Rule 62: equality_expression ::= equality_expression != relational_expression + // + case 62: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_notequals); break; + } + + // + // Rule 64: and_expression ::= and_expression & equality_expression + // + case 64: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryAnd); break; + } + + // + // Rule 66: exclusive_or_expression ::= exclusive_or_expression ^ and_expression + // + case 66: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryXor); break; + } + + // + // Rule 68: inclusive_or_expression ::= inclusive_or_expression | exclusive_or_expression + // + case 68: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryOr); break; + } + + // + // Rule 70: logical_and_expression ::= logical_and_expression && inclusive_or_expression + // + case 70: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_logicalAnd); break; + } + + // + // Rule 72: logical_or_expression ::= logical_or_expression || logical_and_expression + // + case 72: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_logicalOr); break; + } + + // + // Rule 74: conditional_expression ::= logical_or_expression ? expression : assignment_expression + // + case 74: { action. consumeExpressionConditional(); break; + } + + // + // Rule 76: assignment_expression ::= unary_expression = assignment_expression + // + case 76: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_assign); break; + } + + // + // Rule 77: assignment_expression ::= unary_expression *= assignment_expression + // + case 77: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_multiplyAssign); break; + } + + // + // Rule 78: assignment_expression ::= unary_expression /= assignment_expression + // + case 78: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_divideAssign); break; + } + + // + // Rule 79: assignment_expression ::= unary_expression %= assignment_expression + // + case 79: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_moduloAssign); break; + } + + // + // Rule 80: assignment_expression ::= unary_expression += assignment_expression + // + case 80: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_plusAssign); break; + } + + // + // Rule 81: assignment_expression ::= unary_expression -= assignment_expression + // + case 81: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_minusAssign); break; + } + + // + // Rule 82: assignment_expression ::= unary_expression <<= assignment_expression + // + case 82: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_shiftLeftAssign); break; + } + + // + // Rule 83: assignment_expression ::= unary_expression >>= assignment_expression + // + case 83: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_shiftRightAssign); break; + } + + // + // Rule 84: assignment_expression ::= unary_expression &= assignment_expression + // + case 84: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryAndAssign); break; + } + + // + // Rule 85: assignment_expression ::= unary_expression ^= assignment_expression + // + case 85: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryXorAssign); break; + } + + // + // Rule 86: assignment_expression ::= unary_expression |= assignment_expression + // + case 86: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_binaryOrAssign); break; + } + + // + // Rule 89: expression_list ::= <openscope-ast> expression_list_actual + // + case 89: { action. consumeExpressionList(); break; + } + + // + // Rule 91: expression_list_opt ::= $Empty + // + case 91: { action. consumeEmpty(); break; + } + + // + // Rule 101: statement ::= ERROR_TOKEN + // + case 101: { action. consumeStatementProblem(); break; + } + + // + // Rule 102: labeled_statement ::= identifier_token : statement + // + case 102: { action. consumeStatementLabeled(); break; + } + + // + // Rule 103: labeled_statement ::= case constant_expression : statement + // + case 103: { action. consumeStatementCase(); break; + } + + // + // Rule 104: labeled_statement ::= default : statement + // + case 104: { action. consumeStatementDefault(); break; + } + + // + // Rule 105: compound_statement ::= { } + // + case 105: { action. consumeStatementCompoundStatement(false); break; + } + + // + // Rule 106: compound_statement ::= { <openscope-ast> block_item_list } + // + case 106: { action. consumeStatementCompoundStatement(true); break; + } + + // + // Rule 110: block_item ::= declaration + // + case 110: { action. consumeStatementDeclarationWithDisambiguation(); break; + } + + // + // Rule 111: expression_statement ::= ; + // + case 111: { action. consumeStatementNull(); break; + } + + // + // Rule 112: expression_statement ::= expression_in_statement ; + // + case 112: { action. consumeStatementExpression(); break; + } + + // + // Rule 113: selection_statement ::= if ( expression ) statement + // + case 113: { action. consumeStatementIf(false); break; + } + + // + // Rule 114: selection_statement ::= if ( expression ) statement else statement + // + case 114: { action. consumeStatementIf(true); break; + } + + // + // Rule 115: selection_statement ::= switch ( expression ) statement + // + case 115: { action. consumeStatementSwitch(); break; + } + + // + // Rule 117: expression_opt ::= $Empty + // + case 117: { action. consumeEmpty(); break; + } + + // + // Rule 118: iteration_statement ::= do statement while ( expression ) ; + // + case 118: { action. consumeStatementDoLoop(); break; + } + + // + // Rule 119: iteration_statement ::= while ( expression ) statement + // + case 119: { action. consumeStatementWhileLoop(); break; + } + + // + // Rule 120: iteration_statement ::= for ( expression_opt ; expression_opt ; expression_opt ) statement + // + case 120: { action. consumeStatementForLoop(); break; + } + + // + // Rule 121: iteration_statement ::= for ( declaration expression_opt ; expression_opt ) statement + // + case 121: { action. consumeStatementForLoop(); break; + } + + // + // Rule 122: jump_statement ::= goto identifier_token ; + // + case 122: { action. consumeStatementGoto(); break; + } + + // + // Rule 123: jump_statement ::= continue ; + // + case 123: { action. consumeStatementContinue(); break; + } + + // + // Rule 124: jump_statement ::= break ; + // + case 124: { action. consumeStatementBreak(); break; + } + + // + // Rule 125: jump_statement ::= return ; + // + case 125: { action. consumeStatementReturn(false); break; + } + + // + // Rule 126: jump_statement ::= return expression ; + // + case 126: { action. consumeStatementReturn(true); break; + } + + // + // Rule 127: declaration ::= declaration_specifiers ; + // + case 127: { action. consumeDeclarationSimple(false); break; + } + + // + // Rule 128: declaration ::= declaration_specifiers <openscope-ast> init_declarator_list ; + // + case 128: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 129: declaration_specifiers ::= <openscope-ast> simple_declaration_specifiers + // + case 129: { action. consumeDeclarationSpecifiersSimple(); break; + } + + // + // Rule 130: declaration_specifiers ::= <openscope-ast> struct_or_union_declaration_specifiers + // + case 130: { action. consumeDeclarationSpecifiersStructUnionEnum(); break; + } + + // + // Rule 131: declaration_specifiers ::= <openscope-ast> elaborated_declaration_specifiers + // + case 131: { action. consumeDeclarationSpecifiersStructUnionEnum(); break; + } + + // + // Rule 132: declaration_specifiers ::= <openscope-ast> enum_declaration_specifiers + // + case 132: { action. consumeDeclarationSpecifiersStructUnionEnum(); break; + } + + // + // Rule 133: declaration_specifiers ::= <openscope-ast> typdef_name_declaration_specifiers + // + case 133: { action. consumeDeclarationSpecifiersTypedefName(); break; + } + + // + // Rule 158: init_declarator ::= complete_declarator = initializer + // + case 158: { action. consumeDeclaratorWithInitializer(true); break; + } + + // + // Rule 160: storage_class_specifier ::= storage_class_specifier_token + // + case 160: { action. consumeToken(); break; + } + + // + // Rule 166: simple_type_specifier ::= simple_type_specifier_token + // + case 166: { action. consumeToken(); break; + } + + // + // Rule 179: type_name_specifier ::= identifier_token + // + case 179: { action. consumeToken(); break; + } + + // + // Rule 180: struct_or_union_specifier ::= struct_or_union struct_or_union_specifier_hook { <openscope-ast> struct_declaration_list_opt } + // + case 180: { action. consumeTypeSpecifierComposite(false); break; + } + + // + // Rule 181: struct_or_union_specifier ::= struct_or_union struct_or_union_specifier_hook identifier_token struct_or_union_specifier_suffix_hook { <openscope-ast> struct_declaration_list_opt } + // + case 181: { action. consumeTypeSpecifierComposite(true); break; + } + + // + // Rule 186: elaborated_specifier ::= struct elaborated_specifier_hook identifier_token + // + case 186: { action. consumeTypeSpecifierElaborated(IASTCompositeTypeSpecifier.k_struct); break; + } + + // + // Rule 187: elaborated_specifier ::= union elaborated_specifier_hook identifier_token + // + case 187: { action. consumeTypeSpecifierElaborated(IASTCompositeTypeSpecifier.k_union); break; + } + + // + // Rule 188: elaborated_specifier ::= enum elaborated_specifier_hook identifier_token + // + case 188: { action. consumeTypeSpecifierElaborated(IASTElaboratedTypeSpecifier.k_enum); break; + } + + // + // Rule 194: struct_declaration ::= specifier_qualifier_list <openscope-ast> struct_declarator_list ; + // + case 194: { action. consumeStructDeclaration(true); break; + } + + // + // Rule 195: struct_declaration ::= specifier_qualifier_list ; + // + case 195: { action. consumeStructDeclaration(false); break; + } + + // + // Rule 196: struct_declaration ::= ERROR_TOKEN + // + case 196: { action. consumeDeclarationProblem(); break; + } + + // + // Rule 202: struct_declarator ::= : constant_expression + // + case 202: { action. consumeBitField(false); break; + } + + // + // Rule 203: struct_declarator ::= declarator : constant_expression + // + case 203: { action. consumeBitField(true); break; + } + + // + // Rule 204: enum_specifier ::= enum enum_specifier_hook { <openscope-ast> enumerator_list_opt comma_opt } + // + case 204: { action. consumeTypeSpecifierEnumeration(false); break; + } + + // + // Rule 205: enum_specifier ::= enum enum_specifier_hook identifier_token { <openscope-ast> enumerator_list_opt comma_opt } + // + case 205: { action. consumeTypeSpecifierEnumeration(true); break; + } + + // + // Rule 211: enumerator ::= identifier_token + // + case 211: { action. consumeEnumerator(false); break; + } + + // + // Rule 212: enumerator ::= identifier_token = constant_expression + // + case 212: { action. consumeEnumerator(true); break; + } + + // + // Rule 213: type_qualifier ::= type_qualifier_token + // + case 213: { action. consumeToken(); break; + } + + // + // Rule 217: function_specifier ::= inline + // + case 217: { action. consumeToken(); break; + } + + // + // Rule 219: declarator ::= <openscope-ast> pointer_seq direct_declarator + // + case 219: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 224: basic_direct_declarator ::= declarator_id_name + // + case 224: { action. consumeDirectDeclaratorIdentifier(); break; + } + + // + // Rule 225: basic_direct_declarator ::= ( declarator ) + // + case 225: { action. consumeDirectDeclaratorBracketed(); break; + } + + // + // Rule 226: declarator_id_name ::= identifier + // + case 226: { action. consumeIdentifierName(); break; + } + + // + // Rule 227: array_direct_declarator ::= basic_direct_declarator array_modifier + // + case 227: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 228: array_direct_declarator ::= array_direct_declarator array_modifier + // + case 228: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 230: function_direct_declarator ::= basic_direct_declarator ( <openscope-ast> parameter_type_list ) + // + case 230: { action. consumeDirectDeclaratorFunctionDeclarator(true, true); break; + } + + // + // Rule 231: function_direct_declarator ::= basic_direct_declarator ( ) + // + case 231: { action. consumeDirectDeclaratorFunctionDeclarator(true, false); break; + } + + // + // Rule 233: function_declarator ::= <openscope-ast> pointer_seq function_direct_declarator + // + case 233: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 234: knr_direct_declarator ::= basic_direct_declarator ( <openscope-ast> identifier_list ) + // + case 234: { action. consumeDirectDeclaratorFunctionDeclaratorKnR(); break; + } + + // + // Rule 236: knr_function_declarator ::= <openscope-ast> pointer_seq knr_direct_declarator + // + case 236: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 237: identifier_list ::= identifier + // + case 237: { action. consumeIdentifierKnR(); break; + } + + // + // Rule 238: identifier_list ::= identifier_list , identifier + // + case 238: { action. consumeIdentifierKnR(); break; + } + + // + // Rule 239: array_modifier ::= [ ] + // + case 239: { action. consumeDirectDeclaratorArrayModifier(false); break; + } + + // + // Rule 240: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers ] + // + case 240: { action. consumeDirectDeclaratorModifiedArrayModifier(false, false, true, false); break; + } + + // + // Rule 241: array_modifier ::= [ assignment_expression ] + // + case 241: { action. consumeDirectDeclaratorArrayModifier(true); break; + } + + // + // Rule 242: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers assignment_expression ] + // + case 242: { action. consumeDirectDeclaratorModifiedArrayModifier(false, false, true, true); break; + } + + // + // Rule 243: array_modifier ::= [ static assignment_expression ] + // + case 243: { action. consumeDirectDeclaratorModifiedArrayModifier(true, false, false, true); break; + } + + // + // Rule 244: array_modifier ::= [ static <openscope-ast> array_modifier_type_qualifiers assignment_expression ] + // + case 244: { action. consumeDirectDeclaratorModifiedArrayModifier(true, false, true, true); break; + } + + // + // Rule 245: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers static assignment_expression ] + // + case 245: { action. consumeDirectDeclaratorModifiedArrayModifier(true, false, true, true); break; + } + + // + // Rule 246: array_modifier ::= [ * ] + // + case 246: { action. consumeDirectDeclaratorModifiedArrayModifier(false, true, false, false); break; + } + + // + // Rule 247: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers * ] + // + case 247: { action. consumeDirectDeclaratorModifiedArrayModifier(false, true, true, false); break; + } + + // + // Rule 249: pointer_seq ::= pointer_hook * pointer_hook + // + case 249: { action. consumePointer(); break; + } + + // + // Rule 250: pointer_seq ::= pointer_seq pointer_hook * pointer_hook + // + case 250: { action. consumePointer(); break; + } + + // + // Rule 251: pointer_seq ::= pointer_hook * pointer_hook <openscope-ast> type_qualifier_list + // + case 251: { action. consumePointerTypeQualifierList(); break; + } + + // + // Rule 252: pointer_seq ::= pointer_seq pointer_hook * pointer_hook <openscope-ast> type_qualifier_list + // + case 252: { action. consumePointerTypeQualifierList(); break; + } + + // + // Rule 256: parameter_type_list ::= parameter_list + // + case 256: { action. consumeEmpty(); break; + } + + // + // Rule 257: parameter_type_list ::= parameter_list , ... + // + case 257: { action. consumePlaceHolder(); break; + } + + // + // Rule 258: parameter_type_list ::= ... + // + case 258: { action. consumePlaceHolder(); break; + } + + // + // Rule 261: parameter_declaration ::= declaration_specifiers complete_parameter_declarator + // + case 261: { action. consumeParameterDeclaration(); break; + } + + // + // Rule 262: parameter_declaration ::= declaration_specifiers + // + case 262: { action. consumeParameterDeclarationWithoutDeclarator(); break; + } + + // + // Rule 265: type_id ::= specifier_qualifier_list + // + case 265: { action. consumeTypeId(false); break; + } + + // + // Rule 266: type_id ::= specifier_qualifier_list abstract_declarator + // + case 266: { action. consumeTypeId(true); break; + } + + // + // Rule 268: abstract_declarator ::= <openscope-ast> pointer_seq + // + case 268: { action. consumeDeclaratorWithPointer(false); break; + } + + // + // Rule 269: abstract_declarator ::= <openscope-ast> pointer_seq direct_abstract_declarator + // + case 269: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 273: basic_direct_abstract_declarator ::= ( abstract_declarator ) + // + case 273: { action. consumeDirectDeclaratorBracketed(); break; + } + + // + // Rule 274: array_direct_abstract_declarator ::= array_modifier + // + case 274: { action. consumeDirectDeclaratorArrayDeclarator(false); break; + } + + // + // Rule 275: array_direct_abstract_declarator ::= array_direct_abstract_declarator array_modifier + // + case 275: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 276: array_direct_abstract_declarator ::= basic_direct_abstract_declarator array_modifier + // + case 276: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 277: function_direct_abstract_declarator ::= ( ) + // + case 277: { action. consumeDirectDeclaratorFunctionDeclarator(false, false); break; + } + + // + // Rule 278: function_direct_abstract_declarator ::= basic_direct_abstract_declarator ( ) + // + case 278: { action. consumeDirectDeclaratorFunctionDeclarator(true, false); break; + } + + // + // Rule 279: function_direct_abstract_declarator ::= ( <openscope-ast> parameter_type_list ) + // + case 279: { action. consumeDirectDeclaratorFunctionDeclarator(false, true); break; + } + + // + // Rule 280: function_direct_abstract_declarator ::= basic_direct_abstract_declarator ( <openscope-ast> parameter_type_list ) + // + case 280: { action. consumeDirectDeclaratorFunctionDeclarator(true, true); break; + } + + // + // Rule 281: initializer ::= assignment_expression + // + case 281: { action. consumeInitializer(); break; + } + + // + // Rule 283: initializer_list ::= start_initializer_list { <openscope-ast> initializer_seq comma_opt } end_initializer_list + // + case 283: { action. consumeInitializerList(); break; + } + + // + // Rule 284: initializer_list ::= { <openscope-ast> } + // + case 284: { action. consumeInitializerList(); break; + } + + // + // Rule 285: start_initializer_list ::= $Empty + // + case 285: { action. initializerListStart(); break; + } + + // + // Rule 286: end_initializer_list ::= $Empty + // + case 286: { action. initializerListEnd(); break; + } + + // + // Rule 291: designated_initializer ::= <openscope-ast> designation = initializer + // + case 291: { action. consumeInitializerDesignated(); break; + } + + // + // Rule 295: designator_base ::= [ constant_expression ] + // + case 295: { action. consumeDesignatorArray(); break; + } + + // + // Rule 296: designator_base ::= . identifier_token + // + case 296: { action. consumeDesignatorField(); break; + } + + // + // Rule 297: designator ::= [ constant_expression ] + // + case 297: { action. consumeDesignatorArray(); break; + } + + // + // Rule 298: designator ::= . identifier_token + // + case 298: { action. consumeDesignatorField(); break; + } + + // + // Rule 299: translation_unit ::= external_declaration_list + // + case 299: { action. consumeTranslationUnit(); break; + } + + // + // Rule 300: translation_unit ::= $Empty + // + case 300: { action. consumeTranslationUnit(); break; + } + + // + // Rule 305: external_declaration ::= ; + // + case 305: { action. consumeDeclarationEmpty(); break; + } + + // + // Rule 306: external_declaration ::= ERROR_TOKEN + // + case 306: { action. consumeDeclarationProblem(); break; + } + + // + // Rule 310: function_definition ::= <openscope-ast> function_declarator function_body + // + case 310: { action. consumeFunctionDefinition(false); break; + } + + // + // Rule 311: function_definition ::= declaration_specifiers <openscope-ast> knr_function_declarator <openscope-ast> declaration_list compound_statement + // + case 311: { action. consumeFunctionDefinitionKnR(); break; + } + + // + // Rule 312: normal_function_definition ::= declaration_specifiers <openscope-ast> function_declarator function_body + // + case 312: { action. consumeFunctionDefinition(true); break; + } + + // + // Rule 313: function_body ::= { } + // + case 313: { action. consumeStatementCompoundStatement(false); break; + } + + // + // Rule 314: function_body ::= { <openscope-ast> block_item_list } + // + case 314: { action. consumeStatementCompoundStatement(true); break; + } + + // + // Rule 331: attribute_parameter ::= assignment_expression + // + case 331: { action. consumeIgnore(); break; + } + + // + // Rule 342: extended_asm_declaration ::= asm volatile_opt ( extended_asm_param_seq ) ; + // + case 342: { gnuAction.consumeDeclarationASM(); break; + } + + // + // Rule 353: unary_expression ::= __alignof__ unary_expression + // + case 353: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_alignOf); break; + } + + // + // Rule 354: unary_expression ::= __alignof__ ( type_id ) + // + case 354: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_alignof); break; + } + + // + // Rule 355: unary_expression ::= typeof unary_expression + // + case 355: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); break; + } + + // + // Rule 356: unary_expression ::= typeof ( type_id ) + // + case 356: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); break; + } + + // + // Rule 357: relational_expression ::= relational_expression >? shift_expression + // + case 357: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_max); break; + } + + // + // Rule 358: relational_expression ::= relational_expression <? shift_expression + // + case 358: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_min); break; + } + + // + // Rule 359: conditional_expression ::= logical_or_expression ? <empty> : assignment_expression + // + case 359: { action. consumeExpressionConditional(); break; + } + + // + // Rule 360: primary_expression ::= ( compound_statement ) + // + case 360: { gnuAction.consumeCompoundStatementExpression(); break; + } + + // + // Rule 361: labeled_statement ::= case case_range_expression : statement + // + case 361: { action. consumeStatementCase(); break; + } + + // + // Rule 362: case_range_expression ::= constant_expression ... constant_expression + // + case 362: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_assign); break; + } + + // + // Rule 366: typeof_type_specifier ::= typeof unary_expression + // + case 366: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); break; + } + + // + // Rule 367: typeof_type_specifier ::= typeof ( type_id ) + // + case 367: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); break; + } + + // + // Rule 368: declaration_specifiers ::= <openscope-ast> typeof_declaration_specifiers + // + case 368: { action. consumeDeclarationSpecifiersTypeof(); break; + } + + // + // Rule 384: field_name_designator ::= identifier_token : + // + case 384: { action. consumeDesignatorFieldGCC(); break; + } + + // + // Rule 385: array_range_designator ::= [ constant_expression ... constant_expression ] + // + case 385: { action. consumeDesignatorArrayRange(); break; + } + + // + // Rule 386: designated_initializer ::= <openscope-ast> field_name_designator initializer + // + case 386: { action. consumeInitializerDesignated(); break; + } + + // + // Rule 387: block_item ::= normal_function_definition + // + case 387: { action. consumeStatementDeclaration(); break; + } + + // + // Rule 391: type_id ::= vector_type + // + case 391: { action. consumeTypeId(false); break; + } + + // + // Rule 392: type_id ::= vector_type abstract_declarator + // + case 392: { action. consumeTypeId(true); break; + } + + // + // Rule 393: vector_declaration ::= vector_type <openscope-ast> init_declarator_list ; + // + case 393: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 394: vector_type ::= <openscope-ast> no_type_declaration_specifiers_opt vector vector_type_specifier all_specifier_qualifier_list_opt + // + case 394: { action. consumeVectorTypeSpecifier(); break; + } + + // + // Rule 395: vector_type_specifier ::= vector_type_specifier_token + // + case 395: { action. consumeToken(); break; + } + + // + // Rule 417: declarator_id_name ::= pixel + // + case 417: { action. consumeIdentifierName(); break; + } + + // + // Rule 418: declarator_id_name ::= vector + // + case 418: { action. consumeIdentifierName(); break; + } + + // + // Rule 419: declarator_id_name ::= bool + // + case 419: { action. consumeIdentifierName(); break; + } + + + default: + break; + } + return; + } +} + diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParserprs.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParserprs.java new file mode 100644 index 00000000000..39558f8ca43 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParserprs.java @@ -0,0 +1,2167 @@ +/******************************************************************************* +* Copyright (c) 2006, 2009 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.lrparser.xlc.c; + +public class XlcCParserprs implements lpg.lpgjavaruntime.ParseTable, XlcCParsersym { + + 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 + }; + }; + 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,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,3,1, + 1,4,4,3,3,2,2,4,1,0, + 1,1,2,2,2,2,2,2,2,2, + 2,4,1,4,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,3,3,3,3,3, + 3,3,3,3,3,3,1,1,2,1, + 0,1,3,1,1,1,1,1,1,1, + 1,3,4,3,2,4,1,2,1,1, + 1,2,5,7,5,1,0,7,5,9, + 8,3,2,2,2,3,2,4,2,2, + 2,2,2,1,1,1,1,2,1,2, + 2,2,1,2,2,1,2,2,1,2, + 2,1,2,2,1,3,1,3,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,6, + 8,0,0,1,1,3,3,3,0,1, + 0,1,2,4,2,1,1,1,3,1, + 1,2,3,7,8,0,1,0,1,3, + 1,3,1,1,1,1,1,1,3,1, + 1,1,1,1,3,1,2,2,1,5, + 3,1,3,5,1,3,1,3,2,4, + 3,5,4,6,6,3,5,1,3,4, + 5,6,0,1,2,1,3,1,1,3, + 2,1,1,1,1,2,1,2,3,1, + 1,1,3,1,2,2,2,3,4,5, + 1,1,7,3,0,0,1,1,3,3, + 4,1,1,2,3,2,3,2,1,0, + 1,2,1,1,1,1,1,2,1,3, + 6,4,2,4,1,1,1,1,2,6, + 3,1,3,1,4,0,1,1,1,3, + 1,0,4,3,1,2,1,3,4,4, + 4,6,1,0,1,3,1,3,0,1, + 4,5,2,4,2,4,3,3,5,3, + 4,3,1,2,2,2,4,2,1,1, + 2,2,3,2,2,3,1,1,1,1, + 1,1,1,2,5,3,1,1,1,1, + 1,2,4,5,1,1,1,1,1,1, + 1,1,1,1,1,1,1,2,1,0, + 1,0,1,1,1,1,1,1,1,-115, + 0,-2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-8,0,0, + 0,0,0,0,-66,-94,0,0,-54,0, + 0,0,-33,0,-252,0,0,0,0,0, + -89,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-35,0, + 0,0,0,0,0,-49,0,0,0,-87, + -12,0,0,0,0,0,0,0,-70,0, + 0,0,0,0,0,0,0,0,-128,-11, + 0,0,0,0,0,0,0,0,-14,-43, + -6,0,0,-52,0,-352,-266,0,0,0, + 0,0,0,-15,0,0,0,0,-3,0, + 0,0,-16,-67,0,0,0,0,0,0, + 0,0,0,-365,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-145,0, + 0,0,0,0,-55,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-236, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-27,0,0,-56,0,-158,0,0, + 0,0,0,0,0,0,-51,0,0,0, + 0,0,0,0,0,0,0,0,-50,-4, + 0,0,0,0,0,0,0,0,-233,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-178,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-185,0,-117,0,-28,-232,0,-29, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-309,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-39,0,0,0, + 0,0,0,-40,0,0,0,0,-30,0, + 0,0,0,0,0,0,-71,0,0,0, + 0,0,0,0,0,-258,-173,0,0,0, + 0,0,0,0,0,0,-359,0,0,0, + 0,0,0,0,0,-31,0,-95,-121,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,0,-5,-270,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-262,0,0,0,-279,-116,0,0, + 0,-118,0,-361,0,0,0,0,0,0, + 0,0,-339,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-234, + 0,0,0,0,0,0,0,0,-36,-42, + 0,0,0,0,0,0,0,-45,0,0, + 0,0,0,0,-122,0,0,-260,0,0, + 0,-375,0,0,0,0,0,0,0,0, + -327,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-46,0,0, + 0,-86,0,0,0,0,0,0,0,0, + -48,0,0,-324,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -254,0,-53,0,0,0,0,0,0,-93, + 0,0,-65,0,0,0,0,0,-80,0, + 0,0,0,0,0,0,0,-44,0,0, + 0,0,0,0,0,0,0,0,0,0, + -58,0,0,0,0,-177,0,0,-151,0, + 0,0,0,0,0,0,0,0,0,-130, + 0,-124,0,0,0,0,0,0,-59,0, + 0,0,0,0,0,-60,0,0,0,0, + 0,0,0,0,0,0,-261,0,-97,0, + 0,0,0,0,0,0,0,0,0,-127, + -119,0,0,0,-155,0,0,0,-63,0, + 0,0,-79,0,0,0,0,0,-271,0, + -18,-81,-99,0,0,-101,0,0,0,0, + 0,0,0,0,-82,-163,0,0,0,0, + 0,0,0,0,-96,-323,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -193,0,0,-231,0,0,0,0,0,0, + 0,0,-142,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-100,0,0, + 0,-68,0,-188,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -196,-195,0,-102,0,0,0,0,0,0, + -189,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-110,-153,-272,0, + 0,-69,0,0,0,0,0,0,0,0, + 0,0,-201,0,0,0,0,0,0,0, + 0,-152,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-273,0,-38, + 0,0,-283,0,0,0,0,0,0,0, + 0,0,-123,0,0,0,-217,0,-200,0, + 0,0,0,0,0,-129,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-144,-131,0,0,0,0,0,0,0, + 0,0,0,-348,0,0,-132,-23,-275,-357, + -146,0,0,0,0,0,0,0,0,0, + 0,0,0,-347,0,-133,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-10,-202, + 0,0,0,0,0,-134,-111,0,0,0, + 0,-57,0,0,0,0,0,-34,0,-328, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-218, + 0,-135,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-165,0,0,-229,0, + -112,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-287,0,0,-199, + 0,0,0,-154,0,0,-334,-172,0,0, + 0,0,0,0,0,0,0,-355,0,-203, + 0,0,0,0,0,0,0,0,0,-374, + 0,0,0,0,0,0,0,-136,0,0, + 0,0,0,0,-259,-137,0,0,0,0, + 0,-204,0,0,0,0,0,0,0,0, + 0,-161,-326,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-138,-205,0,0, + 0,0,0,0,0,0,0,-175,-240,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-139,-206,0,0,0,0,0,0, + 0,0,-237,0,0,0,0,0,0,0, + 0,-166,0,0,0,0,0,0,-140,-207, + 0,0,0,0,0,0,0,0,-257,0, + 0,-241,0,0,0,0,0,-168,0,0, + 0,0,0,0,-143,-208,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-176,0,0,0,0,0,0, + -147,-209,0,0,0,0,0,0,0,0, + -265,0,0,-311,0,0,0,0,0,-180, + 0,0,0,0,0,0,-148,-210,0,0, + 0,0,0,0,0,0,-335,0,0,-338, + 0,0,0,0,0,-181,0,0,0,0, + 0,0,-156,-211,0,0,0,0,0,0, + 0,0,-157,0,-362,0,0,0,0,0, + 0,-182,0,0,0,0,0,0,-159,-212, + 0,0,0,0,0,0,0,0,-354,0, + 0,-340,0,0,0,0,0,-183,0,0, + 0,0,0,0,-160,-213,0,0,0,0, + 0,0,0,0,-184,0,0,-194,0,0, + 0,0,0,-349,0,0,0,0,0,0, + -269,0,0,0,-61,0,-358,0,-162,0, + 0,0,0,0,0,0,0,0,0,-164, + -280,0,-167,0,0,0,0,0,0,-198, + -367,0,0,0,0,0,0,0,-169,0, + 0,0,0,0,0,-377,0,0,0,-179, + 0,0,0,0,-190,0,-230,0,-191,0, + 0,0,0,0,0,0,-381,0,0,0, + 0,0,0,0,0,0,0,0,0,-285, + 0,0,0,0,0,0,0,0,-376,-197, + -239,0,0,0,0,0,0,-235,0,0, + 0,0,0,0,-244,-286,0,0,0,0, + 0,0,0,0,-385,0,-248,-249,0,0, + 0,0,0,-263,0,0,0,0,0,0, + -264,-317,0,0,0,0,0,0,0,0, + -253,-120,0,0,0,0,0,0,0,-281, + 0,0,0,0,0,0,-325,0,0,0, + 0,0,0,0,0,-289,-290,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-291,-292,-336,0,-293,0,0,0,0, + 0,0,-388,-294,-295,0,0,0,0,0, + 0,-255,0,0,0,0,0,0,-296,-337, + 0,0,0,0,0,0,0,0,-297,0, + 0,-298,0,0,0,0,0,-299,0,0, + 0,0,0,0,-300,-350,0,0,0,0, + 0,0,0,0,-256,-243,0,0,0,0, + 0,0,0,-301,0,0,0,0,0,0, + -363,0,0,0,0,0,0,0,0,-302, + -303,0,-304,0,0,0,0,0,0,0, + 0,0,0,0,0,-305,-306,-371,0,-307, + 0,0,0,0,0,0,-277,-308,-313,0, + 0,0,0,0,0,-284,0,0,0,0, + 0,0,-378,0,0,0,0,0,0,0, + 0,-351,-360,0,0,0,0,0,0,0, + -312,0,0,0,0,0,0,-364,-369,-384, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-64,0,0, + 0,0,0,0,0,0,0,0,0,0, + -251,0,0,0,0,0,0,0,-314,0, + 0,0,0,-92,-76,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-78,-315, + 0,-320,0,0,0,0,0,0,0,0, + 0,-330,-331,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-98,0,0,0,0,-245,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-333,0,0,0,-9,0,0,-356,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-103,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-238,0,0,0, + 0,0,0,0,-368,0,0,0,0,-13, + -379,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-387,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-274,0,0,0,0,0,0, + 0,0,0,0,-322,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,-246,0,0,0,0,0,0,0, + 0,0,0,0,0,-83,0,0,0,-187, + 0,0,0,0,0,0,0,0,0,-370, + 0,0,-7,0,0,0,0,0,0,0, + 0,0,0,0,-267,0,0,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,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-150,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-219,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-88,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-91,0,0,0,0, + 0,0,0,0,0,0,0,0,-17,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-84,0,0, + 0,-346,-1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-247,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -250,0,0,0,-288,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-278,0,0, + 0,0,0,-343,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-62,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-104,0,0, + 0,0,-316,0,0,-171,0,0,0,0, + 0,0,-318,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-141, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-342,0,0,0,0,0,0,0, + 0,0,-329,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-344,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-345,0,0,0,0,0,0,0, + -382,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-386,0,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,-389,0, + 0,0,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,-113,0,0,0, + 0,0,0,0,0,0,0,0,-221,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-222,0,0,0,0, + 0,0,0,0,-276,0,0,0,0,0, + 0,0,0,0,0,0,0,-19,0,0, + 0,-332,0,0,0,0,0,0,0,0, + 0,0,-22,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,0,0, + 0,0,0,0,0,0,0,0,0,-32, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-149,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-223,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-224,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-225, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-226,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-227,0,0,0,0,0,0,0,0, + -26,0,0,0,0,0,0,-228,0,0, + 0,0,0,0,0,0,-242,0,0,-20, + 0,0,0,0,-105,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-106,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-107,0,0,0,0,0,0,0, + 0,0,0,-108,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-109,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-282,0, + 0,0,0,0,-125,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-41,0,0,0,-47, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-114,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,-74,0, + 0,0,0,0,0,0,0,-75,0,0, + 0,0,0,0,0,0,-90,-170,0,0, + 0,0,-186,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-214,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-215,0,0,0,0,0,0,0,0, + 0,-268,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-216,0,0,0,0, + 0,0,0,0,-319,-321,0,0,0,-21, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-77,0,0,0,0,0,0, + 0,0,-174,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-192,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-37,0,0,0, + 0,-85,0,0,0,0,0,0,0,-353, + 0,0,0,0,0,-372,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-341, + -366,0,0,0,0,0,0,0,0,-373, + 0,-380,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-383, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,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[] = { + 127,2,128,54,54,18,18,59,59,25, + 25,1,1,3,3,3,3,4,4,4, + 5,6,6,6,6,6,6,6,6,98, + 98,108,7,7,7,7,7,7,7,7, + 7,7,7,8,8,13,13,13,13,14, + 14,14,15,15,15,16,16,16,16,16, + 17,17,17,19,19,20,20,21,21,22, + 22,23,23,24,24,28,28,28,28,28, + 28,28,28,28,28,28,28,43,33,26, + 129,129,109,109,64,44,44,44,44,44, + 44,44,45,45,45,30,30,110,110,89, + 89,46,46,47,47,47,82,82,48,48, + 48,48,49,49,49,49,49,61,61,29, + 29,29,29,29,50,50,50,73,73,91, + 91,91,91,92,92,92,93,93,93,94, + 94,94,95,95,95,90,90,83,83,84, + 51,53,53,53,53,53,67,68,68,68, + 68,68,68,68,68,68,68,68,68,77, + 74,74,130,131,78,78,75,75,75,99, + 111,111,112,112,100,100,100,60,132,132, + 113,101,101,101,76,76,133,114,114,115, + 115,102,102,31,32,32,32,52,56,56, + 37,37,37,37,34,34,35,38,38,39, + 36,36,103,103,40,135,135,134,134,58, + 58,58,58,58,58,58,58,58,116,65, + 65,65,65,41,96,96,86,86,86,87, + 87,79,79,136,136,66,66,88,88,88, + 69,69,69,70,71,71,71,72,72,72, + 72,85,85,55,55,57,138,137,137,137, + 137,117,139,140,140,141,141,142,142,127, + 127,143,143,118,118,118,118,144,144,119, + 119,119,80,120,120,9,9,9,27,27, + 10,10,145,145,121,121,121,122,122,146, + 146,123,123,11,11,147,147,124,124,124, + 124,12,62,148,148,149,149,125,125,125, + 104,104,104,7,7,7,7,16,16,24, + 4,45,150,97,97,97,81,81,29,61, + 50,84,84,84,113,113,113,133,130,131, + 41,99,141,141,151,152,117,89,68,68, + 68,66,66,63,42,106,107,107,107,107, + 107,107,107,107,107,126,126,154,154,153, + 153,105,105,61,1,1,1,35,35,35, + 359,1769,452,17,21,18,1053,1246,45,370, + 315,316,317,1263,1296,1277,1362,1326,334,1446, + 1438,1503,1477,1529,75,1506,790,2618,92,1323, + 2143,135,213,2517,20,790,17,21,18,1053, + 366,2306,20,231,17,21,18,1053,1246,45, + 137,134,136,160,1263,1296,1277,1362,1326,668, + 1446,1438,1503,1477,1529,75,483,139,166,281, + 1506,626,2660,1338,143,146,149,152,1061,2625, + 20,363,17,21,18,1053,43,40,231,503, + 689,2230,2469,2888,2903,2917,282,2950,1555,396, + 626,1310,179,2795,1696,510,846,503,3206,1765, + 370,315,316,317,610,319,315,316,317,337, + 254,213,334,685,2544,20,158,17,21,18, + 1053,355,135,213,750,766,224,232,254,213, + 724,224,229,218,717,221,223,322,1733,1452, + 179,137,134,136,160,1560,323,1733,370,315, + 316,317,2032,1075,319,315,316,317,139,166, + 1364,1522,2094,395,1338,143,146,149,152,1061, + 135,213,363,828,345,1320,816,187,1523,1730, + 1152,310,2230,2469,2888,2903,2917,1636,2950,137, + 134,136,160,1340,491,1193,510,3426,959,1182, + 38,950,2176,111,87,321,139,166,96,1697, + 312,1152,1338,143,146,149,152,1061,335,284, + 363,1462,1815,95,97,98,99,100,1584,179, + 2230,2469,2888,2903,2917,88,2950,370,315,316, + 317,768,1997,1936,510,816,31,957,2625,20, + 999,17,21,18,1053,43,45,438,313,135, + 213,1263,1296,1277,1362,1326,294,1446,1983,2436, + 20,833,17,21,18,1053,1246,45,137,134, + 136,160,1263,1296,1277,1362,1326,521,1446,1438, + 1503,1477,1529,75,406,139,166,281,28,1002, + 1555,1711,143,146,149,152,1061,2625,20,363, + 17,21,18,1053,43,39,1364,1356,1834,2230, + 2469,2888,2903,2917,282,2950,1555,927,20,833, + 17,21,18,1053,1246,45,1017,1996,1696,668, + 1263,1296,1277,1362,1326,228,1446,1438,1503,1477, + 1529,75,227,25,287,281,333,2725,20,1400, + 17,21,18,1053,1246,45,893,1019,1319,658, + 1263,1296,1277,1362,1326,180,1446,1438,1503,1477, + 1529,75,282,1704,1555,1239,288,1506,1182,2892, + 1101,127,816,31,2463,20,986,17,21,18, + 1053,1246,45,1181,2048,278,1620,1263,1296,1277, + 1362,1326,289,1446,1438,1503,1477,1529,75,209, + 2625,20,281,17,21,18,1053,43,45,684, + 48,813,1841,1263,1296,1277,1362,1326,684,1446, + 1438,1503,2000,1075,290,1191,260,105,1166,282, + 658,1555,2490,20,393,17,21,18,1053,1246, + 45,503,336,128,346,1263,1296,1277,1362,1326, + 342,1446,1438,1503,1477,1529,75,197,1217,386, + 281,924,617,20,509,17,21,18,1053,1246, + 45,771,254,213,1364,1263,1296,1277,1362,1326, + 24,1446,1438,1503,1477,1529,75,282,1445,1555, + 1040,2825,20,1039,17,21,18,1053,1246,45, + 217,1730,420,1269,1263,1296,1277,1362,1326,1483, + 1446,1438,1503,1477,1529,75,239,291,38,331, + 3267,225,2033,554,293,111,87,875,193,1376, + 96,816,186,204,824,383,702,1418,3322,1, + 1730,420,630,1462,109,95,97,98,99,100, + 1010,20,1131,17,21,18,1053,43,36,1394, + 1128,110,369,413,111,87,816,188,1376,96, + 724,224,229,218,717,221,223,1356,1834,1269, + 387,630,1462,109,95,97,98,99,100,107, + 788,1615,263,1152,274,816,1542,341,314,182, + 110,369,413,919,246,267,1161,1134,272,1969, + 989,590,1060,38,329,2626,38,90,747,387, + 318,315,316,317,264,1095,2625,20,108,17, + 21,18,1053,43,45,1119,1704,2112,575,1263, + 1296,1277,1362,1326,241,1446,1438,1503,1477,1529, + 94,288,1730,420,2625,20,348,17,21,18, + 1053,43,45,38,28,590,1555,1263,1296,1277, + 1362,1326,261,1446,1438,1981,111,87,1348,209, + 1376,96,2571,20,1080,17,21,18,1053,353, + 1828,1086,1841,630,1462,109,95,97,98,99, + 100,788,2625,20,912,17,21,18,1053,1246, + 45,587,110,369,413,1263,1296,1277,1362,1326, + 1698,1446,1438,1503,1477,1529,75,1269,1191,1988, + 92,387,2598,20,1669,17,21,18,1053,41, + 107,449,275,721,20,360,17,21,18,1053, + 1246,45,893,124,1152,22,1263,1296,1277,1362, + 1326,1223,1446,1438,1503,1477,1529,75,1989,276, + 446,1397,3206,145,1730,420,1827,125,88,319, + 315,316,317,691,28,1489,1555,2625,20,788, + 17,21,18,1053,43,45,507,240,111,87, + 1263,1876,1376,96,724,224,229,218,717,221, + 223,1765,1400,1684,569,630,1462,109,95,97, + 98,99,100,28,1364,1555,3412,47,1048,1997, + 805,893,106,2217,110,369,413,318,315,316, + 317,1281,311,243,2825,20,635,17,21,18, + 1053,1246,45,387,630,1715,127,1263,1296,1277, + 1362,1326,108,1446,1438,1503,1477,1529,75,446, + 586,3210,331,308,369,413,405,1269,318,315, + 316,317,1594,181,28,28,1555,1555,1381,179, + 1187,319,315,316,317,673,1220,370,315,316, + 317,255,213,724,224,921,218,717,221,908, + 2625,20,1387,17,21,18,1053,43,45,135, + 213,255,213,1263,1877,3407,893,1016,2081,2625, + 20,1269,17,21,18,1053,43,45,138,134, + 136,160,1263,1296,1277,1362,1326,788,1964,19, + 503,127,155,860,1191,140,166,788,38,868, + 1027,1009,144,147,150,153,1061,330,1257,364, + 2625,20,520,17,21,18,1053,1246,45,123, + 50,254,213,1263,1296,1277,1362,1326,830,1446, + 1438,1503,1477,1529,75,893,1239,2275,86,255, + 213,242,2625,20,968,17,21,18,1053,1246, + 45,244,1191,816,1834,1263,1296,1277,1362,1326, + 195,1446,1438,1503,1477,1529,75,1176,2625,20, + 85,17,21,18,1053,1246,45,112,555,1191, + 527,1263,1296,1277,1362,1326,1320,1446,1438,1503, + 1477,1529,75,419,2625,20,84,17,21,18, + 1053,1246,45,38,126,699,1790,1263,1296,1277, + 1362,1326,797,1446,1438,1503,1477,1529,75,554, + 2625,20,83,17,21,18,1053,1246,45,38, + 1851,3346,1191,1263,1296,1277,1362,1326,482,1446, + 1438,1503,1477,1529,75,1745,2625,20,82,17, + 21,18,1053,1246,45,210,338,122,283,1263, + 1296,1277,1362,1326,1269,1446,1438,1503,1477,1529, + 75,1289,2625,20,81,17,21,18,1053,1246, + 45,1125,230,891,1191,1263,1296,1277,1362,1326, + 1269,1446,1438,1503,1477,1529,75,1927,2625,20, + 80,17,21,18,1053,1246,45,788,1059,3440, + 1786,1263,1296,1277,1362,1326,1269,1446,1438,1503, + 1477,1529,75,1219,2625,20,79,17,21,18, + 1053,1246,45,1403,1179,816,296,1263,1296,1277, + 1362,1326,1269,1446,1438,1503,1477,1529,75,1598, + 2625,20,78,17,21,18,1053,1246,45,1364, + 1218,245,1191,1263,1296,1277,1362,1326,1269,1446, + 1438,1503,1477,1529,75,1663,2625,20,77,17, + 21,18,1053,1246,45,1269,2264,3441,1269,1263, + 1296,1277,1362,1326,2685,1446,1438,1503,1477,1529, + 75,1584,179,1279,76,1107,23,1364,1717,1357, + 370,315,316,317,319,315,316,317,205,194, + 1453,2625,20,1687,17,21,18,1053,1246,45, + 1269,1191,135,213,1263,1296,1277,1362,1326,1928, + 1446,1438,1503,1477,1529,75,816,298,351,93, + 1391,138,134,136,160,1505,3452,2625,20,2333, + 17,21,18,1053,43,45,1430,1191,140,166, + 1263,1296,1277,1362,1980,144,147,150,153,1061, + 2625,20,364,17,21,18,1053,1246,45,1330, + 1290,73,118,1263,1296,1277,1362,1326,1759,1446, + 1438,1503,1477,1529,75,1710,2625,20,1407,17, + 21,18,1053,1246,45,788,234,1819,456,1263, + 1296,1277,1362,1326,752,1446,1438,1503,1477,1529, + 75,1725,2625,20,1617,17,21,18,1053,43, + 45,1269,38,295,1152,1263,1296,1277,1362,1326, + 2398,1446,1438,1503,1477,1529,94,2625,20,320, + 17,21,18,1053,43,45,1458,1490,88,297, + 1263,1296,1277,1362,1326,1151,1446,1438,1503,1477, + 1529,94,1807,1865,2625,20,1395,17,21,18, + 1053,1246,45,788,1552,191,362,1263,1296,1277, + 1362,1326,1269,1446,1438,1503,1477,1529,75,845, + 2625,20,359,17,21,18,1053,1246,45,923, + 340,212,1140,1263,1296,1277,1362,1326,1329,1446, + 1438,1503,1477,1529,75,1368,2625,20,74,17, + 21,18,1053,43,45,1269,38,385,1152,1263, + 1296,1277,1362,1326,1347,1446,1438,1503,1477,1529, + 94,2625,20,339,17,21,18,1053,43,45, + 1556,1498,88,1104,1263,1296,1277,1362,1326,2041, + 1446,1438,1503,1477,1529,94,1943,1944,2625,20, + 1294,17,21,18,1053,43,45,1269,1570,1723, + 202,1263,1296,1277,1362,1326,1269,1446,1438,1503, + 1477,1529,94,2625,20,273,17,21,18,1053, + 43,45,1999,1874,352,1799,1263,1296,1277,1362, + 1326,1269,1446,1438,1503,1477,1529,94,2000,1824, + 2625,20,3777,17,21,18,1053,43,45,2673, + 3777,3777,203,1263,1296,1277,1362,1326,1597,1446, + 1438,1503,1477,1529,94,3777,3777,319,315,316, + 317,446,3777,3345,3777,3777,3777,1825,3777,1269, + 318,315,316,317,2679,2652,20,3777,17,21, + 18,1053,34,370,315,316,317,2706,1220,874, + 1269,420,1820,3777,1903,724,224,921,218,717, + 221,223,408,1269,3777,135,213,3777,2733,3777, + 325,318,315,316,317,88,3777,3407,197,1177, + 3777,279,1381,1692,137,134,136,160,38,2068, + 1152,2837,318,315,316,317,724,224,229,219, + 717,221,223,1154,155,860,3777,2963,3777,3223, + 3268,868,1269,3777,88,1327,446,3777,3206,1269, + 274,2089,3777,3777,520,318,315,316,317,3777, + 1280,269,1161,1134,272,1744,3777,280,3777,3777, + 405,395,3777,1220,318,315,316,317,3777,3777, + 724,224,229,218,717,221,223,446,3777,3206, + 407,3777,2068,3777,3777,1269,318,315,316,317, + 2238,1269,3407,3777,3777,3777,1488,3777,3777,370, + 315,316,317,1777,1220,1269,3777,394,2409,2772, + 3777,724,224,229,218,717,221,223,3777,155, + 860,135,213,2799,2371,20,859,17,21,18, + 1053,43,44,3407,1749,846,3777,3206,3777,3777, + 142,134,136,160,318,315,316,317,2625,20, + 3777,17,21,18,1053,43,38,141,166,3777, + 155,860,526,38,3777,1152,3777,868,3777,724, + 224,229,218,717,221,223,446,3777,3206,28, + 2867,1555,2578,3777,3777,318,315,316,317,88, + 906,2032,3206,508,3777,521,2110,3777,277,318, + 315,316,317,1220,3777,1142,3777,2683,3777,3777, + 724,224,229,218,717,221,223,526,305,3777, + 3777,3777,796,277,724,224,229,218,717,221, + 223,2244,3407,1152,3777,630,3420,3777,274,724, + 224,229,218,717,221,223,2032,3777,198,267, + 1161,1134,272,3777,304,369,413,88,3777,156, + 860,953,3777,274,116,3777,3777,1704,2007,2752, + 3777,3777,3777,309,267,1161,1134,272,370,315, + 316,317,2625,20,3777,17,21,18,1053,43, + 45,3420,3777,2007,3777,1892,709,3777,3777,3777, + 135,213,3777,199,3777,318,315,316,317,3777, + 3777,302,303,1672,3777,3777,709,3777,3777,137, + 134,136,160,2068,3777,318,315,316,317,2852, + 724,224,229,219,717,221,223,1154,370,315, + 316,317,2963,2068,3777,3777,3777,3777,3777,3777, + 724,224,1607,219,717,221,1581,1154,1600,3777, + 135,213,709,430,3777,521,3777,319,315,316, + 317,318,315,316,317,405,395,3777,3777,145, + 134,136,160,3777,1655,1730,1152,3777,305,2068, + 3777,3777,796,3777,3777,408,724,224,1607,219, + 717,221,223,1154,3777,630,3777,3777,3777,111, + 87,1716,1730,1152,96,1010,20,3777,17,21, + 18,1053,43,36,304,369,413,1462,104,95, + 97,98,99,100,3777,3777,111,87,1501,3777, + 658,96,3777,309,38,3777,1152,318,315,316, + 317,3777,3777,3777,1462,102,95,97,98,99, + 100,3777,3777,3777,709,2068,3777,986,3777,247, + 88,3777,3777,318,315,316,317,2225,444,1049, + 658,301,303,1777,1730,1152,1094,3777,658,3777, + 422,2068,3777,1838,1730,1152,3777,3777,766,224, + 233,3777,3777,2875,3777,1154,2333,986,111,87, + 3777,3777,3777,96,3777,197,3777,259,111,87, + 502,3777,658,96,2123,1760,1462,361,95,97, + 98,99,100,1899,1730,1152,1462,103,95,97, + 98,99,100,1555,3777,658,1445,3777,3777,986, + 3777,3777,318,315,316,317,3777,259,111,87, + 3777,3777,3777,96,1574,1760,1960,1730,1152,3777, + 2068,3777,986,3777,3777,3777,1462,119,95,97, + 98,99,100,3777,1049,3777,192,3777,3777,3777, + 3777,111,87,2021,1730,1152,96,746,878,259, + 3777,2082,1730,1152,3777,3777,1574,1760,2122,1462, + 115,95,97,98,99,100,3777,3777,111,87, + 3777,3777,259,96,3777,3777,111,87,3777,2123, + 1760,96,2143,1730,1152,3777,1462,2049,95,97, + 98,99,100,3777,1462,114,95,97,98,99, + 100,3777,3777,3777,1808,1324,3777,111,87,2204, + 1730,1152,96,3777,318,315,316,317,3777,3777, + 3777,3777,3777,3777,3777,1462,121,95,97,98, + 99,100,2068,3777,111,87,3777,2625,20,96, + 17,21,18,1053,43,45,1049,2696,3777,3273, + 1893,3777,1462,120,95,97,98,99,100,2625, + 20,3777,17,21,18,1053,43,45,3777,3777, + 2604,3777,1263,1296,1277,1896,2625,20,3777,17, + 21,18,1053,43,45,1251,3777,3777,3777,1263, + 1296,1277,1904,3777,318,315,316,317,2862,3777, + 3777,3777,444,3777,658,274,3777,370,315,316, + 317,3777,2068,2893,3777,3777,267,1161,1134,272, + 3777,3777,370,315,316,317,1154,2903,3777,135, + 213,986,3777,3777,3777,392,370,315,316,317, + 3777,3777,3777,274,135,213,3777,3777,148,134, + 136,160,3777,3777,269,1161,1134,272,135,213, + 2934,3777,3777,151,134,136,160,3777,3777,370, + 315,316,317,2944,3777,3777,3777,154,134,136, + 160,259,370,315,316,317,3777,3777,2179,1760, + 3777,135,213,2625,20,3777,17,21,18,1053, + 43,45,3777,3777,135,213,1263,1296,1905,3777, + 365,134,136,160,2625,20,3777,17,21,18, + 1053,43,45,138,134,136,160,1263,1296,1919, + 2625,20,3777,17,21,18,1053,43,45,3777, + 3777,3777,3777,1263,1296,1929,2625,20,3777,17, + 21,18,1053,43,45,3777,3777,3777,3777,1263, + 1296,1932,2625,20,3777,17,21,18,1053,43, + 45,476,3777,3206,3777,1263,1296,1938,2625,20, + 3777,17,21,18,1053,43,45,890,3777,420, + 557,1263,1296,1945,3777,874,3777,420,3777,318, + 315,316,317,3777,3777,724,224,229,218,717, + 221,223,874,88,420,3777,1281,1332,3777,3777, + 116,88,3777,3777,197,1177,3777,953,1381,630, + 3777,3777,3777,874,3777,420,3777,2837,88,3777, + 3777,197,1177,3777,874,1381,420,3777,2371,369, + 413,3777,3777,3777,2837,3223,3777,3777,874,88, + 420,1600,197,1177,3777,3777,1381,3777,3777,1594, + 88,3777,3223,197,1177,2837,3777,1381,1626,874, + 3777,420,3777,3777,88,1748,2837,197,1177,606, + 3777,1381,3777,3223,319,315,316,317,3777,1652, + 2837,3777,3777,3777,3223,88,3777,3777,197,1177, + 1678,3777,1381,3777,3777,3777,1324,3777,3223,3777, + 1324,2837,3777,3777,1695,318,315,316,317,318, + 315,316,317,2769,3777,3273,3777,3777,3777,3223, + 3777,3777,3777,2068,3777,2172,3777,2068,2625,20, + 3777,17,21,18,1053,43,37,1049,3777,2625, + 20,1049,17,21,18,1053,43,36,2625,20, + 3777,17,21,18,1053,43,35,1255,1804,569, + 3777,2436,3777,1324,3777,2456,3777,319,315,316, + 317,274,318,315,316,317,3777,3777,3777,3777, + 3777,3777,267,1161,1134,272,1281,3777,2625,20, + 2068,17,21,18,1053,43,48,3777,3777,630, + 3777,266,2625,20,1049,17,21,18,1053,43, + 47,3777,1324,3777,3777,3777,3777,3777,307,369, + 413,318,315,316,317,3777,2625,20,2875,17, + 21,18,1053,43,46,1324,1238,3777,658,2068, + 1038,3777,3777,3777,318,315,316,317,3777,318, + 315,316,317,1049,2652,20,3777,17,21,18, + 1053,33,2068,1744,3777,197,3777,1332,3777,3777, + 3777,3777,318,315,316,317,1049,2122,2798,20, + 3777,17,21,18,1053,1860,3777,3777,3777,3777, + 2068,3777,3777,3777,3777,3777,1445,1550,3777,3777, + 2502,1262,1682,3777,1591,3777,318,315,316,317, + 1814,318,315,316,317,3777,1870,3777,3777,318, + 315,316,317,3777,2498,318,315,316,317,3175, + 2244,2244,1152,1152,3777,3777,192,3450,3777,981, + 1873,3777,2244,3470,1152,3777,3777,1274,878,319, + 315,316,317,3777,3777,3777,88,88,3777,3777, + 1926,3777,3777,116,116,3777,3777,3777,88,319, + 315,316,317,3777,3777,116,3777,3777,3777,3777, + 3777,3777,3777,3777,3777,3777,3777,3777,3777,3777, + 3777,3777,3777,3777,3777,3777,3777,3777,3777,3777, + 3777,3777,3777,3777,3777,3777,3777,3777,3777,3777, + 3777,3777,1741,2231,3777,3777,3777,3777,3777,3777, + 3777,3777,3777,3777,2245,3777,0,1,539,0, + 1,519,0,1,534,0,1,543,0,677, + 412,0,519,129,0,534,129,0,543,129, + 0,519,130,0,534,130,0,543,130,0, + 519,131,0,534,131,0,543,131,0,543, + 185,0,534,185,0,519,185,0,185,189, + 0,543,184,0,534,184,0,519,184,0, + 184,189,0,519,132,0,534,132,0,543, + 132,0,519,133,0,534,133,0,543,133, + 0,416,419,0,415,418,0,414,417,0, + 11,226,0,519,368,0,534,368,0,543, + 368,0,4192,411,0,223,235,0,3785,1, + 0,543,380,0,534,380,0,519,380,0, + 1041,32,0,1852,32,0,519,410,0,534, + 410,0,543,410,0,4175,410,0,4173,410, + 0,543,253,0,534,253,0,519,253,0, + 4192,412,0,1,4014,0,223,236,0,519, + 406,0,534,406,0,543,406,0,3994,406, + 0,3993,406,0,3992,406,0,3991,406,0, + 3942,406,0,3941,406,0,3940,406,0,3939, + 406,0,3938,406,0,519,409,0,534,409, + 0,543,409,0,4175,409,0,4173,409,0, + 179,20,0,8,10,0,1,4196,0,1, + 4195,0,1,4194,0,1,4003,0,366,355, + 0,367,356,0,113,2741,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,0,38,39, + 40,41,42,43,44,45,0,0,48,0, + 50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,67,68,69, + 70,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,0, + 38,39,40,41,42,43,44,45,72,73, + 48,74,50,51,52,53,54,55,56,57, + 58,59,60,61,62,63,64,65,66,67, + 68,69,70,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,0,38,39,40,41,42,43,44,45, + 0,10,48,0,50,51,52,53,54,55, + 56,57,58,59,60,61,62,63,64,65, + 66,67,68,69,70,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,0,38,39,40,41,42,43, + 44,45,72,73,48,0,50,51,52,53, + 54,55,56,57,58,59,60,61,62,63, + 64,65,66,67,68,69,70,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,0,38,39,40,41,42, + 43,44,45,0,1,48,0,50,51,52, + 53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,68,69,70,0,1, + 2,3,4,5,28,7,8,9,10,11, + 12,13,14,15,16,17,0,19,20,21, + 22,23,24,25,26,27,28,29,30,0, + 32,33,34,35,36,0,1,39,40,41, + 42,43,44,45,0,0,1,0,1,2, + 3,4,5,55,7,8,9,10,0,61, + 62,63,64,65,66,67,68,69,70,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,37,0,37,0,1,2,3,4, + 5,0,7,8,9,0,27,28,29,30, + 31,32,33,34,35,36,0,38,39,40, + 41,42,43,44,45,0,1,2,3,4, + 5,0,0,2,55,3,4,6,84,85, + 61,62,63,64,65,66,67,68,69,70, + 19,0,0,2,49,87,0,0,1,2, + 3,4,5,6,7,8,9,10,11,12, + 0,39,40,41,42,43,44,45,47,27, + 28,29,89,104,27,28,29,30,31,32, + 33,34,35,36,89,38,39,40,41,42, + 43,44,45,0,0,104,0,37,2,3, + 4,5,55,7,8,9,0,11,61,62, + 63,64,65,66,67,68,69,70,0,1, + 74,27,28,29,6,0,0,1,10,0, + 89,13,14,15,16,17,7,8,9,93, + 94,95,96,97,98,99,100,101,102,0, + 1,104,27,28,29,37,0,1,2,3, + 4,5,6,37,46,0,10,11,12,13, + 14,15,16,17,0,19,20,21,22,23, + 24,25,26,18,91,92,30,13,14,71, + 72,73,74,75,76,77,78,79,80,81, + 82,83,84,85,86,87,88,0,90,91, + 92,93,94,95,96,97,98,99,100,101, + 102,0,1,0,0,1,19,6,0,6, + 0,10,2,5,13,14,15,16,17,0, + 10,0,1,2,3,4,5,6,0,1, + 2,3,4,5,31,7,8,9,37,103, + 0,1,2,3,4,5,6,46,0,46, + 10,11,12,13,14,15,16,17,37,19, + 20,21,22,23,24,25,26,46,47,0, + 30,0,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,86,87,88, + 0,90,91,92,93,94,95,96,97,98, + 99,100,101,102,0,1,37,0,18,0, + 6,2,0,6,10,0,0,13,14,15, + 16,17,6,0,0,1,2,3,4,5, + 6,7,8,9,10,0,27,2,3,4, + 5,37,18,103,75,74,11,0,1,0, + 46,27,28,29,30,31,32,33,34,35, + 36,37,46,47,0,0,1,2,3,4, + 5,47,7,8,9,71,72,73,74,75, + 76,77,78,79,80,81,82,83,84,85, + 86,87,88,0,90,91,92,93,94,95, + 96,97,98,99,100,101,102,0,1,0, + 103,18,0,6,49,6,7,10,6,0, + 13,14,15,16,17,0,1,2,3,4, + 5,0,7,8,9,86,72,73,0,1, + 31,10,0,31,37,0,0,1,2,3, + 4,5,6,46,16,17,10,11,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,0,49,37,0,1,71,72, + 73,74,75,76,77,78,79,80,81,82, + 83,84,85,86,87,88,0,90,91,92, + 93,94,95,96,97,98,99,100,101,102, + 0,1,0,75,72,73,6,71,0,1, + 10,0,1,13,14,15,16,17,90,0, + 1,2,3,4,5,6,0,1,0,10, + 11,12,13,14,15,16,17,37,19,20, + 21,22,23,24,25,26,46,0,0,2, + 3,4,5,0,7,8,9,0,11,2, + 3,4,5,0,7,8,9,19,11,0, + 1,71,72,73,74,75,76,77,78,79, + 80,81,82,83,84,85,86,87,88,0, + 90,91,92,93,94,95,96,97,98,99, + 100,101,102,0,0,2,3,4,5,6, + 7,8,9,0,11,12,0,89,2,3, + 4,5,103,7,8,9,37,11,0,1, + 27,28,29,30,0,32,33,34,35,36, + 0,38,39,40,41,42,43,44,45,0, + 46,0,1,2,3,4,5,6,55,19, + 0,27,28,29,61,62,63,64,65,66, + 67,68,69,70,71,0,0,2,3,4, + 5,6,7,8,9,0,11,12,37,0, + 0,0,2,3,4,5,0,6,47,86, + 0,11,27,28,29,30,6,32,33,34, + 35,36,0,38,39,40,41,42,43,44, + 45,72,73,27,28,29,0,37,0,1, + 55,31,6,7,8,9,61,62,63,64, + 65,66,67,68,69,70,71,0,0,2, + 3,4,5,6,7,8,9,31,11,12, + 0,1,71,15,0,75,0,7,8,9, + 10,7,46,88,27,28,29,30,0,32, + 33,34,35,36,6,38,39,40,41,42, + 43,44,45,27,28,29,0,37,0,0, + 74,2,55,0,6,7,8,9,61,62, + 63,64,65,66,67,68,69,70,71,0, + 1,2,3,4,5,47,7,8,9,31, + 11,12,0,0,2,3,4,5,0,0, + 7,8,9,11,46,6,27,28,29,30, + 18,32,33,34,35,36,0,0,39,40, + 41,42,43,44,45,0,0,2,3,4, + 5,15,74,0,55,18,11,0,0,6, + 61,62,63,64,65,66,67,68,69,70, + 0,88,2,3,4,5,0,7,8,9, + 0,11,12,0,0,2,3,4,5,0, + 72,73,0,1,11,49,7,27,28,29, + 30,18,32,33,34,35,36,18,89,39, + 40,41,42,43,44,45,0,0,2,3, + 4,5,103,6,71,55,46,11,0,72, + 73,61,62,63,64,65,66,67,68,69, + 70,0,0,2,3,4,5,0,7,8, + 9,0,11,12,78,79,80,81,82,83, + 13,14,78,79,80,81,82,83,27,28, + 29,30,0,32,33,34,35,36,6,0, + 39,40,41,42,43,44,45,0,71,0, + 0,49,13,14,0,0,55,7,8,9, + 10,6,61,62,63,64,65,66,67,68, + 69,70,0,1,2,3,4,5,6,47, + 0,49,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,0, + 46,0,47,31,0,0,7,8,9,0, + 38,7,8,9,10,0,7,8,9,0, + 48,2,50,51,52,53,54,0,56,57, + 58,59,60,0,87,2,3,4,5,89, + 7,8,9,0,11,12,0,0,1,0, + 7,8,9,7,8,9,7,8,9,0, + 27,28,29,30,0,32,33,34,35,36, + 6,0,39,40,41,42,43,44,45,78, + 79,80,81,82,83,0,1,0,55,84, + 85,6,0,89,61,62,63,64,65,66, + 67,68,69,70,0,1,2,3,4,5, + 6,47,0,1,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,0,47,0,0,31,0,1,7,8, + 9,0,38,10,0,0,0,2,7,8, + 9,6,48,0,50,51,52,53,54,0, + 56,57,58,59,60,0,1,2,3,4, + 5,6,0,1,0,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,47,0,0,49,31,0,0,46, + 7,8,9,38,7,8,9,48,0,76, + 77,0,18,48,6,50,51,52,53,54, + 46,56,57,58,59,60,0,1,2,3, + 4,5,6,0,0,0,10,11,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,0,46,47,0,31,0,0, + 7,8,9,0,38,0,10,0,0,0, + 7,8,9,0,48,6,50,51,52,53, + 54,46,56,57,58,59,60,0,1,2, + 3,4,5,6,0,0,0,10,11,12, + 13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,0,46,47,49,31,0, + 0,0,0,0,10,38,7,8,9,7, + 8,9,76,77,0,48,0,50,51,52, + 53,54,0,56,57,58,59,60,0,1, + 2,3,4,5,6,0,0,0,10,11, + 12,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,0,0,0,105,31, + 0,0,7,8,9,0,38,0,0,0, + 76,77,0,0,18,18,48,74,50,51, + 52,53,54,18,56,57,58,59,60,0, + 1,2,3,4,5,6,0,0,0,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,18,0,0,0, + 31,49,49,0,0,0,0,38,0,0, + 0,0,0,0,0,18,18,48,0,50, + 51,52,53,54,18,56,57,58,59,60, + 0,1,2,3,4,5,6,0,0,0, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,49,49,0, + 49,31,49,49,0,0,0,0,38,0, + 0,0,0,0,0,0,0,18,48,0, + 50,51,52,53,54,18,56,57,58,59, + 60,0,1,2,3,4,5,6,0,0, + 0,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,49,49, + 0,0,31,0,0,0,0,0,0,38, + 0,0,0,0,0,0,0,0,0,48, + 0,50,51,52,53,54,0,56,57,58, + 59,60,0,1,2,3,4,5,6,0, + 0,0,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,0, + 0,0,0,31,0,0,0,0,0,0, + 38,0,0,0,0,0,0,0,0,0, + 48,0,50,51,52,53,54,0,56,57, + 58,59,60,0,1,2,3,4,5,6, + 0,0,0,10,11,12,13,14,15,16, + 17,18,19,20,21,22,23,24,25,26, + 0,0,0,0,31,0,0,0,0,0, + 0,38,0,0,7,8,9,0,0,6, + 0,48,0,50,51,52,53,54,0,56, + 57,58,59,60,27,28,29,30,0,32, + 33,34,35,36,31,0,39,40,41,42, + 43,44,45,0,0,0,0,0,0,0, + 47,0,55,0,0,0,0,0,61,62, + 63,64,65,66,67,0,1,2,3,4, + 5,0,0,0,0,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,0,1,2,3,4,5,6,7, + 8,9,10,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,27, + 28,29,30,31,32,33,34,35,36,37, + 0,1,2,3,4,5,0,0,0,47, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,0,1,2, + 3,4,5,6,7,8,9,10,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,27,28,29,30,31,32, + 33,34,35,36,37,0,1,2,3,4, + 5,0,0,0,47,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,0,1,2,3,4,5,0,0, + 0,0,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,0, + 1,2,3,4,5,0,0,0,0,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,0,1,2,3, + 4,5,0,0,0,0,10,11,12,13, + 14,15,16,17,0,19,20,21,22,23, + 24,25,26,0,1,2,3,4,5,0, + 0,0,0,10,11,12,13,14,15,16, + 17,0,19,20,21,22,23,24,25,26, + 0,1,2,3,4,5,0,0,0,0, + 10,11,12,13,14,15,16,17,0,19, + 20,21,22,23,24,25,26,0,1,2, + 3,4,5,0,0,0,0,10,11,12, + 13,14,15,16,17,0,19,20,21,22, + 23,24,25,26,0,1,2,3,4,5, + 0,0,0,0,10,11,12,13,14,15, + 16,17,0,19,20,21,22,23,24,25, + 26,0,1,2,3,4,5,0,0,0, + 0,10,11,12,13,14,15,16,17,0, + 19,20,21,22,23,24,25,26,0,0, + 0,3,4,0,0,7,8,9,0,0, + 6,0,0,0,0,0,1,0,0,0, + 0,6,0,0,0,27,28,29,30,0, + 32,33,34,35,36,31,0,39,40,41, + 42,43,44,45,0,1,2,3,4,5, + 46,0,37,0,10,11,12,13,14,15, + 16,17,47,19,20,21,22,23,24,25, + 26,0,0,0,3,4,0,0,7,8, + 9,0,0,0,0,0,0,0,0,1, + 0,0,0,0,6,0,0,0,27,28, + 29,30,0,32,33,34,35,36,0,0, + 39,40,41,42,43,44,45,0,1,2, + 3,4,5,0,0,37,0,10,11,12, + 13,14,15,16,17,47,19,20,21,22, + 23,24,25,26,0,1,2,3,4,5, + 0,0,0,0,10,11,12,13,14,15, + 16,17,0,19,20,21,22,23,24,25, + 26,0,0,0,0,0,0,0,7,8, + 9,0,0,0,0,0,0,1,7,8, + 9,0,6,0,0,0,0,0,27,28, + 29,30,0,32,33,34,35,36,27,28, + 29,30,0,32,33,34,35,36,0,7, + 8,9,0,37,0,0,0,0,0,7, + 8,9,0,47,0,0,0,0,0,27, + 28,29,30,0,32,33,34,35,36,27, + 28,29,30,0,32,33,34,35,36,0, + 7,8,9,0,0,0,0,0,0,0, + 7,8,9,0,0,0,0,0,0,0, + 27,28,29,30,0,32,33,34,35,36, + 27,28,29,30,0,32,33,34,35,36, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,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, + 3777,1,6257,6201,6198,6200,1801,3537,1,1, + 1,6256,1,1,1,1,1,1,818,1, + 1,1,1,1,1,1,1,1,1,1, + 1,3786,1,1,1,1,1,1,3878,1, + 1,1,1,1,1,1,55,157,1643,286, + 1178,1076,1404,1719,608,1,1633,1045,1685,1202, + 1659,1,1,1,1,1,1,1,1,1, + 1,3784,8,3753,3753,3753,3753,3753,3753,3753, + 3753,3753,3753,3753,3753,3753,3753,3753,3753,3753, + 3753,3753,3753,3753,3753,3753,3753,3753,3753,3753, + 3753,3753,3753,3753,3753,3753,3753,3753,3753,3777, + 3753,3753,3753,3753,3753,3753,3753,3753,1237,1360, + 3753,461,3753,3753,3753,3753,3753,3753,3753,3753, + 3753,3753,3753,3753,3753,3753,3753,3753,3753,3753, + 3753,3753,3753,3753,3777,1,6257,6201,6198,6200, + 1801,3537,1,1,1,6256,1,1,1,1, + 1,1,818,1,1,1,1,1,1,1, + 1,1,1,1,1,3786,1,1,1,1, + 1,3777,3878,1,1,1,1,1,1,1, + 358,2195,1643,3777,1178,1076,1404,1719,608,1, + 1633,1045,1685,1202,1659,1,1,1,1,1, + 1,1,1,1,1,3784,3777,1,6257,6201, + 6198,6200,3787,3537,1,1,1,6256,1,1, + 1,1,1,1,818,1,1,1,1,1, + 1,1,1,1,1,1,1,3786,1,1, + 1,1,1,3777,3878,1,1,1,1,1, + 1,1,1237,1360,1643,3777,1178,1076,1404,1719, + 608,1,1633,1045,1685,1202,1659,1,1,1, + 1,1,1,1,1,1,1,3777,1,6257, + 6201,6198,6200,3787,3537,1,1,1,6256,1, + 1,1,1,1,1,818,1,1,1,1, + 1,1,1,1,1,1,1,1,3786,1, + 1,1,1,1,3777,3878,1,1,1,1, + 1,1,1,3777,479,1643,344,1178,1076,1404, + 1719,608,1,1633,1045,1685,1202,1659,1,1, + 1,1,1,1,1,1,1,1,3777,3134, + 3788,4191,4193,3690,4120,543,519,534,3249,3789, + 3388,3238,2288,3258,3364,2095,3777,3793,1182,3790, + 3791,3792,737,499,1132,3991,3993,3992,3940,3777, + 3941,3939,3994,3942,3938,3777,617,3945,3949,3947, + 3948,3946,3951,3952,63,222,490,268,2345,4003, + 4194,4196,4195,3950,543,519,534,253,69,3944, + 3953,3954,3955,4165,4166,4167,1278,3350,3080,3777, + 1,1,1,1,1,3787,3537,1,1,1, + 1,1,912,1,912,1,3061,4003,4194,4196, + 4195,3777,3546,3540,3543,3777,1,1,1,1, + 3786,1,1,1,1,1,3777,4083,1,1, + 1,1,1,1,1,1,3061,4003,4194,4196, + 4195,3777,3777,1955,1,4173,4175,3783,2866,2849, + 1,1,1,1,1,1,1,1,1,1, + 1912,1,3777,3693,2633,678,43,3777,1,1, + 1,1,1,3787,3537,1,1,1,1,1, + 220,4178,4174,4180,4181,4179,4176,4177,3782,3991, + 3993,3992,4035,300,1,1,1,1,3786,1, + 1,1,1,1,1842,4083,1,1,1,1, + 1,1,1,73,249,3536,185,912,3588,3588, + 3588,3588,1,3579,3585,3582,3777,3588,1,1, + 1,1,1,1,1,1,1,1,1,4193, + 1686,1,1,1,4193,248,270,817,4193,182, + 4035,4193,4193,4193,4193,4193,543,519,534,1660, + 1634,1608,1582,1556,1504,1530,1478,1452,1420,3777, + 524,299,3991,3993,3992,4193,1,3134,3788,4191, + 4193,4192,3781,912,4193,3777,1000,3789,544,3238, + 2288,3258,3364,2095,52,3793,1182,3790,3791,3792, + 737,499,1132,629,850,639,787,2827,2422,4193, + 4193,4193,4193,4193,4193,4193,4193,4193,4193,4193, + 4193,4193,4193,4193,4193,4193,4193,349,4193,4193, + 4193,4193,4193,4193,4193,4193,4193,4193,4193,4193, + 4193,1,4192,3777,3777,943,1062,4192,3777,3787, + 3777,4192,1740,486,4192,4192,4192,4192,4192,3777, + 1800,1,2345,4003,4194,4196,4195,262,253,3061, + 4003,4194,4196,4195,3786,543,519,534,4192,3780, + 3777,3134,3788,4191,4193,4192,3781,4192,3777,2316, + 2555,3789,544,3238,2288,3258,3364,2095,912,3793, + 1182,3790,3791,3792,737,499,1132,262,262,292, + 1816,211,4192,4192,4192,4192,4192,4192,4192,4192, + 4192,4192,4192,4192,4192,4192,4192,4192,4192,4192, + 229,4192,4192,4192,4192,4192,4192,4192,4192,4192, + 4192,4192,4192,4192,1,4191,2023,3777,232,326, + 4191,4104,3777,3781,4191,3777,3777,4191,4191,4191, + 4191,4191,3783,3777,356,367,367,367,367,367, + 3771,367,367,367,3771,3777,4105,3788,4191,4193, + 4192,4191,5624,3780,1756,1867,3789,416,3621,67, + 4191,367,367,367,367,3771,367,367,367,367, + 367,367,455,3782,357,1,3061,4003,4194,4196, + 4195,3771,3546,3540,3543,4191,4191,4191,4191,4191, + 4191,4191,4191,4191,4191,4191,4191,4191,4191,4191, + 4191,4191,4191,1,4191,4191,4191,4191,4191,4191, + 4191,4191,4191,4191,4191,4191,4191,1,3789,1, + 3780,818,1,3789,1946,117,3537,3789,3787,3777, + 3789,3789,3789,3789,3789,1,3061,4003,4194,4196, + 4195,3777,3546,3540,3543,1379,1237,1360,32,3660, + 117,3373,59,3786,3789,3777,1,3134,5187,4981, + 4775,4878,29,3789,3803,3804,3249,5084,544,3238, + 2288,3258,3364,2095,5624,3793,1182,3790,3791,3792, + 737,499,1132,3777,1946,3663,415,3624,3789,3789, + 3789,3789,3789,3789,3789,3789,3789,3789,3789,3789, + 3789,3789,3789,3789,3789,3789,3777,3789,3789,3789, + 3789,3789,3789,3789,3789,3789,3789,3789,3789,3789, + 1,3788,3777,822,1237,1360,3788,29,414,3627, + 3788,11,3630,3788,3788,3788,3788,3788,675,3777, + 3134,3788,4191,4193,4192,3781,3777,445,1,3249, + 3789,544,3238,2288,3258,3364,2095,3788,3793,1182, + 3790,3791,3792,737,499,1132,3788,184,3777,3600, + 3600,3600,3600,3777,3591,3597,3594,206,3600,6246, + 6246,6246,6246,3777,543,519,534,1029,6246,350, + 1233,3788,3788,3788,3788,3788,3788,3788,3788,3788, + 3788,3788,3788,3788,3788,3788,3788,3788,3788,271, + 3788,3788,3788,3788,3788,3788,3788,3788,3788,3788, + 3788,3788,3788,3777,347,1,1,1,1,191, + 1,1,1,68,1,1,377,4034,6254,6254, + 6254,6254,3780,543,519,534,912,6254,337,1548, + 1,1,1,1,250,1,1,1,1,1, + 3777,3973,1,1,1,1,1,1,1,58, + 1002,1,2345,3765,3762,3756,3759,3783,1,1062, + 3777,1,1,1,1,1,1,1,1,1, + 1,1,1,1,191,3777,3777,1,1,1, + 1,190,1,1,1,71,1,1,912,3777, + 3777,1,3788,4191,4193,4192,251,3648,3782,1379, + 3777,3789,1,1,1,1,3787,1,1,1, + 1,1,3777,3973,1,1,1,1,1,1, + 1,1237,1360,3991,3993,3992,235,1971,3777,3077, + 1,3786,223,3645,3645,3645,1,1,1,1, + 1,1,1,1,1,1,190,3777,65,1, + 1,1,1,191,1,1,1,223,1,1, + 268,2320,3784,1767,1,1645,252,543,519,534, + 253,3537,223,1104,1,1,1,1,3777,1, + 1,1,1,1,3783,3973,1,1,1,1, + 1,1,1,3991,3993,3992,3777,912,236,3777, + 223,2016,1,72,223,3696,3696,3696,1,1, + 1,1,1,1,1,1,1,1,191,1, + 3061,729,680,603,3549,3782,3546,3540,3543,223, + 3789,453,3777,253,3788,4191,4193,4192,57,3777, + 543,519,534,3789,223,3781,3991,3993,3992,3940, + 1063,3941,3939,3994,3942,3938,66,3777,3945,3949, + 3947,3948,3946,3951,3952,208,3777,3788,4191,4193, + 4192,1767,223,3777,3950,1408,3789,56,3777,3785, + 3944,3953,3954,3955,4165,4166,4167,1278,3350,3080, + 3777,1104,3788,4191,4193,3642,60,543,519,534, + 256,3789,453,3777,62,3788,4191,4193,4192,1, + 1237,1360,3777,1956,3789,2524,3537,3991,3993,3992, + 3940,1066,3941,3939,3994,3942,3938,818,2050,3945, + 3949,3947,3948,3946,3951,3952,207,285,1463,1463, + 1463,1463,3780,1113,3784,3950,797,1463,3777,1237, + 1360,3944,3953,3954,3955,4165,4166,4167,1278,3350, + 3080,3777,3777,3788,4191,4193,3690,54,543,519, + 534,3777,3789,453,3068,3052,3036,3020,3004,2983, + 2827,2422,3068,3052,3036,3020,3004,2983,3991,3993, + 3992,3940,3777,3941,3939,3994,3942,3938,3783,53, + 3945,3949,3947,3948,3946,3951,3952,70,1113,3777, + 1,2551,2827,2422,89,1,3950,3546,3540,3543, + 253,3783,3944,3953,3954,3955,4165,4166,4167,1278, + 3350,3080,3777,1,6257,6201,6198,6200,3787,3782, + 3777,769,1,6256,1,1,1,1,1,1, + 818,1,1,1,1,1,1,1,1,159, + 1731,61,3782,3786,1,64,543,519,534,378, + 3878,3546,3540,3543,253,3777,543,519,534,3777, + 1643,4015,1178,1076,1404,1719,608,3777,1633,1045, + 1685,1202,1659,3777,678,3788,4191,4193,4192,4035, + 543,519,534,381,3789,453,380,3777,2148,372, + 543,519,534,3651,3657,3654,543,519,534,3777, + 3991,3993,3992,3940,1,3941,3939,3994,3942,3938, + 91,3777,3945,3949,3947,3948,3946,3951,3952,3068, + 3052,3036,3020,3004,2983,3777,446,3777,3950,2866, + 2849,3783,3777,4035,3944,3953,3954,3955,4165,4166, + 4167,1278,3350,3080,3777,1,6257,6201,6198,6200, + 3787,91,3777,2303,1,6256,1,1,1,1, + 1,1,818,1,1,1,1,1,1,1, + 1,371,3782,49,3777,3786,324,941,543,519, + 534,183,3878,3336,3777,3777,1,1085,543,519, + 534,3783,1643,30,1178,1076,1404,1719,608,3777, + 1633,1045,1685,1202,1659,3777,1,6257,6201,6198, + 6200,3787,3777,2584,207,1,6256,1,1,1, + 1,1,1,818,1,1,1,1,1,1, + 1,1,3782,253,3777,2,3786,373,3777,3806, + 3681,3687,3684,3878,543,519,534,2009,3777,3312, + 3298,3777,1513,1643,3783,1178,1076,1404,1719,608, + 5623,1633,1045,1685,1202,1659,3777,1,6257,6201, + 6198,6200,3787,3777,3777,30,1,6256,1,1, + 1,1,1,1,818,1,1,1,1,1, + 1,1,1,379,2008,3782,51,3786,3777,3777, + 543,519,534,200,3878,3777,3336,3777,3777,3777, + 543,519,534,113,1643,3783,1178,1076,1404,1719, + 608,757,1633,1045,1685,1202,1659,3777,1,6257, + 6201,6198,6200,3787,3777,3777,3777,1,6256,1, + 1,1,1,1,1,818,1,1,1,1, + 1,1,1,1,50,1294,3782,2623,3786,374, + 3777,3777,375,3777,3336,3878,543,519,534,543, + 519,534,3312,3298,3777,1643,3777,1178,1076,1404, + 1719,608,3777,1633,1045,1685,1202,1659,3777,1, + 6257,6201,6198,6200,3787,3777,3777,3777,1,6256, + 1,1,1,1,1,1,818,1,1,1, + 1,1,1,1,1,376,229,3777,3774,3786, + 3777,3777,543,519,534,367,3878,3777,3777,3777, + 3312,3298,3777,3777,233,1539,1643,882,1178,1076, + 1404,1719,608,5624,1633,1045,1685,1202,1659,3777, + 1,6257,6201,6198,6200,3787,3777,3777,356,1, + 6256,1,1,1,1,1,1,818,1,1, + 1,1,1,1,1,1,5624,354,42,3777, + 3786,1894,1920,3777,3777,3777,3777,3878,201,3777, + 3777,1,3777,1,1,5624,5624,1643,3777,1178, + 1076,1404,1719,608,5624,1633,1045,1685,1202,1659, + 3777,1,6257,6201,6198,6200,3787,3777,3777,3777, + 1,6256,1,1,1,1,1,1,818,1, + 1,1,1,1,1,1,1,1998,4161,189, + 4193,3786,4192,4191,3777,3777,3777,381,3878,1, + 1,3777,3777,3777,3777,3777,3777,206,1643,3777, + 1178,1076,1404,1719,608,377,1633,1045,1685,1202, + 1659,3777,1,6257,6201,6198,6200,3787,3777,3777, + 3777,1,6256,1,1,1,1,1,1,818, + 1,1,1,1,1,1,1,1,3789,3788, + 3777,3777,3786,3777,3777,3777,3777,3777,3777,3878, + 3777,3777,3777,3777,3777,3777,3777,3777,3777,1643, + 3777,1178,1076,1404,1719,608,3777,1633,1045,1685, + 1202,1659,3777,1,6257,6201,6198,6200,3787,3777, + 3777,3777,1,6256,1,1,1,1,1,1, + 818,1,1,1,1,1,1,1,1,3777, + 3777,3777,3777,3786,3777,3777,3777,3777,3777,3777, + 3878,3777,3777,3777,3777,3777,3777,3777,3777,3777, + 1643,3777,1178,1076,1404,1719,608,3777,1633,1045, + 1685,1202,1659,3777,1,6257,6201,6198,6200,3787, + 3777,3777,3777,1,6256,1,1,1,1,1, + 1,818,1,1,1,1,1,1,1,1, + 3777,3777,3777,3777,3786,3777,3777,129,3777,3777, + 3777,3878,3777,1,3558,3552,3555,3777,3777,117, + 3777,1643,3777,1178,1076,1404,1719,608,3777,1633, + 1045,1685,1202,1659,3991,3993,3992,3940,3777,3941, + 3939,3994,3942,3938,117,3777,3945,3949,3947,3948, + 3946,3951,3952,3777,3777,3777,3777,3777,3777,3777, + 117,3777,3950,3777,3777,3777,3777,3777,3944,3953, + 3954,3955,4165,4166,4167,3777,3134,3788,4191,4193, + 4192,3777,3777,3777,3777,3249,3789,544,3238,2288, + 3258,3364,2095,5624,3793,1182,3790,3791,3792,737, + 499,1132,20,3750,179,179,179,179,3750,179, + 179,179,3750,3777,3777,3777,3777,3777,3777,3777, + 3777,3777,3777,3777,3777,3777,3777,3777,3777,179, + 179,179,179,3750,179,179,179,179,179,3750, + 3777,3134,3788,4191,4193,4192,3777,3777,3777,3750, + 3249,3789,544,3238,2288,3258,3364,2095,5624,3793, + 1182,3790,3791,3792,737,499,1132,355,366,366, + 366,366,366,3768,366,366,366,3768,3777,3777, + 3777,3777,3777,3777,3777,3777,3777,3777,3777,3777, + 3777,3777,3777,3777,366,366,366,366,3768,366, + 366,366,366,366,366,1,3134,5187,4981,4775, + 4878,3777,3777,3777,3768,3249,5084,544,3238,2288, + 3258,3364,2095,5624,3793,1182,3790,3791,3792,737, + 499,1132,382,3134,3788,4191,4193,4192,3777,3777, + 3777,3777,3249,3789,544,3238,2288,3258,3364,2095, + 5624,3793,1182,3790,3791,3792,737,499,1132,3777, + 3134,3788,4191,4193,4192,3777,3777,3777,3777,3249, + 3789,544,3238,2288,3258,3364,2095,5624,3793,1182, + 3790,3791,3792,737,499,1132,3777,2109,3788,4191, + 4193,4192,3777,3777,3777,3777,3249,3789,544,3238, + 2288,3258,3364,2095,3777,3793,1182,3790,3791,3792, + 737,499,1132,3777,3085,3788,4191,4193,4192,3777, + 3777,3777,3777,3249,3789,544,3238,2288,3258,3364, + 2095,3777,3793,1182,3790,3791,3792,737,499,1132, + 3777,3102,3788,4191,4193,4192,3777,3777,3777,3777, + 3249,3789,544,3238,2288,3258,3364,2095,3777,3793, + 1182,3790,3791,3792,737,499,1132,3777,3123,3788, + 4191,4193,4192,3777,3777,3777,3777,3249,3789,544, + 3238,2288,3258,3364,2095,3777,3793,1182,3790,3791, + 3792,737,499,1132,3777,3134,3788,4191,4193,4192, + 3777,3777,3777,3777,3249,3789,544,3238,2288,3258, + 3364,2095,3777,3793,1182,3790,3791,3792,737,499, + 1132,3777,3148,3788,4191,4193,4192,3777,3777,3777, + 3777,3249,3789,544,3238,2288,3258,3364,2095,3777, + 3793,1182,3790,3791,3792,737,499,1132,410,3777, + 3777,3678,3675,3777,3777,3672,3666,3669,3777,3777, + 3787,3777,3777,3777,3777,1,2320,3777,3777,3777, + 3777,391,3777,3777,3777,3991,3993,3992,3940,3777, + 3941,3939,3994,3942,3938,3786,3777,4178,4174,4180, + 4181,4179,4176,4177,1,3134,3788,4191,4193,4192, + 2330,3777,912,3777,3249,3789,544,3238,2288,3258, + 3364,2095,391,3793,1182,3790,3791,3792,737,499, + 1132,409,3777,3777,3747,3744,3777,3777,3741,3735, + 3738,3777,3777,3777,3777,3777,3777,3777,1,2320, + 3777,3777,3777,3777,265,3777,3777,3777,3991,3993, + 3992,3940,3777,3941,3939,3994,3942,3938,3777,3777, + 4178,4174,4180,4181,4179,4176,4177,3777,3169,3788, + 4191,4193,4192,3777,3777,912,3777,3249,3789,544, + 3238,2288,3258,3364,2095,265,3793,1182,3790,3791, + 3792,737,499,1132,332,3134,3788,4191,4193,4192, + 3777,3777,3777,3777,3249,3789,544,3238,2288,3258, + 3364,2095,3777,3793,1182,3790,3791,3792,737,499, + 1132,130,3777,3777,3777,3777,3777,3777,3567,3561, + 3564,131,3777,3777,3777,3777,1,2320,3576,3570, + 3573,3777,3783,3777,3777,3777,3777,3777,3991,3993, + 3992,3940,3777,3941,3939,3994,3942,3938,3991,3993, + 3992,3940,132,3941,3939,3994,3942,3938,3777,3609, + 3603,3606,133,912,3777,3777,3777,3777,3777,3618, + 3612,3615,3777,3782,3777,3777,3777,3777,3777,3991, + 3993,3992,3940,3777,3941,3939,3994,3942,3938,3991, + 3993,3992,3940,368,3941,3939,3994,3942,3938,3777, + 3639,3633,3636,406,3777,3777,3777,3777,3777,3777, + 3705,3699,3702,3777,3777,3777,3777,3777,3777,3777, + 3991,3993,3992,3940,3777,3941,3939,3994,3942,3938, + 3717,3711,3714,3726,3777,3723,3729,3708,3720,3732 + }; + }; + 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, + 753,1,165,350,348,568,753,166,350,350, + 833,141,670,166,166,166,79,660,79,660, + 660,79,660,79,355,350,339,339,339,339, + 166,79,33,570,9,521,227,350,105,104, + 355,230,141,570,521,194,355,263,597,539, + 416,706,53,136,660,664,661,664,136,664, + 660,350,358,403,417,713,33,33,33,33, + 33,33,33,33,33,33,33,617,297,528, + 420,527,350,227,227,235,713,350,120,570, + 350,681,540,3,706,705,417,267,426,141, + 466,358,403,715,617,617,617,617,617,417, + 417,417,411,411,555,539,664,664,273,33, + 9,522,793,53,227,143,260,749,481,239, + 492,497,495,505,499,508,507,510,509,511, + 715,463,141,632,570,348,194,263,681,681, + 539,31,522,522,664,166,166,18,166,166, + 522,102,33,102,348,112,476,292,141,267, + 426,466,466,403,403,417,406,570,112,417, + 417,417,417,417,78,355,710,111,475,525, + 301,33,540,417,33,260,668,417,749,260, + 238,235,33,33,33,33,33,33,33,33, + 33,33,33,33,33,33,33,33,33,33, + 33,33,33,33,33,33,33,33,33,33, + 33,33,55,33,112,463,118,350,536,522, + 522,553,33,607,33,33,18,102,609,18, + 350,3,417,272,417,417,426,463,91,426, + 466,471,612,471,403,749,710,355,570,715, + 360,360,360,120,141,411,417,796,713,33, + 305,617,539,417,33,33,260,239,495,495, + 492,492,499,499,497,497,497,497,497,497, + 507,505,509,508,102,102,510,668,118,31, + 522,417,166,417,417,18,33,18,355,112, + 426,93,471,463,33,664,749,403,796,406, + 417,715,417,260,260,33,33,471,186,522, + 31,18,33,18,18,350,272,463,521,33, + 517,93,518,463,403,417,364,463,116,233, + 168,664,33,102,14,273,522,417,538,93, + 33,518,518,297,120,532,664,33,417,273, + 522,18,518,33,260,18,417,260,18 + }; + }; + 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, + 104,0,6,46,47,2,27,0,6,49, + 47,19,0,74,37,75,0,51,53,18, + 58,60,54,48,56,57,52,50,59,38, + 31,6,1,21,22,23,2,11,3,5, + 4,16,17,15,10,13,14,24,25,20, + 26,12,19,0,20,21,22,23,19,2, + 11,1,16,17,15,10,13,14,24,25, + 12,26,5,3,4,49,0,18,37,46, + 47,36,33,30,32,35,27,29,28,34, + 31,6,10,2,3,5,4,1,7,9, + 8,49,0,1,49,74,31,8,9,7, + 37,47,6,46,0,6,71,37,75,1, + 21,22,23,19,16,17,15,10,13,14, + 24,25,20,26,12,2,11,3,5,4, + 18,0,27,29,16,17,15,10,13,14, + 24,25,20,26,12,2,11,3,5,4, + 21,22,23,19,28,1,0,74,1,21, + 22,23,19,16,17,15,10,13,14,24, + 25,20,26,12,18,2,11,3,5,4, + 37,75,0,55,68,33,40,34,41,42, + 35,29,43,44,30,69,36,70,45,61, + 28,62,63,64,2,11,12,27,39,32, + 5,3,4,65,66,67,8,9,7,6, + 46,31,74,0,27,29,28,30,16,17, + 15,10,13,14,24,25,20,26,12,1, + 2,11,3,5,4,21,22,23,19,103, + 6,0,6,74,46,31,18,8,9,7, + 0,46,20,21,22,23,11,1,16,17, + 15,10,13,14,24,25,12,26,5,3, + 4,47,6,2,19,0,49,89,103,71, + 75,90,16,17,37,15,13,14,76,77, + 72,73,78,79,80,81,84,85,86,87, + 88,91,92,74,93,94,95,96,97,98, + 99,100,101,102,46,82,83,47,32,27, + 33,34,35,29,30,36,28,31,6,2, + 1,5,3,4,8,9,7,10,0,49, + 89,103,71,35,30,36,34,33,32,15, + 13,14,76,77,72,73,78,79,80,81, + 84,85,86,87,88,91,92,74,93,94, + 95,96,97,98,99,100,101,102,82,83, + 18,31,27,29,28,46,2,3,5,4, + 10,8,9,7,37,1,47,6,0,6, + 49,46,47,1,0,32,39,27,55,68, + 33,40,34,41,42,35,29,43,44,30, + 69,36,70,45,61,28,62,63,64,2, + 11,12,8,9,7,5,3,4,65,66, + 67,38,6,71,0,2,11,5,3,4, + 6,71,46,0,37,6,46,47,1,0, + 74,93,94,95,96,97,99,98,100,101, + 102,10,76,77,13,14,73,72,78,79, + 80,81,82,83,84,85,15,86,87,88, + 89,103,47,71,91,92,49,8,9,7, + 46,31,6,0,103,31,46,47,6,49, + 0,103,6,89,0,47,104,105,71,51, + 53,18,58,60,54,48,56,57,52,50, + 59,38,6,31,21,22,23,19,16,17, + 15,13,14,24,25,20,26,10,1,12, + 2,11,68,69,70,61,55,62,63,64, + 65,66,67,36,33,30,32,35,27,29, + 28,34,7,9,8,5,3,40,4,44, + 45,39,43,41,42,0,48,0,49,89, + 0,6,46,71,74,0,20,21,22,23, + 19,1,16,17,15,10,13,14,24,25, + 26,32,39,27,55,68,33,40,34,41, + 42,35,29,43,44,30,69,36,70,45, + 61,28,62,63,64,12,65,66,67,18, + 8,9,7,11,3,5,4,2,0,49, + 46,31,61,55,62,63,64,65,66,67, + 37,10,5,40,44,45,39,43,41,42, + 36,33,30,32,35,27,29,28,34,3, + 4,7,9,8,1,47,6,2,0,10, + 1,37,47,6,32,39,55,68,33,40, + 34,41,42,35,43,44,30,69,36,70, + 45,61,62,63,64,2,11,12,8,9, + 7,5,3,4,65,66,67,89,27,29, + 28,0,104,32,39,27,55,68,33,40, + 34,41,42,35,29,43,44,30,69,36, + 70,45,61,28,62,63,64,11,1,12, + 8,9,5,3,4,65,66,67,31,6, + 38,7,2,10,0,10,32,39,27,55, + 68,33,40,34,41,42,35,29,43,44, + 30,69,36,70,45,61,28,62,63,64, + 2,11,12,3,4,65,66,67,89,7, + 9,8,5,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, + 181,34,38,94,103,23,163,34,149,117, + 34,19,132,34,34,34,133,122,133,122, + 122,133,122,133,188,107,34,34,34,34, + 34,133,63,126,15,104,122,106,58,58, + 188,34,19,94,104,34,188,34,17,49, + 161,35,34,8,42,8,42,8,8,8, + 42,177,34,42,161,160,63,63,63,63, + 63,63,63,63,63,63,63,137,34,161, + 34,34,149,42,122,77,160,120,12,205, + 175,33,81,10,65,34,161,122,94,34, + 94,34,122,93,137,137,137,137,137,161, + 161,161,171,171,1,49,56,56,96,140, + 15,104,34,15,42,62,79,21,34,78, + 34,34,34,34,34,34,34,34,34,34, + 195,94,34,111,26,103,34,34,133,33, + 88,102,104,104,8,34,34,44,34,34, + 104,34,99,34,103,161,34,161,34,42, + 191,94,8,122,94,161,169,26,34,161, + 161,161,161,161,155,188,158,58,58,34, + 34,63,81,161,63,79,34,161,21,79, + 78,124,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63, + 63,63,63,63,63,63,63,63,63,63, + 63,63,52,63,161,50,94,149,34,104, + 104,199,140,34,140,140,44,34,34,44, + 118,10,161,63,161,161,94,50,103,73, + 8,68,34,34,94,21,168,188,126,93, + 155,155,155,154,155,145,161,186,160,63, + 34,137,88,161,63,63,79,78,34,34, + 34,34,34,34,34,34,34,34,34,34, + 34,34,34,34,34,34,34,34,61,202, + 104,161,34,161,161,44,63,44,188,161, + 191,149,68,50,63,8,21,124,186,143, + 161,93,161,79,79,63,63,68,70,104, + 202,44,140,44,44,119,63,50,104,63, + 34,106,122,50,124,161,155,50,60,34, + 12,8,63,34,40,202,104,161,34,149, + 63,122,42,135,12,79,8,63,161,202, + 104,44,42,63,79,44,161,79,44 + }; + }; + 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, + 73,97,94,93,78,92,91,1,0,122, + 0,6,57,0,104,0,106,0,120,0, + 96,0,34,2,103,97,95,94,93,78, + 92,91,73,0,147,18,0,148,0,142, + 0,9,0,1,43,2,44,0,2,59, + 0,2,33,128,0,108,0,58,0,117, + 57,2,6,0,18,124,0,98,0,1, + 151,0,2,60,100,0,2,6,54,0, + 29,2,42,1,43,110,0,43,1,42, + 89,59,29,2,0,2,129,0,6,150, + 0,33,2,25,0,9,38,34,2,0, + 2,42,29,61,30,0,40,2,36,34, + 38,27,0,31,0,78,74,75,76,77, + 81,67,50,0,138,0,60,42,30,2, + 33,0,34,38,71,70,27,0,2,34, + 38,27,0,6,57,55,0,70,71,2, + 18,0,2,29,42,118,0,18,34,38, + 70,71,2,0,38,40,27,34,36,0, + 143,2,29,42,0,2,29,27,65,0, + 112,2,60,0,134,2,29,0,42,29, + 61,2,82,0,29,2,42,144,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, + 2,87,101,102,100,89,99,97,98,9, + 88,95,10,11,8,6,7,3,86,70, + 83,84,85,12,13,96,50,78,66,71, + 94,46,57,62,65,74,1,106,49,58, + 63,64,68,69,76,42,92,79,29,47, + 48,51,52,53,54,59,60,61,67,73, + 77,80,81,82,103,104,105,56,72,75, + 93,16,17,31,4,14,15,18,19,20, + 21,43,44,22,23,24,25,26,30,5, + 27,28,32,33,34,35,36,37,38,39, + 40,41,91,107,55,90 + }; + }; + 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, + 112,0,0,0,0,114,118,119,196,0, + 0,0,120,121,122,123,124,109,125,126, + 127,128,129,0,111,0,197,130,139,135, + 147,0,113,170,0,173,167,169,0,171, + 0,206,131,134,0,0,0,0,0,146, + 0,0,0,108,117,157,0,172,110,161, + 138,0,0,133,168,116,149,0,184,185, + 186,0,148,150,151,152,153,158,181,0, + 204,0,154,155,156,174,180,183,137,140, + 141,142,143,144,145,179,203,0,0,160, + 164,166,175,201,0,207,0,115,132,136, + 0,159,163,0,165,178,188,193,0,195, + 0,198,0,200,0,208,0,0,0,0, + 0,162,0,176,177,182,187,0,189,190, + 0,191,192,194,0,0,199,0,0,202, + 205,0,0,209,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[] = { + 221,275,348,239,328,144,170,176,303,118, + 377,399,356,20,127,160,186,206,86,283, + 338,8,54,54,78,82,94,100,132,182, + 254,319,94,435,442,446,373,395,408,422, + 408,362,34,46,75,27,27,136,139,191, + 139,216,139,264,269,272,325,450,14,69, + 106,112,152,258,106,419,429,429,1,27, + 152,293,229,386,229,293,39,39,60,252, + 60,60,60,60,60,323,417,39,39,64, + 165,194,165,194,194 + }; + }; + public final static char scopePrefix[] = ScopePrefix.scopePrefix; + public final int scopePrefix(int index) { return scopePrefix[index]; } + + public interface ScopeSuffix { + public final static char scopeSuffix[] = { + 98,98,335,98,335,150,25,25,98,124, + 383,405,343,25,58,150,25,58,91,288, + 343,12,58,58,58,58,98,104,58,25, + 12,12,98,58,58,25,335,335,335,426, + 412,366,37,37,58,25,25,58,142,25, + 201,58,219,267,267,267,12,58,17,72, + 109,115,167,261,17,72,432,439,4,30, + 155,288,246,389,232,296,44,52,62,12, + 309,311,313,315,317,12,12,41,49,66, + 167,203,155,196,211 + }; + }; + public final static char scopeSuffix[] = ScopeSuffix.scopeSuffix; + public final int scopeSuffix(int index) { return scopeSuffix[index]; } + + public interface ScopeLhs { + public final static char scopeLhs[] = { + 76,74,48,76,48,65,58,58,74,55, + 48,47,48,152,72,65,58,36,10,74, + 48,63,81,7,7,121,120,80,72,58, + 100,61,30,7,6,6,48,47,47,24, + 47,48,113,84,4,142,141,70,88,58, + 103,34,56,75,75,75,49,4,63,45, + 80,117,65,100,61,45,8,6,42,152, + 65,74,76,48,76,74,113,84,97,100, + 95,94,93,92,91,61,46,113,84,150, + 65,36,65,40,36 + }; + }; + public final static char scopeLhs[] = ScopeLhs.scopeLhs; + public final int scopeLhs(int index) { return scopeLhs[index]; } + + public interface ScopeLa { + public final static byte scopeLa[] = { + 71,71,47,71,47,27,103,103,71,71, + 47,105,31,103,47,27,103,47,47,18, + 31,31,47,47,47,47,71,18,47,103, + 31,31,71,47,47,103,47,47,47,49, + 47,31,8,8,47,103,103,47,1,103, + 2,47,2,2,2,2,31,47,2,49, + 2,74,10,2,2,49,47,47,5,89, + 10,18,18,48,2,2,2,2,12,31, + 2,68,69,69,61,31,31,2,2,89, + 10,1,10,1,1 + }; + }; + public final static byte scopeLa[] = ScopeLa.scopeLa; + public final int scopeLa(int index) { return scopeLa[index]; } + + public interface ScopeStateSet { + public final static char scopeStateSet[] = { + 142,142,38,142,38,218,54,54,142,17, + 38,38,38,3,58,218,54,149,168,142, + 38,238,142,66,66,14,139,241,58,54, + 8,238,30,66,66,66,38,38,38,102, + 38,38,5,162,66,1,3,58,60,54, + 227,149,155,142,142,142,38,66,238,38, + 241,136,218,8,238,38,73,66,231,3, + 218,142,142,38,142,142,5,162,144,8, + 144,144,144,144,144,238,38,5,162,12, + 218,149,218,151,149 + }; + }; + 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, + 211,108,0,100,207,0,0,196,108,148, + 0,111,0,108,148,0,140,111,0,170, + 89,170,37,0,108,0,170,37,0,30, + 133,108,0,207,133,0,197,0,133,0, + 164,197,0,164,0,162,133,0,157,197, + 0,157,0,172,1,12,0,109,0,179, + 0,204,0,170,0,30,133,0,256,51, + 0,29,134,0,136,1,0,172,1,26, + 0,252,1,228,0,251,1,1,8,0, + 109,109,0,216,108,18,0,110,0,209, + 108,135,0,195,0,108,135,0,175,195, + 0,245,108,0,31,156,0,204,243,108, + 18,163,0,110,0,0,192,108,1,176, + 0,192,108,1,0,194,1,0,171,108, + 0,184,0,108,147,10,147,171,0,179, + 0,147,171,0,9,0,0,179,0,108, + 147,10,147,0,147,0,9,0,0,134, + 30,222,108,37,0,134,222,108,30,37, + 0,134,30,37,0,134,222,108,37,0, + 134,37,0,140,0,2,0,176,109,0, + 173,0,2,109,0,192,108,1,140,0, + 2,0,174,109,0,162,1,0,167,0, + 204,220,108,18,107,239,68,0,239,68, + 0,112,3,0,0,0,110,0,204,220, + 108,18,239,68,0,3,0,0,0,110, + 0,166,0,238,108,166,0,108,166,0, + 162,111,0,205,68,0,112,0,205,70, + 0,205,69,0,217,108,18,237,107,236, + 184,0,237,107,236,184,0,3,0,0, + 110,0,236,184,0,112,0,3,0,0, + 110,0,217,108,18,236,184,0,153,0, + 152,0,151,0,150,0,149,0,196,108, + 135,0,135,0,139,59,0,188,131,188, + 167,1,56,0,109,134,0,188,167,1, + 56,0,111,0,109,134,0,188,131,188, + 131,188,1,56,0,188,131,188,1,56, + 0,188,1,56,0,111,0,111,0,109, + 134,0,139,1,48,0,139,1,48,150, + 54,0,109,111,0,150,54,0,79,2, + 113,109,111,0,139,1,60,0,150,124, + 139,1,58,0,55,134,0,139,1,58, + 0,109,134,55,134,0,149,0,170,51, + 0,139,92,129,0,29,130,0,172,1, + 0,109,119,0,172,1,20,0,109,117, + 0,235,1,112,0,139,37,112,0,139, + 1,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, + 554,0,833,0,2330,2275,0,3346,878,2626, + 0,1076,0,455,446,0,882,824,757,1280, + 699,1279,2264,1218,1179,1059,673,461,0,3169, + 1262,3148,3134,3123,3102,3085,2109,2799,2772,2741, + 2733,2706,2673,2633,2623,1223,2551,2524,1101,608, + 989,950,0,1161,1134,724,717,2122,2875,2345, + 2320,986,3223,2837,0,3388,3364,2095,1182,1132, + 544,453,2555,2264,850,678,1104,1767,1379,3068, + 3052,3036,3020,3004,2983,2866,2849,2827,2422,1360, + 1237,3336,3312,3298,1000,3258,3249,3238,2288,737, + 499,2050,2023,882,1998,1971,824,1946,1294,1920, + 1894,1867,1842,1816,1790,1731,941,1686,1660,1634, + 1608,1582,1556,1530,1504,1478,1452,1420,1193,1152, + 1076,787,420,461,912,757,699,0,520,491, + 0,1711,1338,658,569,420,521,0,2604,521, + 2502,2122,2456,2436,2330,526,2275,2345,986,1220, + 3061,2081,2217,2316,1319,2176,0,3470,3450,3426, + 2330,3420,526,2502,2122,2275,2875,1711,2081,2217, + 658,3373,3268,2409,2963,569,3175,420,2195,2143, + 2094,2456,2436,3412,2498,2316,2068,2604,1715,1332, + 575,1220,3407,1338,2950,2917,1278,2903,3350,3080, + 2888,1061,2469,2230,1319,2176,521,2683,3345,2578, + 3322,3273,3210,3206,2795,0,2081,1319,521,0, + 3169,3148,3134,3123,3102,3085,2109,3077,1262,3267, + 1223,1101,989,950,2333,2503,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,233,7,148,135,108,249,254,108,108, + 211,209,197,8,9,7,198,184,199,70, + 69,200,68,201,108,1,4,5,3,2, + 140,203,12,179,1,196,162,133,144,140, + 108,190,209,241,196,146,108,142,5,18, + 1,1,1,236,133,205,133,205,239,205, + 133,171,147,133,162,1,12,26,20,25, + 24,14,13,10,15,17,16,1,112,255, + 19,210,46,133,162,37,1,171,74,108, + 171,212,108,1,253,2,19,107,18,107, + 18,147,10,108,1,1,1,1,1,136, + 172,139,148,166,108,18,90,75,1,37, + 49,124,1,46,133,30,134,108,113,10, + 119,121,120,123,122,126,125,128,127,129, + 108,18,163,250,108,135,146,142,179,260, + 216,59,50,52,57,56,48,54,60,58, + 149,53,51,107,135,251,228,1,237,133, + 108,18,108,10,147,192,135,108,193,172, + 172,172,172,172,124,108,1,177,176,215, + 107,12,108,235,108,139,10,2,108,134, + 222,202,102,101,100,98,99,97,96,95, + 94,93,74,77,76,10,72,73,14,13, + 85,84,83,82,81,80,79,78,86,15, + 88,87,92,91,240,108,18,108,6,139, + 107,1,1,150,1,1,49,256,170,49, + 108,46,124,1,19,2,18,217,166,218, + 108,220,107,221,147,108,1,108,179,46, + 124,124,124,124,124,171,194,108,1,46, + 113,1,216,2,222,30,134,10,120,120, + 119,119,122,122,121,121,121,121,121,121, + 125,123,127,126,234,139,128,46,108,167, + 188,139,48,139,139,49,89,49,108,252, + 108,108,220,204,74,46,108,202,108,171, + 192,108,172,134,134,49,49,243,108,188, + 131,124,1,124,124,171,46,217,238,49, + 162,133,207,204,202,192,124,204,46,245, + 257,75,37,107,246,131,188,139,150,46, + 49,207,133,165,74,170,75,37,188,131, + 124,105,133,89,170,124,188,170,124 + }; + }; + public final static char inSymb[] = InSymb.inSymb; + public final int inSymb(int index) { return inSymb[index]; } + + public interface Name { + public final static String name[] = { + "", + "[", + "(", + "{", + ".", + "->", + "++", + "--", + "&", + "*", + "+", + "-", + "~", + "!", + "/", + "%", + ">>", + "<<", + "<", + ">", + "<=", + ">=", + "==", + "!=", + "^", + "|", + "&&", + "||", + "?", + ":", + "...", + "=", + "*=", + "/=", + "%=", + "+=", + "-=", + ">>=", + "<<=", + "&=", + "^=", + "|=", + ",", + ">?", + "<?", + "$empty", + "auto", + "break", + "case", + "char", + "const", + "continue", + "default", + "do", + "double", + "else", + "enum", + "extern", + "float", + "for", + "goto", + "if", + "inline", + "int", + "long", + "register", + "restrict", + "return", + "short", + "signed", + "sizeof", + "static", + "struct", + "switch", + "typedef", + "union", + "unsigned", + "void", + "volatile", + "while", + "_Bool", + "_Complex", + "_Imaginary", + "integer", + "floating", + "charconst", + "stringlit", + "identifier", + "Completion", + "EndOfCompletion", + "Invalid", + "RightBracket", + "RightParen", + "RightBrace", + "SemiColon", + "typeof", + "__alignof__", + "__attribute__", + "__declspec", + "asm", + "vector", + "pixel", + "bool", + "_Decimal32", + "_Decimal64", + "_Decimal128", + "ERROR_TOKEN", + "EOF_TOKEN", + "]", + ")", + "}", + ";", + "identifier_token", + "expression", + "postfix_expression", + "member_name", + "type_id", + "initializer_list", + "unary_expression", + "cast_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_in_statement", + "expression_list_actual", + "constant_expression", + "statement", + "compound_statement", + "block_item_list", + "block_item", + "declaration", + "declaration_specifiers", + "init_declarator_list", + "simple_declaration_specifiers", + "struct_or_union_declaration_sp" + + "ecifiers", + "elaborated_declaration_specifi" + + "ers", + "enum_declaration_specifiers", + "typdef_name_declaration_specif" + + "iers", + "no_type_declaration_specifier", + "type_qualifier", + "no_type_declaration_specifiers", + "simple_type_specifier", + "struct_or_union_specifier", + "elaborated_specifier", + "enum_specifier", + "type_name_specifier", + "init_declarator", + "complete_declarator", + "initializer", + "declarator", + "struct_or_union", + "struct_declaration_list", + "struct_declaration", + "specifier_qualifier_list", + "struct_declarator_list", + "complete_struct_declarator", + "struct_declarator", + "enumerator_list", + "enumerator", + "direct_declarator", + "pointer_seq", + "array_direct_declarator", + "basic_direct_declarator", + "knr_direct_declarator", + "array_modifier", + "function_direct_declarator", + "parameter_type_list", + "function_declarator", + "identifier_list", + "knr_function_declarator", + "array_modifier_type_qualifiers", + "type_qualifier_list", + "parameter_list", + "parameter_declaration", + "complete_parameter_declarator", + "abstract_declarator", + "direct_abstract_declarator", + "basic_direct_abstract_declarat" + + "or", + "array_direct_abstract_declarat" + + "or", + "initializer_seq", + "designated_initializer", + "designation", + "designator_list", + "designator", + "external_declaration_list", + "external_declaration", + "declaration_list", + "function_body", + "attribute_or_decl_specifier", + "attribute_or_decl_specifier_se" + + "q", + "word", + "extended_decl_modifier_seq", + "extended_decl_modifier", + "extended_asm_param", + "case_range_expression", + "typeof_declaration_specifiers", + "typeof_type_specifier", + "field_name_designator", + "vector_type", + "vector_type_specifier", + "all_specifier_qualifiers", + "all_specifier_qualifier_list" + }; + }; + public final static String name[] = Name.name; + public final String name(int index) { return name[index]; } + + public final static int + ERROR_SYMBOL = 38, + SCOPE_UBOUND = 94, + SCOPE_SIZE = 95, + MAX_NAME_LENGTH = 38; + + 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 = 389, + NT_OFFSET = 106, + LA_STATE_OFFSET = 4196, + MAX_LA = 2147483647, + NUM_RULES = 419, + NUM_NONTERMINALS = 155, + NUM_SYMBOLS = 261, + SEGMENT_SIZE = 8192, + START_STATE = 2503, + IDENTIFIER_SYMBOL = 0, + EOFT_SYMBOL = 104, + EOLT_SYMBOL = 104, + ACCEPT_ACTION = 3536, + ERROR_ACTION = 3777; + + 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/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParsersym.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParsersym.java new file mode 100644 index 00000000000..bbb01a4465c --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParsersym.java @@ -0,0 +1,236 @@ +/******************************************************************************* +* Copyright (c) 2006, 2009 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.lrparser.xlc.c; + +public interface XlcCParsersym { + public final static int + TK_auto = 32, + TK_break = 50, + TK_case = 51, + TK_char = 39, + TK_const = 27, + TK_continue = 52, + TK_default = 53, + TK_do = 54, + TK_double = 55, + TK_else = 105, + TK_enum = 68, + TK_extern = 33, + TK_float = 40, + TK_for = 56, + TK_goto = 57, + TK_if = 58, + TK_inline = 34, + TK_int = 41, + TK_long = 42, + TK_register = 35, + TK_restrict = 29, + TK_return = 59, + TK_short = 43, + TK_signed = 44, + TK_sizeof = 20, + TK_static = 30, + TK_struct = 69, + TK_switch = 60, + TK_typedef = 36, + TK_union = 70, + TK_unsigned = 45, + TK_void = 61, + TK_volatile = 28, + TK_while = 48, + TK__Bool = 62, + TK__Complex = 63, + TK__Imaginary = 64, + TK_integer = 21, + TK_floating = 22, + TK_charconst = 23, + TK_stringlit = 19, + TK_identifier = 2, + TK_Completion = 11, + TK_EndOfCompletion = 6, + TK_Invalid = 106, + TK_LeftBracket = 37, + TK_LeftParen = 1, + TK_LeftBrace = 18, + TK_Dot = 75, + TK_Arrow = 90, + TK_PlusPlus = 16, + TK_MinusMinus = 17, + TK_And = 15, + TK_Star = 10, + TK_Plus = 13, + TK_Minus = 14, + TK_Tilde = 24, + TK_Bang = 25, + TK_Slash = 76, + TK_Percent = 77, + TK_RightShift = 72, + TK_LeftShift = 73, + TK_LT = 78, + TK_GT = 79, + TK_LE = 80, + TK_GE = 81, + TK_EQ = 84, + TK_NE = 85, + TK_Caret = 86, + TK_Or = 87, + TK_AndAnd = 88, + TK_OrOr = 91, + TK_Question = 92, + TK_Colon = 49, + TK_DotDotDot = 89, + TK_Assign = 74, + TK_StarAssign = 93, + TK_SlashAssign = 94, + TK_PercentAssign = 95, + TK_PlusAssign = 96, + TK_MinusAssign = 97, + TK_RightShiftAssign = 98, + TK_LeftShiftAssign = 99, + TK_AndAssign = 100, + TK_CaretAssign = 101, + TK_OrAssign = 102, + TK_Comma = 46, + TK_RightBracket = 103, + TK_RightParen = 47, + TK_RightBrace = 71, + TK_SemiColon = 31, + TK_typeof = 12, + TK___alignof__ = 26, + TK___attribute__ = 8, + TK___declspec = 9, + TK_MAX = 82, + TK_MIN = 83, + TK_asm = 7, + TK_vector = 5, + TK_pixel = 3, + TK_bool = 4, + TK__Decimal32 = 65, + TK__Decimal64 = 66, + TK__Decimal128 = 67, + TK_ERROR_TOKEN = 38, + TK_EOF_TOKEN = 104; + + public final static String orderedTerminalSymbols[] = { + "", + "LeftParen", + "identifier", + "pixel", + "bool", + "vector", + "EndOfCompletion", + "asm", + "__attribute__", + "__declspec", + "Star", + "Completion", + "typeof", + "Plus", + "Minus", + "And", + "PlusPlus", + "MinusMinus", + "LeftBrace", + "stringlit", + "sizeof", + "integer", + "floating", + "charconst", + "Tilde", + "Bang", + "__alignof__", + "const", + "volatile", + "restrict", + "static", + "SemiColon", + "auto", + "extern", + "inline", + "register", + "typedef", + "LeftBracket", + "ERROR_TOKEN", + "char", + "float", + "int", + "long", + "short", + "signed", + "unsigned", + "Comma", + "RightParen", + "while", + "Colon", + "break", + "case", + "continue", + "default", + "do", + "double", + "for", + "goto", + "if", + "return", + "switch", + "void", + "_Bool", + "_Complex", + "_Imaginary", + "_Decimal32", + "_Decimal64", + "_Decimal128", + "enum", + "struct", + "union", + "RightBrace", + "RightShift", + "LeftShift", + "Assign", + "Dot", + "Slash", + "Percent", + "LT", + "GT", + "LE", + "GE", + "MAX", + "MIN", + "EQ", + "NE", + "Caret", + "Or", + "AndAnd", + "DotDotDot", + "Arrow", + "OrOr", + "Question", + "StarAssign", + "SlashAssign", + "PercentAssign", + "PlusAssign", + "MinusAssign", + "RightShiftAssign", + "LeftShiftAssign", + "AndAssign", + "CaretAssign", + "OrAssign", + "RightBracket", + "EOF_TOKEN", + "else", + "Invalid" + }; + + public final static boolean isValidForParser = true; +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParser.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParser.java new file mode 100644 index 00000000000..beb7c8d0f79 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParser.java @@ -0,0 +1,2125 @@ +/******************************************************************************* +* Copyright (c) 2006, 2009 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.lrparser.xlc.cpp; + +import lpg.lpgjavaruntime.*; + +import java.util.*; +import org.eclipse.cdt.core.dom.ast.*; +import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap; +import org.eclipse.cdt.core.dom.lrparser.IParser; +import org.eclipse.cdt.core.dom.lrparser.ITokenCollector; +import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter; +import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream; +import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser; +import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack; +import org.eclipse.cdt.core.parser.IScanner; +import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider; +import org.eclipse.cdt.core.index.IIndex; + +import org.eclipse.cdt.core.dom.ast.cpp.*; +import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPNodeFactory; +import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction; +import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPSecondaryParserFactory; + +import org.eclipse.cdt.core.dom.lrparser.action.gnu.GNUBuildASTParserAction; + +import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPBuildASTParserAction; +import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPSecondaryParserFactory; +import org.eclipse.cdt.core.dom.ast.gnu.cpp.*; + +import org.eclipse.cdt.core.lrparser.xlc.action.XlcCPPBuildASTParserAction; +import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPSecondaryParserFactory; +import org.eclipse.cdt.internal.core.lrparser.xlc.ast.XlcCPPNodeFactory; + +public class XlcCPPParser extends PrsStream implements RuleAction, ITokenStream, + ITokenCollector, IParser< IASTTranslationUnit > + +{ + private static ParseTable prs = new XlcCPPParserprs(); + private FixedBacktrackingParser btParser; + + public FixedBacktrackingParser getParser() { return btParser; } + private void setResult(Object object) { btParser.setSym1(object); } + public Object getRhsSym(int i) { return btParser.getSym(i); } + + public int getRhsTokenIndex(int i) { return btParser.getToken(i); } + public IToken getRhsIToken(int i) { return super.getIToken(getRhsTokenIndex(i)); } + + public int getRhsFirstTokenIndex(int i) { return btParser.getFirstToken(i); } + public IToken getRhsFirstIToken(int i) { return super.getIToken(getRhsFirstTokenIndex(i)); } + + public int getRhsLastTokenIndex(int i) { return btParser.getLastToken(i); } + public IToken getRhsLastIToken(int i) { return super.getIToken(getRhsLastTokenIndex(i)); } + + public int getLeftSpan() { return btParser.getFirstToken(); } + 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 XlcCPPParser(LexStream lexStream) + { + super(lexStream); + + try + { + super.remapTerminalSymbols(orderedTerminalSymbols(), XlcCPPParserprs.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(" " + XlcCPPParsersym.orderedTerminalSymbols[id.intValue()]); + } + System.out.println(); + } + catch(UndefinedEofSymbolException e) + { + throw new Error(new UndefinedEofSymbolException + ("The Lexer does not implement the Eof symbol " + + XlcCPPParsersym.orderedTerminalSymbols[XlcCPPParserprs.EOFT_SYMBOL])); + } + } + + public String[] orderedTerminalSymbols() { return XlcCPPParsersym.orderedTerminalSymbols; } + public String getTokenKindName(int kind) { return XlcCPPParsersym.orderedTerminalSymbols[kind]; } + public int getEOFTokenKind() { return XlcCPPParserprs.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 void parser() + { + parser(null, 0); + } + + public void parser(Monitor monitor) + { + parser(monitor, 0); + } + + public void parser(int error_repair_count) + { + parser(null, error_repair_count); + } + + public void parser(Monitor monitor, int error_repair_count) + { + try + { + btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this); + } + catch (NotBacktrackParseTableException e) + { + throw new Error(new NotBacktrackParseTableException + ("Regenerate XlcCPPParserprs.java with -BACKTRACK option")); + } + catch (BadParseSymFileException e) + { + throw new Error(new BadParseSymFileException("Bad Parser Symbol File -- XlcCPPParsersym.java")); + } + + try + { + btParser.parse(error_repair_count); + } + catch (BadParseException e) + { + reset(e.error_token); // point to error token + DiagnoseParser diagnoseParser = new DiagnoseParser(this, prs); + diagnoseParser.diagnose(e.error_token); + } + } + + +private XlcCPPBuildASTParserAction action; +private IASTCompletionNode compNode; + + +public XlcCPPParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Map<String,String> properties) { + initActions(properties); + action.initializeTranslationUnit(scanner, builtinBindingsProvider, index); + CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap); +} + +private void initActions(Map<String,String> properties) { + ScopedStack<Object> astStack = new ScopedStack<Object>(); + + action = new XlcCPPBuildASTParserAction (this, astStack, XlcCPPNodeFactory.getDefault() , GPPSecondaryParserFactory.getDefault() ); + action.setParserProperties(properties); + + + + gnuAction = new GNUBuildASTParserAction (this, astStack, XlcCPPNodeFactory.getDefault() ); + gnuAction.setParserProperties(properties); + +} + + +public void addToken(IToken token) { + token.setKind(mapKind(token.getKind())); // TODO does mapKind need to be called? + super.addToken(token); +} + + +public IASTTranslationUnit parse() { + // this has to be done, or... kaboom! + setStreamLength(getSize()); + + final int errorRepairCount = -1; // -1 means full error handling + parser(null, errorRepairCount); // do the actual parse + super.resetTokenStream(); // allow tokens to be garbage collected + + compNode = action.getASTCompletionNode(); // the completion node may be null + return ( IASTTranslationUnit ) action.getParseResult(); +} + + +public IASTCompletionNode getCompletionNode() { + return compNode; +} + +// uncomment this method to use with backtracking parser +public List<IToken> getRuleTokens() { + return getTokens().subList(getLeftSpan(), getRightSpan() + 1); +} + +public String[] getOrderedTerminalSymbols() { + return XlcCPPParsersym.orderedTerminalSymbols; +} + +@SuppressWarnings("nls") +public String getName() { + return "XlcCPPParser"; +} + + +private GNUBuildASTParserAction gnuAction; + + public void ruleAction(int ruleNumber) + { + switch (ruleNumber) + { + + // + // Rule 1: <openscope-ast> ::= $Empty + // + case 1: { action. openASTScope(); break; + } + + // + // Rule 2: <empty> ::= $Empty + // + case 2: { action. consumeEmpty(); break; + } + + // + // Rule 13: translation_unit ::= declaration_seq_opt + // + case 13: { action. consumeTranslationUnit(); break; + } + + // + // Rule 16: literal ::= integer + // + case 16: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_integer_constant); break; + } + + // + // Rule 17: literal ::= floating + // + case 17: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_float_constant); break; + } + + // + // Rule 18: literal ::= charconst + // + case 18: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_char_constant); break; + } + + // + // Rule 19: literal ::= stringlit + // + case 19: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_string_literal); break; + } + + // + // Rule 20: literal ::= true + // + case 20: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_true); break; + } + + // + // Rule 21: literal ::= false + // + case 21: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_false); break; + } + + // + // Rule 22: literal ::= this + // + case 22: { action. consumeExpressionLiteral(ICPPASTLiteralExpression.lk_this); break; + } + + // + // Rule 24: primary_expression ::= ( expression ) + // + case 24: { action. consumeExpressionBracketed(); break; + } + + // + // Rule 26: id_expression ::= qualified_or_unqualified_name + // + case 26: { action. consumeExpressionName(); break; + } + + // + // Rule 33: unqualified_id_name ::= ~ identifier_token + // + case 33: { action. consumeDestructorName(); break; + } + + // + // Rule 34: unqualified_id_name ::= ~ template_id_name + // + case 34: { action. consumeDestructorNameTemplateId(); break; + } + + // + // Rule 35: identifier_name ::= identifier_token + // + case 35: { action. consumeIdentifierName(); break; + } + + // + // Rule 36: template_opt ::= template + // + case 36: { action. consumePlaceHolder(); break; + } + + // + // Rule 37: template_opt ::= $Empty + // + case 37: { action. consumeEmpty(); break; + } + + // + // Rule 38: dcolon_opt ::= :: + // + case 38: { action. consumeToken(); break; + } + + // + // Rule 39: dcolon_opt ::= $Empty + // + case 39: { action. consumeEmpty(); break; + } + + // + // Rule 40: qualified_id_name ::= dcolon_opt nested_name_specifier template_opt unqualified_id_name + // + case 40: { action. consumeQualifiedId(true); break; + } + + // + // Rule 41: qualified_id_name ::= :: unqualified_id_name + // + case 41: { action. consumeGlobalQualifiedId(); break; + } + + // + // Rule 42: nested_name_specifier ::= class_or_namespace_name :: nested_name_specifier_with_template + // + case 42: { action. consumeNestedNameSpecifier(true); break; + } + + // + // Rule 43: nested_name_specifier ::= class_or_namespace_name :: + // + case 43: { action. consumeNestedNameSpecifier(false); break; + } + + // + // Rule 44: nested_name_specifier_with_template ::= class_or_namespace_name_with_template :: nested_name_specifier_with_template + // + case 44: { action. consumeNestedNameSpecifier(true); break; + } + + // + // Rule 45: nested_name_specifier_with_template ::= class_or_namespace_name_with_template :: + // + case 45: { action. consumeNestedNameSpecifier(false); break; + } + + // + // Rule 46: class_or_namespace_name_with_template ::= template_opt class_or_namespace_name + // + case 46: { action. consumeNameWithTemplateKeyword(); break; + } + + // + // Rule 48: nested_name_specifier_opt ::= $Empty + // + case 48: { action. consumeNestedNameSpecifierEmpty(); break; + } + + // + // Rule 51: postfix_expression ::= postfix_expression [ expression ] + // + case 51: { action. consumeExpressionArraySubscript(); break; + } + + // + // Rule 52: postfix_expression ::= postfix_expression ( expression_list_opt ) + // + case 52: { action. consumeExpressionFunctionCall(); break; + } + + // + // Rule 53: postfix_expression ::= simple_type_specifier ( expression_list_opt ) + // + case 53: { action. consumeExpressionSimpleTypeConstructor(); break; + } + + // + // Rule 54: postfix_expression ::= typename dcolon_opt nested_name_specifier <empty> identifier_name ( expression_list_opt ) + // + case 54: { action. consumeExpressionTypeName(); break; + } + + // + // Rule 55: postfix_expression ::= typename dcolon_opt nested_name_specifier template_opt template_id_name ( expression_list_opt ) + // + case 55: { action. consumeExpressionTypeName(); break; + } + + // + // Rule 56: postfix_expression ::= postfix_expression . qualified_or_unqualified_name + // + case 56: { action. consumeExpressionFieldReference(false, false); break; + } + + // + // Rule 57: postfix_expression ::= postfix_expression -> qualified_or_unqualified_name + // + case 57: { action. consumeExpressionFieldReference(true, false); break; + } + + // + // Rule 58: postfix_expression ::= postfix_expression . template qualified_or_unqualified_name + // + case 58: { action. consumeExpressionFieldReference(false, true); break; + } + + // + // Rule 59: postfix_expression ::= postfix_expression -> template qualified_or_unqualified_name + // + case 59: { action. consumeExpressionFieldReference(true, true); break; + } + + // + // Rule 60: postfix_expression ::= postfix_expression . pseudo_destructor_name + // + case 60: { action. consumeExpressionFieldReference(false, false); break; + } + + // + // Rule 61: postfix_expression ::= postfix_expression -> pseudo_destructor_name + // + case 61: { action. consumeExpressionFieldReference(true, false); break; + } + + // + // Rule 62: postfix_expression ::= postfix_expression ++ + // + case 62: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixIncr); break; + } + + // + // Rule 63: postfix_expression ::= postfix_expression -- + // + case 63: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_postFixDecr); break; + } + + // + // Rule 64: postfix_expression ::= dynamic_cast < type_id > ( expression ) + // + case 64: { action. consumeExpressionCast(ICPPASTCastExpression.op_dynamic_cast); break; + } + + // + // Rule 65: postfix_expression ::= static_cast < type_id > ( expression ) + // + case 65: { action. consumeExpressionCast(ICPPASTCastExpression.op_static_cast); break; + } + + // + // Rule 66: postfix_expression ::= reinterpret_cast < type_id > ( expression ) + // + case 66: { action. consumeExpressionCast(ICPPASTCastExpression.op_reinterpret_cast); break; + } + + // + // Rule 67: postfix_expression ::= const_cast < type_id > ( expression ) + // + case 67: { action. consumeExpressionCast(ICPPASTCastExpression.op_const_cast); break; + } + + // + // Rule 68: postfix_expression ::= typeid ( expression ) + // + case 68: { action. consumeExpressionUnaryOperator(ICPPASTUnaryExpression.op_typeid); break; + } + + // + // Rule 69: postfix_expression ::= typeid ( type_id ) + // + case 69: { action. consumeExpressionTypeId(ICPPASTTypeIdExpression.op_typeid); break; + } + + // + // Rule 70: pseudo_destructor_name ::= dcolon_opt nested_name_specifier_opt type_name :: destructor_type_name + // + case 70: { action. consumePsudoDestructorName(true); break; + } + + // + // Rule 71: pseudo_destructor_name ::= dcolon_opt nested_name_specifier template template_id_name :: destructor_type_name + // + case 71: { action. consumePsudoDestructorName(true); break; + } + + // + // Rule 72: pseudo_destructor_name ::= dcolon_opt nested_name_specifier_opt destructor_type_name + // + case 72: { action. consumePsudoDestructorName(false); break; + } + + // + // Rule 73: destructor_type_name ::= ~ identifier_token + // + case 73: { action. consumeDestructorName(); break; + } + + // + // Rule 74: destructor_type_name ::= ~ template_id_name + // + case 74: { action. consumeDestructorNameTemplateId(); break; + } + + // + // Rule 78: unary_expression ::= ++ cast_expression + // + case 78: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixIncr); break; + } + + // + // Rule 79: unary_expression ::= -- cast_expression + // + case 79: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_prefixDecr); break; + } + + // + // Rule 80: unary_expression ::= & cast_expression + // + case 80: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_amper); break; + } + + // + // Rule 81: unary_expression ::= * cast_expression + // + case 81: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_star); break; + } + + // + // Rule 82: unary_expression ::= + cast_expression + // + case 82: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_plus); break; + } + + // + // Rule 83: unary_expression ::= - cast_expression + // + case 83: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_minus); break; + } + + // + // Rule 84: unary_expression ::= ~ cast_expression + // + case 84: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_tilde); break; + } + + // + // Rule 85: unary_expression ::= ! cast_expression + // + case 85: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_not); break; + } + + // + // Rule 86: unary_expression ::= sizeof unary_expression + // + case 86: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_sizeof); break; + } + + // + // Rule 87: unary_expression ::= sizeof ( type_id ) + // + case 87: { action. consumeExpressionTypeId(ICPPASTTypeIdExpression.op_sizeof); break; + } + + // + // Rule 88: new_expression ::= dcolon_opt new new_placement_opt new_type_id <openscope-ast> new_array_expressions_opt new_initializer_opt + // + case 88: { action. consumeExpressionNew(true); break; + } + + // + // Rule 89: new_expression ::= dcolon_opt new new_placement_opt ( type_id ) <openscope-ast> new_array_expressions_opt new_initializer_opt + // + case 89: { action. consumeExpressionNew(false); break; + } + + // + // Rule 91: new_placement_opt ::= $Empty + // + case 91: { action. consumeEmpty(); break; + } + + // + // Rule 92: new_type_id ::= type_specifier_seq + // + case 92: { action. consumeTypeId(false); break; + } + + // + // Rule 93: new_type_id ::= type_specifier_seq new_declarator + // + case 93: { action. consumeTypeId(true); break; + } + + // + // Rule 94: new_declarator ::= <openscope-ast> new_pointer_operators + // + case 94: { action. consumeNewDeclarator(); break; + } + + // + // Rule 101: new_initializer ::= ( expression_list_opt ) + // + case 101: { action. consumeNewInitializer(); break; + } + + // + // Rule 103: new_initializer_opt ::= $Empty + // + case 103: { action. consumeEmpty(); break; + } + + // + // Rule 104: delete_expression ::= dcolon_opt delete cast_expression + // + case 104: { action. consumeExpressionDelete(false); break; + } + + // + // Rule 105: delete_expression ::= dcolon_opt delete [ ] cast_expression + // + case 105: { action. consumeExpressionDelete(true); break; + } + + // + // Rule 107: cast_expression ::= ( type_id ) cast_expression + // + case 107: { action. consumeExpressionCast(ICPPASTCastExpression.op_cast); break; + } + + // + // Rule 109: pm_expression ::= pm_expression .* cast_expression + // + case 109: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_pmdot); break; + } + + // + // Rule 110: pm_expression ::= pm_expression ->* cast_expression + // + case 110: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_pmarrow); break; + } + + // + // Rule 112: multiplicative_expression ::= multiplicative_expression * pm_expression + // + case 112: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_multiply); break; + } + + // + // Rule 113: multiplicative_expression ::= multiplicative_expression / pm_expression + // + case 113: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_divide); break; + } + + // + // Rule 114: multiplicative_expression ::= multiplicative_expression % pm_expression + // + case 114: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_modulo); break; + } + + // + // Rule 116: additive_expression ::= additive_expression + multiplicative_expression + // + case 116: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_plus); break; + } + + // + // Rule 117: additive_expression ::= additive_expression - multiplicative_expression + // + case 117: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_minus); break; + } + + // + // Rule 119: shift_expression ::= shift_expression << additive_expression + // + case 119: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftLeft); break; + } + + // + // Rule 120: shift_expression ::= shift_expression >> additive_expression + // + case 120: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftRight); break; + } + + // + // Rule 122: relational_expression ::= relational_expression < shift_expression + // + case 122: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessThan); break; + } + + // + // Rule 123: relational_expression ::= relational_expression > shift_expression + // + case 123: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterThan); break; + } + + // + // Rule 124: relational_expression ::= relational_expression <= shift_expression + // + case 124: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_lessEqual); break; + } + + // + // Rule 125: relational_expression ::= relational_expression >= shift_expression + // + case 125: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_greaterEqual); break; + } + + // + // Rule 127: equality_expression ::= equality_expression == relational_expression + // + case 127: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_equals); break; + } + + // + // Rule 128: equality_expression ::= equality_expression != relational_expression + // + case 128: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_notequals); break; + } + + // + // Rule 130: and_expression ::= and_expression & equality_expression + // + case 130: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAnd); break; + } + + // + // Rule 132: exclusive_or_expression ::= exclusive_or_expression ^ and_expression + // + case 132: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXor); break; + } + + // + // Rule 134: inclusive_or_expression ::= inclusive_or_expression | exclusive_or_expression + // + case 134: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOr); break; + } + + // + // Rule 136: logical_and_expression ::= logical_and_expression && inclusive_or_expression + // + case 136: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalAnd); break; + } + + // + // Rule 138: logical_or_expression ::= logical_or_expression || logical_and_expression + // + case 138: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_logicalOr); break; + } + + // + // Rule 140: conditional_expression ::= logical_or_expression ? expression : assignment_expression + // + case 140: { action. consumeExpressionConditional(); break; + } + + // + // Rule 141: throw_expression ::= throw + // + case 141: { action. consumeExpressionThrow(false); break; + } + + // + // Rule 142: throw_expression ::= throw assignment_expression + // + case 142: { action. consumeExpressionThrow(true); break; + } + + // + // Rule 145: assignment_expression ::= logical_or_expression = assignment_expression + // + case 145: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_assign); break; + } + + // + // Rule 146: assignment_expression ::= logical_or_expression *= assignment_expression + // + case 146: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_multiplyAssign); break; + } + + // + // Rule 147: assignment_expression ::= logical_or_expression /= assignment_expression + // + case 147: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_divideAssign); break; + } + + // + // Rule 148: assignment_expression ::= logical_or_expression %= assignment_expression + // + case 148: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_moduloAssign); break; + } + + // + // Rule 149: assignment_expression ::= logical_or_expression += assignment_expression + // + case 149: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_plusAssign); break; + } + + // + // Rule 150: assignment_expression ::= logical_or_expression -= assignment_expression + // + case 150: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_minusAssign); break; + } + + // + // Rule 151: assignment_expression ::= logical_or_expression >>= assignment_expression + // + case 151: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftRightAssign); break; + } + + // + // Rule 152: assignment_expression ::= logical_or_expression <<= assignment_expression + // + case 152: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_shiftLeftAssign); break; + } + + // + // Rule 153: assignment_expression ::= logical_or_expression &= assignment_expression + // + case 153: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryAndAssign); break; + } + + // + // Rule 154: assignment_expression ::= logical_or_expression ^= assignment_expression + // + case 154: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryXorAssign); break; + } + + // + // Rule 155: assignment_expression ::= logical_or_expression |= assignment_expression + // + case 155: { action. consumeExpressionBinaryOperator(ICPPASTBinaryExpression.op_binaryOrAssign); break; + } + + // + // Rule 157: expression_list ::= <openscope-ast> expression_list_actual + // + case 157: { action. consumeExpressionList(); break; + } + + // + // Rule 161: expression_list_opt ::= $Empty + // + case 161: { action. consumeEmpty(); break; + } + + // + // Rule 163: expression_opt ::= $Empty + // + case 163: { action. consumeEmpty(); break; + } + + // + // Rule 166: constant_expression_opt ::= $Empty + // + case 166: { action. consumeEmpty(); break; + } + + // + // Rule 175: statement ::= ERROR_TOKEN + // + case 175: { action. consumeStatementProblem(); break; + } + + // + // Rule 176: labeled_statement ::= identifier : statement + // + case 176: { action. consumeStatementLabeled(); break; + } + + // + // Rule 177: labeled_statement ::= case constant_expression : statement + // + case 177: { action. consumeStatementCase(); break; + } + + // + // Rule 178: labeled_statement ::= default : statement + // + case 178: { action. consumeStatementDefault(); break; + } + + // + // Rule 179: expression_statement ::= expression ; + // + case 179: { action. consumeStatementExpression(); break; + } + + // + // Rule 180: expression_statement ::= ; + // + case 180: { action. consumeStatementNull(); break; + } + + // + // Rule 181: compound_statement ::= { <openscope-ast> statement_seq } + // + case 181: { action. consumeStatementCompoundStatement(true); break; + } + + // + // Rule 182: compound_statement ::= { } + // + case 182: { action. consumeStatementCompoundStatement(false); break; + } + + // + // Rule 185: selection_statement ::= if ( condition ) statement + // + case 185: { action. consumeStatementIf(false); break; + } + + // + // Rule 186: selection_statement ::= if ( condition ) statement else statement + // + case 186: { action. consumeStatementIf(true); break; + } + + // + // Rule 187: selection_statement ::= switch ( condition ) statement + // + case 187: { action. consumeStatementSwitch(); break; + } + + // + // Rule 189: condition ::= type_specifier_seq declarator = assignment_expression + // + case 189: { action. consumeConditionDeclaration(); break; + } + + // + // Rule 191: condition_opt ::= $Empty + // + case 191: { action. consumeEmpty(); break; + } + + // + // Rule 192: iteration_statement ::= while ( condition ) statement + // + case 192: { action. consumeStatementWhileLoop(); break; + } + + // + // Rule 193: iteration_statement ::= do statement while ( expression ) ; + // + case 193: { action. consumeStatementDoLoop(); break; + } + + // + // Rule 194: iteration_statement ::= for ( for_init_statement condition_opt ; expression_opt ) statement + // + case 194: { action. consumeStatementForLoop(); break; + } + + // + // Rule 196: for_init_statement ::= simple_declaration_with_declspec + // + case 196: { action. consumeStatementDeclaration(); break; + } + + // + // Rule 197: jump_statement ::= break ; + // + case 197: { action. consumeStatementBreak(); break; + } + + // + // Rule 198: jump_statement ::= continue ; + // + case 198: { action. consumeStatementContinue(); break; + } + + // + // Rule 199: jump_statement ::= return expression ; + // + case 199: { action. consumeStatementReturn(true); break; + } + + // + // Rule 200: jump_statement ::= return ; + // + case 200: { action. consumeStatementReturn(false); break; + } + + // + // Rule 201: jump_statement ::= goto identifier_token ; + // + case 201: { action. consumeStatementGoto(); break; + } + + // + // Rule 202: declaration_statement ::= block_declaration + // + case 202: { action. consumeStatementDeclarationWithDisambiguation(); break; + } + + // + // Rule 203: declaration_statement ::= function_definition + // + case 203: { action. consumeStatementDeclaration(); break; + } + + // + // Rule 211: declaration ::= ERROR_TOKEN + // + case 211: { action. consumeDeclarationProblem(); break; + } + + // + // Rule 221: simple_declaration ::= declaration_specifiers_opt <openscope-ast> init_declarator_list_opt ; + // + case 221: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 222: simple_declaration_with_declspec ::= declaration_specifiers <openscope-ast> init_declarator_list_opt ; + // + case 222: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 223: declaration_specifiers ::= <openscope-ast> simple_declaration_specifiers + // + case 223: { action. consumeDeclarationSpecifiersSimple(); break; + } + + // + // Rule 224: declaration_specifiers ::= <openscope-ast> class_declaration_specifiers + // + case 224: { action. consumeDeclarationSpecifiersComposite(); break; + } + + // + // Rule 225: declaration_specifiers ::= <openscope-ast> elaborated_declaration_specifiers + // + case 225: { action. consumeDeclarationSpecifiersComposite(); break; + } + + // + // Rule 226: declaration_specifiers ::= <openscope-ast> enum_declaration_specifiers + // + case 226: { action. consumeDeclarationSpecifiersComposite(); break; + } + + // + // Rule 227: declaration_specifiers ::= <openscope-ast> type_name_declaration_specifiers + // + case 227: { action. consumeDeclarationSpecifiersTypeName(); break; + } + + // + // Rule 229: declaration_specifiers_opt ::= $Empty + // + case 229: { action. consumeEmpty(); break; + } + + // + // Rule 233: no_type_declaration_specifier ::= friend + // + case 233: { action. consumeToken(); break; + } + + // + // Rule 234: no_type_declaration_specifier ::= typedef + // + case 234: { action. consumeToken(); break; + } + + // + // Rule 254: storage_class_specifier ::= auto + // + case 254: { action. consumeToken(); break; + } + + // + // Rule 255: storage_class_specifier ::= register + // + case 255: { action. consumeToken(); break; + } + + // + // Rule 256: storage_class_specifier ::= static + // + case 256: { action. consumeToken(); break; + } + + // + // Rule 257: storage_class_specifier ::= extern + // + case 257: { action. consumeToken(); break; + } + + // + // Rule 258: storage_class_specifier ::= mutable + // + case 258: { action. consumeToken(); break; + } + + // + // Rule 259: function_specifier ::= inline + // + case 259: { action. consumeToken(); break; + } + + // + // Rule 260: function_specifier ::= virtual + // + case 260: { action. consumeToken(); break; + } + + // + // Rule 261: function_specifier ::= explicit + // + case 261: { action. consumeToken(); break; + } + + // + // Rule 262: simple_type_specifier ::= simple_type_specifier_token + // + case 262: { action. consumeToken(); break; + } + + // + // Rule 276: type_name_specifier ::= dcolon_opt nested_name_specifier_opt type_name + // + case 276: { action. consumeQualifiedId(false); break; + } + + // + // Rule 277: type_name_specifier ::= dcolon_opt nested_name_specifier template template_id_name + // + case 277: { action. consumeQualifiedId(false); break; + } + + // + // Rule 278: type_name_specifier ::= typename dcolon_opt nested_name_specifier identifier_name + // + case 278: { action. consumeQualifiedId(false); break; + } + + // + // Rule 279: type_name_specifier ::= typename dcolon_opt nested_name_specifier template_opt template_id_name + // + case 279: { action. consumeQualifiedId(true); break; + } + + // + // Rule 281: elaborated_type_specifier ::= class_keyword elaborated_specifier_hook dcolon_opt nested_name_specifier_opt identifier_name + // + case 281: { action. consumeTypeSpecifierElaborated(false); break; + } + + // + // Rule 282: elaborated_type_specifier ::= class_keyword elaborated_specifier_hook dcolon_opt nested_name_specifier_opt template_opt template_id_name + // + case 282: { action. consumeTypeSpecifierElaborated(true); break; + } + + // + // Rule 283: elaborated_type_specifier ::= enum elaborated_specifier_hook dcolon_opt nested_name_specifier_opt identifier_name + // + case 283: { action. consumeTypeSpecifierElaborated(false); break; + } + + // + // Rule 287: enum_specifier ::= enum enum_specifier_hook { <openscope-ast> enumerator_list_opt comma_opt } + // + case 287: { action. consumeTypeSpecifierEnumeration(false); break; + } + + // + // Rule 288: enum_specifier ::= enum enum_specifier_hook identifier_token { <openscope-ast> enumerator_list_opt comma_opt } + // + case 288: { action. consumeTypeSpecifierEnumeration(true); break; + } + + // + // Rule 294: enumerator_definition ::= identifier_token + // + case 294: { action. consumeEnumerator(false); break; + } + + // + // Rule 295: enumerator_definition ::= identifier_token = constant_expression + // + case 295: { action. consumeEnumerator(true); break; + } + + // + // Rule 297: namespace_definition ::= namespace namespace_name namespace_definition_hook { <openscope-ast> declaration_seq_opt } + // + case 297: { action. consumeNamespaceDefinition(true); break; + } + + // + // Rule 298: namespace_definition ::= namespace namespace_definition_hook { <openscope-ast> declaration_seq_opt } + // + case 298: { action. consumeNamespaceDefinition(false); break; + } + + // + // Rule 300: namespace_alias_definition ::= namespace identifier_token = dcolon_opt nested_name_specifier_opt namespace_name ; + // + case 300: { action. consumeNamespaceAliasDefinition(); break; + } + + // + // Rule 301: using_declaration ::= using typename_opt dcolon_opt nested_name_specifier_opt unqualified_id_name ; + // + case 301: { action. consumeUsingDeclaration(); break; + } + + // + // Rule 302: typename_opt ::= typename + // + case 302: { action. consumePlaceHolder(); break; + } + + // + // Rule 303: typename_opt ::= $Empty + // + case 303: { action. consumeEmpty(); break; + } + + // + // Rule 304: using_directive ::= using namespace dcolon_opt nested_name_specifier_opt namespace_name ; + // + case 304: { action. consumeUsingDirective(); break; + } + + // + // Rule 305: linkage_specification ::= extern stringlit { <openscope-ast> declaration_seq_opt } + // + case 305: { action. consumeLinkageSpecification(); break; + } + + // + // Rule 306: linkage_specification ::= extern stringlit <openscope-ast> declaration + // + case 306: { action. consumeLinkageSpecification(); break; + } + + // + // Rule 311: init_declarator_complete ::= init_declarator + // + case 311: { action. consumeInitDeclaratorComplete(); break; + } + + // + // Rule 313: init_declarator ::= complete_declarator initializer + // + case 313: { action. consumeDeclaratorWithInitializer(true); break; + } + + // + // Rule 316: declarator ::= <openscope-ast> ptr_operator_seq direct_declarator + // + case 316: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 318: function_declarator ::= <openscope-ast> ptr_operator_seq direct_declarator + // + case 318: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 322: basic_direct_declarator ::= declarator_id_name + // + case 322: { action. consumeDirectDeclaratorIdentifier(); break; + } + + // + // Rule 323: basic_direct_declarator ::= ( declarator ) + // + case 323: { action. consumeDirectDeclaratorBracketed(); break; + } + + // + // Rule 324: function_direct_declarator ::= basic_direct_declarator ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt + // + case 324: { action. consumeDirectDeclaratorFunctionDeclarator(true); break; + } + + // + // Rule 325: array_direct_declarator ::= array_direct_declarator array_modifier + // + case 325: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 326: array_direct_declarator ::= basic_direct_declarator array_modifier + // + case 326: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 327: array_modifier ::= [ constant_expression ] + // + case 327: { action. consumeDirectDeclaratorArrayModifier(true); break; + } + + // + // Rule 328: array_modifier ::= [ ] + // + case 328: { action. consumeDirectDeclaratorArrayModifier(false); break; + } + + // + // Rule 329: ptr_operator ::= pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt + // + case 329: { action. consumePointer(); break; + } + + // + // Rule 330: ptr_operator ::= pointer_hook & pointer_hook + // + case 330: { action. consumeReferenceOperator(); break; + } + + // + // Rule 331: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt + // + case 331: { action. consumePointerToMember(); break; + } + + // + // Rule 338: cv_qualifier ::= const + // + case 338: { action. consumeToken(); break; + } + + // + // Rule 339: cv_qualifier ::= volatile + // + case 339: { action. consumeToken(); break; + } + + // + // Rule 341: declarator_id_name ::= dcolon_opt nested_name_specifier_opt type_name + // + case 341: { action. consumeQualifiedId(false); break; + } + + // + // Rule 342: type_id ::= type_specifier_seq + // + case 342: { action. consumeTypeId(false); break; + } + + // + // Rule 343: type_id ::= type_specifier_seq abstract_declarator + // + case 343: { action. consumeTypeId(true); break; + } + + // + // Rule 346: abstract_declarator ::= <openscope-ast> ptr_operator_seq + // + case 346: { action. consumeDeclaratorWithPointer(false); break; + } + + // + // Rule 347: abstract_declarator ::= <openscope-ast> ptr_operator_seq direct_abstract_declarator + // + case 347: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 351: basic_direct_abstract_declarator ::= ( abstract_declarator ) + // + case 351: { action. consumeDirectDeclaratorBracketed(); break; + } + + // + // Rule 352: basic_direct_abstract_declarator ::= ( ) + // + case 352: { action. consumeAbstractDeclaratorEmpty(); break; + } + + // + // Rule 353: array_direct_abstract_declarator ::= array_modifier + // + case 353: { action. consumeDirectDeclaratorArrayDeclarator(false); break; + } + + // + // Rule 354: array_direct_abstract_declarator ::= array_direct_abstract_declarator array_modifier + // + case 354: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 355: array_direct_abstract_declarator ::= basic_direct_abstract_declarator array_modifier + // + case 355: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 356: 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 356: { action. consumeDirectDeclaratorFunctionDeclarator(true); break; + } + + // + // Rule 357: function_direct_abstract_declarator ::= ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt + // + case 357: { action. consumeDirectDeclaratorFunctionDeclarator(false); break; + } + + // + // Rule 358: parameter_declaration_clause ::= parameter_declaration_list_opt ... + // + case 358: { action. consumePlaceHolder(); break; + } + + // + // Rule 359: parameter_declaration_clause ::= parameter_declaration_list_opt + // + case 359: { action. consumeEmpty(); break; + } + + // + // Rule 360: parameter_declaration_clause ::= parameter_declaration_list , ... + // + case 360: { action. consumePlaceHolder(); break; + } + + // + // Rule 366: abstract_declarator_opt ::= $Empty + // + case 366: { action. consumeEmpty(); break; + } + + // + // Rule 367: parameter_declaration ::= declaration_specifiers parameter_init_declarator + // + case 367: { action. consumeParameterDeclaration(); break; + } + + // + // Rule 368: parameter_declaration ::= declaration_specifiers + // + case 368: { action. consumeParameterDeclarationWithoutDeclarator(); break; + } + + // + // Rule 370: parameter_init_declarator ::= declarator = parameter_initializer + // + case 370: { action. consumeDeclaratorWithInitializer(true); break; + } + + // + // Rule 372: parameter_init_declarator ::= abstract_declarator = parameter_initializer + // + case 372: { action. consumeDeclaratorWithInitializer(true); break; + } + + // + // Rule 373: parameter_init_declarator ::= = parameter_initializer + // + case 373: { action. consumeDeclaratorWithInitializer(false); break; + } + + // + // Rule 374: parameter_initializer ::= assignment_expression + // + case 374: { action. consumeInitializer(); break; + } + + // + // Rule 375: function_definition ::= declaration_specifiers_opt function_declarator <openscope-ast> ctor_initializer_list_opt function_body + // + case 375: { action. consumeFunctionDefinition(false); break; + } + + // + // Rule 376: function_definition ::= declaration_specifiers_opt function_declarator try <openscope-ast> ctor_initializer_list_opt function_body <openscope-ast> handler_seq + // + case 376: { action. consumeFunctionDefinition(true); break; + } + + // + // Rule 379: initializer ::= ( expression_list ) + // + case 379: { action. consumeInitializerConstructor(); break; + } + + // + // Rule 380: initializer_clause ::= assignment_expression + // + case 380: { action. consumeInitializer(); break; + } + + // + // Rule 382: initializer_list ::= start_initializer_list { <openscope-ast> initializer_seq , } end_initializer_list + // + case 382: { action. consumeInitializerList(); break; + } + + // + // Rule 383: initializer_list ::= start_initializer_list { <openscope-ast> initializer_seq } end_initializer_list + // + case 383: { action. consumeInitializerList(); break; + } + + // + // Rule 384: initializer_list ::= { <openscope-ast> } + // + case 384: { action. consumeInitializerList(); break; + } + + // + // Rule 385: start_initializer_list ::= $Empty + // + case 385: { action. initializerListStart(); break; + } + + // + // Rule 386: end_initializer_list ::= $Empty + // + case 386: { action. initializerListEnd(); break; + } + + // + // Rule 391: class_specifier ::= class_head { <openscope-ast> member_declaration_list_opt } + // + case 391: { action. consumeClassSpecifier(); break; + } + + // + // Rule 392: class_head ::= class_keyword composite_specifier_hook identifier_name_opt class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 392: { action. consumeClassHead(false); break; + } + + // + // Rule 393: class_head ::= class_keyword composite_specifier_hook template_id_name class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 393: { action. consumeClassHead(false); break; + } + + // + // Rule 394: class_head ::= class_keyword composite_specifier_hook nested_name_specifier identifier_name class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 394: { action. consumeClassHead(true); break; + } + + // + // Rule 395: class_head ::= class_keyword composite_specifier_hook nested_name_specifier template_id_name class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 395: { action. consumeClassHead(true); break; + } + + // + // Rule 399: identifier_name_opt ::= $Empty + // + case 399: { action. consumeEmpty(); break; + } + + // + // Rule 403: visibility_label ::= access_specifier_keyword : + // + case 403: { action. consumeVisibilityLabel(); break; + } + + // + // Rule 404: member_declaration ::= declaration_specifiers_opt <openscope-ast> member_declarator_list ; + // + case 404: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 405: member_declaration ::= declaration_specifiers_opt ; + // + case 405: { action. consumeDeclarationSimple(false); break; + } + + // + // Rule 408: member_declaration ::= dcolon_opt nested_name_specifier template_opt unqualified_id_name ; + // + case 408: { action. consumeMemberDeclarationQualifiedId(); break; + } + + // + // Rule 414: member_declaration ::= ERROR_TOKEN + // + case 414: { action. consumeDeclarationProblem(); break; + } + + // + // Rule 423: member_declarator ::= declarator constant_initializer + // + case 423: { action. consumeMemberDeclaratorWithInitializer(); break; + } + + // + // Rule 424: member_declarator ::= bit_field_declarator : constant_expression + // + case 424: { action. consumeBitField(true); break; + } + + // + // Rule 425: member_declarator ::= : constant_expression + // + case 425: { action. consumeBitField(false); break; + } + + // + // Rule 426: bit_field_declarator ::= identifier_name + // + case 426: { action. consumeDirectDeclaratorIdentifier(); break; + } + + // + // Rule 427: constant_initializer ::= = constant_expression + // + case 427: { action. consumeInitializer(); break; + } + + // + // Rule 433: base_specifier ::= dcolon_opt nested_name_specifier_opt class_name + // + case 433: { action. consumeBaseSpecifier(false, false); break; + } + + // + // Rule 434: base_specifier ::= virtual access_specifier_keyword_opt dcolon_opt nested_name_specifier_opt class_name + // + case 434: { action. consumeBaseSpecifier(true, true); break; + } + + // + // Rule 435: base_specifier ::= access_specifier_keyword virtual dcolon_opt nested_name_specifier_opt class_name + // + case 435: { action. consumeBaseSpecifier(true, true); break; + } + + // + // Rule 436: base_specifier ::= access_specifier_keyword dcolon_opt nested_name_specifier_opt class_name + // + case 436: { action. consumeBaseSpecifier(true, false); break; + } + + // + // Rule 437: access_specifier_keyword ::= private + // + case 437: { action. consumeToken(); break; + } + + // + // Rule 438: access_specifier_keyword ::= protected + // + case 438: { action. consumeToken(); break; + } + + // + // Rule 439: access_specifier_keyword ::= public + // + case 439: { action. consumeToken(); break; + } + + // + // Rule 441: access_specifier_keyword_opt ::= $Empty + // + case 441: { action. consumeEmpty(); break; + } + + // + // Rule 443: conversion_function_id_name ::= conversion_function_id < <openscope-ast> template_argument_list_opt > + // + case 443: { action. consumeTemplateId(); break; + } + + // + // Rule 444: conversion_function_id ::= operator conversion_type_id + // + case 444: { action. consumeConversionName(); break; + } + + // + // Rule 445: conversion_type_id ::= type_specifier_seq conversion_declarator + // + case 445: { action. consumeTypeId(true); break; + } + + // + // Rule 446: conversion_type_id ::= type_specifier_seq + // + case 446: { action. consumeTypeId(false); break; + } + + // + // Rule 447: conversion_declarator ::= <openscope-ast> ptr_operator_seq + // + case 447: { action. consumeDeclaratorWithPointer(false); break; + } + + // + // Rule 453: mem_initializer ::= mem_initializer_name ( expression_list_opt ) + // + case 453: { action. consumeConstructorChainInitializer(); break; + } + + // + // Rule 454: mem_initializer_name ::= dcolon_opt nested_name_specifier_opt class_name + // + case 454: { action. consumeQualifiedId(false); break; + } + + // + // Rule 457: operator_function_id_name ::= operator_id_name < <openscope-ast> template_argument_list_opt > + // + case 457: { action. consumeTemplateId(); break; + } + + // + // Rule 458: operator_id_name ::= operator overloadable_operator + // + case 458: { action. consumeOperatorName(); break; + } + + // + // Rule 501: template_declaration ::= export_opt template < <openscope-ast> template_parameter_list > declaration + // + case 501: { action. consumeTemplateDeclaration(); break; + } + + // + // Rule 502: export_opt ::= export + // + case 502: { action. consumePlaceHolder(); break; + } + + // + // Rule 503: export_opt ::= $Empty + // + case 503: { action. consumeEmpty(); break; + } + + // + // Rule 507: template_parameter ::= parameter_declaration + // + case 507: { action. consumeTemplateParamterDeclaration(); break; + } + + // + // Rule 508: type_parameter ::= class identifier_name_opt + // + case 508: { action. consumeSimpleTypeTemplateParameter(false); break; + } + + // + // Rule 509: type_parameter ::= class identifier_name_opt = type_id + // + case 509: { action. consumeSimpleTypeTemplateParameter(true); break; + } + + // + // Rule 510: type_parameter ::= typename identifier_name_opt + // + case 510: { action. consumeSimpleTypeTemplateParameter(false); break; + } + + // + // Rule 511: type_parameter ::= typename identifier_name_opt = type_id + // + case 511: { action. consumeSimpleTypeTemplateParameter(true); break; + } + + // + // Rule 512: type_parameter ::= template < <openscope-ast> template_parameter_list > class identifier_name_opt + // + case 512: { action. consumeTemplatedTypeTemplateParameter(false); break; + } + + // + // Rule 513: type_parameter ::= template < <openscope-ast> template_parameter_list > class identifier_name_opt = id_expression + // + case 513: { action. consumeTemplatedTypeTemplateParameter(true); break; + } + + // + // Rule 514: template_id_name ::= identifier_name < <openscope-ast> template_argument_list_opt > + // + case 514: { action. consumeTemplateId(); break; + } + + // + // Rule 519: template_argument ::= assignment_expression + // + case 519: { action. consumeTemplateArgumentExpression(); break; + } + + // + // Rule 520: template_argument ::= type_id + // + case 520: { action. consumeTemplateArgumentTypeId(); break; + } + + // + // Rule 521: explicit_instantiation ::= template declaration + // + case 521: { action. consumeTemplateExplicitInstantiation(); break; + } + + // + // Rule 522: explicit_specialization ::= template < > declaration + // + case 522: { action. consumeTemplateExplicitSpecialization(); break; + } + + // + // Rule 523: try_block ::= try compound_statement <openscope-ast> handler_seq + // + case 523: { action. consumeStatementTryBlock(); break; + } + + // + // Rule 526: handler ::= catch ( exception_declaration ) compound_statement + // + case 526: { action. consumeStatementCatchHandler(false); break; + } + + // + // Rule 527: handler ::= catch ( ... ) compound_statement + // + case 527: { action. consumeStatementCatchHandler(true); break; + } + + // + // Rule 528: exception_declaration ::= type_specifier_seq <openscope-ast> declarator + // + case 528: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 529: exception_declaration ::= type_specifier_seq <openscope-ast> abstract_declarator + // + case 529: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 530: exception_declaration ::= type_specifier_seq + // + case 530: { action. consumeDeclarationSimple(false); break; + } + + // + // Rule 532: exception_specification ::= throw ( ) + // + case 532: { action. consumePlaceHolder(); break; + } + + // + // Rule 553: attribute_parameter ::= assignment_expression + // + case 553: { action. consumeIgnore(); break; + } + + // + // Rule 564: extended_asm_declaration ::= asm volatile_opt ( extended_asm_param_seq ) ; + // + case 564: { gnuAction.consumeDeclarationASM(); break; + } + + // + // Rule 575: unary_expression ::= __alignof__ unary_expression + // + case 575: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_alignOf); break; + } + + // + // Rule 576: unary_expression ::= __alignof__ ( type_id ) + // + case 576: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_alignof); break; + } + + // + // Rule 577: unary_expression ::= typeof unary_expression + // + case 577: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); break; + } + + // + // Rule 578: unary_expression ::= typeof ( type_id ) + // + case 578: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); break; + } + + // + // Rule 579: relational_expression ::= relational_expression >? shift_expression + // + case 579: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_max); break; + } + + // + // Rule 580: relational_expression ::= relational_expression <? shift_expression + // + case 580: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_min); break; + } + + // + // Rule 581: conditional_expression ::= logical_or_expression ? <empty> : assignment_expression + // + case 581: { action. consumeExpressionConditional(); break; + } + + // + // Rule 582: primary_expression ::= ( compound_statement ) + // + case 582: { gnuAction.consumeCompoundStatementExpression(); break; + } + + // + // Rule 583: labeled_statement ::= case case_range_expression : statement + // + case 583: { action. consumeStatementCase(); break; + } + + // + // Rule 584: case_range_expression ::= constant_expression ... constant_expression + // + case 584: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_assign); break; + } + + // + // Rule 588: typeof_type_specifier ::= typeof unary_expression + // + case 588: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); break; + } + + // + // Rule 589: typeof_type_specifier ::= typeof ( type_id ) + // + case 589: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); break; + } + + // + // Rule 590: declaration_specifiers ::= <openscope-ast> typeof_declaration_specifiers + // + case 590: { action. consumeDeclarationSpecifiersTypeof(); break; + } + + // + // Rule 603: declarator ::= <openscope-ast> ptr_operator_seq attribute_or_decl_specifier_seq direct_declarator + // + case 603: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 606: simple_type_specifier ::= _Complex + // + case 606: { action. consumeToken(); break; + } + + // + // Rule 607: simple_type_specifier ::= _Imaginary + // + case 607: { action. consumeToken(); break; + } + + // + // Rule 608: cv_qualifier ::= restrict + // + case 608: { action. consumeToken(); break; + } + + // + // Rule 609: explicit_instantiation ::= extern template declaration + // + case 609: { action. consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_extern); break; + } + + // + // Rule 610: explicit_instantiation ::= static template declaration + // + case 610: { action. consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_static); break; + } + + // + // Rule 611: explicit_instantiation ::= inline template declaration + // + case 611: { action. consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_inline); break; + } + + // + // Rule 615: type_id ::= vector_type + // + case 615: { action. consumeTypeId(false); break; + } + + // + // Rule 616: type_id ::= vector_type abstract_declarator + // + case 616: { action. consumeTypeId(true); break; + } + + // + // Rule 617: vector_declaration ::= vector_type <openscope-ast> init_declarator_list ; + // + case 617: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 618: vector_type ::= <openscope-ast> no_type_declaration_specifiers_opt vector vector_type_specifier all_specifier_qualifier_list_opt + // + case 618: { action. consumeVectorTypeSpecifier(); break; + } + + // + // Rule 619: vector_type_specifier ::= vector_type_specifier_token + // + case 619: { action. consumeToken(); break; + } + + // + // Rule 641: specifier_qualifier ::= typedef + // + case 641: { action. consumeToken(); break; + } + + // + // Rule 642: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers ] + // + case 642: { action. consumeDirectDeclaratorModifiedArrayModifier(false, false, true, false); break; + } + + // + // Rule 643: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers assignment_expression ] + // + case 643: { action. consumeDirectDeclaratorModifiedArrayModifier(false, false, true, true); break; + } + + // + // Rule 644: array_modifier ::= [ static assignment_expression ] + // + case 644: { action. consumeDirectDeclaratorModifiedArrayModifier(true, false, false, true); break; + } + + // + // Rule 645: array_modifier ::= [ static <openscope-ast> array_modifier_type_qualifiers assignment_expression ] + // + case 645: { action. consumeDirectDeclaratorModifiedArrayModifier(true, false, true, true); break; + } + + // + // Rule 646: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers static assignment_expression ] + // + case 646: { action. consumeDirectDeclaratorModifiedArrayModifier(true, false, true, true); break; + } + + // + // Rule 647: array_modifier ::= [ * ] + // + case 647: { action. consumeDirectDeclaratorModifiedArrayModifier(false, true, false, false); break; + } + + // + // Rule 648: array_modifier ::= [ <openscope-ast> array_modifier_type_qualifiers * ] + // + case 648: { action. consumeDirectDeclaratorModifiedArrayModifier(false, true, true, false); break; + } + + + default: + break; + } + return; + } +} + diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParserprs.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParserprs.java new file mode 100644 index 00000000000..8350ddffc79 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParserprs.java @@ -0,0 +1,3816 @@ +/******************************************************************************* +* Copyright (c) 2006, 2009 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.lrparser.xlc.cpp; + +public class XlcCPPParserprs implements lpg.lpgjavaruntime.ParseTable, XlcCPPParsersym { + + 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,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,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,3,1,1,1,1,1,1, + 1,1,2,2,1,1,0,1,0,4, + 2,3,2,3,2,2,1,0,1,1, + 4,4,4,8,8,3,3,4,4,3, + 3,2,2,7,7,7,7,4,4,5, + 6,3,2,2,1,1,1,2,2,2, + 2,2,2,2,2,2,4,7,9,3, + 0,1,2,2,1,2,3,4,1,0, + 3,1,0,3,5,1,4,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,2,1,3,1, + 0,1,0,1,1,0,1,1,1,1, + 1,1,1,1,1,3,4,3,2,1, + 4,2,1,2,5,7,5,1,4,1, + 0,5,7,8,1,1,2,2,3,2, + 3,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,2,1,0, + 4,4,2,2,2,2,2,1,0,1, + 1,1,1,1,1,2,1,2,2,2, + 1,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,3,4,4,5,2, + 5,6,5,0,1,0,7,8,0,1, + 3,1,0,1,3,1,7,6,0,7, + 6,1,0,6,6,4,1,3,1,0, + 1,1,2,1,1,3,1,3,1,1, + 1,1,3,9,2,2,3,2,5,3, + 7,0,1,2,2,1,0,1,1,1, + 3,1,2,1,1,2,3,1,1,1, + 3,2,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, + 1,7,6,3,0,0,1,3,1,1, + 5,6,6,7,7,0,0,1,0,1, + 1,1,2,4,2,2,1,5,1,1, + 1,1,1,1,1,2,1,0,1,3, + 1,1,2,3,2,1,2,2,1,0, + 1,3,3,5,5,4,1,1,1,1, + 0,1,5,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,3,1,0,1,1, + 2,4,4,1,2,5,5,3,3,1, + 4,3,1,0,1,3,1,1,1,1, + 2,6,3,1,3,1,4,0,1,1, + 1,3,1,0,4,3,1,2,1,3, + 4,4,4,6,1,0,1,3,1,3, + 0,1,4,5,2,4,2,4,3,3, + 5,3,4,3,1,2,2,2,4,2, + 1,1,2,2,3,2,2,3,1,1, + 1,1,4,1,1,1,1,1,3,3, + 3,1,1,1,1,2,4,5,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,2,1,0,1,0,1,1,1,1, + 1,4,5,4,6,6,3,5,1,1, + 2,-177,0,0,0,-2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-69, + 0,0,0,-8,0,0,0,0,0,0, + -174,0,0,-231,0,0,0,0,-297,0, + 0,0,-477,0,0,0,0,0,0,0, + 0,0,-480,0,0,0,0,0,0,0, + 0,0,0,0,0,-107,-9,0,0,0, + -45,0,0,0,-238,0,0,0,0,-16, + -269,0,0,0,0,-13,0,0,0,-195, + 0,0,-3,0,0,0,0,0,0,0, + 0,0,0,-126,-263,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -10,-54,0,0,0,0,0,0,0,-12, + -33,0,0,0,0,0,0,-555,0,0, + 0,-18,0,0,0,0,0,0,0,0, + 0,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,-60,0,0,0, + 0,0,0,0,-70,0,-241,0,0,0, + 0,-425,0,0,-25,-5,0,0,-15,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-197,0,0,0,0,0,0,0, + 0,0,0,0,0,-155,0,0,0,0, + 0,-59,0,0,0,0,0,0,0,-395, + 0,0,0,0,0,0,0,0,0,0, + 0,-17,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-4,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-163,0,0,0,0,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,-21,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -264,0,0,0,-41,0,0,0,-180,-22, + 0,0,0,0,0,0,0,-420,0,0, + 0,0,-199,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,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,-283,0,0,0,0,0, + -179,-295,0,-189,0,0,0,0,0,0, + 0,0,0,0,0,0,-165,0,0,0, + 0,0,0,0,-190,0,0,0,-23,0, + 0,0,0,0,0,0,0,0,-77,0, + 0,0,-24,-200,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-593,0,0,0, + 0,0,0,0,0,-32,0,0,0,0, + 0,0,0,0,0,0,0,-117,0,0, + -374,0,0,0,-145,0,0,0,-370,-42, + 0,0,0,0,0,-375,0,-150,-26,0, + 0,0,-381,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-617,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-377,0,0,0,0,-144, + 0,0,0,-650,0,0,0,0,0,0, + 0,0,0,0,0,0,-613,-612,0,0, + 0,0,0,0,-299,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-585,0, + 0,-444,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-43,0,-46,0,0,0, + 0,0,0,-567,0,0,0,0,0,0, + 0,0,0,-108,0,-75,0,0,-481,0, + 0,-48,0,-586,0,0,0,-49,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-267,0,0,0, + 0,-362,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-52,0,0,0,0, + 0,0,-137,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-365,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-317,0,0,0,0,0, + 0,-57,0,0,0,-367,0,0,0,-72, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-318, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-83,0,0,-84,0,0, + 0,0,0,-547,0,0,0,-36,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,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,-98,0,0,0,0,-400,0,0, + 0,-378,0,0,0,0,0,0,-99,0, + 0,-487,0,-213,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-376,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,-88,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-230,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -419,0,0,0,0,-100,0,0,0,0, + 0,0,0,0,0,0,-38,0,0,-580, + 0,-601,0,0,-361,0,0,0,-519,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-55, + 0,0,-188,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-504,0,0,0, + 0,-431,0,0,0,-101,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-62,0,0,0,-357, + 0,0,0,0,0,0,0,0,0,0, + -120,0,0,-164,0,0,0,0,-524,0, + 0,0,-102,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-133,-119,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-71,0,0,0,-525,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-104,-58, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-407,0,0,0,-151,0, + 0,0,0,0,0,0,0,-536,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-63,0,-105,0,-191,0,0,0,0, + 0,0,0,0,0,0,-561,0,0,-261, + 0,0,0,0,-226,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-160, + -203,0,-192,0,0,0,0,0,0,0, + 0,0,0,-146,0,0,-322,0,0,0, + 0,-346,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-399,0,0,0,-347,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-505,0,0,0,0,0,0,0,0, + -109,0,0,0,0,0,0,0,0,0, + 0,-73,-80,0,0,0,0,-113,0,-348, + 0,0,0,-121,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-215,-642,0,0,-622,0,0, + 0,0,0,0,0,0,0,0,-103,0, + 0,-236,-122,0,0,0,-349,0,0,0, + -615,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -277,0,0,0,0,0,0,0,-123,0, + 0,0,0,0,0,-106,0,0,0,0, + 0,0,0,-350,0,0,0,-124,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-517,0,0,0, + 0,-427,0,0,0,0,0,0,0,0, + 0,0,-134,0,0,-237,-193,0,0,0, + -351,0,0,0,-147,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-148,0,-204,0,-510,0, + 0,0,0,0,0,0,0,0,0,-115, + 0,0,-239,0,0,0,0,-352,0,0, + 0,-152,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-247,-158,-232,0,0,0,0,0,-181, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-353,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-518,0,0, + 0,0,-511,0,0,0,0,0,0,0, + 0,0,0,-116,0,0,-249,0,-216,0, + 0,-354,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-278,-217,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-319,-484,0,0,0,-355,0, + 0,0,-218,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-564,0,0,0,0,-512,0,0,0, + 0,0,0,0,0,0,0,-153,0,0, + -634,0,0,0,0,-356,0,0,0,-219, + 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,-221,0,0, + 0,0,0,0,-413,0,0,-222,0,0, + 0,0,-386,0,0,0,-223,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-422,0,0,0,0, + -575,0,0,0,0,0,0,0,0,0, + 0,-577,0,0,-405,0,0,0,-627,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-253,-76,0, + -224,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-225,-171,-172,0, + 0,0,0,0,0,-286,-467,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-227,0,0,-513,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-320,-323, + -234,0,0,-468,0,0,0,-240,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-245,0, + 0,0,0,0,0,-250,0,0,0,0, + 0,0,-127,0,0,0,0,-252,0,0, + -301,-532,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-442,-643,0,0,-569, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-388,0,0,0,0,-533,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-265,0,0,0,0,0,0, + -266,0,0,0,0,0,0,-268,0,0, + 0,-482,0,0,0,-620,0,0,0,-279, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-280,-128, + -485,0,0,0,0,0,0,-281,0,0, + 0,0,0,0,-131,0,0,-282,0,-397, + 0,0,-475,0,0,0,-291,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-82,0,0,0,0, + -136,0,0,0,0,0,0,0,0,0, + 0,-292,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,-531,-549,0, + -398,0,0,0,0,0,0,0,0,0, + 0,0,0,-132,0,0,0,0,-173,-293, + 0,-125,0,0,0,-294,-539,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-359,0,0,-576,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-540,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-79,-429,0,0,0,0,0,0,0, + -303,0,0,0,0,0,0,-546,0,0, + -423,0,0,-360,0,0,0,0,0,-305, + -551,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-635,0,0,0,0,-640,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-607,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-306,0,-308,0, + -30,0,0,0,0,0,0,0,0,0, + 0,-139,0,0,0,0,-6,0,0,0, + -309,0,-312,0,0,0,0,-288,0,0, + 0,0,-508,-469,0,0,0,0,-143,0, + 0,0,0,0,-40,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-314, + 0,0,0,0,0,-205,0,0,0,0, + 0,0,0,0,0,0,0,-39,0,0, + 0,0,0,0,0,0,0,0,0,0, + -315,-161,0,0,0,0,-212,-316,-534,-363, + 0,0,0,0,-443,0,-522,0,-68,0, + 0,0,-379,0,0,0,0,-287,-380,0, + 0,0,0,0,0,0,0,0,0,-210, + -214,0,0,0,0,-385,-20,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-74,0,0,0,0,0, + 0,0,0,-244,-258,-260,0,0,0,0, + 0,0,-332,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-605, + 0,-606,0,0,0,0,-194,0,0,0, + -387,-358,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-389,-390,-391,0,0,-246, + 0,0,0,0,0,0,0,0,0,0, + -118,0,0,0,0,0,-392,0,-394,-473, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-235,0,0,0,0,0,-64,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-474,-408,0,0,0,0,0,-415, + -416,0,0,0,0,-262,0,0,-28,0, + 0,-611,-371,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-417, + -270,0,0,0,0,0,0,0,0,-418, + -432,0,-307,0,0,0,0,0,0,0, + -324,0,-433,0,0,0,0,0,0,0, + 0,0,0,-591,0,0,0,0,0,-440, + -441,0,0,0,0,0,-445,0,0,0, + -271,0,0,0,0,-446,0,0,-345,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,-448,0,-372,0,0,0, + 0,0,0,0,0,0,-85,0,0,0, + -449,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-343,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-535,-450,-166,-451,0,0, + 0,0,0,-452,0,0,0,0,-344,0, + 0,0,-382,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-81,0,0,0,0,-56,0,0,0, + 0,0,0,0,-272,0,-527,0,0,0, + -453,0,0,0,0,0,0,0,0,0, + 0,0,0,-436,-454,-273,0,0,-648,0, + 0,0,0,-373,-404,0,0,0,0,0, + 0,-636,0,0,0,0,-276,-455,-412,0, + 0,0,0,-456,0,-457,0,0,-111,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-458,0,0,0,0,-156, + 0,0,0,0,0,0,-459,-598,0,0, + 0,0,0,0,0,0,0,0,0,0, + -289,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-460,-461,-424,-274,0,0, + 0,0,0,0,0,0,-462,0,0,0, + 0,-290,0,0,0,0,-34,0,0,0, + -430,0,-463,0,0,0,0,0,0,0, + -296,-599,0,0,0,0,0,0,0,0, + 0,-498,0,0,0,0,0,-523,0,0, + 0,-464,0,0,0,0,0,0,0,0, + 0,0,0,-465,-439,-466,0,-175,0,-300, + 0,0,-476,0,-27,-478,-311,-364,0,0, + 0,-488,0,0,0,0,0,0,0,0, + 0,-490,-608,0,0,0,0,0,0,0, + 0,0,-47,0,0,0,-396,0,0,0, + 0,-340,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-384,-491,0,0,0, + 0,0,0,-496,0,0,0,-366,0,-500, + 0,0,0,0,-501,0,0,-368,0,0, + 0,-514,0,0,0,0,-369,0,0,0, + 0,-402,-521,-592,0,0,0,0,0,0, + -515,0,0,0,0,-414,0,0,0,0, + 0,0,0,0,0,-516,0,0,0,0, + 0,-471,-472,0,-135,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-499, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-558,0,0,-502,0,-562,-566,-544, + -506,0,0,-233,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-545,0,0,0, + 0,0,0,-483,0,0,-507,-559,0,0, + -341,0,0,0,-520,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-565,-568,-578,-579,0,0,0, + 0,0,-581,0,-584,0,0,-254,0,0, + 0,0,0,0,0,0,0,0,0,0, + -629,0,0,0,-342,0,0,0,-537,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-553,-393,-595, + -604,0,0,0,0,0,0,0,-228,0, + 0,0,-556,0,0,0,0,0,0,0, + 0,-583,0,0,0,0,0,0,-597,0, + 0,0,0,0,0,-614,-616,0,-560,-563, + 0,-621,0,-633,0,0,0,0,-582,0, + 0,0,-646,0,0,0,0,0,-571,0, + 0,-589,0,-489,-206,-572,0,0,0,-573, + 0,0,-574,0,0,0,-603,0,0,0, + 0,0,-623,0,0,0,0,0,0,0, + 0,0,0,-302,-609,-95,0,0,-610,0, + 0,0,0,-624,0,0,-628,-630,0,-625, + 0,0,0,0,0,0,0,-639,0,0, + 0,0,0,0,0,0,0,0,-492,0, + 0,0,0,0,0,0,0,0,0,0, + -631,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-632,0, + 0,0,0,0,0,-641,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-638,0,0,0,-538,0,0, + 0,0,0,0,0,0,0,0,0,0, + -649,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-543,0,0,0, + 0,0,0,0,0,0,0,0,0,-602, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-176,-550,0,0,0, + 0,0,0,0,0,0,-207,0,0,0, + 0,0,0,0,0,-66,0,0,0,0, + -626,0,-44,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,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,-552,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-594,0,0,0,0,-554,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-596,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-182,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-600,-503,0,0,0,0,0,-61,0, + 0,0,0,0,0,0,-528,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-65,0,0,0,0, + 0,0,0,0,0,0,-637,0,0,0, + 0,0,-437,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-647,0,0,0,0,-313,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,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,0,0,0,-259, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-333,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-334,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -335,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-336,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-337,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-541,0,0,0,0,-29,0,0,0, + -434,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-338,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-644,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-96,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-1,0,0,0,0, + -339,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-588, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-37,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-31,0,0,0, + 0,0,0,0,0,0,0,0,-35,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-251,0, + 0,0,0,0,0,0,0,-110,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-184,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-138,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-202,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-495,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-7,0,0,0, + 0,0,0,0,0,0,0,0,0,-142, + 0,0,0,0,-157,0,0,0,0,0, + 0,0,0,0,0,-479,0,0,0,0, + -542,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-327,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-328,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-208,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,0,0,-185,0,0,0,0,0, + -201,0,-209,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-401,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-321,0,0,0,0,0,0, + -242,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-329,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,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,-331, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-470,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-89,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,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,-91,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-92,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-93,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,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,-97,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -178,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-325,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-326,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-383, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-410,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-11,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,0,0,0,0,0,0,0, + 0,0,-154,0,0,0,0,0,0,-14, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,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,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-50, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-403,0,-51,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-140,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-53,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-275,0,0,-129,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-112,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-130,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -256,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-587,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-149,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-285,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-438,-526,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-255,0,0,0, + 0,0,0,0,0,-243,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-198,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-167,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -159,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-168,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-229,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-169,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-170,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-409,-435,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-509,0,0,0,0,0,-570,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-196,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,-211,0,0,0,-284,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-298,0,0,0,-304,0,0,0, + -548,0,0,0,0,0,0,0,0,0, + -557,0,0,0,0,0,0,0,0,0, + 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,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-645,0,-494,0,0,0, + 0,0,0,0,-590,0,0,0,0,-618, + 0,0,0,0,0,0,-619,0,0,0, + 0,0,0,0,0,0,0,-187,0,0, + 0,-257,0,0,-248,0,0,0,0,-406, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -428,0,0,0,-421,0,0,0,0,0, + 0,-186,0,0,0,0,-411,0,0,0, + 0,0,0,0,0,0,0,0,-497,0, + 0,0,0,0,0,0,0,-529,0,0, + 0,0,0,0,0,0,0,0,0,-530, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-651,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,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[] = { + 198,4,143,72,72,32,32,96,96,49, + 49,48,48,198,1,1,16,16,16,16, + 16,16,16,17,17,17,15,11,11,6, + 6,6,6,6,6,2,84,84,5,5, + 12,12,63,63,162,162,163,73,73,54, + 18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18, + 164,164,164,144,144,19,19,19,19,19, + 19,19,19,19,19,19,19,19,20,20, + 199,199,200,200,201,167,167,168,168,165, + 165,169,166,166,21,21,22,22,27,27, + 27,29,29,29,29,30,30,30,31,31, + 31,33,33,33,33,33,34,34,34,35, + 35,36,36,37,37,38,38,40,40,41, + 41,46,46,45,45,45,45,45,45,45, + 45,45,45,45,45,45,47,42,145,145, + 105,105,202,202,98,232,232,85,85,85, + 85,85,85,85,85,85,86,86,86,83, + 83,64,64,203,203,87,87,87,119,119, + 204,204,88,88,88,205,205,89,89,89, + 89,89,90,90,92,92,92,92,92,92, + 92,92,55,55,55,55,55,120,120,118, + 118,56,206,28,28,28,28,28,53,53, + 76,76,76,76,76,106,106,121,121,121, + 121,121,122,122,122,123,123,123,124,124, + 124,125,125,125,77,77,77,77,77,78, + 78,78,13,14,14,14,14,14,14,14, + 14,14,14,14,97,110,110,110,110,110, + 110,108,108,108,171,172,172,109,109,207, + 174,174,173,173,146,146,126,81,81,147, + 58,52,175,175,59,94,94,148,148,170, + 170,127,128,128,129,75,75,176,176,70, + 70,70,66,66,65,71,71,95,95,74, + 74,74,69,99,99,113,112,112,60,60, + 67,67,68,68,50,114,114,114,100,100, + 100,101,101,102,102,102,103,103,130,130, + 130,132,132,131,131,233,233,104,104,209, + 209,209,209,209,150,51,51,178,208,208, + 151,151,152,152,152,153,180,210,210,44, + 44,107,115,115,115,115,212,134,133,133, + 111,111,111,181,182,182,182,182,182,182, + 182,182,182,182,182,214,214,211,211,213, + 213,136,137,137,137,137,138,215,139,135, + 135,216,216,183,183,183,183,117,117,117, + 217,217,8,8,9,218,218,219,184,177, + 177,185,185,186,187,187,7,7,10,220, + 220,220,220,220,220,220,220,220,220,220, + 220,220,220,220,220,220,220,220,220,220, + 220,220,220,220,220,220,220,220,220,220, + 220,220,220,220,220,220,220,220,220,220, + 220,79,82,82,188,188,155,155,156,156, + 156,156,156,156,3,157,157,154,154,140, + 140,93,80,91,179,179,141,141,221,221, + 221,158,158,149,149,222,222,23,23,23, + 43,43,24,24,223,223,189,189,189,190, + 190,224,224,191,191,25,25,225,225,192, + 192,192,192,26,61,226,226,227,227,193, + 193,193,159,159,159,19,19,19,19,33, + 33,41,17,86,228,142,142,142,116,116, + 28,57,76,129,129,129,136,136,136,207, + 212,134,69,75,171,147,13,13,60,93, + 93,93,14,14,14,68,68,62,39,160, + 161,161,161,161,161,161,161,161,161,195, + 195,230,230,229,229,194,194,60,55,1, + 1,234,95,95,95,95,95,95,95,196, + 197,197,1786,35,2788,2778,1415,6827,27,30, + 31,1285,1160,26,28,2769,262,25,23,50, + 1874,106,76,77,108,592,537,538,539,2319, + 2717,2373,2347,2442,1651,2420,2458,2448,2531,2467, + 2547,2729,2582,143,1503,3698,274,158,144,2710, + 35,1287,32,4083,7005,27,30,31,1285,1160, + 59,28,232,2433,35,3776,32,4589,3803,27, + 30,31,1285,1160,340,28,821,2046,235,230, + 231,2427,2138,2119,34,1506,3940,537,538,539, + 205,2427,35,1136,390,4336,2524,1412,296,275, + 2171,35,455,131,650,6847,4287,859,5182,242, + 245,248,251,3369,2743,3792,3163,1169,585,540, + 537,538,539,3187,855,3775,4987,5197,320,1872, + 322,2061,2811,315,1726,49,6398,182,703,1820, + 1499,2171,35,280,5209,46,3572,2750,1860,35, + 2788,2778,68,6827,27,30,31,1285,1160,26, + 28,2769,262,25,23,50,1874,106,76,77, + 108,592,537,538,539,2319,414,2373,2347,2442, + 2785,2420,2458,2448,2531,2467,2547,1927,2582,143, + 6458,619,274,158,144,4080,826,1982,3116,5391, + 421,3773,2325,35,455,1539,2245,6847,232,88, + 35,1287,32,4589,3803,27,30,31,1285,1160, + 340,28,3577,4996,235,230,231,543,592,537, + 538,539,540,537,538,539,2427,35,6952,6421, + 1655,1342,4194,1680,2205,275,540,537,538,539, + 2427,3742,3339,3267,5328,242,245,248,251,3369, + 449,290,205,1169,585,232,3062,6152,423,3187, + 855,3775,4987,5197,320,1872,322,1909,568,315, + 1726,244,230,231,4636,448,2961,2980,1522,3169, + 5209,617,330,2750,3489,35,1287,32,3067,5082, + 27,30,31,1285,1160,26,28,1819,262,25, + 23,50,1874,106,76,77,108,2427,35,1136, + 390,2319,344,2373,2347,2442,509,2420,2458,2448, + 2531,2467,2547,3768,2582,143,307,311,837,519, + 144,2427,35,283,4316,1540,35,1287,32,2921, + 799,41,30,31,1285,1160,570,892,2427,35, + 3881,454,520,3489,35,1287,32,3067,5082,27, + 30,31,1285,1160,26,28,1819,262,25,23, + 50,1874,106,76,77,108,3003,452,2961,2980, + 2319,344,2373,2347,2442,313,2420,2458,2448,2531, + 2467,2547,3768,2582,143,2171,35,280,519,144, + 6960,1096,4763,4316,3555,35,1287,32,323,6843, + 27,30,31,1285,1160,57,28,2427,35,2119, + 277,520,802,3116,515,4695,35,1287,32,805, + 6843,27,30,31,1285,1160,56,28,2724,2997, + 1920,2731,912,1,3489,35,1287,32,3067,5082, + 27,30,31,1285,1160,26,28,1819,262,25, + 23,50,1874,106,76,77,108,2427,35,1136, + 390,2319,344,2373,2347,2442,1514,2420,2458,2448, + 2531,2467,2547,3768,2582,143,1631,3142,1586,519, + 144,3838,5541,515,4316,3866,35,1287,32,2921, + 1782,2176,30,31,1285,1160,3838,3049,2160,2529, + 2731,433,520,4043,35,1287,32,3067,5082,27, + 30,31,1285,1160,26,28,1819,262,25,23, + 50,1874,106,76,77,108,2427,35,1136,390, + 2319,344,2373,2347,2442,1008,2420,2458,2448,2531, + 2467,2547,3768,2582,143,3792,3163,2032,519,144, + 2427,35,296,4316,3833,35,1287,32,61,7005, + 27,30,31,1285,1160,26,28,524,2901,513, + 436,520,3311,3320,515,2710,35,1287,32,60, + 7005,27,30,31,1285,1160,58,28,3071,219, + 3168,2731,4124,35,1287,32,344,5082,27,30, + 31,1285,1160,26,28,1819,262,25,23,50, + 1874,106,76,77,108,2394,392,2445,4219,2319, + 429,2373,2347,2442,4404,2420,2458,2448,2531,2467, + 2547,393,2582,143,2013,429,205,380,144,3838, + 3181,6621,806,516,3639,35,1287,32,2633,5082, + 27,30,31,1285,1160,26,28,1819,262,25, + 23,50,1874,106,76,77,108,2427,35,2119, + 279,2319,3362,2373,2347,2442,2082,2420,2458,2448, + 2531,2467,2547,221,2582,143,613,544,2629,380, + 144,290,3181,3726,35,1287,32,445,5082,27, + 30,31,1285,1160,26,28,1819,262,25,23, + 50,1874,106,76,77,108,324,2160,2365,3169, + 2319,3214,2373,2347,2442,533,2420,2458,2448,2531, + 2467,2547,651,2582,143,3435,35,398,380,144, + 2091,3181,132,387,381,2064,3962,35,1287,32, + 1980,5082,27,30,31,1285,1160,26,28,1819, + 262,25,23,50,1874,106,76,77,108,383, + 3435,35,398,2319,395,2373,2347,2442,429,2420, + 2458,2448,2531,2467,2547,2560,2582,143,898,4201, + 88,553,144,102,3871,388,381,2064,4529,35, + 1287,32,2858,5082,27,30,31,1285,1160,26, + 28,1819,262,25,23,50,1874,588,76,77, + 3398,35,1287,32,694,5082,27,30,31,1285, + 1160,26,28,1819,262,25,23,50,1874,106, + 76,77,108,905,378,381,2064,2319,2529,2373, + 2347,2442,3734,2420,2458,2448,2531,2467,2547,2635, + 2601,164,2427,3163,4397,35,1287,32,3430,5082, + 27,30,31,1285,1160,26,28,1819,262,25, + 23,50,1874,106,76,77,108,2427,35,2119, + 282,2319,328,2373,2347,2442,691,2420,2458,2448, + 2531,2467,2547,3431,2582,143,545,2629,205,158, + 144,440,3855,6812,4793,35,1287,32,2254,5082, + 27,30,31,1285,1160,26,28,1819,262,25, + 23,50,1874,106,76,77,85,551,3881,35, + 1287,32,2912,5082,27,30,31,1285,1160,26, + 28,1819,262,25,23,50,1874,106,76,77, + 108,2427,35,2119,3862,2319,2727,2373,2347,2442, + 3903,2420,2458,2448,2531,2467,2547,227,2582,143, + 2709,726,3581,2974,144,3573,35,1287,32,2292, + 5082,27,30,31,1285,1160,26,28,1819,262, + 25,23,50,1874,106,76,77,108,291,2750, + 2529,3874,2319,4297,2373,2347,2442,1534,2420,2458, + 2448,2531,2467,2547,2771,2582,143,4897,35,278, + 3084,144,4397,35,1287,32,3197,5082,27,30, + 31,1285,1160,26,28,1819,262,25,23,50, + 1874,106,76,77,108,160,2036,642,2874,2319, + 3498,2373,2347,2442,1534,2420,2458,2448,2531,2467, + 2547,3003,2582,143,3610,35,278,374,144,4397, + 35,1287,32,3214,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,156,499,2529,2157,2319,3764,2373,2347, + 2442,2392,2420,2458,2448,2531,2467,2547,3731,2582, + 143,525,3606,525,374,144,4397,35,1287,32, + 524,5082,27,30,31,1285,1160,26,28,1819, + 262,25,23,50,1874,106,76,77,108,997, + 2274,325,3180,2319,556,2373,2347,2442,1337,2420, + 2458,2448,2531,2467,2547,4892,2582,143,1650,3606, + 1008,374,144,541,537,538,539,500,3962,35, + 1287,32,373,5082,27,30,31,1285,1160,26, + 28,1819,262,25,23,50,1874,106,76,77, + 108,555,3953,3752,3919,2319,4297,2373,2347,2442, + 1534,2420,2458,2448,2531,2467,2547,2292,2582,143, + 3610,35,281,553,144,3800,35,1287,32,372, + 5082,27,30,31,1285,1160,26,28,1819,262, + 25,23,50,1874,106,76,77,108,160,3116, + 2529,2157,2319,131,2373,2347,2442,1534,2420,2458, + 2448,2531,2467,2547,2908,2582,143,2427,35,296, + 142,144,4397,35,1287,32,370,5082,27,30, + 31,1285,1160,26,28,1819,262,25,23,50, + 1874,106,76,77,108,156,2223,326,3366,2319, + 2651,2373,2347,2442,1557,2420,2458,2448,2531,2467, + 2547,3770,2582,143,557,2427,3850,155,144,4397, + 35,1287,32,462,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,3914,35,2119,277,2319,1839,2373,2347, + 2442,2246,2420,2458,2448,2531,2467,2547,524,2582, + 143,558,131,131,154,144,6123,944,1671,552, + 4397,35,1287,32,2309,5082,27,30,31,1285, + 1160,26,28,1819,262,25,23,50,1874,106, + 76,77,108,3155,2529,2529,1652,2319,4363,2373, + 2347,2442,1534,2420,2458,2448,2531,2467,2547,205, + 2582,143,2013,3191,6948,153,144,4397,35,1287, + 32,219,5082,27,30,31,1285,1160,26,28, + 1819,262,25,23,50,1874,106,76,77,108, + 156,3215,3411,691,2319,162,2373,2347,2442,3360, + 2420,2458,2448,2531,2467,2547,131,2582,143,527, + 2177,304,152,144,4397,35,1287,32,1520,5082, + 27,30,31,1285,1160,26,28,1819,262,25, + 23,50,1874,106,76,77,108,2427,4006,2119, + 74,2319,4297,2373,2347,2442,1534,2420,2458,2448, + 2531,2467,2547,205,2582,143,2013,821,6823,151, + 144,4397,35,1287,32,1003,5082,27,30,31, + 1285,1160,26,28,1819,262,25,23,50,1874, + 106,76,77,108,160,2466,354,2157,2319,131, + 2373,2347,2442,1534,2420,2458,2448,2531,2467,2547, + 131,2582,143,2013,1013,301,150,144,4397,35, + 1287,32,1004,5082,27,30,31,1285,1160,26, + 28,1819,262,25,23,50,1874,106,76,77, + 108,156,3361,3103,2157,2319,4119,2373,2347,2442, + 1653,2420,2458,2448,2531,2467,2547,3985,2582,143, + 4254,382,564,149,144,4397,35,1287,32,461, + 5082,27,30,31,1285,1160,26,28,1819,262, + 25,23,50,1874,106,76,77,108,3914,35, + 2119,4007,2319,131,2373,2347,2442,1534,2420,2458, + 2448,2531,2467,2547,131,2582,143,4028,1104,2302, + 148,144,4397,35,1287,32,327,5082,27,30, + 31,1285,1160,26,28,1819,262,25,23,50, + 1874,106,76,77,108,156,4006,2131,391,2319, + 4126,2373,2347,2442,4154,2420,2458,2448,2531,2467, + 2547,449,2582,143,3361,3734,406,147,144,4397, + 35,1287,32,2275,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,2427,35,2119,4061,2319,131,2373,2347, + 2442,1534,2420,2458,2448,2531,2467,2547,3003,2582, + 143,3435,35,398,146,144,4397,35,1287,32, + 4005,5082,27,30,31,1285,1160,26,28,1819, + 262,25,23,50,1874,106,76,77,108,156, + 563,355,210,2319,4130,2373,2347,2442,304,2420, + 2458,2448,2531,2467,2547,2800,2582,143,300,6762, + 305,145,144,4793,35,1287,32,2151,5082,27, + 30,31,1285,1160,26,28,1819,262,25,23, + 50,1874,106,76,77,108,3678,35,1136,390, + 2319,4297,2373,2347,2442,1534,2420,2458,2448,2531, + 2467,2547,2290,2601,164,4397,35,1287,32,4602, + 5082,27,30,31,1285,1160,26,28,1819,262, + 25,23,50,1874,106,76,77,108,403,4430, + 274,1195,2319,160,2373,2347,2442,2859,2420,2458, + 2448,2531,2467,2547,4113,2582,143,1294,3003,3003, + 159,144,541,537,538,539,2157,4397,35,1287, + 32,3837,5082,27,30,31,1285,1160,26,28, + 1819,262,25,23,50,1874,106,76,77,108, + 589,582,2994,3896,2319,131,2373,2347,2442,1534, + 2420,2458,2448,2531,2467,2547,4155,2582,143,3361, + 3361,399,3149,144,4397,35,1287,32,2276,5082, + 27,30,31,1285,1160,26,28,1819,262,25, + 23,50,1874,106,76,77,108,156,6063,1102, + 72,2319,4133,2373,2347,2442,1118,2420,2458,2448, + 2531,2467,2547,131,2582,143,70,4125,3405,3535, + 144,2157,4397,35,1287,32,93,5082,27,30, + 31,1285,1160,26,28,1819,262,25,23,50, + 1874,106,76,77,108,89,3361,2529,102,2319, + 131,2373,2347,2442,1534,2420,2458,2448,2531,2467, + 2547,3792,2582,143,2013,298,384,581,144,4397, + 35,1287,32,912,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,156,51,1108,691,2319,3793,2373,2347, + 2442,2718,2420,2458,2448,2531,2467,2547,1201,2582, + 143,526,3838,179,140,144,4463,35,1287,32, + 2837,5082,27,30,31,1285,1160,26,28,1819, + 262,25,23,50,1874,106,76,77,108,1300, + 131,3361,297,2319,4327,2373,2347,2442,5351,2420, + 2458,2448,2531,2467,2547,131,2582,143,5334,5499, + 2013,189,144,4793,35,1287,32,1316,5082,27, + 30,31,1285,1160,26,28,1819,262,25,23, + 50,1874,106,76,77,108,2427,35,1136,390, + 2319,131,2373,2347,2442,1534,2420,2458,2448,2531, + 2467,2547,1405,2601,164,4793,35,1287,32,198, + 5082,27,30,31,1285,1160,26,28,1819,262, + 25,23,50,1874,106,76,77,108,5208,3361, + 274,2013,2319,3147,2373,2347,2442,287,2420,2458, + 2448,2531,2467,2547,131,2601,164,394,5543,3003, + 2463,429,2427,35,1136,390,2812,4793,35,1287, + 32,425,5082,27,30,31,1285,1160,26,28, + 1819,262,25,23,50,1874,106,76,77,108, + 197,24,1503,276,2319,4297,2373,2347,2442,1534, + 2420,2458,2448,2531,2467,2547,274,2601,164,4793, + 35,1287,32,295,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,3464,3684,1259,288,2319,160,2373,2347, + 2442,3016,2420,2458,2448,2531,2467,2547,1498,2601, + 164,4303,650,6925,2157,541,537,538,539,341, + 1492,4793,35,1287,32,424,5082,27,30,31, + 1285,1160,26,28,1819,262,25,23,50,1874, + 106,76,77,108,2427,35,1136,390,2319,524, + 2373,2347,2442,3157,2420,2458,2448,2531,2467,2547, + 4159,2601,164,4925,35,1287,32,427,5082,27, + 30,31,1285,1160,26,28,1819,262,25,23, + 50,1874,106,76,77,108,644,2011,435,2906, + 2319,2389,2373,2347,2442,3116,2420,2458,2448,2531, + 2467,2547,4030,2601,164,329,336,4991,35,1136, + 390,3199,3717,1299,540,537,538,539,131,584, + 237,262,1534,3849,2157,541,537,538,539,4158, + 592,537,538,539,2952,3270,35,1287,32,4589, + 3803,27,30,31,1285,1160,340,28,2557,1342, + 3105,274,541,537,538,539,3866,35,1287,32, + 3886,4031,40,30,31,1285,1160,232,2116,35, + 1287,32,4589,6379,27,30,31,1285,1160,340, + 28,2624,131,235,230,231,765,3003,3496,2157, + 75,540,537,538,539,2013,643,3684,357,1506, + 320,1872,322,1699,275,315,1726,533,1393,3893, + 1036,3639,3311,5182,242,245,248,251,3369,379, + 131,131,1169,585,5614,2600,3875,2014,3187,855, + 3775,4987,5197,320,1872,322,344,2038,315,1726, + 239,262,333,4636,300,3435,35,2253,5375,5209, + 592,537,538,539,3111,131,131,3157,2455,1151, + 1166,645,1578,4793,35,1287,32,5238,5082,27, + 30,31,1285,1160,26,28,1819,262,25,23, + 50,1874,106,76,77,108,3848,232,1294,49, + 2319,4005,2373,2347,3536,307,311,837,1099,1458, + 4365,826,4297,240,230,231,1534,2529,886,335, + 336,3999,4793,35,1287,32,2021,5082,27,30, + 31,1285,1160,26,28,1819,262,25,23,50, + 1874,106,76,77,108,233,1668,2153,1304,2319, + 3721,2373,2347,2442,160,2420,2458,2448,2531,2467, + 3766,5103,35,1136,390,691,3717,2649,2205,2703, + 3866,35,1287,32,237,262,4039,30,31,1285, + 1160,377,560,5149,592,537,538,539,3660,88, + 35,1287,32,4589,3803,27,30,31,1285,1160, + 340,28,567,5214,5412,274,541,537,538,539, + 2891,3469,541,537,538,539,131,4167,3629,4231, + 1215,232,2290,2248,35,3776,32,4589,6379,27, + 30,31,1285,1160,340,28,1934,235,230,231, + 3840,3003,540,537,538,539,540,537,538,539, + 3998,2460,404,131,320,1872,322,2953,275,315, + 1726,131,2529,3475,5370,1262,713,5328,242,245, + 248,251,3369,578,205,2509,1169,585,4005,6930, + 3874,3889,3187,855,3775,4987,5197,3172,320,1872, + 322,3003,2038,315,1726,375,3266,333,703,4793, + 35,1287,32,5209,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,5238,576,3283,4007,2319,131,2373,2347, + 2442,1309,2420,2458,2448,2531,3723,4595,35,1287, + 32,4169,5082,27,30,31,1285,1160,26,28, + 1819,262,25,23,50,1874,577,76,77,5386, + 421,3773,4793,35,1287,32,71,5082,27,30, + 31,1285,1160,26,28,1819,262,25,23,50, + 1874,106,76,77,108,2157,216,4568,408,2319, + 1306,2373,2347,2442,516,2420,2458,2448,3696,4793, + 35,1287,32,4768,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,2427,35,1136,390,2319,2010,2373,2347, + 2442,3205,2420,2458,3707,3003,3353,1984,35,1287, + 32,606,6379,27,30,31,1285,1160,340,28, + 540,537,538,539,2310,612,3003,646,3311,524, + 540,537,538,539,131,131,49,87,2742,4583, + 1820,741,2427,35,1136,390,1458,4826,714,131, + 4069,6232,4717,3083,4031,1744,4084,741,6040,2612, + 35,1287,32,4589,3803,27,30,31,1285,1160, + 340,28,320,1872,322,498,2038,316,1726,352, + 4961,334,541,537,538,539,434,5151,3522,35, + 1287,32,4589,3803,27,30,31,1285,1160,340, + 28,3003,353,540,537,538,539,347,2346,2111, + 350,540,537,538,539,5153,2409,131,431,42, + 2738,1659,652,4790,320,1872,322,1858,362,315, + 1726,3339,3003,69,5370,44,2738,2142,35,1136, + 390,131,353,4050,1774,3748,228,345,2346,2111, + 350,3003,131,320,1872,322,1534,753,315,1726, + 156,3872,2013,4636,68,2694,691,180,3888,203, + 215,5357,4004,202,212,213,214,216,356,591, + 638,49,169,53,4033,131,1670,533,4962,4597, + 3003,1458,6335,4159,156,1672,130,3003,3003,4164, + 1455,168,332,183,167,170,171,172,173,174, + 2816,201,4160,2157,3215,307,311,837,592,537, + 538,539,52,2142,35,1136,390,5046,3157,3721, + 573,1534,4793,35,1287,32,2021,5082,27,30, + 31,1285,1160,26,28,1819,262,25,23,50, + 1874,106,76,77,108,232,134,4032,4143,2319, + 652,2373,2347,2442,415,2420,3655,49,3003,156, + 5154,247,230,231,3920,131,200,1458,3003,1887, + 4082,336,4190,353,228,97,764,3003,345,2346, + 2111,350,3003,131,205,753,2882,4109,156,6937, + 542,4191,616,2694,691,180,3003,203,215,5357, + 562,202,212,213,214,216,1999,591,638,561, + 169,3836,3003,3570,351,88,35,1287,32,4589, + 3803,27,30,31,1285,1160,340,28,90,168, + 2013,184,167,170,171,172,173,174,540,537, + 538,539,181,131,574,547,3003,3668,131,131, + 2448,3003,4300,3260,4198,35,1287,32,3339,5082, + 27,30,31,1285,1160,26,28,1819,262,25, + 23,50,1874,106,76,77,81,4368,3938,199, + 320,1872,322,4004,3087,315,1726,3003,4337,6851, + 4636,4793,35,1287,32,3003,5082,27,30,31, + 1285,1160,26,28,1819,262,25,23,50,1874, + 106,76,77,108,5429,4087,4308,2894,2319,3939, + 2373,2347,2442,4562,3667,3014,647,453,3759,35, + 1287,32,3373,3803,27,30,31,1285,1160,340, + 28,2157,308,311,837,4793,35,1287,32,2013, + 5082,27,30,31,1285,1160,26,28,1819,262, + 25,23,50,1874,106,76,77,108,3003,530, + 5164,4573,2319,652,2373,2347,2442,405,3695,1740, + 35,1287,32,3003,3803,27,30,31,1285,1160, + 340,28,131,317,1312,322,1237,228,408,2013, + 4452,2968,541,537,538,539,2841,3723,753,3003, + 3003,156,2015,98,4668,4517,2694,691,180,3684, + 203,215,5357,5206,202,212,213,214,216,3003, + 591,638,3087,169,629,5475,3003,6851,652,3311, + 3003,4582,4137,3003,320,1872,322,131,2068,603, + 1726,4341,168,2013,3844,167,170,171,172,173, + 174,67,228,4717,2529,3003,2905,431,66,3003, + 652,8155,65,753,3003,64,156,3003,3003,3157, + 131,2694,691,180,3009,203,215,5357,2013,202, + 212,213,214,216,344,591,638,55,169,728, + 3967,54,222,652,1647,3768,4178,8155,156,101, + 2065,3003,691,2879,691,8155,4316,168,8155,178, + 167,170,171,172,173,174,8155,228,377,5497, + 2549,331,336,5067,2548,8155,131,193,753,361, + 3609,156,8155,2677,8155,8155,2694,691,180,2968, + 203,215,5357,8155,202,212,213,214,216,8155, + 591,638,8155,169,3003,3777,3073,3110,3202,35, + 3776,32,4589,3803,27,30,31,1285,1160,340, + 28,3878,168,8155,176,167,170,171,172,173, + 174,540,537,538,539,8155,4712,3296,35,3776, + 32,4589,3803,27,30,31,1285,1160,340,28, + 3888,4287,8155,531,8155,432,8155,8155,8155,8155, + 3940,537,538,539,8155,8155,5495,827,8155,8155, + 6335,652,8155,320,1872,322,8155,3775,315,1726, + 4287,3311,3697,703,8155,8155,3308,35,1136,390, + 8155,3888,8155,5205,8155,228,8155,3311,8155,8155, + 8155,8155,320,1872,322,4717,753,315,1726,156, + 3157,8155,703,8155,2694,691,180,8155,203,215, + 5357,344,202,212,213,214,216,8155,591,638, + 49,169,131,8155,8155,8155,3067,926,8155,8155, + 1458,652,8155,1148,6443,421,3773,8155,8155,47, + 168,3157,583,167,170,171,172,173,174,1220, + 344,353,4170,336,8155,228,345,2346,2111,350, + 8155,3768,8155,5391,421,3773,753,8155,8155,156, + 343,507,4316,8155,2694,691,180,8155,203,215, + 5357,8155,202,212,213,214,216,8155,591,638, + 2797,169,1025,4226,336,8155,652,3705,35,1287, + 32,4589,3803,27,30,31,1285,1160,340,28, + 168,8155,177,167,170,171,172,173,174,8155, + 228,8155,504,506,8155,8155,8155,8155,8155,8155, + 8155,753,8155,8155,156,8155,8155,8155,8155,2694, + 691,180,8155,203,215,5357,8155,202,212,213, + 214,216,8155,591,638,3141,169,1124,8155,8155, + 8155,652,320,1872,322,8155,8155,315,1726,8155, + 8155,8155,4060,8155,8155,168,8155,187,167,170, + 171,172,173,174,8155,228,8155,8155,8155,131, + 8155,8155,8155,652,8155,8155,753,8155,8155,156, + 8155,444,8155,458,2694,691,180,8155,203,215, + 5357,8155,202,212,213,214,216,344,591,638, + 8155,169,1223,5475,8155,8155,652,3311,3768,1669, + 8155,156,8155,8155,6276,8155,3712,3930,8155,4316, + 168,3311,4102,167,170,171,172,173,174,8155, + 228,4717,540,537,538,539,8155,3681,8155,8155, + 8155,753,8155,8155,156,4717,8155,8155,8155,2694, + 691,180,3062,203,215,5357,3608,202,212,213, + 214,216,8155,591,638,8155,169,1322,8155,8155, + 8155,652,8155,3775,8155,8155,8155,3311,2038,540, + 537,538,539,333,8155,168,8155,192,167,170, + 171,172,173,174,8155,228,8155,8155,8155,3089, + 8155,4717,8155,8155,8155,8155,753,361,5313,156, + 8155,8155,8155,8155,2694,691,180,8155,203,215, + 5357,507,202,212,213,214,216,8155,591,638, + 8155,169,1421,4100,3073,3110,652,5480,35,1287, + 32,6734,3803,27,30,31,1285,1160,340,28, + 168,8155,186,167,170,171,172,173,174,8155, + 228,8155,8155,8155,8155,8155,8155,8155,8155,8155, + 8155,753,504,506,156,8155,8155,507,8155,2694, + 691,180,8155,203,215,5357,8155,202,212,213, + 214,216,8155,591,638,8155,169,8155,8155,8155, + 8155,1719,320,1872,322,4015,6276,315,1726,8155, + 5233,8155,3413,8155,8155,168,8155,194,167,170, + 171,172,173,174,540,537,538,539,505,506, + 8155,8155,353,541,537,538,539,345,2346,2111, + 350,8155,8155,8155,3062,8155,8155,4793,35,1287, + 32,3401,5082,27,30,31,1285,1160,26,28, + 1819,262,25,23,50,1874,106,76,77,108, + 2038,8155,8155,8155,2319,334,2373,2347,3538,4793, + 35,1287,32,8155,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,8155,8155,8155,8155,2319,8155,2373,2347, + 3544,4793,35,1287,32,8155,5082,27,30,31, + 1285,1160,26,28,1819,262,25,23,50,1874, + 106,76,77,108,8155,8155,8155,8155,2319,8155, + 2373,2347,3591,8155,8155,8155,367,4793,35,1287, + 32,8155,5082,27,30,31,1285,1160,26,28, + 1819,262,25,23,50,1874,106,76,77,108, + 8155,8155,8155,8155,2319,8155,2373,2347,3605,4793, + 35,1287,32,8155,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,5270,8155,8155,8155,2319,2379,2373,2347, + 3628,3364,35,1287,32,6516,3803,27,30,31, + 1285,1160,340,28,8155,541,537,538,539,8155, + 592,537,538,539,8155,8155,8155,8155,8155,4793, + 35,1287,32,352,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,8155,8155,8155,8155,2319,232,2373,3634, + 8155,8155,8155,8155,8155,8155,320,1872,322,8155, + 8155,315,1726,250,230,231,1036,4628,35,1287, + 32,6734,3803,27,30,31,1285,1160,340,28, + 8155,8155,2304,35,1136,390,353,8155,8155,8155, + 8155,345,2346,2111,350,8155,2333,8155,8155,8155, + 3067,4793,35,1287,32,3872,5082,27,30,31, + 1285,1160,26,28,1819,262,25,23,50,1874, + 106,76,77,108,228,8155,49,8155,2319,8155, + 2373,3636,320,1872,322,753,1458,315,1726,8155, + 5223,8155,528,8155,8155,999,8155,205,215,5357, + 8155,204,212,213,214,216,8155,591,638,8155, + 8155,8155,353,541,537,538,539,345,2346,2111, + 350,8155,8155,8155,8155,206,208,210,684,8155, + 8155,529,5047,35,1136,390,8155,3717,217,207, + 209,8155,8155,8155,8155,238,262,2514,8155,8155, + 8155,8155,8155,8155,8155,592,537,538,539,2890, + 8155,8155,8155,8155,13,8155,6130,8155,8155,8155, + 592,537,538,539,8155,8155,274,8155,8155,2524, + 35,296,592,537,538,539,8155,8155,1607,35, + 1287,32,232,6379,27,30,31,1285,1160,340, + 28,8155,540,537,538,539,8155,232,236,230, + 231,540,537,538,539,8155,8155,131,8155,232, + 8155,3067,1820,253,230,231,8155,8155,8155,275, + 8155,3062,8155,8155,8155,587,230,231,8155,243, + 246,249,252,3369,656,344,8155,1169,586,8155, + 8155,8155,8155,320,1872,322,3768,2038,318,1726, + 8155,8155,334,1607,35,1287,32,4316,6379,27, + 30,31,1285,1160,340,28,8155,8155,5159,35, + 1136,390,8155,3717,8155,2832,540,537,538,539, + 8155,238,262,5046,8155,8155,8155,798,8155,8155, + 8155,592,537,538,539,3577,4069,3176,35,1287, + 32,3128,3803,27,30,31,1285,1160,340,28, + 4110,3933,274,8155,8155,2821,1680,8155,320,1872, + 322,8155,2038,316,1726,156,5237,334,232,8155, + 2694,5289,180,540,537,538,539,8155,540,537, + 538,539,8155,8155,236,230,231,8155,8155,540, + 537,538,539,3333,540,537,538,539,4790,8155, + 8155,8155,317,1312,322,275,195,8155,8155,4982, + 8155,8155,8155,8155,5140,243,246,249,252,3369, + 8155,8155,8155,1169,586,4793,35,1287,32,8155, + 5082,27,30,31,1285,1160,26,28,1819,262, + 25,23,50,1874,106,76,77,108,8155,8155, + 8155,8155,2319,8155,3437,4793,35,1287,32,8155, + 5082,27,30,31,1285,1160,26,28,1819,262, + 25,23,50,1874,106,76,77,108,8155,2562, + 8155,8155,2319,3067,3446,4661,35,1287,32,3216, + 5082,27,30,31,1285,1160,26,28,1819,262, + 25,23,50,1874,575,76,77,228,8155,8155, + 8155,8155,8155,1647,8155,131,8155,8155,753,3067, + 8155,1669,8155,2656,8155,8155,6276,3067,6861,196, + 205,215,5357,8155,204,212,213,214,216,8155, + 591,638,8155,344,540,537,538,539,8155,8155, + 8155,228,8155,8155,3768,8155,8155,8155,206,208, + 210,684,753,2826,3062,4316,8155,8155,6276,8155, + 8155,217,207,209,205,215,5357,8155,204,212, + 213,214,216,2880,591,638,540,537,538,539, + 2038,8155,8155,8155,2750,333,8155,2364,3067,6130, + 8155,2984,206,208,210,684,3062,8155,8155,8155, + 8155,8155,8155,8155,8155,217,207,209,8155,8155, + 4781,8155,228,8155,592,537,538,539,8155,8155, + 8155,8155,2038,753,8155,8155,8155,334,8155,8155, + 8155,2599,8155,6130,8155,205,215,5357,8155,204, + 212,213,214,216,8155,591,638,8155,353,8155, + 8155,232,8155,347,2346,2111,350,8155,8155,8155, + 8155,8155,8155,206,208,210,684,236,230,231, + 8155,8155,8155,8155,8155,8155,217,207,209,4793, + 35,1287,32,8155,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,108,2676,8155,6130,8155,3474,4793,35,1287, + 32,8155,5082,27,30,31,1285,1160,26,28, + 1819,262,25,23,50,1874,106,76,77,108, + 4793,35,1287,32,3475,5082,27,30,31,1285, + 1160,26,28,1819,262,25,23,50,1874,106, + 76,77,108,4264,35,1287,32,3491,5082,27, + 30,31,1285,1160,26,28,1819,262,25,23, + 50,1874,106,76,77,81,4793,35,1287,32, + 8155,5082,27,30,31,1285,1160,26,28,1819, + 262,25,23,50,1874,106,76,77,83,4793, + 35,1287,32,8155,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,82,8155,8155,8155,648,4793,35,1287,32, + 8155,5082,27,30,31,1285,1160,26,28,1819, + 262,25,23,50,1874,106,76,77,81,4793, + 35,1287,32,8155,5082,27,30,31,1285,1160, + 26,28,1819,262,25,23,50,1874,106,76, + 77,80,4793,35,1287,32,8155,5082,27,30, + 31,1285,1160,26,28,1819,262,25,23,50, + 1874,106,76,77,79,4793,35,1287,32,8155, + 5082,27,30,31,1285,1160,26,28,1819,262, + 25,23,50,1874,106,76,77,78,4793,2138, + 1287,2260,8155,5082,27,30,31,1285,1160,26, + 28,1819,262,25,23,50,1874,106,76,77, + 84,4330,35,1287,32,8155,5082,27,30,31, + 1285,1160,26,28,1819,262,25,23,50,1874, + 106,76,77,104,4793,35,1287,32,8155,5082, + 27,30,31,1285,1160,26,28,1819,262,25, + 23,50,1874,106,76,77,110,4793,35,1287, + 32,8155,5082,27,30,31,1285,1160,26,28, + 1819,262,25,23,50,1874,106,76,77,109, + 4793,35,1287,32,8155,5082,27,30,31,1285, + 1160,26,28,1819,262,25,23,50,1874,106, + 76,77,107,4793,35,1287,32,8155,5082,27, + 30,31,1285,1160,26,28,1819,262,25,23, + 50,1874,106,76,77,105,2468,8155,8155,8155, + 3067,4727,35,1287,32,8155,5082,27,30,31, + 1285,1160,26,28,1819,262,25,23,50,1874, + 86,76,77,8155,228,8155,8155,8155,8155,8155, + 8155,8155,8155,1934,8155,753,8155,3311,6955,8155, + 2198,8155,8155,8155,3067,8155,8155,205,215,5357, + 8155,204,212,213,214,216,8155,591,638,8155, + 8155,228,3390,35,1136,390,8155,8155,228,8155, + 8155,8155,8155,8155,8155,206,208,210,684,753, + 8155,8155,8155,8155,2317,409,4018,8155,521,207, + 209,205,215,5357,8155,204,212,213,214,216, + 2844,591,638,8155,3067,8155,49,8155,8155,8155, + 8155,8155,410,411,412,684,1458,8155,8155,206, + 208,210,684,8155,8155,47,8155,8155,228,8155, + 8155,8155,218,207,209,1155,8155,8155,8155,753, + 8155,8155,2638,8155,2938,8155,3311,6276,3067,8155, + 2636,205,215,5357,8155,204,212,213,214,216, + 8155,591,638,8155,8155,540,537,538,539,8155, + 4717,8155,228,8155,8155,8155,8155,8155,8155,206, + 208,210,684,753,8155,3062,2427,35,1136,390, + 8155,8155,611,207,209,205,215,5357,8155,204, + 212,213,214,216,3032,591,638,8155,3067,8155, + 8155,2038,8155,8155,413,415,333,8155,8155,8155, + 8155,8155,8155,206,208,210,684,8155,8155,8155, + 49,8155,228,8155,8155,8155,610,207,209,8155, + 1458,5583,8155,753,2252,1669,361,6547,3126,6655, + 6276,8155,3067,8155,8155,205,215,5357,8155,204, + 212,213,214,216,8155,591,638,8155,540,537, + 538,539,3936,3073,3110,8155,228,8155,8155,8155, + 8155,8155,8155,206,208,210,684,753,3062,2142, + 35,1136,390,8155,8155,8155,609,207,209,205, + 215,5357,8155,204,212,213,214,216,3220,591, + 638,8155,3067,8155,2038,8155,8155,8155,8155,333, + 8155,8155,8155,8155,8155,8155,8155,206,208,210, + 684,4961,8155,49,8155,8155,228,8155,8155,8155, + 522,207,209,1458,5583,8155,8155,753,8155,8155, + 8155,8155,6795,5399,540,537,538,539,8155,205, + 215,5357,2882,204,212,213,214,216,2147,591, + 638,8155,8155,8155,4790,8155,540,537,538,539, + 8155,8155,8155,8155,8155,8155,8155,206,208,210, + 684,592,537,538,539,8155,4982,8155,8155,8155, + 306,207,209,4859,35,1287,32,8155,5082,27, + 30,31,1285,1160,26,28,1819,262,25,23, + 50,1874,3354,76,77,3314,2638,8155,232,3067, + 3311,6276,8155,8155,8155,8155,8155,8155,8155,8155, + 8155,8155,8155,8155,235,230,231,8155,8155,540, + 537,538,539,228,4717,8155,8155,2066,8155,8155, + 8155,3311,6955,8155,753,3477,2278,8155,8155,3062, + 8155,8155,8155,8155,5621,8155,205,215,5357,8155, + 204,212,213,214,216,228,591,638,8155,592, + 537,538,539,8155,8155,2038,8155,8155,4996,8155, + 333,8155,8155,8155,206,208,210,684,2317,409, + 4018,8155,2905,8155,8155,8155,652,501,207,209, + 8155,540,537,538,539,3587,232,8155,629,619, + 361,3390,35,1136,390,8155,410,411,412,684, + 344,3062,235,230,231,2905,8155,8155,8155,652, + 8155,3768,8155,8155,156,8155,3936,3073,3110,2879, + 691,8155,4316,631,8155,5093,8155,3403,8155,8155, + 8155,8155,5621,344,2636,49,2549,8155,8155,8155, + 3391,8155,2905,8155,3768,1458,652,156,540,537, + 538,539,2879,691,47,4316,8155,618,6556,8155, + 8155,8155,8155,8155,1890,8155,8155,8155,3062,2549, + 344,8155,2905,3441,8155,8155,652,8155,8155,8155, + 8155,3768,8155,8155,156,8155,629,619,8155,2879, + 691,8155,4316,8155,3047,8155,8155,8155,413,416, + 344,8155,8155,2905,1669,8155,2549,652,8155,6276, + 3585,3768,8155,8155,156,8155,8155,8155,8155,2879, + 691,632,4316,8155,8155,8155,8155,540,537,538, + 539,344,1669,8155,8155,8155,2549,6276,3082,8155, + 3606,8155,3768,6276,8155,156,8155,3062,8155,8155, + 2879,691,8155,4316,8155,540,537,538,539,8155, + 8155,540,537,538,539,4499,8155,2549,8155,8155, + 8155,3941,8155,2038,8155,3062,8155,8155,333,8155, + 8155,3062,2142,35,1136,390,8155,8155,540,537, + 538,539,8155,3479,35,1136,390,3484,35,1136, + 390,2038,8155,3587,8155,8155,6768,2038,3062,8155, + 8155,8155,6768,3390,35,1136,390,2142,35,1136, + 390,2142,35,1136,390,8155,49,8155,8155,8155, + 8155,5238,8155,8155,3047,798,1458,49,8155,8155, + 8155,49,8155,8155,8155,47,8155,1458,8155,3116, + 8155,1458,8155,8155,8155,991,47,49,8155,344, + 1835,49,8155,8155,131,49,1937,1458,798,8155, + 2816,1458,8155,156,8155,1458,2971,8155,188,8155, + 47,4457,8155,8155,47,5498,2486,131,8155,3067, + 967,798,344,8155,1127,2142,35,1136,390,94, + 2142,35,1136,390,8155,96,156,2142,35,1136, + 390,188,8155,344,4457,344,8155,532,2427,35, + 1136,390,4364,8155,3768,2427,35,1136,390,156, + 2427,35,1136,390,188,4316,8155,4457,8155,49, + 8155,8155,8155,8155,49,540,537,538,539,1458, + 190,49,8155,535,1458,8155,8155,8155,47,8155, + 8155,1458,49,47,8155,4790,8155,8155,1196,49, + 47,4996,1458,3004,49,2427,35,1136,390,1458, + 3622,1062,131,4058,1458,8155,3067,131,1159,8155, + 8155,3067,8155,1697,540,537,538,539,8155,131, + 8155,8155,8155,798,8155,8155,4073,8155,131,8155, + 344,8155,3067,8155,3062,344,8155,8155,8155,49, + 131,3768,8155,8155,3067,8155,3768,344,8155,1458, + 8155,8155,4316,8155,8155,4089,344,4316,999,8155, + 3873,156,8155,8155,8155,8155,188,3768,344,4457, + 2886,8155,8155,131,8155,3977,3614,3067,4316,3768, + 8155,8155,8155,8155,8155,8155,8155,8155,8155,8155, + 4316,8155,8155,8155,8155,8155,511,8155,8155,8155, + 8155,344,8155,8155,8155,8155,8155,8155,509,8155, + 8155,8155,3768,8155,8155,8155,8155,8155,8155,8155, + 8155,8155,8155,4316,8155,8155,8155,4271,8155,8155, + 8155,8155,8155,8155,8155,8155,8155,8155,4099,8155, + 8155,536,8155,0,1,229,856,0,503,6086, + 0,1,229,0,39,8795,0,39,8794,636, + 0,39,8170,0,39,8169,0,1,3095,0, + 995,1,0,39,1,8795,0,39,1,8794, + 0,39,1,8170,0,39,1,8169,0,1, + 4343,0,1,731,0,229,219,0,1,976, + 0,1,1000,0,1,1089,0,8389,223,0, + 8388,223,0,976,223,0,1000,223,0,1089, + 223,0,1103,223,0,8494,223,0,8493,223, + 0,8416,223,0,8415,223,0,8414,223,0, + 8413,223,0,8412,223,0,8411,223,0,8410, + 223,0,8409,223,0,608,637,0,8389,224, + 0,8388,224,0,976,224,0,1000,224,0, + 1089,224,0,1103,224,0,8494,224,0,8493, + 224,0,8416,224,0,8415,224,0,8414,224, + 0,8413,224,0,8412,224,0,8411,224,0, + 8410,224,0,8409,224,0,8389,225,0,8388, + 225,0,976,225,0,1000,225,0,1089,225, + 0,1103,225,0,8494,225,0,8493,225,0, + 8416,225,0,8415,225,0,8414,225,0,8413, + 225,0,8412,225,0,8411,225,0,8410,225, + 0,8409,225,0,1089,396,0,1000,396,0, + 976,396,0,284,396,0,8389,226,0,8388, + 226,0,976,226,0,1000,226,0,1089,226, + 0,1103,226,0,8494,226,0,8493,226,0, + 8416,226,0,8415,226,0,8414,226,0,8413, + 226,0,8412,226,0,8411,226,0,8410,226, + 0,8409,226,0,284,289,0,8389,227,0, + 8388,227,0,976,227,0,1000,227,0,1089, + 227,0,1103,227,0,8494,227,0,8493,227, + 0,8416,227,0,8415,227,0,8414,227,0, + 8413,227,0,8412,227,0,8411,227,0,8410, + 227,0,8409,227,0,2033,389,0,39,8794, + 0,8795,48,0,8794,48,0,8170,48,0, + 8169,48,0,8389,590,0,8388,590,0,976, + 590,0,1000,590,0,1089,590,0,1103,590, + 0,8494,590,0,8493,590,0,8416,590,0, + 8415,590,0,8414,590,0,8413,590,0,8412, + 590,0,8411,590,0,8410,590,0,8409,590, + 0,8389,241,0,8388,241,0,976,241,0, + 1000,241,0,1089,241,0,1103,241,0,8494, + 241,0,8493,241,0,8416,241,0,8415,241, + 0,8414,241,0,8413,241,0,8412,241,0, + 8411,241,0,8410,241,0,8409,241,0,8769, + 241,0,8768,241,0,8767,241,0,8428,241, + 0,8427,241,0,8426,241,0,8425,241,0, + 8424,241,0,8423,241,0,8422,241,0,8421, + 241,0,8420,241,0,8419,241,0,8418,241, + 0,8762,241,0,8761,241,0,39,241,8795, + 0,39,241,8794,635,0,39,241,8170,0, + 39,241,8169,0,8193,241,0,1,332,0, + 38,731,0,38,8795,0,38,8794,0,38, + 8170,0,38,8169,0,456,2220,0,442,2314, + 0,2033,29,0,8167,1,0,2643,319,0, + 1089,600,0,1000,600,0,976,600,0,604, + 600,0,604,599,0,8218,75,0,8217,75, + 0,1064,75,0,1085,75,0,1876,75,0, + 1923,75,0,1,602,0,1,446,0,460, + 1921,0,459,2207,0,35,33,0,47,37, + 0,8167,385,0,8166,385,0,1089,602,0, + 1000,602,0,976,602,0,976,634,0,1000, + 634,0,1089,634,0,8775,634,0,503,2648, + 0,8193,1,229,0,39,1,229,0,229, + 418,0,1,2079,0,1,8769,0,1,8768, + 0,1,8767,0,1,8428,0,1,8427,0, + 1,8426,0,1,8425,0,1,8424,0,1, + 8423,0,1,8422,0,1,8421,0,1,8420, + 0,1,8419,0,1,8418,0,1,8762,0, + 1,8761,0,1,3487,0,8795,37,0,8794, + 37,0,8170,37,0,8169,37,0,43,8191, + 0,43,37,0,8163,1,0,3078,91,0, + 32,34,0,39,731,0,1089,332,0,1000, + 332,0,976,332,0,39,241,8794,0,1, + 1405,0,1,1440,0,229,220,0,4927,126, + 0,8389,630,0,8388,630,0,976,630,0, + 1000,630,0,1089,630,0,1103,630,0,8494, + 630,0,8493,630,0,8416,630,0,8415,630, + 0,8414,630,0,8413,630,0,8412,630,0, + 8411,630,0,8410,630,0,8409,630,0,976, + 633,0,1000,633,0,1089,633,0,8775,633, + 0,8165,407,0,8164,407,0,229,417,0, + 1,229,3271,0,8164,229,0,3295,229,0, + 8161,1,0,8160,1,0,237,1683,0,390, + 32,0,389,29,0,1089,447,0,1000,447, + 0,976,447,0,8193,447,0,39,447,0, + 332,447,0,8191,45,0,37,45,0,3782, + 229,0,10,12,0,8193,1,0,39,1, + 0,588,577,0,1,92,0,1103,337,0, + 8494,337,0,8493,337,0,4927,128,0,4927, + 127,0,8,10,12,0,8795,2,37,0, + 8794,2,37,0,8170,2,37,0,8169,2, + 37,0,8795,36,0,8794,36,0,8170,36, + 0,8169,36,0,2680,100,0,1089,597,0, + 1000,597,0,976,597,0,1089,596,0,1000, + 596,0,976,596,0,540,541,0,589,578, + 0,3262,103,0,3023,99,0,1089,95,0, + 1000,95,0,976,95,0,8193,95,0,39, + 95,0,332,95,0,35,73,0,4097,385, + 0,1089,597,598,0,1000,597,598,0,976, + 597,598,0,597,598,0,279,2491,0,8, + 12,0,185,4647,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 char 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,45,46,47,48,49, + 50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,0,68,69, + 70,71,5,73,0,1,76,77,78,79, + 80,81,82,83,84,85,86,0,1,2, + 3,4,5,6,7,8,9,10,11,99, + 100,101,102,103,104,105,106,107,108,109, + 110,111,112,113,114,115,116,117,118,119, + 120,121,122,123,124,125,126,127,128,0, + 0,0,132,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,45,46, + 47,48,49,50,51,52,53,54,55,56, + 57,58,59,60,61,62,63,64,65,66, + 71,68,69,70,0,72,73,74,75,0, + 6,82,79,80,81,0,85,84,0,86, + 87,88,89,90,91,92,0,94,95,96, + 97,98,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,45,46,47, + 48,49,50,51,52,53,54,55,56,57, + 58,59,60,61,62,63,64,65,66,0, + 68,69,70,0,72,73,74,75,99,100, + 84,79,80,81,99,100,84,14,86,87, + 88,89,90,91,92,0,94,95,96,97, + 98,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,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58, + 59,60,61,62,63,64,65,66,0,68, + 69,70,0,72,73,74,75,0,109,110, + 79,80,81,0,0,84,3,86,87,88, + 89,90,91,92,22,94,95,96,97,98, + 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,45,46,47,48,49, + 50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,0,68,69, + 70,87,72,73,74,75,99,100,0,79, + 80,81,114,5,84,0,118,87,88,89, + 90,91,92,0,94,95,96,97,98,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,45,46,47,48,49,50, + 51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,73,68,69,70, + 0,72,73,74,75,0,109,110,79,80, + 81,0,0,84,99,100,87,88,89,90, + 91,92,0,94,95,96,97,98,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,45,46,47,48,49,50,51, + 52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,66,83,68,69,70,0, + 72,73,74,75,99,100,0,79,80,81, + 99,100,84,0,0,87,88,89,90,91, + 92,0,94,95,96,97,98,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,45,46,47,48,49,50,51,52, + 53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,0,68,69,70,0,72, + 73,74,75,5,0,0,79,80,81,5, + 5,84,99,100,87,88,89,90,91,92, + 0,94,95,96,97,98,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,45,46,47,48,49,50,51,52,53, + 54,55,56,57,58,59,60,61,62,63, + 64,65,66,0,68,69,70,0,72,73, + 74,75,82,6,0,79,80,81,0,5, + 84,0,0,87,88,89,90,91,92,0, + 94,95,96,97,98,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, + 45,46,47,48,49,50,51,52,53,54, + 55,56,57,58,59,60,61,62,63,64, + 65,66,0,68,69,70,0,72,73,74, + 75,5,0,0,79,80,81,5,5,84, + 0,0,87,88,89,90,91,92,0,94, + 95,96,97,98,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,45, + 46,47,48,49,50,51,52,53,54,55, + 56,57,58,59,60,61,62,63,64,65, + 66,0,68,69,70,0,72,73,74,75, + 5,0,0,79,80,81,5,0,84,0, + 0,87,88,89,90,91,92,0,94,95, + 96,97,98,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,45,46, + 47,48,49,50,51,52,53,54,55,56, + 57,58,59,60,61,62,63,64,65,66, + 83,68,69,70,0,72,73,74,75,82, + 0,0,79,80,81,0,6,84,0,0, + 87,88,89,90,91,92,0,94,95,96, + 97,98,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,45,46,47, + 48,49,50,51,52,53,54,55,56,57, + 58,59,60,61,62,63,64,65,66,0, + 68,69,70,0,72,73,74,75,0,0, + 0,79,80,81,5,111,84,0,0,87, + 88,89,90,91,92,0,94,95,96,97, + 98,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,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58, + 59,60,61,62,63,64,65,66,0,68, + 69,70,0,72,73,74,75,5,83,101, + 79,80,81,0,0,84,113,0,87,88, + 89,90,91,92,0,94,95,96,97,98, + 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,45,46,47,48,49, + 50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,83,68,69, + 70,0,72,73,74,75,5,0,0,79, + 80,81,0,6,84,0,0,87,88,89, + 90,91,92,0,94,95,96,97,98,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,13,14,37,33,34,35,0,0, + 1,2,3,4,46,7,8,9,134,10, + 11,46,33,34,35,36,37,38,39,40, + 41,42,43,44,45,67,47,48,49,50, + 51,33,34,35,36,37,38,39,40,41, + 42,43,44,45,71,0,1,2,3,4, + 71,6,7,8,9,76,77,78,13,14, + 81,82,83,84,85,86,0,1,2,3, + 4,5,6,7,8,9,10,11,99,100, + 101,102,103,104,105,106,107,108,109,110, + 111,112,113,114,115,116,117,118,119,120, + 121,122,123,124,125,126,127,128,0,0, + 0,132,0,1,2,3,4,5,6,7, + 8,9,10,11,12,13,14,0,0,0, + 0,0,5,0,6,7,8,9,7,8, + 9,13,14,13,14,33,34,35,36,37, + 38,39,40,41,42,43,44,45,0,47, + 48,49,50,51,33,34,35,36,37,38, + 39,40,41,42,43,44,45,67,0,1, + 2,3,4,71,6,7,8,9,76,77, + 78,13,14,81,82,83,84,85,86,0, + 1,2,3,4,5,6,7,8,9,10, + 11,99,100,101,102,103,104,105,106,107, + 108,109,110,111,112,113,114,115,116,117, + 118,119,120,121,122,123,124,125,126,127, + 128,0,113,85,132,0,1,2,3,4, + 5,6,7,8,9,10,11,0,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, + 45,46,47,48,0,50,51,52,53,54, + 55,56,57,58,59,60,61,62,63,64, + 65,66,71,68,69,70,0,0,73,0, + 1,2,3,4,5,6,7,8,9,10, + 11,14,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,45,46,47,48,0,50, + 51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,0,68,69,70, + 22,5,73,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,45,0, + 72,0,49,0,1,2,3,4,5,6, + 7,8,9,10,11,0,13,14,0,66, + 67,68,69,70,6,72,0,74,75,0, + 0,85,0,0,0,82,7,8,9,86, + 7,8,9,13,12,46,93,46,15,16, + 17,18,19,20,21,0,23,24,25,26, + 27,28,29,30,31,0,33,34,35,36, + 37,38,39,40,41,42,43,44,45,76, + 0,49,129,130,131,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, + 45,76,67,0,49,0,1,2,3,4, + 5,6,7,8,9,10,11,67,13,14, + 0,66,67,68,69,70,0,72,0,74, + 75,0,1,2,3,4,0,82,2,135, + 0,86,0,7,8,9,0,5,93,0, + 1,15,16,17,18,19,20,21,12,23, + 0,1,2,3,4,0,6,47,48,33, + 34,35,36,37,38,39,40,41,42,43, + 44,45,33,0,129,130,131,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,45,0,0,0,49,0,1,2, + 3,4,5,6,7,8,9,10,11,103, + 13,14,112,66,67,68,69,70,0,72, + 0,74,75,0,0,0,1,0,34,2, + 7,8,9,86,7,8,9,13,13,0, + 93,0,15,16,17,18,19,20,21,10, + 23,0,0,0,1,2,3,4,0,0, + 33,34,35,36,37,38,39,40,41,42, + 43,44,45,78,0,1,2,3,4,82, + 6,134,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,45,0,105, + 106,49,79,80,76,7,8,9,0,1, + 2,3,4,0,6,7,8,9,66,67, + 68,69,70,102,72,104,74,75,0,0, + 101,33,34,35,36,37,38,39,40,41, + 42,43,44,45,133,93,0,1,2,3, + 4,0,0,1,2,3,4,5,6,7, + 8,9,10,11,0,13,14,0,1,2, + 3,4,5,6,7,8,9,10,11,0, + 13,14,0,0,71,0,134,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,45,0,82,71,49,0,0,111, + 7,8,9,0,1,2,3,4,0,82, + 7,8,9,66,67,68,69,70,71,72, + 12,74,75,78,85,83,33,34,35,36, + 37,38,39,40,41,42,43,44,45,0, + 93,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,45,0,0,81, + 49,0,1,2,3,4,5,6,7,8, + 9,10,11,0,13,14,67,66,67,68, + 69,70,0,72,0,74,75,0,1,2, + 3,4,0,6,7,8,9,86,0,12, + 13,14,0,5,93,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, + 45,78,0,71,49,71,83,5,0,0, + 1,2,3,4,77,6,0,0,2,10, + 11,66,67,68,69,70,0,72,0,74, + 75,15,16,17,18,19,20,21,101,23, + 12,86,0,1,2,3,4,0,93,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,45,78,0,71,49,0, + 1,2,3,4,0,6,7,8,9,67, + 0,0,13,14,86,66,67,68,69,70, + 0,72,12,74,75,0,6,7,8,9, + 5,6,7,8,9,86,0,12,13,14, + 0,133,93,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,45,0, + 0,81,49,0,83,5,7,8,9,6, + 0,76,77,78,0,0,66,0,83,66, + 67,68,69,70,78,72,12,74,75,12, + 0,0,33,34,35,36,37,38,39,40, + 41,42,43,44,45,0,93,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,45,0,77,81,49,67,83,82, + 7,8,9,0,0,0,0,1,2,3, + 4,101,0,66,67,68,69,70,12,72, + 0,74,75,0,12,0,33,34,35,36, + 37,38,39,40,41,42,43,44,45,0, + 93,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,45,81,85,77, + 49,0,1,2,3,4,0,6,7,8, + 9,78,6,78,13,14,83,66,67,68, + 69,70,0,72,0,74,75,114,6,0, + 0,118,119,120,121,122,123,124,125,126, + 127,128,12,37,93,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, + 45,0,0,71,49,0,1,2,3,4, + 5,6,78,0,13,10,11,77,78,0, + 0,66,67,68,69,70,0,72,0,74, + 75,0,1,2,3,4,5,6,7,8, + 9,10,11,0,0,129,130,131,93,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,45,0,76,71,49,0, + 1,2,3,4,5,6,105,106,13,10, + 11,83,0,82,71,66,67,68,69,70, + 76,72,0,74,75,0,1,2,3,4, + 5,6,7,8,9,10,11,0,1,2, + 3,4,93,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,45,0, + 0,0,49,0,1,2,3,4,5,6, + 105,106,12,10,11,12,0,82,0,66, + 67,68,69,70,102,72,104,74,75,0, + 1,2,3,4,33,34,35,0,1,2, + 3,4,5,6,0,0,93,10,11,12, + 13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32, + 71,0,0,36,0,1,2,3,4,76, + 77,0,0,46,47,48,86,50,51,52, + 53,54,55,56,57,58,59,60,61,62, + 63,64,65,0,1,2,3,4,0,6, + 7,8,9,5,0,71,79,80,0,1, + 2,3,4,0,1,2,3,4,0,1, + 2,3,4,5,6,0,0,0,10,11, + 103,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31, + 32,0,1,2,3,4,5,6,7,8, + 9,10,11,12,46,47,48,0,50,51, + 52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,0,1,2,3,4,85, + 6,73,79,80,10,11,71,79,80,0, + 49,83,0,1,2,3,4,5,6,82, + 0,12,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27, + 28,29,30,31,32,0,1,0,36,0, + 1,2,3,4,7,8,9,12,46,47, + 48,67,50,51,52,53,54,55,56,57, + 58,59,60,61,62,63,64,65,0,1, + 2,3,4,5,6,73,77,78,10,11, + 12,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31, + 32,0,0,0,0,103,67,0,1,2, + 3,4,77,0,46,47,48,10,50,51, + 52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,0,1,2,3,4,5, + 6,73,0,133,10,11,33,34,35,81, + 0,1,0,0,86,0,1,2,3,4, + 5,6,12,0,12,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,30,31,32,0,1, + 2,3,4,5,6,0,46,0,10,11, + 12,46,47,48,0,50,51,52,53,54, + 55,56,57,58,59,60,61,62,63,64, + 65,0,1,2,3,4,22,77,73,0, + 1,2,3,4,5,6,81,49,86,10, + 11,78,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31,32,0,1,2,3,4,0,6,0, + 66,67,10,11,5,46,47,48,0,50, + 51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,0,1,2,3,4, + 0,0,73,0,0,10,11,0,79,80, + 0,1,2,3,4,5,6,0,0,12, + 10,11,0,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,0,1,2,3,4,0,82, + 33,34,35,5,76,0,46,47,48,0, + 50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,0,1,2,3, + 4,22,0,73,77,78,82,5,85,79, + 80,0,1,2,3,4,5,6,50,51, + 78,10,11,85,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28, + 29,30,31,32,76,66,67,0,0,129, + 130,131,5,0,0,0,0,46,47,48, + 5,50,51,52,53,54,55,56,57,58, + 59,60,61,62,63,64,65,0,76,0, + 0,0,0,0,73,117,7,8,9,12, + 79,80,0,1,2,3,4,5,6,0, + 132,0,10,11,0,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27, + 28,29,30,31,32,71,49,47,48,0, + 82,76,0,0,5,82,0,83,46,47, + 48,12,50,51,52,53,54,55,56,57, + 58,59,60,61,62,63,64,65,102,0, + 104,107,108,82,82,73,7,8,9,115, + 116,79,80,0,1,2,3,4,5,6, + 47,48,101,10,11,12,13,14,15,16, + 17,18,19,20,21,22,23,24,25,26, + 27,28,29,30,31,32,77,0,0,0, + 0,112,76,0,7,8,9,85,0,46, + 47,48,0,50,51,52,53,54,55,56, + 57,58,59,60,61,62,63,64,65,0, + 0,0,0,0,5,5,73,0,1,2, + 3,4,5,6,81,12,0,10,11,12, + 13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32, + 0,1,2,3,4,0,6,7,8,9, + 82,82,49,46,47,48,0,50,51,52, + 53,54,55,56,57,58,59,60,61,62, + 63,64,65,0,1,2,3,4,5,6, + 102,78,104,10,11,12,13,14,15,16, + 17,18,19,20,21,22,23,24,25,26, + 27,28,29,30,31,32,0,67,0,0, + 103,0,0,1,2,3,4,0,12,46, + 47,48,10,50,51,52,53,54,55,56, + 57,58,59,60,61,62,63,64,65,0, + 1,2,3,4,5,6,0,0,0,10, + 11,5,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31,32,0,0,0,67,103,0,67,67, + 7,8,9,77,12,46,47,48,71,50, + 51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,0,0,1,2,3, + 4,5,6,0,0,76,10,11,5,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,0, + 1,2,3,4,71,6,7,8,9,77, + 76,0,46,47,48,78,50,51,52,53, + 54,55,56,57,58,59,60,61,62,63, + 64,65,0,1,2,3,4,5,6,73, + 0,0,10,11,0,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27, + 28,29,30,31,32,0,67,0,0,1, + 2,3,4,0,0,7,8,9,46,47, + 48,13,50,51,52,53,54,55,56,57, + 58,59,60,61,62,63,64,65,0,1, + 2,3,4,5,6,73,0,0,10,11, + 0,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31, + 32,0,0,0,0,67,5,0,1,2, + 3,4,0,0,46,47,48,5,50,51, + 52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,0,1,2,3,4,5, + 6,0,0,0,10,11,5,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,0,1,2, + 3,4,5,6,67,71,0,10,11,0, + 46,47,48,0,50,51,52,53,54,55, + 56,57,58,59,60,61,62,63,64,65, + 0,1,2,3,4,5,6,0,0,0, + 10,11,5,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,0,0,1,2,3,4,0, + 6,0,0,76,10,11,46,47,48,0, + 50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,0,1,2,3, + 4,5,6,0,0,0,10,11,0,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,0, + 0,67,0,1,2,3,4,0,1,2, + 3,4,46,47,48,0,50,51,52,53, + 54,55,56,57,58,59,60,61,62,63, + 64,65,0,1,2,3,4,5,6,0, + 0,0,10,11,0,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27, + 28,29,30,31,32,0,0,0,0,67, + 5,0,0,0,67,0,0,12,46,47, + 48,0,50,51,52,53,54,55,56,57, + 58,59,60,61,62,63,64,65,0,1, + 2,3,4,5,6,0,0,0,10,11, + 0,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31, + 32,0,1,2,3,4,0,1,2,3, + 4,76,77,0,46,47,48,0,50,51, + 52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,0,1,2,3,4,5, + 6,0,0,0,10,11,0,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,0,67,0, + 0,0,0,67,0,0,5,7,8,9, + 46,47,48,12,50,51,52,53,54,55, + 56,57,58,59,60,61,62,63,64,65, + 0,1,2,3,4,0,6,7,8,9, + 0,0,7,8,9,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,45,0,76,77,78, + 0,0,6,0,83,0,0,1,2,3, + 4,0,6,7,8,9,66,12,68,69, + 70,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,45,0,0,49,0,0,0,0,7, + 8,9,0,1,2,3,4,71,6,7, + 8,9,66,0,68,69,70,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,45,0,0, + 0,0,0,0,0,7,8,9,0,1, + 2,3,4,0,6,7,8,9,66,0, + 68,69,70,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,45,0,0,0,0,0,5, + 0,0,0,0,10,0,6,13,14,12, + 0,71,0,71,66,12,68,69,70,7, + 8,9,0,83,12,83,0,0,85,7, + 8,9,0,7,8,9,0,0,85,12, + 0,47,48,0,50,51,52,107,108,107, + 108,0,49,0,0,115,116,115,116,0, + 0,49,0,0,0,71,7,8,9,0, + 76,71,78,79,80,78,49,83,0,85, + 85,78,0,86,0,7,8,9,0,46, + 78,0,0,99,100,0,102,0,0,105, + 106,107,108,109,110,111,112,113,114,0, + 67,117,0,119,120,121,122,123,124,125, + 126,127,128,0,1,2,3,4,5,6, + 7,8,9,10,11,12,13,14,0,0, + 0,1,2,3,4,5,6,7,8,9, + 10,11,12,13,14,0,33,34,35,36, + 37,38,39,40,41,42,43,44,45,0, + 0,0,49,33,34,35,36,37,38,39, + 40,41,42,43,44,45,0,0,0,49, + 0,0,0,0,71,7,8,9,0,76, + 77,0,1,2,3,4,5,6,7,8, + 9,10,11,12,13,14,76,77,0,1, + 2,3,4,5,6,7,8,9,10,11, + 12,13,14,0,33,34,35,36,37,38, + 39,40,41,42,43,44,45,0,0,0, + 49,33,34,35,36,37,38,39,40,41, + 42,43,44,45,0,0,0,49,0,0, + 1,2,3,4,5,6,12,76,77,10, + 11,12,0,0,0,0,0,0,6,5, + 0,6,0,0,76,77,12,0,12,12, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,77,0,0,0,76,77,78,0,0, + 0,0,83,71,85,0,71,0,0,0, + 76,77,78,77,77,101,0,83,0,0, + 101,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 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 char termCheck[] = TermCheck.termCheck; + public final int termCheck(int index) { return termCheck[index]; } + + public interface TermAction { + public final static char termAction[] = {0, + 8155,7265,7265,7265,7265,7265,7265,7265,7265,7265, + 7265,7265,7265,7265,7265,7265,7265,7265,7265,7265, + 7265,7265,7265,7265,7265,7265,7265,7265,7265,7265, + 7265,7265,7265,7265,7265,7265,7265,7265,7265,7265, + 7265,7265,7265,7265,7265,7265,7265,7265,7265,7265, + 7265,7265,7265,7265,7265,7265,7265,7265,7265,7265, + 7265,7265,7265,7265,7265,7265,7265,8155,7265,7265, + 7265,7265,3159,7265,8155,3902,7265,7265,7265,7265, + 7265,7265,7265,7265,7265,7265,7265,1,7195,7183, + 7187,7191,3095,7180,7214,7208,7211,731,4343,7265, + 7265,7265,7265,7265,7265,7265,7265,7265,7265,7265, + 7265,7265,7265,7265,7265,7265,7265,7265,7265,7265, + 7265,7265,7265,7265,7265,7265,7265,7265,7265,29, + 1,35,7265,8155,7960,7161,7161,7161,7161,7161, + 7154,7161,7161,7161,7161,8009,7161,7161,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,7964,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 2033,1,1,1,39,1985,1,927,8330,121, + 8193,426,1,1,8166,580,2173,1518,386,8162, + 3319,2861,2463,2790,3186,4059,1,3317,900,3297, + 3807,3296,10,8012,8012,8012,8012,8012,8012,8012, + 8012,8012,8012,8012,8012,8012,8012,8012,8012,8012, + 8012,8012,8012,8012,8012,8012,8012,8012,8012,8012, + 8012,8012,8012,8012,8012,8012,8012,8012,8012,8012, + 8012,8012,8012,8012,8012,8012,8012,8012,8012,8012, + 8012,8012,8012,8012,8012,8012,8012,8012,8012,8012, + 8012,8012,8012,8012,8012,8012,8012,8012,8012,129, + 8012,8012,8012,131,8012,8012,8012,8012,5019,5101, + 2126,8012,8012,8012,5019,5101,8012,3812,8012,8012, + 8012,8012,8012,8012,8012,8155,8012,8012,8012,8012, + 8012,8,8042,8042,8042,8042,8042,8042,8042,8042, + 8042,8042,8042,8042,8042,8042,8042,8042,8042,8042, + 8042,8042,8042,8042,8042,8042,8042,8042,8042,8042, + 8042,8042,8042,8042,8042,8042,8042,8042,8042,8042, + 8042,8042,8042,8042,8042,8042,8042,8042,8042,8042, + 8042,8042,8042,8042,8042,8042,8042,8042,8042,8042, + 8042,8042,8042,8042,8042,8042,8042,8042,139,8042, + 8042,8042,303,8042,8042,8042,8042,579,4035,3981, + 8042,8042,8042,8155,8155,8042,680,8042,8042,8042, + 8042,8042,8042,8042,8457,8042,8042,8042,8042,8042, + 8155,7960,7161,7161,7161,7161,7161,7154,7161,7161, + 7161,7161,7967,7161,7161,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,7964, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,130,1,1, + 1,3978,1985,1,927,8330,5019,5101,8155,1, + 1,8166,3272,845,1518,125,1730,3319,2861,2463, + 2790,3186,4059,534,3317,900,3297,3807,3296,8155, + 7960,7161,7161,7161,7161,7161,7154,7161,7161,7161, + 7161,7967,7161,7161,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,7964,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,4104,1,1,1, + 8155,1985,1,927,8330,124,4035,3981,1,1, + 8166,123,8155,1518,5019,5101,3319,2861,2463,2790, + 3186,4059,8155,3317,900,3297,3807,3296,8155,7960, + 7161,7161,7161,7161,7161,7154,7161,7161,7161,7161, + 7967,7161,7161,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,7964,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,6338,1,1,1,8155, + 1985,1,927,8330,5019,5101,8155,1,1,8166, + 5019,5101,1518,122,8155,3319,2861,2463,2790,3186, + 4059,8155,3317,900,3297,3807,3296,8155,7960,7161, + 7161,7161,7161,7161,7154,7161,7161,7161,7161,7967, + 7161,7161,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,7964,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,8155,1,1,1,8155,1985, + 1,927,8330,1792,8155,8155,1,1,8166,1420, + 2643,1518,5019,5101,3319,2861,2463,2790,3186,4059, + 450,3317,900,3297,3807,3296,8155,7960,7161,7161, + 7161,7161,7161,7154,7161,7161,7161,7161,7967,7161, + 7161,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,7964,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,8155,1,1,1,8155,1985,1, + 927,8330,750,3537,8155,1,1,8166,8155,4549, + 1518,8155,8155,3319,2861,2463,2790,3186,4059,8155, + 3317,900,3297,3807,3296,8155,7960,7161,7161,7161, + 7161,7161,7154,7161,7161,7161,7161,7967,7161,7161, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,7964,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,8155,1,1,1,8155,1985,1,927, + 8330,1683,572,559,1,1,8166,2608,3300,1518, + 8155,8155,3319,2861,2463,2790,3186,4059,8155,3317, + 900,3297,3807,3296,8155,7960,7161,7161,7161,7161, + 7161,7154,7161,7161,7161,7161,7967,7161,7161,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,7964,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,8155,1,1,1,91,1985,1,927,8330, + 7857,546,8155,1,1,8166,1416,8155,1518,8155, + 8155,3319,2861,2463,2790,3186,4059,8155,3317,900, + 3297,3807,3296,8155,7960,7161,7161,7161,7161,7161, + 7154,7161,7161,7161,7161,7967,7161,7161,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,7964,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 8669,1,1,1,133,1985,1,927,8330,8558, + 8155,8155,1,1,8166,8155,3553,1518,8155,8155, + 3319,2861,2463,2790,3186,4059,8155,3317,900,3297, + 3807,3296,8155,7960,7161,7161,7161,7161,7161,7154, + 7161,7161,7161,7161,7967,7161,7161,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,7964,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,8155, + 1,1,1,137,1985,1,927,8330,359,237, + 8155,1,1,8166,7976,3549,1518,8155,8155,3319, + 2861,2463,2790,3186,4059,8155,3317,900,3297,3807, + 3296,8155,7960,7161,7161,7161,7161,7161,7154,7161, + 7161,7161,7161,7967,7161,7161,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 7964,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,8155,1, + 1,1,1,1985,1,927,8330,7017,3360,8513, + 1,1,8166,8155,8155,1518,3449,8155,3319,2861, + 2463,2790,3186,4059,8155,3317,900,3297,3807,3296, + 8155,7960,7161,7161,7161,7161,7161,7154,7161,7161, + 7161,7161,7967,7161,7161,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,7964, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,3361,1,1, + 1,8155,1985,1,927,8330,2162,39,8155,1, + 1,8166,8155,8193,1518,571,8155,3319,2861,2463, + 2790,3186,4059,389,3317,900,3297,3807,3296,8155, + 7735,7735,7735,7735,7735,7735,7735,7735,7735,7735, + 7735,7735,7735,7735,3424,8493,8494,1103,224,38, + 7672,7663,7666,7669,782,7280,7274,7277,7153,7660, + 4343,2185,7735,7735,7735,7735,7735,7735,7735,7735, + 7735,7735,7735,7735,7735,6294,7735,7735,7735,7735, + 7735,7289,7286,7283,7307,7295,7313,7292,7304,7271, + 7298,7301,7310,7268,7475,446,7726,7726,7726,7726, + 7735,7726,7726,7726,7726,7735,7735,7735,7726,7726, + 7735,7735,7735,7735,7735,7735,332,7174,7164,7478, + 7171,3095,995,1089,976,1000,731,4343,7735,7735, + 7735,7735,7735,7735,7735,7735,7735,7735,7735,7735, + 7735,7735,7735,7735,7735,7735,7735,7735,7735,7735, + 7735,7735,7735,7735,7735,7735,7735,7735,8155,8155, + 8155,7735,8155,7860,7860,7860,7860,7860,7860,7860, + 7860,7860,7860,7860,7860,7860,7860,8155,39,138, + 8155,225,6894,8155,8193,1089,976,1000,7328,7322, + 7325,332,332,6588,873,7860,7860,7860,7860,7860, + 7860,7860,7860,7860,7860,7860,7860,7860,294,7860, + 7860,7860,7860,7860,7337,7334,7331,7355,7343,7361, + 7340,7352,7319,7346,7349,7358,7316,1318,447,7997, + 7997,7997,7997,7860,7994,7985,7991,7988,7860,7860, + 7860,8000,8000,7860,7860,7860,7860,7860,7860,602, + 7174,7164,7478,7171,3095,995,1089,976,1000,731, + 4343,7860,7860,7860,7860,7860,7860,7860,7860,7860, + 7860,7860,7860,7860,7860,7860,7860,7860,7860,7860, + 7860,7860,7860,7860,7860,7860,7860,7860,7860,7860, + 7860,456,3449,2835,7860,39,7174,7164,7167,7171, + 6702,995,1089,976,1000,5948,4343,8155,5856,5879, + 8420,8418,8426,8422,8423,8421,8424,1055,8425,8761, + 8762,8427,8428,8419,8767,8768,8769,6493,8493,8494, + 1103,8411,8415,8409,8416,8412,8388,8414,8413,8410, + 8389,8174,5829,5806,8155,5925,5902,1584,1529,1753, + 8176,1636,6091,1706,8177,8175,1513,8171,8172,8173, + 5505,8555,7675,3051,8556,8557,8155,132,1895,39, + 7174,7164,7478,7171,6702,995,1089,976,1000,5948, + 4343,3812,5856,5879,8420,8418,8426,8422,8423,8421, + 8424,1055,8425,8761,8762,8427,8428,8419,8767,8768, + 8769,6493,8493,8494,1103,8411,8415,8409,8416,8412, + 8388,8414,8413,8410,8389,8174,5829,5806,303,5925, + 5902,1584,1529,1753,8176,1636,6091,1706,8177,8175, + 1513,8171,8172,8173,5505,8555,312,3051,8556,8557, + 8457,2821,1895,8155,7775,7775,7775,7775,229,7771, + 7161,7161,7161,229,229,7779,229,229,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,8155, + 740,8155,229,346,7174,7164,7478,7171,4991,995, + 1089,976,1000,731,4343,8155,332,332,8155,1, + 7768,1,1,1,2502,5229,8155,2528,8569,299, + 8155,1363,8155,223,185,229,1089,976,1000,418, + 7229,7223,7226,7001,8165,2408,8657,2185,8420,8418, + 8426,8422,8423,8421,8424,321,8425,8761,8762,8427, + 8428,8419,8767,8768,8769,8155,7238,7235,7232,7256, + 7244,7262,7241,7253,7220,7247,7250,7259,7217,1490, + 8155,8164,8592,8593,8594,8155,7775,7775,7775,7775, + 229,7771,7161,7161,7161,229,229,7957,229,229, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1490,6190,8155,229,310,7195,7183,7187,7191, + 3095,7180,7214,7208,7211,731,4343,6234,7657,7657, + 118,1,7768,1,1,1,8155,5229,8155,2528, + 8569,8155,7490,7481,7484,7487,634,229,7765,8152, + 135,417,8155,7762,7756,7759,8155,6917,8657,548, + 8704,8777,8780,8776,8782,8783,8781,8778,8159,8779, + 8155,7174,7164,7478,7171,8155,8193,5475,5445,8493, + 8494,1103,8411,8415,8409,8416,8412,8388,8414,8413, + 8410,8389,8705,8155,8592,8593,8594,8155,7161,7161, + 7161,7161,229,7161,7154,7161,7161,229,229,7205, + 229,229,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,13108,1,1,1,14060,1,13105, + 1,1,1,8155,566,309,229,8155,7195,7183, + 7187,7191,3095,7180,7214,7208,7211,731,4343,8158, + 7657,7657,3512,1,7158,1,1,1,8155,746, + 8155,927,8366,605,115,8155,3778,633,8720,7948, + 1089,976,1000,219,7945,7939,7942,5760,3150,8155, + 8657,8155,8777,8780,8776,8782,8783,8781,8778,2157, + 8779,111,8155,8155,8169,8795,8794,8170,460,1, + 8493,8494,1103,8411,8415,8409,8416,8412,8388,8414, + 8413,8410,8389,3905,8155,7174,7164,7478,7171,2793, + 8193,219,8155,7161,7161,7161,7161,229,7161,7154, + 7161,7161,229,229,229,229,229,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,13108,1, + 1,1,14060,1,13105,1,1,1,226,5737, + 5709,229,5971,1061,7729,7388,7382,7385,289,7424, + 7424,7424,7424,442,284,1089,976,1000,1,7158, + 1,1,1,5994,746,6017,927,8366,134,8155, + 8515,7397,7394,7391,7415,7403,7421,7400,7412,7379, + 7406,7409,7418,7376,4013,8657,8155,8169,8795,8794, + 8170,8155,8155,7195,7183,7187,7191,3095,7180,7214, + 7208,7211,731,4343,29,7723,7723,8155,8095,8095, + 8095,8095,8095,8095,8095,8095,8095,8095,8095,371, + 8095,8095,8155,8155,7678,569,220,8155,7161,7161, + 7161,7161,229,7161,7154,7161,7161,229,229,229, + 229,229,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,13108,1,1,1,14060,1,13105, + 1,1,1,227,2793,7681,229,8155,8155,3549, + 7439,7433,7436,299,8169,8795,8794,8170,8155,8095, + 1089,976,1000,1,7158,1,1,1,1356,746, + 8167,927,8366,847,1749,3390,7448,7445,7442,7466, + 7454,7472,7451,7463,7430,7457,7460,7469,7427,47, + 8657,8155,7161,7161,7161,7161,229,7161,7154,7161, + 7161,229,229,7885,229,229,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,13108,1,1, + 1,14060,1,13105,1,1,1,8155,8155,8166, + 229,8155,7195,7183,7187,7191,3095,7180,7214,7208, + 7211,731,4343,8155,7723,7723,1077,1,7158,1, + 1,1,8155,746,8155,927,8366,1,8018,8018, + 8018,8018,8155,8015,7214,7208,7211,220,8155,364, + 332,332,8155,5343,8657,8155,7161,7161,7161,7161, + 229,7161,7154,7161,7161,229,229,7885,229,229, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,13108,1,1,1,14060,1,13105,1,1, + 1,4653,8155,2770,229,4382,6515,7029,376,8155, + 7174,7164,7478,7171,364,995,8155,517,8775,731, + 4343,1,7158,1,1,1,8155,746,1,927, + 8366,8777,8780,8776,8782,8783,8781,8778,364,8779, + 7854,220,37,7738,7738,7738,7738,8155,8657,8155, + 7161,7161,7161,7161,229,7161,7154,7161,7161,229, + 229,7885,229,229,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,13108,1,1,1,14060, + 1,13105,1,1,1,1173,8155,5267,229,92, + 8024,8024,8024,8024,8155,8024,8024,8024,8024,8191, + 1,8155,8024,8024,8162,1,7158,1,1,1, + 397,746,7684,927,8366,39,390,1089,976,1000, + 3627,8193,1089,976,1000,220,157,346,332,332, + 8155,4013,8657,8155,7161,7161,7161,7161,229,7161, + 7154,7161,7161,229,229,229,229,229,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,13108, + 1,1,1,14060,1,13105,1,1,1,590, + 8155,8166,229,8155,3400,2209,7505,7499,7502,3372, + 1,1490,346,346,1,8155,2411,8155,346,1, + 7158,1,1,1,2505,746,8167,927,8366,8161, + 37,8155,7514,7511,7508,7532,7520,7538,7517,7529, + 7496,7523,7526,7535,7493,8155,8657,8155,7161,7161, + 7161,7161,229,7161,7154,7161,7161,229,229,229, + 229,229,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,13108,1,1,1,14060,1,13105, + 1,1,1,630,8160,8166,229,8191,8612,735, + 7903,7897,7900,139,8155,8155,8155,8169,8795,8794, + 8170,4168,8155,1,7158,1,1,1,8167,746, + 8155,927,8366,8155,8161,451,7912,7909,7906,7930, + 7918,7936,7915,7927,7894,7921,7924,7933,7891,8155, + 8657,8155,7161,7161,7161,7161,229,7161,7154,7161, + 7161,229,229,229,229,229,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,13108,1,1, + 1,14060,1,13105,1,1,1,8166,2416,8160, + 229,95,8119,8119,8119,8119,39,8116,8107,8113, + 8110,4653,8193,852,8122,8122,4096,1,7158,1, + 1,1,398,746,363,927,8366,3272,389,8155, + 8155,1730,2369,2322,2275,2228,2181,2134,2087,2040, + 1989,1942,8161,1464,8657,8155,7161,7161,7161,7161, + 229,7161,7154,7161,7161,229,229,229,229,229, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,13108,1,1,1,14060,1,13105,1,1, + 1,117,8155,2033,229,1,7195,7183,7187,7191, + 7177,7180,3604,8155,5760,7202,7199,8160,1387,8155, + 459,1,7158,1,1,1,8155,746,8155,927, + 8366,1,7195,7183,7187,7191,3095,7180,7214,7208, + 7211,731,4343,8155,349,8592,8593,8594,8657,8155, + 7161,7161,7161,7161,229,7161,7154,7161,7161,229, + 229,229,229,229,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,13108,1,1,1,14060, + 1,13105,1,1,1,116,7732,5535,229,1, + 7195,7183,7187,7191,3095,7180,5737,5709,5760,731, + 4343,8598,114,2793,7012,1,7158,1,1,1, + 1490,746,8155,927,8366,1,7195,7183,7187,7191, + 3095,7180,7214,7208,7211,731,4343,8155,14302,13843, + 14017,14299,8657,8155,7161,7161,7161,7161,229,7161, + 7154,7161,7161,229,229,229,229,229,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,13108, + 1,1,1,14060,1,13105,1,1,1,8155, + 8155,649,229,1,7195,7183,7187,7191,4991,7180, + 5737,5709,8163,731,4343,7970,8155,2793,8155,1, + 7158,1,1,1,5994,746,6017,927,8366,48, + 7490,7481,7484,7487,8493,8494,1103,1,7174,7164, + 7478,7171,6702,995,8155,8155,8657,5948,4343,8159, + 3944,5879,8420,8418,8426,8422,8423,8421,8424,2079, + 8425,8761,8762,8427,8428,8419,8767,8768,8769,3487, + 2033,8155,8155,1608,399,8169,8795,8794,8170,1490, + 7973,8155,8155,8174,5829,5806,8162,5925,5902,1584, + 1529,1753,8176,1636,6091,1706,8177,8175,1513,8171, + 8172,8173,5505,599,7702,7702,7702,7702,8155,604, + 1089,976,1000,2303,369,1356,39,39,8155,14302, + 13843,14017,14299,8155,7490,7481,7484,7487,1,7195, + 7183,7187,7191,6702,7180,8155,8155,1,5948,4343, + 8158,5856,5879,7818,7824,7800,7812,7809,7815,7806, + 7782,7803,7830,7827,7797,7794,7821,7791,7788,7785, + 7833,1,7195,7183,7187,7191,3095,7180,7214,7208, + 7211,731,4343,310,8174,5829,5806,8155,5925,5902, + 1584,1529,1753,8176,1636,6091,1706,8177,8175,1513, + 8171,8172,8173,5505,8155,7174,7164,7478,7171,1796, + 995,1895,5971,1061,7863,4343,3765,39,39,8155, + 310,518,39,7174,7164,7478,7171,6702,995,2, + 523,8161,5948,4343,8159,5783,5879,8420,8418,8426, + 8422,8423,8421,8424,2079,8425,8761,8762,8427,8428, + 8419,8767,8768,8769,3487,8155,2232,314,2604,8155, + 7845,7836,7839,7842,1089,976,1000,8161,8174,5829, + 5806,699,5925,5902,1584,1529,1753,8176,1636,6091, + 1706,8177,8175,1513,8171,8172,8173,5505,39,7174, + 7164,7478,7171,6702,995,1895,8160,1848,5948,4343, + 8128,5856,5879,8420,8418,8426,8422,8423,8421,8424, + 2079,8425,8761,8762,8427,8428,8419,8767,8768,8769, + 3487,8155,8155,8155,8155,8158,8191,8155,8169,8795, + 8794,8170,8160,337,8174,5829,5806,2157,5925,5902, + 1584,1529,1753,8176,1636,6091,1706,8177,8175,1513, + 8171,8172,8173,5505,1,7195,7183,7187,7191,3095, + 7180,1895,8155,4013,731,4343,8033,8030,8027,7744, + 8155,3867,8,8155,8162,39,7174,7164,7478,7171, + 6702,995,8161,286,8149,5948,4343,7741,5856,5879, + 8420,8418,8426,8422,8423,8421,8424,2079,8425,8761, + 8762,8427,8428,8419,8767,8768,8769,3487,1,7195, + 7183,7187,7191,7177,7180,8155,3858,8155,7202,7199, + 8165,8174,5829,5806,1,5925,5902,1584,1529,1753, + 8176,1636,6091,1706,8177,8175,1513,8171,8172,8173, + 5505,293,8169,8795,8794,8170,7879,8160,1895,141, + 7174,7164,7478,7171,6702,995,7744,8164,8149,5948, + 4343,8440,5856,5879,8420,8418,8426,8422,8423,8421, + 8424,2079,8425,8761,8762,8427,8428,8419,8767,8768, + 8769,3487,8155,7174,7164,7478,7171,430,995,8155, + 7882,3148,731,4343,2397,8174,5829,5806,100,5925, + 5902,1584,1529,1753,8176,1636,6091,1706,8177,8175, + 1513,8171,8172,8173,5505,8155,8169,8795,8794,8170, + 441,8155,1895,510,8155,731,4343,8155,39,39, + 1,7174,7164,7478,7171,6702,995,337,508,8161, + 5948,4343,292,5856,5879,8420,8418,8426,8422,8423, + 8421,8424,2079,8425,8761,8762,8427,8428,8419,8767, + 8768,8769,3487,36,8071,8062,8065,8068,75,3974, + 8493,8494,1103,7717,8074,8155,8174,5829,5806,1, + 5925,5902,1584,1529,1753,8176,1636,6091,1706,8177, + 8175,1513,8171,8172,8173,5505,292,1532,1532,1532, + 1532,7879,319,1895,8160,7083,4124,7687,7038,39, + 39,554,7174,7164,7478,7171,6702,995,7708,7705, + 12753,5948,4343,7050,5856,5879,8420,8418,8426,8422, + 8423,8421,8424,2079,8425,8761,8762,8427,8428,8419, + 8767,8768,8769,3487,7720,7882,3148,8155,8155,8592, + 8593,8594,2585,8155,126,348,113,8174,5829,5806, + 3615,5925,5902,1584,1529,1753,8176,1636,6091,1706, + 8177,8175,1513,8171,8172,8173,5505,407,1490,602, + 120,8155,8155,8155,1895,7711,7747,7753,7750,7951, + 39,39,1,7195,7183,7187,7191,6702,7180,136, + 7714,8155,5948,4343,8155,5856,5879,7818,7824,7800, + 7812,7809,7815,7806,7782,7803,7830,7827,7797,7794, + 7821,7791,7788,7785,7833,4959,7954,5475,5445,8155, + 4189,1490,422,119,1168,2652,99,7888,8174,5829, + 5806,8161,5925,5902,1584,1529,1753,8176,1636,6091, + 1706,8177,8175,1513,8171,8172,8173,5505,5994,593, + 6017,4891,4859,4387,2699,1895,1089,976,1000,4827, + 3223,39,39,39,7174,7164,7478,7171,6702,995, + 5475,5445,2981,5948,4343,7741,5856,5879,8420,8418, + 8426,8422,8423,8421,8424,2079,8425,8761,8762,8427, + 8428,8419,8767,8768,8769,3487,8160,594,8155,8155, + 8155,3512,8104,8155,1089,976,1000,2929,112,8174, + 5829,5806,8155,5925,5902,1584,1529,1753,8176,1636, + 6091,1706,8177,8175,1513,8171,8172,8173,5505,8155, + 8155,8155,8155,8155,2491,2915,1895,39,7174,7164, + 7478,7171,6702,995,7744,8165,8155,5948,4343,8159, + 5856,5879,8420,8418,8426,8422,8423,8421,8424,2079, + 8425,8761,8762,8427,8428,8419,8767,8768,8769,3487, + 396,7373,7373,7373,7373,8155,284,7364,7370,7367, + 2887,4317,8164,8174,5829,5806,8155,5925,5902,1584, + 1529,1753,8176,1636,6091,1706,8177,8175,1513,8171, + 8172,8173,5505,39,7174,7164,7478,7171,6702,995, + 5994,3905,6017,5948,4343,8159,5856,5879,8420,8418, + 8426,8422,8423,8421,8424,2079,8425,8761,8762,8427, + 8428,8419,8767,8768,8769,3487,1,284,1,8155, + 8158,1,37,7738,7738,7738,7738,73,161,8174, + 5829,5806,7738,5925,5902,1584,1529,1753,8176,1636, + 6091,1706,8177,8175,1513,8171,8172,8173,5505,39, + 7174,7164,7478,7171,6702,995,8155,8155,8155,5948, + 4343,3732,5856,5879,8420,8418,8426,8422,8423,8421, + 8424,2079,8425,8761,8762,8427,8428,8419,8767,8768, + 8769,3487,1,397,100,727,8158,428,781,2298, + 1089,976,1000,161,163,8174,5829,5806,8125,5925, + 5902,1584,1529,1753,8176,1636,6091,1706,8177,8175, + 1513,8171,8172,8173,5505,8155,39,7174,7164,7478, + 7171,6702,995,103,8155,2556,5948,4343,8101,5856, + 5879,8420,8418,8426,8422,8423,8421,8424,2079,8425, + 8761,8762,8427,8428,8419,8767,8768,8769,3487,600, + 7699,7699,7699,7699,2033,604,7690,7696,7693,163, + 8074,8155,8174,5829,5806,4122,5925,5902,1584,1529, + 1753,8176,1636,6091,1706,8177,8175,1513,8171,8172, + 8173,5505,39,7174,7164,7478,7171,6702,995,1895, + 8155,8155,5948,4343,8155,5856,5879,8420,8418,8426, + 8422,8423,8421,8424,2079,8425,8761,8762,8427,8428, + 8419,8767,8768,8769,3487,8155,604,8155,37,7738, + 7738,7738,7738,8155,8155,1089,976,1000,8174,5829, + 5806,332,5925,5902,1584,1529,1753,8176,1636,6091, + 1706,8177,8175,1513,8171,8172,8173,5505,39,7174, + 7164,7478,7171,4156,995,1895,8155,8155,5948,4343, + 8155,5856,5879,8420,8418,8426,8422,8423,8421,8424, + 2079,8425,8761,8762,8427,8428,8419,8767,8768,8769, + 3487,8155,8155,8155,2,8191,1238,43,7851,7851, + 7851,7851,279,8155,8174,5829,5806,8146,5925,5902, + 1584,1529,1753,8176,1636,6091,1706,8177,8175,1513, + 8171,8172,8173,5505,39,7174,7164,7478,7171,6602, + 995,103,8155,8155,5948,4343,8101,5856,5879,8420, + 8418,8426,8422,8423,8421,8424,2079,8425,8761,8762, + 8427,8428,8419,8767,8768,8769,3487,1,7195,7183, + 7187,7191,4991,7180,7848,37,8155,731,4343,8155, + 8174,5829,5806,8155,5925,5902,1584,1529,1753,8176, + 1636,6091,1706,8177,8175,1513,8171,8172,8173,5505, + 39,7174,7164,7478,7171,6635,995,8155,8155,8155, + 5948,4343,6915,5856,5879,8420,8418,8426,8422,8423, + 8421,8424,2079,8425,8761,8762,8427,8428,8419,8767, + 8768,8769,3487,8155,8155,7174,7164,7478,7171,8155, + 995,8155,8155,1490,7863,4343,8174,5829,5806,8155, + 5925,5902,1584,1529,1753,8176,1636,6091,1706,8177, + 8175,1513,8171,8172,8173,5505,39,7174,7164,7478, + 7171,6672,995,8155,8155,8155,5948,4343,8155,5856, + 5879,8420,8418,8426,8422,8423,8421,8424,2079,8425, + 8761,8762,8427,8428,8419,8767,8768,8769,3487,8155, + 8155,1245,8155,13371,13371,13371,13371,45,8006,8006, + 8006,8006,8174,5829,5806,8155,5925,5902,1584,1529, + 1753,8176,1636,6091,1706,8177,8175,1513,8171,8172, + 8173,5505,39,7174,7164,7478,7171,6702,995,8155, + 8155,8155,5948,4343,8155,5856,5879,8420,8418,8426, + 8422,8423,8421,8424,2079,8425,8761,8762,8427,8428, + 8419,8767,8768,8769,3487,1,8155,8155,8155,8191, + 3627,8155,8155,8155,8003,8155,8155,7970,8174,5829, + 5806,8155,5925,5902,1584,1529,1753,8176,1636,6091, + 1706,8177,8175,1513,8171,8172,8173,5505,39,7174, + 7164,7478,7171,6733,995,8155,8155,8155,5948,4343, + 8155,5856,5879,8420,8418,8426,8422,8423,8421,8424, + 2079,8425,8761,8762,8427,8428,8419,8767,8768,8769, + 3487,37,7738,7738,7738,7738,8155,8058,8046,8050, + 8054,1490,7973,8155,8174,5829,5806,8155,5925,5902, + 1584,1529,1753,8176,1636,6091,1706,8177,8175,1513, + 8171,8172,8173,5505,39,7174,7164,7478,7171,6702, + 995,8155,8155,8155,5948,4343,8155,5856,5879,8420, + 8418,8426,8422,8423,8421,8424,2079,8425,8761,8762, + 8427,8428,8419,8767,8768,8769,3487,8155,2012,8155, + 397,1,8155,8191,8155,8155,3627,1089,976,1000, + 8174,5829,5806,615,5925,5902,1584,1529,1753,8176, + 1636,6091,1706,8177,8175,1513,8171,8172,8173,5505, + 8155,7174,7164,7167,7171,332,8193,1089,976,1000, + 8155,8155,7866,7872,7869,8420,8418,8426,8422,8423, + 8421,8424,791,8425,8761,8762,8427,8428,8419,8767, + 8768,8769,1468,8493,8494,1103,8411,8415,8409,8416, + 8412,8388,8414,8413,8410,8389,48,1490,615,615, + 8155,8155,8795,8155,615,1,241,7650,7637,7641, + 7646,8155,7654,7553,7547,7550,8555,8165,3051,8556, + 8557,7622,7628,7604,7616,7613,7619,7610,791,7607, + 7634,7631,7601,7598,7625,7595,7592,7589,1468,7562, + 7559,7556,7580,7568,7586,7565,7577,7544,7571,7574, + 7583,7541,332,8155,8164,8155,8155,8155,8155,1089, + 976,1000,8155,7174,7164,7478,7171,8795,8193,1089, + 976,1000,8555,8155,3051,8556,8557,8420,8418,8426, + 8422,8423,8421,8424,791,8425,8761,8762,8427,8428, + 8419,8767,8768,8769,1468,8493,8494,1103,8411,8415, + 8409,8416,8412,8388,8414,8413,8410,8389,595,8155, + 128,8155,127,8155,8155,1089,976,1000,241,7650, + 7637,7875,7646,8155,7654,7553,7547,7550,8555,8155, + 3051,8556,8557,7622,7628,7604,7616,7613,7619,7610, + 791,7607,7634,7631,7601,7598,7625,7595,7592,7589, + 1468,7562,7559,7556,7580,7568,7586,7565,7577,7544, + 7571,7574,7583,7541,1,512,8155,8155,8155,1741, + 48,8155,8155,8155,8626,8155,8794,8620,8624,8163, + 8155,4959,8155,4959,8555,8165,3051,8556,8557,8131, + 8139,8135,601,8036,8143,8039,419,1,2173,1089, + 976,1000,8155,1089,976,1000,8155,8155,2746,191, + 8155,8618,8619,1,8649,8650,8627,4891,4859,4891, + 4859,8155,8164,8155,8155,4827,3223,4827,3223,597, + 8155,8143,8155,8155,8155,8629,8077,8083,8080,8155, + 1775,8794,8651,2044,2083,1314,191,8630,596,8628, + 1224,4258,8155,8162,8155,8086,8092,8089,8155,790, + 8143,8155,8155,8640,8639,8155,8652,8155,8155,8621, + 8622,8645,8646,8643,8644,8623,8625,8647,8648,8155, + 790,8653,8155,8633,8634,8635,8631,8632,8641,8642, + 8637,8636,8638,29,389,389,389,389,7982,389, + 389,389,389,389,389,7982,7982,7982,8155,8155, + 32,390,390,390,390,7979,390,390,390,390, + 390,390,7979,7979,7979,8155,389,389,389,389, + 389,389,389,389,389,389,389,389,389,8155, + 8155,8155,7982,390,390,390,390,390,390,390, + 390,390,390,390,390,390,8155,8155,420,7979, + 8155,8155,8155,8155,7681,1089,976,1000,8155,7982, + 7982,577,588,588,588,588,588,588,588,588, + 588,588,588,8021,8021,8021,7979,7979,578,589, + 589,589,589,589,589,589,589,589,589,589, + 8098,8098,8098,8155,588,588,588,588,588,588, + 588,588,588,588,588,588,588,8155,8155,8155, + 8021,589,589,589,589,589,589,589,589,589, + 589,589,589,589,1,8155,8155,8098,8155,1, + 7195,7183,7187,7191,4991,7180,364,588,8021,731, + 4343,368,48,8155,1,48,1,1,8170,3627, + 8155,8169,8155,8155,589,8098,342,8155,530,8161, + 8155,8155,8155,8155,8155,8155,8155,8155,8155,8155, + 8155,8155,8155,8155,8155,8155,8155,8155,8155,8155, + 8155,8155,8155,8155,8155,8155,8155,8155,8155,8155, + 8155,8155,8155,8155,8155,8155,8155,8155,8155,8155, + 8155,364,8155,8155,8155,1490,368,368,8155,8155, + 8155,8155,368,8170,1702,8155,8169,8155,8155,8155, + 1490,342,342,530,8160,364,8155,342,8155,8155, + 368 + }; + }; + 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, + 1471,1,175,1460,63,1181,1512,577,577,577, + 1413,60,784,1470,175,183,1133,1352,649,99, + 1352,1352,1352,75,115,251,115,781,115,677, + 115,115,183,184,115,922,1299,328,1512,175, + 642,115,115,1141,184,115,184,1352,254,523, + 523,1039,523,3,251,397,321,397,767,866, + 178,387,387,175,851,184,1134,771,962,1350, + 514,1411,518,783,572,781,247,183,677,579, + 184,184,573,1223,922,922,922,922,922,922, + 922,922,922,922,1068,644,922,1352,254,254, + 254,254,183,1352,115,662,662,768,767,175, + 175,184,1022,515,579,579,115,1181,384,515, + 115,115,254,115,184,52,1252,534,523,523, + 522,522,251,183,175,921,1088,175,115,184, + 257,851,851,184,1134,669,651,668,1528,189, + 514,1349,515,518,184,396,1354,657,573,251, + 688,184,579,573,184,48,1068,1068,1068,1068, + 515,515,515,882,1551,1551,901,1362,1180,52, + 115,901,1181,1181,1181,1181,184,465,66,66, + 465,921,662,251,183,48,115,115,579,579, + 178,93,384,384,1134,1252,534,522,522,522, + 184,515,921,693,251,725,730,727,734,732, + 741,739,743,742,744,455,745,175,1523,918, + 1295,384,261,758,851,768,768,771,768,310, + 1411,1528,1528,1564,1563,513,693,184,518,453, + 784,254,1132,1051,518,396,658,662,396,662, + 573,688,688,184,1039,1038,184,1223,184,515, + 515,515,515,883,178,1248,1238,1237,666,1307, + 121,121,183,644,922,384,1180,921,515,515, + 1039,1039,1039,1039,573,515,1133,1135,1133,515, + 384,251,673,184,1352,1526,115,1039,1039,115, + 515,1242,1225,1241,1038,254,313,313,693,693, + 522,184,693,1088,922,922,922,922,922,922, + 922,922,922,922,922,922,922,922,922,922, + 922,922,922,922,922,921,921,921,921,921, + 921,921,921,921,921,921,403,922,1295,384, + 333,256,187,515,189,515,464,515,515,52, + 1053,662,662,662,662,184,688,692,776,692, + 901,48,922,882,453,922,453,768,881,1352, + 1352,1352,883,1352,184,972,768,768,184,251, + 1551,515,1250,1252,921,184,52,125,1068,922, + 1181,115,115,515,1352,1352,1352,1352,184,184, + 184,1135,52,839,183,184,465,115,115,841, + 921,1239,1239,1246,178,794,534,523,534,1037, + 1037,693,768,1088,727,727,725,725,725,732, + 732,732,732,732,732,730,730,739,734,734, + 742,741,743,453,453,744,921,921,384,261, + 515,1564,1134,767,922,453,852,860,764,1053, + 662,662,1041,692,693,922,184,872,883,453, + 1025,883,901,901,899,1028,901,768,768,858, + 839,515,1252,573,1134,515,515,115,178,921, + 921,921,921,1352,1352,1223,184,1134,839,515, + 115,696,841,921,921,1250,1225,534,1181,1181, + 692,921,921,384,384,464,768,1053,922,922, + 764,764,1053,1053,673,1218,1042,184,693,883, + 922,883,515,175,901,515,899,1512,1352,515, + 839,1030,515,184,125,115,115,115,921,115, + 515,515,515,515,465,465,1139,115,1223,873, + 1352,115,844,1038,195,200,764,764,1041,184, + 183,183,184,883,858,883,768,1512,921,883, + 880,1030,1030,158,115,465,922,384,515,515, + 1139,794,844,837,195,195,184,184,184,921, + 881,465,768,515,1033,1030,115,515,384,515, + 515,172,1352,313,184,184,883,515,768,1033, + 1033,251,251,174,1253,1037,883,1033,1564,1133, + 1181 + }; + }; + public final static char asb[] = Asb.asb; + public final int asb(int index) { return asb[index]; } + + public interface Asr { + public final static char asr[] = {0, + 134,0,24,25,35,38,15,16,66,33, + 26,68,39,93,40,17,41,42,18,19, + 43,72,44,20,21,36,69,45,22,70, + 23,74,37,27,34,28,5,14,6,49, + 32,29,30,31,75,81,12,13,8,9, + 7,11,10,67,1,4,3,2,0,46, + 67,0,5,34,0,11,6,67,10,1, + 4,3,2,0,53,79,54,55,80,56, + 57,58,59,73,60,61,62,63,64,46, + 52,65,32,22,68,66,69,70,16,28, + 15,20,18,19,21,23,17,26,27,29, + 30,31,24,25,84,82,101,103,86,81, + 132,117,50,51,104,102,47,48,105,106, + 99,100,71,83,107,108,109,110,111,112, + 113,114,118,85,119,120,121,122,123,124, + 125,126,127,128,78,115,116,35,38,33, + 39,40,41,42,43,44,36,45,37,34, + 49,12,77,76,11,5,10,14,13,8, + 9,7,6,4,3,2,1,0,12,78, + 77,1,33,0,12,78,86,49,0,79, + 80,73,50,51,14,13,47,48,10,52, + 57,65,32,5,6,11,62,63,64,46, + 60,55,59,24,25,16,28,15,20,18, + 19,21,23,17,26,27,29,30,31,22, + 54,58,56,53,61,86,1,4,3,2, + 81,12,0,71,0,73,35,33,34,36, + 79,80,103,12,50,51,14,47,48,10, + 52,57,65,32,5,6,11,62,63,64, + 46,60,55,59,24,25,16,28,15,20, + 18,19,21,23,17,26,27,29,30,31, + 22,54,58,56,53,61,4,3,2,1, + 13,0,83,85,78,1,4,3,2,0, + 7,12,81,8,9,85,0,12,82,81, + 84,0,79,80,5,22,54,58,56,53, + 61,16,28,15,20,18,19,21,23,17, + 26,27,29,30,31,24,25,62,63,64, + 46,60,55,59,10,11,6,50,51,14, + 13,47,48,52,57,65,32,73,36,1, + 4,3,2,103,12,0,84,5,83,101, + 85,78,77,49,76,82,12,81,8,9, + 7,0,24,25,15,16,53,79,26,54, + 55,17,18,19,80,11,56,20,21,57, + 58,59,73,60,61,22,23,27,28,62, + 63,64,46,1,4,5,50,51,14,13, + 47,48,10,52,6,32,65,3,2,29, + 30,31,82,0,7,83,82,101,103,86, + 49,8,9,78,24,25,15,16,53,79, + 26,54,55,17,18,19,80,11,56,20, + 21,57,58,59,73,60,61,22,23,27, + 28,62,63,64,4,5,50,51,14,13, + 47,48,10,52,6,32,65,3,2,29, + 30,31,46,1,77,12,0,129,130,131, + 82,86,11,12,5,14,13,10,49,75, + 72,93,74,24,25,35,7,38,15,16, + 66,33,26,68,39,40,17,41,42,18, + 19,43,44,20,21,36,69,45,22,70, + 23,37,27,34,28,32,8,9,29,30, + 31,6,1,4,3,2,67,0,24,25, + 35,7,38,15,16,66,33,53,26,54, + 68,39,40,55,17,41,42,18,19,43, + 44,56,20,21,57,36,58,69,59,73, + 60,45,61,22,70,23,37,27,34,28, + 62,63,64,46,5,50,51,14,13,47, + 48,52,83,6,32,65,8,9,29,30, + 31,11,10,1,4,2,80,79,3,0, + 12,82,78,77,5,0,6,8,9,7, + 71,12,82,81,0,103,49,78,77,12, + 82,0,12,81,78,0,6,12,81,8, + 9,7,1,4,3,2,0,1,4,3, + 2,78,12,86,0,38,39,40,41,42, + 43,11,44,36,73,84,45,37,1,4, + 76,5,132,117,50,51,10,6,81,3, + 2,33,34,35,104,102,13,105,106,47, + 48,100,99,71,107,108,115,116,109,110, + 14,111,112,113,83,77,85,119,120,121, + 122,123,124,125,126,127,128,82,101,103, + 86,114,118,8,9,7,78,49,12,0, + 12,82,77,46,0,12,78,86,85,0, + 6,67,82,12,81,8,9,7,1,4, + 3,2,0,24,25,35,7,38,15,16, + 33,26,68,39,40,17,41,42,18,19, + 43,44,20,21,36,69,45,22,70,23, + 37,27,34,28,1,4,6,32,8,9, + 3,2,29,30,31,101,66,0,133,0, + 35,33,34,73,84,83,82,101,77,81, + 5,7,12,78,49,8,9,85,0,82, + 7,76,8,9,71,12,78,49,85,5, + 0,77,93,129,130,131,67,82,134,133, + 135,86,75,84,74,72,88,90,97,95, + 87,92,94,96,98,81,89,91,49,12, + 68,66,69,70,38,44,36,40,43,42, + 37,39,7,9,8,41,45,35,33,34, + 73,79,80,22,54,58,56,53,61,28, + 26,27,29,30,31,24,25,62,63,64, + 46,60,55,59,10,11,6,5,50,51, + 14,13,47,48,52,57,65,32,1,4, + 3,2,17,15,21,23,16,20,18,19, + 0,24,25,15,16,53,79,26,54,55, + 17,18,19,80,11,56,20,21,57,58, + 59,73,60,61,22,23,27,28,62,63, + 64,46,1,4,5,50,51,47,48,10, + 52,6,32,65,3,2,29,30,31,49, + 12,13,14,0,82,101,0,87,0,35, + 33,34,73,12,101,77,85,78,83,0, + 37,1,4,6,3,2,129,130,131,0, + 49,12,5,11,10,82,14,13,6,1, + 4,3,2,8,9,7,0,35,7,38, + 66,33,68,39,40,41,42,43,44,36, + 69,45,70,37,34,8,9,79,80,73, + 50,51,14,13,47,48,52,57,65,32, + 5,62,63,64,46,60,55,59,24,25, + 16,28,15,20,18,19,21,23,17,26, + 27,29,30,31,54,58,56,53,61,81, + 12,22,6,11,1,4,3,2,10,0, + 80,79,47,48,13,105,106,111,14,112, + 10,52,85,71,83,122,123,119,120,121, + 127,126,128,100,99,124,125,109,110,107, + 108,113,114,50,51,78,102,117,76,5, + 32,22,68,66,69,70,24,25,16,28, + 15,20,18,19,21,23,17,26,27,29, + 30,31,38,44,36,40,43,42,39,33, + 34,35,7,9,8,41,45,1,4,3, + 2,37,6,0,7,14,13,8,9,11, + 10,6,1,4,3,2,5,76,83,85, + 78,12,77,101,0,10,11,5,76,13, + 14,101,24,25,7,38,15,16,66,26, + 68,39,40,17,41,42,18,19,43,44, + 20,21,36,69,45,22,70,23,37,27, + 28,1,4,6,32,8,9,3,2,29, + 30,31,77,12,33,34,35,0,83,78, + 32,22,68,66,69,70,24,25,35,7, + 38,15,16,33,26,39,40,17,41,42, + 18,19,43,11,44,20,21,36,45,23, + 37,27,34,28,4,76,14,13,10,6, + 49,8,9,3,2,29,30,31,1,77, + 12,5,0,6,12,82,81,8,9,7, + 0,79,80,50,51,14,13,47,48,10, + 52,57,65,32,5,6,11,62,63,64, + 60,55,59,24,25,16,28,15,20,18, + 19,21,23,17,26,27,29,30,31,22, + 54,58,56,53,61,76,1,4,3,2, + 46,0,33,26,68,39,17,41,18,19, + 43,44,20,21,69,45,70,23,37,27, + 34,28,66,16,15,32,38,35,25,24, + 29,30,31,12,5,14,13,49,74,93, + 40,36,42,75,71,8,9,7,67,11, + 1,4,10,6,3,2,22,72,0,86, + 24,25,35,38,15,16,66,33,26,68, + 39,17,41,18,19,43,44,20,21,69, + 45,22,70,23,37,27,34,28,32,29, + 30,31,134,75,72,40,36,42,93,74, + 67,12,14,49,10,11,1,4,3,2, + 6,5,8,9,7,13,0,11,10,17, + 15,21,23,16,20,18,19,38,44,36, + 40,43,42,37,39,33,34,35,41,45, + 83,7,1,4,14,13,6,8,9,3, + 2,76,5,77,12,78,0 + }; + }; + public final static char asr[] = Asr.asr; + public final int asr(int index) { return asr[index]; } + + public interface Nasb { + public final static char nasb[] = {0, + 253,13,45,36,34,5,218,13,13,13, + 290,13,25,290,147,251,251,13,13,266, + 13,13,13,13,267,196,267,153,267,153, + 267,13,11,198,267,74,259,45,146,246, + 182,13,13,239,287,13,198,13,13,290, + 290,13,290,195,196,153,13,170,203,32, + 305,110,110,164,153,236,236,155,14,325, + 119,13,45,157,251,170,55,251,170,45, + 198,12,13,13,74,74,74,74,74,74, + 74,74,74,74,229,198,283,13,13,13, + 13,13,251,13,13,45,23,203,13,178, + 164,198,13,325,45,45,58,5,92,325, + 13,13,13,13,12,108,45,45,290,290, + 45,45,196,251,147,141,72,178,170,198, + 86,153,170,270,182,325,13,13,309,63, + 122,13,325,296,158,153,153,13,236,196, + 45,236,38,116,158,172,229,229,229,229, + 325,325,325,16,187,187,1,74,47,108, + 13,231,232,232,232,232,198,103,49,49, + 103,210,23,161,28,311,153,153,38,38, + 305,259,92,92,182,274,274,253,253,45, + 236,325,74,45,196,13,13,13,13,13, + 13,13,13,13,13,74,13,165,153,40, + 19,92,87,13,170,203,203,155,203,13, + 155,267,309,325,13,325,17,198,203,13, + 269,13,36,217,296,153,153,45,170,45, + 116,45,288,12,13,13,158,13,12,325, + 325,325,325,191,305,186,110,110,13,13, + 13,13,11,198,74,92,233,141,325,325, + 13,13,13,13,107,325,181,198,181,325, + 92,161,13,236,13,13,45,13,13,279, + 325,13,244,13,13,13,82,82,17,17, + 253,270,17,45,74,74,74,74,74,74, + 74,74,74,74,74,74,74,74,74,74, + 74,74,74,74,74,74,74,74,74,74, + 74,74,74,74,74,74,112,74,19,92, + 87,80,13,325,63,325,74,325,325,108, + 146,45,45,61,61,158,288,97,13,13, + 38,172,74,205,13,131,13,203,13,13, + 13,13,206,13,288,201,203,203,288,94, + 277,325,303,45,74,198,108,13,229,74, + 232,45,128,325,13,13,13,13,158,12, + 198,138,108,45,28,12,103,153,80,45, + 74,13,13,243,305,274,274,290,45,13, + 13,17,203,72,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,74,74,92,87, + 325,325,182,203,74,13,21,13,153,164, + 61,61,213,97,17,74,288,13,206,13, + 13,206,318,318,272,13,318,203,203,13, + 45,325,274,106,158,325,325,144,279,210, + 210,210,210,13,13,13,287,158,101,325, + 45,80,80,74,74,303,176,274,232,232, + 17,74,74,92,92,74,203,147,74,74, + 170,153,164,13,13,251,84,236,17,206, + 74,206,325,246,1,325,314,45,13,325, + 101,45,325,158,13,45,69,13,210,279, + 325,325,325,325,103,103,139,13,13,99, + 13,80,45,13,67,71,153,170,225,236, + 251,251,12,206,13,206,203,147,210,206, + 99,80,45,13,144,103,74,92,325,325, + 139,233,65,13,67,13,12,236,236,74, + 13,125,203,325,45,80,69,325,92,325, + 325,45,13,82,12,12,206,325,203,65, + 45,94,94,244,322,13,206,65,325,181, + 232 + }; + }; + 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, + 3,13,10,9,106,142,124,111,123,122, + 5,2,0,160,0,4,96,0,197,0, + 215,0,177,0,43,1,0,187,5,186, + 0,208,0,226,0,175,0,50,39,13, + 2,9,10,5,4,0,199,0,5,2, + 9,10,164,0,48,1,0,4,219,0, + 135,0,190,0,149,0,180,0,166,0, + 96,153,48,13,2,9,10,5,0,60, + 0,133,0,217,0,4,5,10,9,2, + 13,72,0,48,64,0,172,0,141,0, + 179,0,4,105,0,2,143,84,0,95, + 0,4,47,143,0,2,84,0,225,32, + 0,32,192,0,4,202,0,4,201,0, + 13,2,9,10,5,228,0,2,144,0, + 4,42,0,168,0,99,71,5,2,9, + 10,4,43,0,159,0,63,2,3,0, + 48,178,0,4,5,10,9,2,71,23, + 0,84,163,162,0,102,101,43,71,74, + 5,10,9,2,0,32,101,102,4,0, + 39,53,47,203,4,48,0,2,63,0, + 4,47,49,0,96,48,53,39,85,4, + 47,0,5,117,216,0,49,5,2,9, + 10,4,176,0,5,117,183,0,48,64, + 47,39,4,50,0,2,73,0,4,50, + 220,0,32,102,101,71,2,9,10,4, + 5,0,120,82,53,4,39,0,2,5, + 111,107,108,109,116,13,76,0,43,126, + 0,47,205,28,4,0,102,101,43,5, + 74,0,5,10,9,13,3,1,0,4, + 39,53,82,92,0,4,53,82,117,51, + 5,0,28,4,5,43,99,0,106,0, + 43,84,0,50,4,204,0,4,50,119, + 0,50,39,4,32,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, + 118,132,131,119,2,31,51,129,130,13, + 84,120,10,9,53,57,73,79,80,91, + 92,105,107,48,49,65,110,112,133,134, + 135,127,59,111,50,94,109,52,69,71, + 75,78,81,88,103,117,11,12,125,7, + 8,14,60,66,72,89,93,95,99,102, + 104,114,115,116,128,58,98,68,96,106, + 19,82,100,108,136,1,123,44,63,83, + 126,30,20,101,33,124,113,54,55,61, + 62,64,70,74,76,77,90,97,17,18, + 32,6,122,4,15,16,21,22,23,24, + 25,26,27,28,45,46,5,29,34,35, + 36,37,38,39,40,41,42,43,85,86, + 87,3,56,137,67,121 + }; + }; + 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, + 143,148,149,0,0,147,0,0,242,248, + 146,0,156,0,145,0,0,155,161,0, + 0,162,257,0,0,0,171,193,172,173, + 174,139,175,176,177,178,179,180,266,181, + 0,164,258,154,182,0,144,142,141,165, + 190,0,0,151,0,0,0,0,0,200, + 0,0,150,185,0,217,0,158,0,214, + 218,138,0,168,188,199,0,0,0,0, + 0,0,0,0,184,0,0,0,0,0, + 0,191,0,0,219,140,159,170,215,221, + 222,223,0,225,0,201,202,203,204,205, + 206,0,0,220,232,265,233,0,187,192, + 194,195,196,197,198,209,211,0,212,0, + 0,224,0,0,0,237,0,239,0,253, + 254,264,0,160,183,208,0,210,0,227, + 230,0,0,0,251,0,252,0,262,267, + 0,152,153,157,0,0,167,169,0,0, + 0,0,0,207,0,216,0,228,229,0, + 0,234,241,0,245,246,247,250,0,259, + 0,261,0,0,268,270,271,0,0,163, + 166,0,186,0,189,0,0,213,226,231, + 0,0,235,236,238,240,0,243,244,249, + 255,256,0,0,260,0,0,263,0,269, + 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[] = { + 284,446,745,764,435,464,696,712,723,734, + 531,1,9,390,404,421,484,154,415,551, + 589,292,753,639,19,132,163,183,192,197, + 202,255,320,477,492,497,107,269,396,410, + 667,139,269,541,497,772,139,342,371,15, + 31,43,75,75,99,103,115,126,173,188, + 216,502,520,524,607,632,661,688,692,782, + 786,790,207,119,207,569,585,598,616,680, + 226,226,354,442,598,703,719,730,741,332, + 650,55,67,96,168,168,281,347,49,168, + 368,387,49,49,168,528,629,636,281,168, + 805,37,49,90,220,506,573,613,623,24, + 168,235,427,506,235,235,454,560,302,454, + 60,60,81,214,81,81,81,81,611,794, + 801,60,60,85,363,794,801,177,579,262, + 214,363,214,376 + }; + }; + public final static char scopePrefix[] = ScopePrefix.scopePrefix; + public final int scopePrefix(int index) { return scopePrefix[index]; } + + public interface ScopeSuffix { + public final static char scopeSuffix[] = { + 130,260,79,79,260,260,79,79,79,79, + 538,7,7,260,35,260,490,160,401,557, + 595,298,179,645,7,137,137,137,171,171, + 35,260,325,482,482,490,112,274,401,211, + 672,150,277,546,759,777,144,336,336,7, + 35,47,79,79,79,79,79,130,79,171, + 35,482,35,35,260,7,79,79,79,79, + 79,7,803,123,211,538,538,538,620,672, + 230,244,358,430,602,707,707,707,707,336, + 654,58,58,79,171,171,79,79,350,352, + 7,79,47,47,352,35,79,7,79,665, + 79,40,52,93,223,509,576,93,626,27, + 684,230,430,675,238,249,471,563,305,457, + 65,73,83,35,512,514,516,518,35,796, + 796,62,70,87,365,798,798,179,581,264, + 327,358,312,378 + }; + }; + public final static char scopeSuffix[] = ScopeSuffix.scopeSuffix; + public final int scopeSuffix(int index) { return scopeSuffix[index]; } + + public interface ScopeLhs { + public final static char scopeLhs[] = { + 51,109,18,18,81,109,18,18,18,18, + 88,95,95,94,52,81,108,79,58,88, + 87,51,18,20,95,3,7,8,183,183, + 182,107,51,108,108,110,24,152,59,52, + 164,156,152,88,18,18,156,103,65,95, + 62,75,116,19,19,189,158,91,186,183, + 182,110,206,56,64,168,19,18,18,18, + 18,18,12,141,182,88,87,87,41,164, + 115,115,74,81,87,18,18,18,18,103, + 20,136,129,17,187,183,208,101,114,67, + 95,66,176,75,110,89,169,168,199,164, + 17,62,75,86,182,110,119,86,22,39, + 164,115,81,164,115,115,109,88,51,109, + 136,129,142,182,125,124,123,122,83,162, + 63,136,129,228,74,162,63,186,119,107, + 51,74,51,65 + }; + }; + public final static char scopeLhs[] = ScopeLhs.scopeLhs; + public final int scopeLhs(int index) { return scopeLhs[index]; } + + public interface ScopeLa { + public final static char scopeLa[] = { + 133,86,77,77,86,86,77,77,77,77, + 77,103,103,86,49,86,1,83,1,77, + 135,81,5,77,103,83,83,83,1,1, + 49,86,81,1,1,1,77,86,1,1, + 6,83,78,49,1,1,83,77,77,103, + 49,1,77,77,77,77,77,133,77,1, + 49,1,49,49,86,103,77,77,77,77, + 77,103,1,77,1,77,77,77,82,6, + 1,1,13,81,77,83,83,83,83,77, + 5,8,8,77,1,1,77,77,5,1, + 103,77,1,1,1,49,77,103,77,10, + 77,1,8,82,1,67,85,82,77,3, + 1,1,81,67,1,1,81,87,84,1, + 1,1,32,49,1,68,66,66,49,6, + 6,1,1,101,14,6,6,5,1,81, + 1,13,1,5 + }; + }; + public final static char scopeLa[] = ScopeLa.scopeLa; + public final int scopeLa(int index) { return scopeLa[index]; } + + public interface ScopeStateSet { + public final static char scopeStateSet[] = { + 386,151,234,234,398,151,234,234,234,234, + 74,87,87,445,386,398,151,398,433,74, + 74,386,234,234,87,158,204,204,21,21, + 410,151,386,151,151,151,318,314,433,386, + 52,45,314,74,234,234,45,91,126,87, + 433,132,151,234,234,60,1,74,49,21, + 410,151,43,433,63,13,234,234,234,234, + 234,234,208,8,410,74,74,74,274,52, + 151,151,370,398,74,234,234,234,234,91, + 234,26,143,234,49,21,100,91,93,126, + 87,126,148,132,151,74,5,13,55,52, + 234,433,132,74,410,151,16,74,239,413, + 52,151,398,52,151,151,151,74,386,151, + 26,143,153,410,153,153,153,153,31,57, + 102,26,143,24,370,57,102,49,16,151, + 386,370,386,126 + }; + }; + 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, + 181,36,332,140,76,0,138,0,181,332, + 140,36,76,0,181,36,76,0,181,332, + 140,76,0,330,140,0,131,267,0,0, + 284,140,175,0,141,0,140,175,0,210, + 141,0,179,235,140,0,214,0,235,140, + 0,258,214,0,272,179,0,258,0,179, + 0,237,258,0,237,0,211,179,0,188, + 258,0,188,0,204,5,32,0,139,0, + 242,0,265,0,234,0,32,170,0,364, + 89,0,30,184,0,200,5,0,204,5, + 65,0,360,5,326,0,359,5,5,8, + 0,139,139,0,358,5,73,0,357,5, + 133,0,139,185,0,140,200,84,0,229, + 0,290,140,71,138,0,20,0,324,140, + 71,67,0,20,58,0,33,145,0,20, + 58,0,0,324,140,71,67,218,0,20, + 191,0,290,140,71,146,0,209,141,0, + 154,0,241,5,323,0,323,0,2,0, + 139,0,290,140,71,145,0,209,141,253, + 0,209,141,37,253,0,209,141,353,37, + 0,142,220,199,141,0,220,199,141,0, + 147,141,0,189,0,349,140,189,0,140, + 189,0,235,141,0,199,348,247,0,149, + 0,0,0,0,348,247,0,150,149,0, + 0,0,0,148,0,0,0,0,150,148, + 0,0,0,0,347,140,184,251,0,140, + 0,251,0,142,0,0,140,0,346,140, + 184,289,0,140,0,0,44,140,0,0, + 178,5,0,140,314,313,140,84,312,189, + 0,313,140,84,312,189,0,228,0,229, + 0,312,189,0,101,0,0,228,0,229, + 0,216,101,0,0,228,0,229,0,313, + 140,312,189,0,228,0,216,0,0,228, + 0,266,140,5,0,139,0,0,0,0, + 0,266,140,5,237,0,250,5,0,221, + 0,159,0,205,199,141,0,10,0,0, + 0,0,205,0,9,0,0,234,76,0, + 266,140,5,202,0,202,0,2,0,0, + 139,0,0,0,0,0,211,5,0,254, + 140,184,46,40,0,209,141,72,74,0, + 209,141,0,142,209,141,311,74,0,209, + 141,311,74,0,209,141,85,137,72,0, + 254,140,184,283,72,0,283,72,0,142, + 0,0,140,0,254,140,184,283,262,72, + 0,283,262,72,0,308,309,140,184,137, + 343,68,0,343,68,0,143,142,0,0, + 0,140,0,308,309,140,184,343,68,0, + 142,0,0,0,140,0,209,141,307,68, + 0,148,0,220,209,141,307,247,0,149, + 0,209,141,307,247,0,220,199,141,22, + 0,199,141,22,0,199,141,0,98,149, + 0,205,0,204,0,203,0,202,0,306, + 140,164,0,306,140,189,0,183,97,0, + 338,185,340,341,5,94,0,139,184,0, + 340,341,5,94,0,141,0,139,184,0, + 183,5,87,221,92,0,139,141,0,221, + 92,0,113,2,144,139,141,0,255,5, + 87,0,211,186,0,33,182,0,186,0, + 188,33,182,0,255,5,98,0,221,168, + 255,5,96,0,67,184,0,255,5,96, + 0,139,184,67,184,0,339,140,184,0, + 183,0,234,89,0,183,118,176,0,30, + 182,0,204,5,0,139,162,0,241,5, + 0,234,76,304,0,183,76,0,204,5, + 335,80,141,0,139,0,0,0,0,335, + 80,141,0,2,158,139,0,0,0,0, + 204,5,57,0,160,0,139,67,199,141, + 0,31,160,0,98,149,31,160,0,233, + 209,141,0,159,31,160,0,204,5,61, + 0,183,5,61,0,183,5,83,204,71, + 53,0,204,71,53,0,20,2,144,139, + 0,183,5,83,204,71,56,0,204,71, + 56,0,183,5,83,204,71,58,0,204, + 71,58,0,183,5,83,204,71,54,0, + 204,71,54,0,241,5,139,220,199,141, + 22,0,139,220,199,141,22,0,149,2, + 0,139,0,241,5,138,279,199,141,22, + 0,279,199,141,22,0,148,2,0,139, + 0,241,5,149,0,241,5,154,0,183, + 76,154,0,299,0,31,0,31,152,0, + 190,0,147,0,183,5,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, + 3609,3009,1237,0,2509,1294,0,1652,1650,1887, + 1659,0,3260,3083,0,6861,7029,6917,6894,0, + 4122,3974,0,2463,0,4287,4258,713,3373,0, + 4712,4647,4582,4517,4452,4387,4317,4189,4124,4059, + 3836,3698,5343,0,4597,4653,4327,0,852,750, + 0,1085,1064,0,1061,0,3553,3537,0,1387, + 1168,0,2677,2065,6733,1518,4154,3267,6702,6672, + 6635,6602,4156,4712,4647,4582,4517,4452,4387,4317, + 4189,4124,4059,3836,3698,0,2346,2111,1872,1726, + 3587,5583,5067,4991,4717,3627,4316,3768,0,837, + 0,6937,6930,6925,6851,7005,6960,6847,6843,6827, + 6955,6823,6948,6812,6621,6276,6379,5082,3572,3205, + 6152,4336,3803,3717,0,3587,4018,4069,5313,5238, + 5357,5067,4457,4287,4258,713,4991,3373,4717,3639, + 3339,3095,3668,3905,3128,859,0,4018,5357,0, + 5328,5182,798,652,3311,3067,0,3622,3004,6937, + 6930,1196,1127,6925,2392,6851,2298,2157,2012,967, + 2486,7005,1631,6960,1557,6847,6843,6827,741,1337, + 6955,6823,5328,6948,1077,6812,6621,886,6276,2882, + 3311,6379,5082,2816,3572,3205,6152,4336,3803,731, + 5182,3717,3067,3320,3116,1155,995,1224,5067,3668, + 4457,4287,4258,3587,713,4991,3373,4717,1245,699, + 4018,4069,1085,1064,5313,3905,3639,5238,3339,3095, + 3128,859,5357,6493,6091,5505,3487,1468,5783,6063, + 6040,3272,3449,3549,3512,4035,3981,3812,5101,5019, + 4959,4927,4891,4859,4827,3223,5760,5737,5709,5475, + 5445,6017,5994,3944,5971,5948,5925,5902,5879,5856, + 5829,5806,1584,2746,3023,798,2981,2929,2887,1848, + 2699,2652,1796,1749,2835,2793,2604,2557,1702,2505, + 2463,1173,1416,1655,2416,2369,2322,2275,2228,2181, + 2134,2087,2040,1989,1942,1608,1895,1534,1104,1013, + 652,944,1490,1314,1262,1363,0,3668,5140,6443, + 798,4287,5391,4982,4258,713,5386,7001,4790,6952, + 6421,5229,6556,5621,3333,6655,4069,5328,6588,873, + 6795,652,5375,3660,6458,3089,5370,3062,3905,3311, + 3639,2952,2529,4636,3339,1820,3577,5182,5209,5197, + 3051,4987,3369,3775,855,3187,859,746,3067,6768, + 3587,6516,6762,6734,6232,5583,3373,4781,6335,5541, + 5313,5238,4589,3128,0,4712,4647,4582,4517,4452, + 4387,4317,4189,4124,4059,3836,3698,6515,5614,5543, + 5499,6398,6338,6294,6234,6190,6130,6086,5096,6547, + 6123,0,7083,6915,7050,7038,7017,6733,1173,1104, + 1013,7012,5535,5267,4382,4549,6702,6672,6635,6602, + 944,4156,4712,4647,4582,4517,4452,4387,4317,4189, + 4124,4059,3836,3698,6515,5614,5543,5499,6398,6338, + 6294,6234,6190,6130,6086,5096,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,334,175,74,7,140,189,218,42,36, + 67,40,72,256,140,72,311,362,330,257, + 8,9,7,35,258,251,259,247,260,68, + 261,138,22,141,278,32,242,312,140,5, + 6,146,145,11,10,138,141,202,67,67, + 67,71,67,46,283,262,137,179,284,265, + 140,207,202,179,211,141,141,5,3,5, + 5,5,184,348,307,179,343,307,179,71, + 141,209,199,190,32,65,57,52,48,47, + 13,14,51,50,5,141,10,61,53,56, + 58,54,22,149,154,84,140,306,284,235, + 179,141,205,211,71,71,186,140,76,5, + 79,80,138,137,209,199,5,71,83,140, + 184,184,283,85,78,5,85,235,179,141, + 76,211,179,209,209,363,46,295,296,5, + 361,1,46,140,199,269,139,138,141,137, + 184,141,140,199,67,6,5,5,5,5, + 204,200,183,184,175,186,140,79,80,199, + 139,5,71,71,71,71,141,5,117,132, + 5,76,140,313,82,199,14,13,140,140, + 140,242,76,76,220,140,140,140,140,184, + 141,178,140,184,289,163,166,165,169,167, + 171,170,173,172,174,73,176,179,199,36, + 140,234,13,176,179,262,142,82,168,5, + 78,242,366,359,326,5,347,141,187,253, + 72,67,74,189,350,139,138,270,179,270, + 209,184,140,209,290,293,220,299,220,204, + 204,204,204,140,140,5,238,237,281,149, + 139,138,22,141,32,76,335,5,204,183, + 204,204,204,204,199,241,67,141,67,241, + 183,313,322,141,323,205,205,290,290,235, + 266,267,164,268,324,67,22,66,254,254, + 140,209,140,184,102,104,48,47,106,105, + 13,116,115,108,107,83,71,99,100,14, + 110,109,112,111,113,128,127,126,125,124, + 123,122,121,120,119,85,118,114,140,181, + 332,333,13,1,78,168,5,46,1,199, + 140,270,270,140,140,220,140,309,137,310, + 78,6,168,339,91,89,1,183,12,98, + 96,94,92,87,95,97,90,88,72,84, + 235,250,140,5,78,141,199,155,5,208, + 5,336,186,178,83,83,83,83,220,279, + 141,209,199,314,78,209,5,13,140,168, + 85,250,211,5,140,78,78,83,71,269, + 269,254,262,140,165,165,163,163,163,167, + 167,167,167,167,167,166,166,170,169,169, + 172,171,173,279,183,174,332,36,181,13, + 1,360,220,349,82,274,211,138,272,179, + 140,140,82,309,308,85,78,12,82,364, + 234,82,5,5,5,221,5,137,183,137, + 200,266,140,199,67,204,204,140,140,5, + 5,5,5,139,138,233,10,67,140,241, + 205,196,140,85,85,140,235,140,85,85, + 346,82,82,181,181,78,142,78,82,85, + 179,272,179,159,352,253,37,141,308,82, + 101,82,255,186,140,255,341,164,87,255, + 140,168,266,220,168,168,301,304,76,210, + 183,183,183,183,5,5,6,137,139,315, + 133,140,248,324,232,78,272,179,78,141, + 37,353,209,168,211,168,340,140,5,168, + 315,140,168,139,140,5,76,183,241,241, + 6,5,140,83,232,12,209,141,141,85, + 221,185,306,183,248,140,301,241,234,101, + 357,186,73,66,209,209,135,338,168,140, + 248,168,168,140,5,269,168,140,358,85, + 78 + }; + }; + public final static char inSymb[] = InSymb.inSymb; + public final int inSymb(int index) { return inSymb[index]; } + + public interface Name { + public final static String name[] = { + "", + "[", + "(", + ".", + ".*", + "->", + "->*", + "++", + "--", + "&", + "*", + "+", + "-", + "~", + "!", + "/", + "%", + ">>", + "<<", + "<", + ">", + "<=", + ">=", + "==", + "!=", + "^", + "|", + "&&", + "||", + "?", + ":", + "::", + "...", + "=", + "*=", + "/=", + "%=", + "+=", + "-=", + ">>=", + "<<=", + "&=", + "^=", + "|=", + ",", + ">?", + "<?", + "$empty", + "_Complex", + "_Imaginary", + "restrict", + "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", + "LeftBrace", + "typeof", + "__alignof__", + "__attribute__", + "__declspec", + "vector", + "pixel", + "_Decimal32", + "_Decimal64", + "_Decimal128", + "ERROR_TOKEN", + "EOF_TOKEN", + "]", + ")", + "}", + ";", + "{", + "identifier_token", + "expression", + "id_expression", + "qualified_or_unqualified_name", + "unqualified_id_name", + "identifier_name", + "template_id_name", + "nested_name_specifier", + "class_or_namespace_name", + "nested_name_specifier_with_tem" + + "plate", + "class_or_namespace_name_with_t" + + "emplate", + "class_name", + "postfix_expression", + "simple_type_specifier", + "pseudo_destructor_name", + "type_id", + "type_name", + "destructor_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", + "for_init_statement", + "function_definition", + "declaration", + "declaration_seq", + "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", + "namespace_name", + "init_declarator_list", + "init_declarator_complete", + "complete_declarator", + "initializer", + "direct_declarator", + "ptr_operator_seq", + "function_declarator", + "basic_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_seq", + "class_head", + "access_specifier_keyword", + "member_declaration", + "member_declarator_list", + "member_declaration_list", + "member_declarator_complete", + "constant_initializer", + "bit_field_declarator", + "base_specifier_list", + "base_specifier", + "conversion_function_id", + "conversion_type_id", + "conversion_declarator", + "mem_initializer_list", + "mem_initializer", + "mem_initializer_name", + "operator_id_name", + "overloadable_operator", + "template_parameter_list", + "template_parameter", + "template_argument_list", + "template_argument", + "handler", + "exception_declaration", + "type_id_list", + "attribute_or_decl_specifier", + "attribute_or_decl_specifier_se" + + "q", + "word", + "extended_decl_modifier_seq", + "extended_decl_modifier", + "extended_asm_param", + "case_range_expression", + "typeof_declaration_specifiers", + "typeof_type_specifier", + "vector_type", + "vector_type_specifier", + "all_specifier_qualifiers", + "all_specifier_qualifier_list", + "array_modifier_type_qualifiers", + "type_qualifier_list" + }; + }; + public final static String name[] = Name.name; + public final String name(int index) { return name[index]; } + + public final static int + ERROR_SYMBOL = 75, + SCOPE_UBOUND = 153, + SCOPE_SIZE = 154, + 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 = 651, + NT_OFFSET = 136, + LA_STATE_OFFSET = 8806, + MAX_LA = 2147483647, + NUM_RULES = 651, + NUM_NONTERMINALS = 234, + NUM_SYMBOLS = 370, + SEGMENT_SIZE = 8192, + START_STATE = 5096, + IDENTIFIER_SYMBOL = 0, + EOFT_SYMBOL = 134, + EOLT_SYMBOL = 134, + ACCEPT_ACTION = 7153, + ERROR_ACTION = 8155; + + 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/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParsersym.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParsersym.java new file mode 100644 index 00000000000..16f4bc701c5 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParsersym.java @@ -0,0 +1,296 @@ +/******************************************************************************* +* Copyright (c) 2006, 2009 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.lrparser.xlc.cpp; + +public interface XlcCPPParsersym { + public final static int + TK__Complex = 24, + TK__Imaginary = 25, + TK_restrict = 35, + TK_asm = 7, + TK_auto = 38, + TK_bool = 15, + TK_break = 88, + TK_case = 89, + TK_catch = 133, + TK_char = 16, + TK_class = 66, + TK_const = 33, + TK_const_cast = 53, + TK_continue = 90, + TK_default = 91, + TK_delete = 79, + TK_do = 92, + TK_double = 26, + TK_dynamic_cast = 54, + TK_else = 135, + TK_enum = 68, + TK_explicit = 39, + TK_export = 93, + TK_extern = 40, + TK_false = 55, + TK_float = 17, + TK_for = 94, + TK_friend = 41, + TK_goto = 95, + TK_if = 96, + TK_inline = 42, + TK_int = 18, + TK_long = 19, + TK_mutable = 43, + TK_namespace = 72, + TK_new = 80, + TK_operator = 11, + TK_private = 129, + TK_protected = 130, + TK_public = 131, + TK_register = 44, + TK_reinterpret_cast = 56, + TK_return = 97, + TK_short = 20, + TK_signed = 21, + TK_sizeof = 57, + TK_static = 36, + TK_static_cast = 58, + TK_struct = 69, + TK_switch = 98, + TK_template = 67, + TK_this = 59, + TK_throw = 73, + TK_try = 84, + TK_true = 60, + TK_typedef = 45, + TK_typeid = 61, + TK_typename = 22, + TK_union = 70, + TK_unsigned = 23, + TK_using = 74, + TK_virtual = 37, + TK_void = 27, + TK_volatile = 34, + TK_wchar_t = 28, + TK_while = 87, + TK_integer = 62, + TK_floating = 63, + TK_charconst = 64, + TK_stringlit = 46, + TK_identifier = 1, + TK_Completion = 4, + TK_EndOfCompletion = 12, + TK_Invalid = 136, + TK_LeftBracket = 76, + TK_LeftParen = 5, + TK_Dot = 132, + TK_DotStar = 104, + TK_Arrow = 117, + TK_ArrowStar = 102, + TK_PlusPlus = 50, + TK_MinusMinus = 51, + TK_And = 14, + TK_Star = 13, + TK_Plus = 47, + TK_Minus = 48, + TK_Tilde = 10, + TK_Bang = 52, + TK_Slash = 105, + TK_Percent = 106, + TK_RightShift = 99, + TK_LeftShift = 100, + TK_LT = 71, + TK_GT = 83, + TK_LE = 107, + TK_GE = 108, + TK_EQ = 109, + TK_NE = 110, + TK_Caret = 111, + TK_Or = 112, + TK_AndAnd = 113, + TK_OrOr = 114, + TK_Question = 118, + TK_Colon = 82, + TK_ColonColon = 6, + TK_DotDotDot = 101, + TK_Assign = 85, + TK_StarAssign = 119, + TK_SlashAssign = 120, + TK_PercentAssign = 121, + TK_PlusAssign = 122, + TK_MinusAssign = 123, + TK_RightShiftAssign = 124, + TK_LeftShiftAssign = 125, + TK_AndAssign = 126, + TK_CaretAssign = 127, + TK_OrAssign = 128, + TK_Comma = 78, + TK_RightBracket = 103, + TK_RightParen = 77, + TK_RightBrace = 86, + TK_SemiColon = 49, + TK_LeftBrace = 81, + TK_typeof = 32, + TK___alignof__ = 65, + TK___attribute__ = 8, + TK___declspec = 9, + TK_MAX = 115, + TK_MIN = 116, + TK_vector = 3, + TK_pixel = 2, + TK__Decimal32 = 29, + TK__Decimal64 = 30, + TK__Decimal128 = 31, + TK_ERROR_TOKEN = 75, + TK_EOF_TOKEN = 134; + + public final static String orderedTerminalSymbols[] = { + "", + "identifier", + "pixel", + "vector", + "Completion", + "LeftParen", + "ColonColon", + "asm", + "__attribute__", + "__declspec", + "Tilde", + "operator", + "EndOfCompletion", + "Star", + "And", + "bool", + "char", + "float", + "int", + "long", + "short", + "signed", + "typename", + "unsigned", + "_Complex", + "_Imaginary", + "double", + "void", + "wchar_t", + "_Decimal32", + "_Decimal64", + "_Decimal128", + "typeof", + "const", + "volatile", + "restrict", + "static", + "virtual", + "auto", + "explicit", + "extern", + "friend", + "inline", + "mutable", + "register", + "typedef", + "stringlit", + "Plus", + "Minus", + "SemiColon", + "PlusPlus", + "MinusMinus", + "Bang", + "const_cast", + "dynamic_cast", + "false", + "reinterpret_cast", + "sizeof", + "static_cast", + "this", + "true", + "typeid", + "integer", + "floating", + "charconst", + "__alignof__", + "class", + "template", + "enum", + "struct", + "union", + "LT", + "namespace", + "throw", + "using", + "ERROR_TOKEN", + "LeftBracket", + "RightParen", + "Comma", + "delete", + "new", + "LeftBrace", + "Colon", + "GT", + "try", + "Assign", + "RightBrace", + "while", + "break", + "case", + "continue", + "default", + "do", + "export", + "for", + "goto", + "if", + "return", + "switch", + "RightShift", + "LeftShift", + "DotDotDot", + "ArrowStar", + "RightBracket", + "DotStar", + "Slash", + "Percent", + "LE", + "GE", + "EQ", + "NE", + "Caret", + "Or", + "AndAnd", + "OrOr", + "MAX", + "MIN", + "Arrow", + "Question", + "StarAssign", + "SlashAssign", + "PercentAssign", + "PlusAssign", + "MinusAssign", + "RightShiftAssign", + "LeftShiftAssign", + "AndAssign", + "CaretAssign", + "OrAssign", + "private", + "protected", + "public", + "Dot", + "catch", + "EOF_TOKEN", + "else", + "Invalid" + }; + + public final static boolean isValidForParser = true; +} diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/plugin.properties b/xlc/org.eclipse.cdt.core.lrparser.xlc/plugin.properties new file mode 100644 index 00000000000..fdc39be2de2 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/plugin.properties @@ -0,0 +1,20 @@ +############################################################################### +# Copyright (c) 2009 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 +############################################################################### + +Bundle-Name.0 = XLCParser Plug-in +Bundle-Vendor.0 = Eclipse CDT +Bundle-Name.1 = XLC Parser Plug-in + +# built-in languages +language.name.c=XL C +language.name.cpp=XL C++ + +preferences.page.title=XL C/C++ Language Options
\ No newline at end of file diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/plugin.xml b/xlc/org.eclipse.cdt.core.lrparser.xlc/plugin.xml new file mode 100644 index 00000000000..bb1943e9d28 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/plugin.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?eclipse version="3.2"?> +<plugin> + <extension point="org.eclipse.cdt.core.language"> + <language + class="org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage" + id="c" + name="%language.name.c"> + </language> + + <language + class="org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage" + id="cpp" + name="%language.name.cpp"> + </language> + </extension> + <extension + point="org.eclipse.core.runtime.preferences"> + <initializer + class="org.eclipse.cdt.core.lrparser.xlc.preferences.PreferenceInitializer"> + </initializer> + </extension> + <extension + point="org.eclipse.ui.preferencePages"> + <page + category="org.eclipse.cdt.ui.preferences.CPluginPreferencePage" + class="org.eclipse.cdt.internal.core.lrparser.xlc.ui.preferences.XlcLanguageOptionsPreferencePage" + id="org.eclipse.cdt.core.lrparser.xlc.ui.XlcLanguagePreferencePage" + name="%preferences.page.title"> + </page> + </extension> + <extension + point="org.eclipse.ui.propertyPages"> + <page + category="org.eclipse.cdt.ui.newui.Page_head_general" + class="org.eclipse.cdt.internal.core.lrparser.xlc.ui.preferences.XlcLanguageOptionsPreferencePage" + id="org.eclipse.cdt.core.lrparser.xlc.ui.XlcLanguagePropertyPage" + name="%preferences.page.title"> + <enabledWhen> + <adapt + type="org.eclipse.core.resources.IProject"> + <test + property="org.eclipse.core.resources.projectNature" + value="org.eclipse.cdt.core.cnature"> + </test> + </adapt> + </enabledWhen> + </page> + </extension> +</plugin> diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/PrefCheckbox.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/PrefCheckbox.java new file mode 100644 index 00000000000..71bd4b3bbb9 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/PrefCheckbox.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.internal.core.lrparser.xlc.ui.preferences; + +import org.eclipse.cdt.core.lrparser.xlc.preferences.XlcLanguagePreferences; +import org.eclipse.cdt.core.lrparser.xlc.preferences.XlcPref; +import org.eclipse.cdt.utils.ui.controls.ControlFactory; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; + + +/** + * A simple wrapper for a checkbox. + * + */ +class PrefCheckbox { + + private final XlcPref key; + private final Button button; + + PrefCheckbox(Composite parent, XlcPref prefKey, String label) { + button = ControlFactory.createCheckBox(parent, label); + key = prefKey; + } + + public XlcPref getKey() { + return key; + } + + public void setSelection(boolean selection) { + button.setSelection(selection); + } + + public boolean getSelection() { + return button.getSelection(); + } + + public void setDefault() { + setSelection(Boolean.valueOf(XlcLanguagePreferences.getDefaultPreference(key))); + } +}
\ No newline at end of file diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/PreferenceMessages.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/PreferenceMessages.java new file mode 100644 index 00000000000..144b5aece2e --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/PreferenceMessages.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.internal.core.lrparser.xlc.ui.preferences; + +import java.lang.reflect.Field; + +import org.eclipse.osgi.util.NLS; + +public class PreferenceMessages extends NLS { + + private static final String BUNDLE_NAME = "org.eclipse.cdt.internal.core.lrparser.xlc.ui.preferences.PreferenceMessages"; //$NON-NLS-1$ + + private PreferenceMessages() {} + + static { + initializeMessages(BUNDLE_NAME, PreferenceMessages.class); + } + + public static final String PREFIX = "XlcLanguageOptionsPreferencePage_"; + + + public static String getMessage(String suffix) { + try { + Field field = PreferenceMessages.class.getDeclaredField(PREFIX + suffix); + return (String)field.get(null); + + } catch (NoSuchFieldException e) { + return null; + } catch (IllegalAccessException e) { + return null; + } + } + + + public static String + XlcLanguageOptionsPreferencePage_link, + XlcLanguageOptionsPreferencePage_group, + + XlcLanguageOptionsPreferencePage_SUPPORT_VECTOR_TYPES, + XlcLanguageOptionsPreferencePage_SUPPORT_DECIMAL_FLOATING_POINT_TYPES, + XlcLanguageOptionsPreferencePage_SUPPORT_COMPLEX_IN_CPP, + XlcLanguageOptionsPreferencePage_SUPPORT_RESTRICT_IN_CPP; + +} + diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/PreferenceMessages.properties b/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/PreferenceMessages.properties new file mode 100644 index 00000000000..27ad05e6cc6 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/PreferenceMessages.properties @@ -0,0 +1,19 @@ +############################################################################### +# Copyright (c) 2009 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 +############################################################################### + +XlcLanguageOptionsPreferencePage_link=These settings are project-specific. The settings listed here override <a href="org.eclipse.cdt.core.lrparser.xlc.ui.XlcLanguagePreferencePage">workspace-wide</a> language settings. +XlcLanguageOptionsPreferencePage_group=Support For XL C/C++ Language Extensions + +XlcLanguageOptionsPreferencePage_SUPPORT_VECTOR_TYPES=Allow vector type declarations +XlcLanguageOptionsPreferencePage_SUPPORT_DECIMAL_FLOATING_POINT_TYPES=Allow decimal floating-point types (_Decimal32, _Decimal64, _Decimal128) +XlcLanguageOptionsPreferencePage_SUPPORT_COMPLEX_IN_CPP=Allow complex type in C++ (_Complex) +XlcLanguageOptionsPreferencePage_SUPPORT_RESTRICT_IN_CPP=Allow 'restrict' keyword in C++ (restrict, __restrict, __restrict__) + diff --git a/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/XlcLanguageOptionsPreferencePage.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/XlcLanguageOptionsPreferencePage.java new file mode 100644 index 00000000000..cdd645c863c --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/ui/org/eclipse/cdt/internal/core/lrparser/xlc/ui/preferences/XlcLanguageOptionsPreferencePage.java @@ -0,0 +1,127 @@ +/******************************************************************************* + * Copyright (c) 2009 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 + *******************************************************************************/ +package org.eclipse.cdt.internal.core.lrparser.xlc.ui.preferences; + + + +import org.eclipse.cdt.core.lrparser.xlc.preferences.XlcLanguagePreferences; +import org.eclipse.cdt.core.lrparser.xlc.preferences.XlcPref; +import org.eclipse.cdt.utils.ui.controls.ControlFactory; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Link; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PreferencesUtil; + + +/** + * TODO trigger reindex? + * + */ +public class XlcLanguageOptionsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, IWorkbenchPropertyPage { + + private IAdaptable element; + private PrefCheckbox[] checkboxes; + + + private void initializeCheckboxes(Composite group) { + XlcPref[] prefs = XlcPref.values(); + int n = prefs.length; + checkboxes = new PrefCheckbox[n]; + IProject project = getProject(); // null for preference page + + for(int i = 0; i < n; i++) { + String message = PreferenceMessages.getMessage(prefs[i].toString()); + checkboxes[i] = new PrefCheckbox(group, prefs[i], message); + String preference = XlcLanguagePreferences.get(prefs[i], project); + checkboxes[i].setSelection(Boolean.valueOf(preference)); + } + } + + + @Override + protected Control createContents(Composite parent) { + Composite page = ControlFactory.createComposite(parent, 1); + + if(isPropertyPage()) { + Link link = new Link(page, SWT.NONE); + link.setText(PreferenceMessages.XlcLanguageOptionsPreferencePage_link); + link.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event event) { + PreferencesUtil.createPreferenceDialogOn(getShell(), event.text, null, null).open(); + } + }); + } + + Composite group = ControlFactory.createGroup(page, PreferenceMessages.XlcLanguageOptionsPreferencePage_group, 1); + initializeCheckboxes(group); + + return page; + } + + + @Override + protected void performDefaults() { + for(PrefCheckbox button : checkboxes) { + button.setDefault(); + } + super.performDefaults(); + } + + @Override + public boolean performOk() { + IProject project = getProject(); + for(PrefCheckbox button : checkboxes) { + setPreference(button.getKey(), button.getSelection(), project); + } + return true; + } + + + private static void setPreference(XlcPref key, boolean val, IProject project) { + String s = String.valueOf(val); + if(project != null) + XlcLanguagePreferences.setProjectPreference(key, s, project); + else + XlcLanguagePreferences.setWorkspacePreference(key, s); + } + + + + private IProject getProject() { + return isPropertyPage() ? (IProject)element.getAdapter(IProject.class) : null; + } + + public IAdaptable getElement() { + return element; + } + + public void setElement(IAdaptable element) { + this.element = element; + } + + public boolean isPropertyPage() { + return element != null; + } + + public void init(IWorkbench workbench) { + // TODO Auto-generated method stub + } + +} |