diff options
author | Mike Kucera | 2009-04-17 18:52:09 +0000 |
---|---|---|
committer | Mike Kucera | 2009-04-17 18:52:09 +0000 |
commit | cb8fe367dd2c4ffeda055c5d5ba1ad16f2640903 (patch) | |
tree | 46b97d413bfc5e849988c92d7489fe2790755392 /xlc | |
parent | e8477ef98a4319989eea988aa1184d9e47f0b7ac (diff) | |
download | org.eclipse.cdt-cb8fe367dd2c4ffeda055c5d5ba1ad16f2640903.tar.gz org.eclipse.cdt-cb8fe367dd2c4ffeda055c5d5ba1ad16f2640903.tar.xz org.eclipse.cdt-cb8fe367dd2c4ffeda055c5d5ba1ad16f2640903.zip |
[272745] initial commit of XLC parser extensions
Diffstat (limited to 'xlc')
41 files changed, 11695 insertions, 0 deletions
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/.project b/xlc/org.eclipse.cdt.core.lrparser.xlc/.project new file mode 100644 index 00000000000..3bfc968624b --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/.project @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.cdt.core.lrparser.xlc</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/.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..5b222b5e394 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/META-INF/MANIFEST.MF @@ -0,0 +1,22 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Xlc +Bundle-SymbolicName: org.eclipse.cdt.core.lrparser.xlc;singleton:=true +Bundle-Version: 1.0.0 +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Require-Bundle: org.eclipse.cdt.core;bundle-version="5.1.0", + org.eclipse.cdt.core.lrparser;bundle-version="5.1.0", + org.eclipse.core.runtime;bundle-version="3.5.0", + org.eclipse.core.resources;bundle-version="3.5.0", + org.eclipse.cdt.ui;bundle-version="5.1.0", + org.eclipse.ui;bundle-version="3.5.0" +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 +Bundle-ActivationPolicy: lazy +Bundle-Activator: org.eclipse.cdt.core.lrparser.xlc.activator.XlcParserPlugin 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..0b4c9ed7933 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/build.properties @@ -0,0 +1,16 @@ +############################################################################### +# 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/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml 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..9e57880a5f5 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcCPPParser.g @@ -0,0 +1,60 @@ +----------------------------------------------------------------------------------- +-- 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 + +$Start + translation_unit +$End + +$Rules + +block_declaration + ::= vector_declaration + + +identifier_token + ::= 'vector' + | 'pixel' + + +specifier_qualifier + ::= 'typedef' + /. $Build consumeToken(); $EndBuild ./ + +$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..d1bc86b3702 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/grammar/xlc/XlcGrammarExtensions.g @@ -0,0 +1,82 @@ +----------------------------------------------------------------------------------- +-- 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 + +$End + + + + + +$Rules + +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..5d65102ad2c --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCLanguage.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; + +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.model.ICLanguageKeywords; +import org.eclipse.cdt.core.parser.IScanner; +import org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParser; + +/** + * + * @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) { + boolean supportVectors = XlcCPPLanguage.supportVectors(properties); + return new XlcCParser(scanner, new XlcCTokenMap(supportVectors), getBuiltinBindingsProvider(), index, properties); + } + + public String getId() { + return ID; + } + + @Override + protected IScannerExtensionConfiguration getScannerExtensionConfiguration() { + return XlcScannerExtensionConfiguration.getInstance(); + } + + + @SuppressWarnings("unchecked") + @Override + public Object getAdapter(Class adapter) { + if(ICLanguageKeywords.class.equals(adapter)) + return XlcKeywords.C; + + return super.getAdapter(adapter); + } + +}
\ 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..bcc89021a0b --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPLanguage.java @@ -0,0 +1,85 @@ +/******************************************************************************* + * 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.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.XlcPreferenceKeys; +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; + } + + public static boolean supportVectors(Map<String,String> properties) { + String path = properties.get(LRParserProperties.TRANSLATION_UNIT_PATH); + System.out.println("path: " + path); + IFile[] file = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(new Path(path)); + + IProject project = null; + if(file != null && file.length > 0) { + project = file[0].getProject(); + } + + return Boolean.valueOf(XlcLanguagePreferences.getPreference(XlcPreferenceKeys.KEY_SUPPORT_VECTOR_TYPES, project)); + } + + + @Override + protected IParser<IASTTranslationUnit> getParser(IScanner scanner, IIndex index, Map<String,String> properties) { + boolean supportVectors = supportVectors(properties); + XlcCPPParser parser = new XlcCPPParser(scanner, new XlcCPPTokenMap(supportVectors), getBuiltinBindingsProvider(), index, properties); + return parser; + } + + public String getId() { + return ID; + } + + @Override + protected IScannerExtensionConfiguration getScannerExtensionConfiguration() { + return XlcScannerExtensionConfiguration.getInstance(); + } + + + @SuppressWarnings("unchecked") + @Override + public Object getAdapter(Class adapter) { + if(ICLanguageKeywords.class.equals(adapter)) + return XlcKeywords.CPP; + + return super.getAdapter(adapter); + } + +}
\ No newline at end of file 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..e718e2168fa --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCPPTokenMap.java @@ -0,0 +1,202 @@ +/******************************************************************************* + * 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 boolean supportVectors; + + public XlcCPPTokenMap(boolean supportVectors) { + this.supportVectors = supportVectors; + } + + + public int getEOFTokenKind() { + return TK_EOF_TOKEN; + } + + public int getEOCTokenKind() { + return TK_EndOfCompletion; + } + + public int mapKind(IToken token) { + + switch(token.getType()) { + case tIDENTIFIER : + if(supportVectors) { + Integer keywordKind = XlcKeywords.CPP.getTokenKind(token.getCharImage()); + return keywordKind == null ? TK_identifier : keywordKind; + } + else { + return TK_identifier; + } + + 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__Complex : return TK__Complex; + 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/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..859ca68c780 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcCTokenMap.java @@ -0,0 +1,170 @@ +/******************************************************************************* + * 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 boolean supportVectors; + + public XlcCTokenMap(boolean supportVectors) { + this.supportVectors = supportVectors; + } + + + public int getEOFTokenKind() { + return TK_EOF_TOKEN; + } + + public int getEOCTokenKind() { + return TK_EndOfCompletion; + } + + public int mapKind(IToken token) { + + switch(token.getType()) { + case tIDENTIFIER : + if(supportVectors) { + Integer keywordKind = XlcKeywords.C.getTokenKind(token.getCharImage()); + return keywordKind == null ? TK_identifier : keywordKind; + } + else { + return TK_identifier; + } + + 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..bc0c8d7aec8 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcKeywords.java @@ -0,0 +1,82 @@ +/******************************************************************************* + * 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.parser.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 C = new XlcKeywords(ParserLanguage.C); + static { + C.map.put("vector".toCharArray(), XlcCParsersym.TK_vector); + C.map.put("__vector".toCharArray(), XlcCParsersym.TK_vector); + C.map.put("pixel".toCharArray(), XlcCParsersym.TK_pixel); + C.map.put("__pixel".toCharArray(), XlcCParsersym.TK_pixel); + C.map.put("bool".toCharArray(), XlcCParsersym.TK_bool); + } + + public static final XlcKeywords CPP = new XlcKeywords(ParserLanguage.CPP); + static { + CPP.map.put("vector".toCharArray(), XlcCPPParsersym.TK_vector); + CPP.map.put("__vector".toCharArray(), XlcCPPParsersym.TK_vector); + CPP.map.put("pixel".toCharArray(), XlcCPPParsersym.TK_pixel); + CPP.map.put("__pixel".toCharArray(), XlcCPPParsersym.TK_pixel); + // bool is already a C++ keyword + } + + + private final CharArrayMap<Integer> map = new CharArrayMap<Integer>(); + private final ParserLanguage language; + private String[] allKeywords = null; + + private XlcKeywords(ParserLanguage language) { + super(language, XlcScannerExtensionConfiguration.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, XlcScannerExtensionConfiguration.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/XlcScannerExtensionConfiguration.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcScannerExtensionConfiguration.java new file mode 100644 index 00000000000..cc4ab63b2c7 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/XlcScannerExtensionConfiguration.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.lrparser.xlc; + +import org.eclipse.cdt.core.dom.parser.c.GCCScannerExtensionConfiguration; + +public class XlcScannerExtensionConfiguration extends GCCScannerExtensionConfiguration { + + private static XlcScannerExtensionConfiguration instance; + + + private XlcScannerExtensionConfiguration() {} + + public static synchronized XlcScannerExtensionConfiguration getInstance() { + if(instance == null) + instance = new XlcScannerExtensionConfiguration(); + return instance; + } + + @Override + public boolean supportUTFLiterals() { + return true; + } + +} 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..160c8ca5126 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/action/XlcCPPBuildASTParserAction.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * 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.ITokenStream; +import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack; +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.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; + + + public XlcCPPBuildASTParserAction(ITokenStream parser, + ScopedStack<Object> astStack, IXlcCPPNodeFactory nodeFactory, + ICPPSecondaryParserFactory 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() { + IXlcCPPASTVectorTypeSpecifier declSpec = nodeFactory.newVectorTypeSpecifier(); + + for(Object specifier : astStack.closeScope()) { + if(specifier instanceof IToken) { + switch(((IToken)specifier).getKind()) { + case XlcCPPParsersym.TK_pixel : + declSpec.setPixel(true); + continue; + case XlcCPPParsersym.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/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..fa9019c6766 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCNodeFactory.java @@ -0,0 +1,18 @@ +/******************************************************************************* + * 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.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/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..2ff763266d6 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPASTVectorTypeSpecifier.java @@ -0,0 +1,21 @@ +/*************************************************import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier; +ration 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..63e7608af26 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/ast/IXlcCPPNodeFactory.java @@ -0,0 +1,19 @@ +/*************************************************import org.eclipse.cdt.core.dom.ast.cpp.ICPPNodeFactory; +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.ICPPNodeFactory; + +public interface IXlcCPPNodeFactory extends ICPPNodeFactory { + + public IXlcCPPASTVectorTypeSpecifier newVectorTypeSpecifier(); + +} 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..92e1862bfb4 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/XlcLanguagePreferences.java @@ -0,0 +1,108 @@ +/******************************************************************************* + * 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"; + + + public static void initializeDefaultPreferences() { + Preferences prefs = getDefaultPreferences(); + prefs.putBoolean(XlcPreferenceKeys.KEY_SUPPORT_VECTOR_TYPES, true); + } + + public static void setProjectPreference(String key, String value, IProject project) { + getProjectPreferences(project).put(key, value); + } + + + public static void setWorkspacePreference(String key, String value) { + getWorkspacePreferences().put(key, value); + } + + + public static String getProjectPreference(String key, IProject project) { + return getProjectPreferences(project).get(key, null); + } + + + public static String getWorkspacePreference(String key) { + return getWorkspacePreferences().get(key, null); + } + + public static String getDefaultPreference(String key) { + return getDefaultPreferences().get(key, 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 getPreference(String key, IProject project) { + Preferences[] prefs; + if(project == null) { + prefs = new Preferences[] { + getWorkspacePreferences(), + getDefaultPreferences() + }; + } + else { + prefs = new Preferences[] { + getProjectPreferences(project), + getWorkspacePreferences(), + getDefaultPreferences() + }; + } + + return Platform.getPreferencesService().get(key, null, prefs); + } + + + + 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/XlcPreferenceKeys.java b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/XlcPreferenceKeys.java new file mode 100644 index 00000000000..c2654d16728 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/core/lrparser/xlc/preferences/XlcPreferenceKeys.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.lrparser.xlc.preferences; + + +public final class XlcPreferenceKeys { + + private XlcPreferenceKeys() {} + + /** + * Type: boolean + * Default: false + */ + public static final String KEY_SUPPORT_VECTOR_TYPES = "vectorTypes"; +} + 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..7e431e52067 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCASTVectorTypeSpecifier.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * 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; + +public class XlcCASTVectorTypeSpecifier extends CASTSimpleDeclSpecifier implements IXlcCASTVectorTypeSpecifier { + + private boolean isPixel; + private boolean isBool; + + public XlcCASTVectorTypeSpecifier() { + super(); + } + + @Override + public XlcCASTVectorTypeSpecifier copy() { + XlcCASTVectorTypeSpecifier copy = new XlcCASTVectorTypeSpecifier(); + copySimpleDeclSpec(copy); + copy.isPixel = isPixel; + copy.isBool = isBool; + return copy; + } + + 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..50323385030 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCNodeFactory.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.internal.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCASTVectorTypeSpecifier; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCNodeFactory; +import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory; + +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/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..b95d68664f7 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPASTVectorTypeSpecifier.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.internal.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPASTVectorTypeSpecifier; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleDeclSpecifier; + +public class XlcCPPASTVectorTypeSpecifier extends CPPASTSimpleDeclSpecifier implements IXlcCPPASTVectorTypeSpecifier { + + private boolean isPixel; + + public XlcCPPASTVectorTypeSpecifier() { + super(); + } + + @Override + public XlcCPPASTVectorTypeSpecifier copy() { + XlcCPPASTVectorTypeSpecifier copy = new XlcCPPASTVectorTypeSpecifier(); + copySimpleDeclSpec(copy); + copy.isPixel = isPixel; + return copy; + } + + 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..ff8600e9fd9 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/ast/XlcCPPNodeFactory.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.internal.core.lrparser.xlc.ast; + +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPASTVectorTypeSpecifier; +import org.eclipse.cdt.core.lrparser.xlc.ast.IXlcCPPNodeFactory; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory; + +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(); + } +} 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..544b7d7b53c --- /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.internal.core.dom.parser.c.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(false); 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 388: type_id ::= vector_type + // + case 388: { action. consumeTypeId(false); break; + } + + // + // Rule 389: type_id ::= vector_type abstract_declarator + // + case 389: { action. consumeTypeId(true); break; + } + + // + // Rule 390: vector_declaration ::= vector_type <openscope-ast> init_declarator_list ; + // + case 390: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 391: vector_type ::= <openscope-ast> no_type_declaration_specifiers_opt vector vector_type_specifier all_specifier_qualifier_list_opt + // + case 391: { action. consumeVectorTypeSpecifier(); break; + } + + // + // Rule 392: vector_type_specifier ::= vector_type_specifier_token + // + case 392: { action. consumeToken(); break; + } + + // + // Rule 414: declarator_id_name ::= pixel + // + case 414: { action. consumeIdentifierName(); break; + } + + // + // Rule 415: declarator_id_name ::= vector + // + case 415: { action. consumeIdentifierName(); break; + } + + // + // Rule 416: declarator_id_name ::= bool + // + case 416: { 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..36c9361808b --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParserprs.java @@ -0,0 +1,2163 @@ +/******************************************************************************* +* 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 + }; + }; + 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,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,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,344,1766,362, + 17,21,18,1050,1243,45,370,315,316,317, + 1260,1293,1274,1359,1323,381,1443,1435,1500,1474, + 1526,75,1854,323,2615,92,1511,2140,135,213, + 2462,20,323,17,21,18,1050,366,2251,20, + 231,17,21,18,1050,1243,45,137,134,136, + 160,1260,1293,1274,1359,1323,659,1443,1435,1500, + 1474,1526,75,532,139,166,281,1854,498,2657, + 1335,143,146,149,152,1058,2570,20,363,17, + 21,18,1050,43,40,231,1517,636,2227,2466, + 2885,2900,2914,282,2947,1552,459,498,1933,179, + 2792,417,507,465,1517,3203,1762,370,315,316, + 317,568,319,315,316,317,519,254,213,334, + 578,2489,20,158,17,21,18,1050,355,135, + 213,1045,763,224,232,254,213,721,224,229, + 218,714,221,223,322,1730,2069,179,137,134, + 136,160,1409,323,1730,370,315,316,317,2029, + 1072,319,315,316,317,139,166,1607,1519,2091, + 392,1335,143,146,149,152,1058,135,213,363, + 619,345,1317,1033,187,1055,1727,1149,310,2227, + 2466,2885,2900,2914,415,2947,137,134,136,160, + 1337,488,1190,507,3423,956,1295,38,947,2173, + 111,87,321,139,166,96,823,312,1149,1335, + 143,146,149,152,1058,335,284,363,1459,1812, + 95,97,98,99,100,2137,179,2227,2466,2885, + 2900,2914,88,2947,370,315,316,317,765,1994, + 1466,507,1033,31,714,2570,20,716,17,21, + 18,1050,43,45,435,313,135,213,1260,1293, + 1274,1359,1323,294,1443,1980,2381,20,830,17, + 21,18,1050,1243,45,137,134,136,160,1260, + 1293,1274,1359,1323,949,1443,1435,1500,1474,1526, + 75,438,139,166,281,28,720,1552,1708,143, + 146,149,152,1058,2570,20,363,17,21,18, + 1050,43,39,1607,1356,1831,2227,2466,2885,2900, + 2914,282,2947,1552,651,20,830,17,21,18, + 1050,1243,45,739,1993,417,659,1260,1293,1274, + 1359,1323,228,1443,1435,1500,1474,1526,75,227, + 25,287,281,333,2670,20,1397,17,21,18, + 1050,1243,45,617,1406,1316,655,1260,1293,1274, + 1359,1323,180,1443,1435,1500,1474,1526,75,282, + 1609,1552,1236,288,1854,1295,2889,1098,127,1033, + 31,2408,20,983,17,21,18,1050,1243,45, + 1408,2045,278,1617,1260,1293,1274,1359,1323,289, + 1443,1435,1500,1474,1526,75,209,2570,20,281, + 17,21,18,1050,43,45,824,48,810,1838, + 1260,1293,1274,1359,1323,824,1443,1435,1500,1997, + 1072,290,1415,260,105,1307,282,655,1552,2435, + 20,390,17,21,18,1050,1243,45,1517,336, + 128,346,1260,1293,1274,1359,1323,342,1443,1435, + 1500,1474,1526,75,197,1908,386,281,921,431, + 20,506,17,21,18,1050,1243,45,1006,254, + 213,1607,1260,1293,1274,1359,1323,24,1443,1435, + 1500,1474,1526,75,282,1442,1552,1037,2770,20, + 852,17,21,18,1050,1243,45,208,1727,417, + 1793,1260,1293,1274,1359,1323,1616,1443,1435,1500, + 1474,1526,75,239,291,38,331,3264,225,2030, + 551,293,111,87,872,193,1373,96,1033,186, + 204,821,383,925,1415,3319,1,1727,417,627, + 1459,109,95,97,98,99,100,731,20,966, + 17,21,18,1050,43,36,1946,1125,110,369, + 410,111,87,1033,188,1373,96,721,224,229, + 218,714,221,223,1356,1831,1793,387,627,1459, + 109,95,97,98,99,100,107,515,1905,263, + 1149,274,1033,1539,341,314,176,110,369,410, + 2927,246,267,1158,1131,272,1481,986,530,958, + 38,329,2623,38,90,744,387,318,315,316, + 317,264,775,2570,20,108,17,21,18,1050, + 43,45,1084,1609,2109,572,1260,1293,1274,1359, + 1323,241,1443,1435,1500,1474,1526,94,276,1727, + 417,2570,20,348,17,21,18,1050,43,45, + 38,28,587,1552,1260,1293,1274,1359,1323,261, + 1443,1435,1978,111,87,1212,209,1373,96,2516, + 20,1102,17,21,18,1050,353,1825,1083,1838, + 627,1459,109,95,97,98,99,100,515,2570, + 20,1283,17,21,18,1050,1243,45,814,110, + 369,410,1260,1293,1274,1359,1323,1695,1443,1435, + 1500,1474,1526,75,1793,1415,1596,92,387,2543, + 20,1666,17,21,18,1050,41,107,446,275, + 540,20,360,17,21,18,1050,1243,45,617, + 124,1149,22,1260,1293,1274,1359,1323,1220,1443, + 1435,1500,1474,1526,75,1656,276,759,1394,3203, + 139,1727,417,1824,125,88,319,315,316,317, + 614,28,1486,1552,2570,20,515,17,21,18, + 1050,43,45,1039,240,111,87,1260,1873,1373, + 96,721,224,229,218,714,221,223,1762,1787, + 404,566,627,1459,109,95,97,98,99,100, + 28,1607,1552,3409,47,1165,1718,832,617,106, + 2214,110,369,410,318,315,316,317,1278,311, + 243,2770,20,520,17,21,18,1050,1243,45, + 387,627,1712,127,1260,1293,1274,1359,1323,108, + 1443,1435,1500,1474,1526,75,759,1757,3207,331, + 308,369,410,738,1793,318,315,316,317,1512, + 181,28,28,1552,1552,2001,179,1852,319,315, + 316,317,670,1217,370,315,316,317,255,213, + 721,224,918,218,714,221,905,2570,20,567, + 17,21,18,1050,43,45,135,213,255,213, + 1260,1874,3404,617,1013,2078,2570,20,1793,17, + 21,18,1050,43,45,138,134,136,160,1260, + 1293,1274,1359,1323,515,1961,19,1517,127,155, + 857,1415,140,166,515,38,865,1024,1006,144, + 147,150,153,1058,330,1955,364,2570,20,517, + 17,21,18,1050,1243,45,123,50,254,213, + 1260,1293,1274,1359,1323,960,1443,1435,1500,1474, + 1526,75,617,1214,2272,86,255,213,242,2570, + 20,965,17,21,18,1050,1243,45,244,1415, + 1033,1831,1260,1293,1274,1359,1323,195,1443,1435, + 1500,1474,1526,75,1012,2570,20,85,17,21, + 18,1050,1243,45,112,1547,1415,524,1260,1293, + 1274,1359,1323,1317,1443,1435,1500,1474,1526,75, + 980,2570,20,84,17,21,18,1050,1243,45, + 38,126,696,1787,1260,1293,1274,1359,1323,1147, + 1443,1435,1500,1474,1526,75,765,2570,20,83, + 17,21,18,1050,1243,45,38,1848,3343,1415, + 1260,1293,1274,1359,1323,963,1443,1435,1500,1474, + 1526,75,1274,2570,20,82,17,21,18,1050, + 1243,45,210,338,122,283,1260,1293,1274,1359, + 1323,1793,1443,1435,1500,1474,1526,75,2895,2570, + 20,81,17,21,18,1050,1243,45,1791,230, + 888,1415,1260,1293,1274,1359,1323,1793,1443,1435, + 1500,1474,1526,75,1365,2570,20,80,17,21, + 18,1050,1243,45,515,1056,3437,1698,1260,1293, + 1274,1359,1323,1793,1443,1435,1500,1474,1526,75, + 1099,2570,20,79,17,21,18,1050,1243,45, + 1162,1176,1033,296,1260,1293,1274,1359,1323,1793, + 1443,1435,1500,1474,1526,75,1253,2570,20,78, + 17,21,18,1050,1243,45,1607,1215,245,1415, + 1260,1293,1274,1359,1323,1793,1443,1435,1500,1474, + 1526,75,1275,2570,20,77,17,21,18,1050, + 1243,45,1793,2261,3438,1793,1260,1293,1274,1359, + 1323,2048,1443,1435,1500,1474,1526,75,2137,179, + 1276,76,1217,23,1607,1714,375,370,315,316, + 317,319,315,316,317,205,194,391,2570,20, + 1278,17,21,18,1050,1243,45,1793,1415,135, + 213,1260,1293,1274,1359,1323,1465,1443,1435,1500, + 1474,1526,75,1033,298,351,93,1001,138,134, + 136,160,1308,3449,2570,20,2278,17,21,18, + 1050,43,45,1427,1415,140,166,1260,1293,1274, + 1359,1977,144,147,150,153,1058,2570,20,364, + 17,21,18,1050,1243,45,1040,1164,70,118, + 1260,1293,1274,1359,1323,1338,1443,1435,1500,1474, + 1526,75,1192,2570,20,1404,17,21,18,1050, + 1243,45,515,234,1355,730,1260,1293,1274,1359, + 1323,1104,1443,1435,1500,1474,1526,75,1637,2570, + 20,1614,17,21,18,1050,43,45,1793,38, + 295,1149,1260,1293,1274,1359,1323,2343,1443,1435, + 1500,1474,1526,94,2570,20,320,17,21,18, + 1050,43,45,970,1218,88,297,1260,1293,1274, + 1359,1323,1148,1443,1435,1500,1474,1526,94,650, + 1722,2570,20,798,17,21,18,1050,1243,45, + 515,857,185,362,1260,1293,1274,1359,1323,1793, + 1443,1435,1500,1474,1526,75,1353,2570,20,359, + 17,21,18,1050,1243,45,1482,340,212,1956, + 1260,1293,1274,1359,1323,2018,1443,1435,1500,1474, + 1526,75,2021,2570,20,74,17,21,18,1050, + 43,45,1793,38,385,1149,1260,1293,1274,1359, + 1323,1405,1443,1435,1500,1474,1526,94,2570,20, + 339,17,21,18,1050,43,45,981,1635,88, + 1403,1260,1293,1274,1359,1323,2038,1443,1435,1500, + 1474,1526,94,1731,1790,2570,20,1697,17,21, + 18,1050,43,45,1793,1213,1523,202,1260,1293, + 1274,1359,1323,1793,1443,1435,1500,1474,1526,94, + 2570,20,273,17,21,18,1050,43,45,1792, + 1535,352,1796,1260,1293,1274,1359,1323,1793,1443, + 1435,1500,1474,1526,94,1850,1323,2570,20,3774, + 17,21,18,1050,43,45,2670,3774,3774,203, + 1260,1293,1274,1359,1323,1549,1443,1435,1500,1474, + 1526,94,3774,3774,319,315,316,317,759,3774, + 3342,3774,3774,3774,1822,3774,1793,318,315,316, + 317,2624,2597,20,3774,17,21,18,1050,34, + 370,315,316,317,2703,1217,1083,1793,417,1548, + 3774,1900,721,224,918,218,714,221,223,393, + 1793,3774,135,213,3774,2730,3774,325,318,315, + 316,317,88,3774,3404,197,1174,3774,279,1378, + 1664,137,134,136,160,38,2065,1149,2834,318, + 315,316,317,721,224,229,219,714,221,223, + 1151,155,857,3774,2960,3774,3220,3265,865,1793, + 3774,88,1324,759,3774,3203,1793,274,2086,3774, + 3774,517,318,315,316,317,3774,1277,269,1158, + 1131,272,1716,3774,280,3774,3774,402,392,3774, + 1217,318,315,316,317,3774,3774,721,224,229, + 218,714,221,223,759,3774,3203,404,3774,2065, + 3774,3774,1793,318,315,316,317,2186,1793,3404, + 3774,3774,3774,1485,3774,3774,370,315,316,317, + 1774,1217,1793,3774,391,2406,2769,3774,721,224, + 229,218,714,221,223,3774,155,857,135,213, + 2796,2316,20,856,17,21,18,1050,43,44, + 3404,1746,465,3774,3203,3774,3774,142,134,136, + 160,318,315,316,317,2570,20,3774,17,21, + 18,1050,43,38,141,166,3774,155,857,523, + 38,3774,1149,3774,865,3774,721,224,229,218, + 714,221,223,759,3774,3203,28,2014,1552,2575, + 3774,3774,318,315,316,317,88,630,2029,3203, + 987,3774,518,2107,3774,277,318,315,316,317, + 1217,3774,1285,3774,2680,3774,3774,721,224,229, + 218,714,221,223,523,305,3774,3774,3774,793, + 277,721,224,229,218,714,221,223,1985,3404, + 1149,3774,627,3417,3774,274,721,224,229,218, + 714,221,223,2029,3774,198,267,1158,1131,272, + 3774,304,369,410,88,3774,156,857,950,3774, + 274,116,3774,3774,1701,2004,2697,3774,3774,3774, + 309,267,1158,1131,272,370,315,316,317,2570, + 20,3774,17,21,18,1050,43,45,3417,3774, + 2004,3774,1889,769,3774,3774,3774,135,213,3774, + 199,3774,318,315,316,317,3774,3774,302,303, + 1669,3774,3774,769,3774,3774,137,134,136,160, + 2065,3774,318,315,316,317,2797,721,224,229, + 219,714,221,223,1151,370,315,316,317,2960, + 2065,3774,3774,3774,3774,3774,3774,721,224,1604, + 219,714,221,1578,1151,1603,3774,135,213,769, + 912,3774,518,3774,319,315,316,317,318,315, + 316,317,402,392,3774,3774,145,134,136,160, + 3774,1185,1727,1149,3774,305,2065,3774,3774,793, + 3774,3774,405,721,224,1604,219,714,221,223, + 1151,3774,627,3774,3774,3774,111,87,1246,1727, + 1149,96,731,20,3774,17,21,18,1050,43, + 36,304,369,410,1459,104,95,97,98,99, + 100,3774,3774,111,87,1464,3774,655,96,3774, + 309,38,3774,1149,318,315,316,317,3774,3774, + 3774,1459,102,95,97,98,99,100,3774,3774, + 3774,769,2065,3774,983,3774,247,88,3774,3774, + 318,315,316,317,2222,1141,1046,655,301,303, + 1376,1727,1149,1116,3774,655,3774,419,2065,3774, + 1437,1727,1149,3774,3774,763,224,233,3774,3774, + 2872,3774,1151,2330,983,111,87,3774,3774,3774, + 96,3774,197,3774,259,111,87,390,3774,655, + 96,2120,1757,1459,361,95,97,98,99,100, + 1567,1727,1149,1459,103,95,97,98,99,100, + 1469,3774,655,1442,3774,3774,983,3774,3774,318, + 315,316,317,3774,259,111,87,3774,3774,3774, + 96,1571,1757,1628,1727,1149,3774,2065,3774,983, + 3774,3774,3774,1459,119,95,97,98,99,100, + 3774,1046,3774,192,3774,3774,3774,3774,111,87, + 1689,1727,1149,96,743,875,259,3774,1750,1727, + 1149,3774,3774,1571,1757,2119,1459,115,95,97, + 98,99,100,3774,3774,111,87,3774,3774,259, + 96,3774,3774,111,87,3774,2120,1757,96,1811, + 1727,1149,3774,1459,2046,95,97,98,99,100, + 3774,1459,114,95,97,98,99,100,3774,3774, + 3774,1805,1273,3774,111,87,1872,1727,1149,96, + 3774,318,315,316,317,3774,3774,3774,3774,3774, + 3774,3774,1459,121,95,97,98,99,100,2065, + 3774,111,87,3774,2570,20,96,17,21,18, + 1050,43,45,1046,1906,3774,3270,1890,3774,1459, + 120,95,97,98,99,100,2570,20,3774,17, + 21,18,1050,43,45,3774,3774,2601,3774,1260, + 1293,1274,1893,2570,20,3774,17,21,18,1050, + 43,45,1320,3774,3774,3774,1260,1293,1274,1901, + 3774,318,315,316,317,2807,3774,3774,3774,1141, + 3774,655,274,3774,370,315,316,317,3774,2065, + 2838,3774,3774,267,1158,1131,272,3774,3774,370, + 315,316,317,1151,2848,3774,135,213,983,3774, + 3774,3774,389,370,315,316,317,3774,3774,3774, + 274,135,213,3774,3774,148,134,136,160,3774, + 3774,269,1158,1131,272,135,213,2879,3774,3774, + 151,134,136,160,3774,3774,370,315,316,317, + 2889,3774,3774,3774,154,134,136,160,259,370, + 315,316,317,3774,3774,2176,1757,3774,135,213, + 2570,20,3774,17,21,18,1050,43,45,3774, + 3774,135,213,1260,1293,1902,3774,365,134,136, + 160,2570,20,3774,17,21,18,1050,43,45, + 138,134,136,160,1260,1293,1916,2570,20,3774, + 17,21,18,1050,43,45,3774,3774,3774,3774, + 1260,1293,1926,2570,20,3774,17,21,18,1050, + 43,45,3774,3774,3774,3774,1260,1293,1929,2570, + 20,3774,17,21,18,1050,43,45,843,3774, + 3203,3774,1260,1293,1935,2570,20,3774,17,21, + 18,1050,43,45,517,3774,417,1000,1260,1293, + 1942,3774,1083,3774,417,3774,318,315,316,317, + 3774,3774,721,224,229,218,714,221,223,1083, + 88,417,3774,1278,1329,3774,3774,116,88,3774, + 3774,197,1174,3774,950,1378,627,3774,3774,3774, + 1083,3774,417,3774,2834,88,3774,3774,197,1174, + 3774,1083,1378,417,3774,2368,369,410,3774,3774, + 3774,2834,3220,3774,3774,1083,88,417,1597,197, + 1174,3774,3774,1378,3774,3774,1591,88,3774,3220, + 197,1174,2834,3774,1378,1623,1083,3774,417,3774, + 3774,88,1721,2834,197,1174,603,3774,1378,3774, + 3220,319,315,316,317,3774,1649,2834,3774,3774, + 3774,3220,88,3774,3774,197,1174,1675,3774,1378, + 3774,3774,3774,1273,3774,3220,3774,1273,2834,3774, + 3774,1692,318,315,316,317,318,315,316,317, + 1980,3774,3270,3774,3774,3774,3220,3774,3774,3774, + 2065,3774,2169,3774,2065,2570,20,3774,17,21, + 18,1050,43,37,1046,3774,2570,20,1046,17, + 21,18,1050,43,36,2570,20,3774,17,21, + 18,1050,43,35,961,1726,566,3774,2433,3774, + 1273,3774,2453,3774,319,315,316,317,274,318, + 315,316,317,3774,3774,3774,3774,3774,3774,267, + 1158,1131,272,1278,3774,2570,20,2065,17,21, + 18,1050,43,48,3774,3774,627,3774,266,2570, + 20,1046,17,21,18,1050,43,47,3774,1273, + 3774,3774,3774,3774,3774,307,369,410,318,315, + 316,317,3774,2570,20,2872,17,21,18,1050, + 43,46,1273,1498,3774,655,2065,1087,3774,3774, + 3774,318,315,316,317,3774,318,315,316,317, + 1046,2597,20,3774,17,21,18,1050,33,2065, + 1716,3774,197,3774,1329,3774,3774,3774,3774,318, + 315,316,317,1046,2119,2743,20,3774,17,21, + 18,1050,1857,3774,3774,3774,3774,2065,3774,3774, + 3774,3774,3774,1442,1317,3774,3774,2499,1259,1660, + 3774,1588,3774,318,315,316,317,1838,318,315, + 316,317,3774,1848,3774,3774,318,315,316,317, + 3774,2495,318,315,316,317,3172,1985,1985,1149, + 1149,3774,3774,192,3447,3774,978,2050,3774,1985, + 3467,1149,3774,3774,1271,875,319,315,316,317, + 3774,3774,3774,88,88,3774,3774,2075,3774,3774, + 116,116,3774,3774,3774,88,319,315,316,317, + 3774,3774,116,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,1738, + 2228,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3774,2242,3774,0,1,536,0,1,516,0, + 1,531,0,1,540,0,674,409,0,516, + 129,0,531,129,0,540,129,0,516,130, + 0,531,130,0,540,130,0,516,131,0, + 531,131,0,540,131,0,540,185,0,531, + 185,0,516,185,0,185,189,0,540,184, + 0,531,184,0,516,184,0,184,189,0, + 516,132,0,531,132,0,540,132,0,516, + 133,0,531,133,0,540,133,0,413,416, + 0,412,415,0,411,414,0,11,226,0, + 516,368,0,531,368,0,540,368,0,4186, + 408,0,223,235,0,3782,1,0,540,380, + 0,531,380,0,516,380,0,1038,32,0, + 1849,32,0,516,407,0,531,407,0,540, + 407,0,4169,407,0,4167,407,0,540,253, + 0,531,253,0,516,253,0,4186,409,0, + 1,4011,0,223,236,0,516,403,0,531, + 403,0,540,403,0,3991,403,0,3990,403, + 0,3989,403,0,3988,403,0,3939,403,0, + 3938,403,0,3937,403,0,3936,403,0,3935, + 403,0,516,406,0,531,406,0,540,406, + 0,4169,406,0,4167,406,0,179,20,0, + 8,10,0,1,4190,0,1,4189,0,1, + 4188,0,1,4000,0,366,355,0,367,356, + 0,113,2738,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,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,69,70,48,71,50, + 51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,67,68,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,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,69,70,48,0,50,51,52, + 53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,0,1,2,3,4, + 5,6,7,8,9,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,30,31,32,33,34, + 35,36,0,38,39,40,41,42,43,44, + 45,0,0,48,2,50,51,52,53,54, + 55,56,57,58,59,60,61,62,63,64, + 65,66,67,0,1,2,3,4,5,27, + 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,2,0,1,2,3,4,5,55,7, + 8,9,10,0,61,62,63,64,65,66, + 67,0,1,10,0,1,0,6,2,0, + 6,10,6,49,13,14,15,16,17,37, + 0,1,2,3,4,5,6,0,1,49, + 10,11,12,13,14,15,16,17,37,19, + 20,21,22,23,24,25,26,46,0,1, + 30,47,101,47,0,1,2,3,4,5, + 0,7,8,9,37,86,73,74,0,68, + 69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,0,87,88, + 89,90,91,92,93,94,95,96,97,98, + 99,0,1,49,0,18,0,6,0,0, + 6,10,6,7,13,14,15,16,17,0, + 100,0,13,14,3,4,7,8,9,0, + 1,2,3,4,5,6,28,31,37,10, + 11,12,13,14,15,16,17,46,19,20, + 21,22,23,24,25,26,0,0,1,30, + 39,40,41,42,43,44,45,0,1,68, + 69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,0,87,88, + 89,90,91,92,93,94,95,96,97,98, + 99,0,1,0,100,2,0,6,0,1, + 0,10,6,10,13,14,15,16,17,0, + 1,2,3,4,5,0,7,8,9,100, + 5,75,76,77,78,79,80,31,37,0, + 0,1,2,3,4,5,6,46,0,10, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,19,49,68, + 69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,0,87,88, + 89,90,91,92,93,94,95,96,97,98, + 99,0,1,0,1,0,1,6,68,0, + 1,10,73,74,13,14,15,16,17,0, + 0,1,2,3,4,5,6,0,0,1, + 10,11,12,13,14,15,16,17,37,19, + 20,21,22,23,24,25,26,46,0,1, + 2,3,4,5,0,7,8,9,0,1, + 2,3,4,5,0,7,8,9,49,68, + 69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,0,87,88, + 89,90,91,92,93,94,95,96,97,98, + 99,0,1,0,1,86,0,6,81,82, + 46,10,0,0,13,14,15,16,17,6, + 100,0,1,2,3,4,5,6,7,8, + 9,10,0,1,2,3,4,5,37,18, + 37,0,88,89,31,0,0,46,27,28, + 29,30,31,32,33,34,35,36,37,46, + 19,49,75,76,77,78,79,80,47,68, + 69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,0,87,88, + 89,90,91,92,93,94,95,96,97,98, + 99,0,1,2,3,4,5,6,7,8, + 9,10,11,12,0,1,2,3,4,5, + 6,75,76,77,78,79,80,0,27,28, + 29,30,31,32,33,34,35,36,0,38, + 39,40,41,42,43,44,45,0,1,0, + 0,37,0,0,2,0,55,7,6,0, + 46,47,61,62,63,64,65,66,67,0, + 0,19,13,14,19,37,0,1,2,3, + 4,5,6,7,8,9,10,11,12,0, + 0,2,3,4,5,0,7,8,9,47, + 11,0,101,27,28,29,30,31,32,33, + 34,35,36,18,38,39,40,41,42,43, + 44,45,0,0,2,3,4,5,0,0, + 0,55,83,11,0,6,46,61,62,63, + 64,65,66,67,0,1,2,3,4,5, + 6,81,82,84,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,37,0,0,1,31,0,101,2,3, + 4,5,38,7,8,9,85,11,0,1, + 18,0,48,0,50,51,52,53,54,71, + 56,57,58,59,60,0,72,2,3,4, + 5,6,7,8,9,86,11,12,90,91, + 92,93,94,95,96,97,98,99,37,100, + 0,0,27,28,29,30,0,32,33,34, + 35,36,6,38,39,40,41,42,43,44, + 45,0,1,0,0,2,2,3,4,5, + 55,7,8,9,71,11,61,62,63,64, + 65,66,67,68,0,1,2,3,4,5, + 6,0,46,47,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23,24,25, + 26,0,0,0,2,31,0,0,2,3, + 4,5,38,7,8,9,86,11,15,18, + 13,14,48,0,50,51,52,53,54,48, + 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,0,0,0,1,31,0,1,7, + 8,9,0,38,0,1,2,3,4,5, + 6,18,10,48,0,50,51,52,53,54, + 6,56,57,58,59,60,0,0,2,3, + 4,5,6,7,8,9,0,11,12,0, + 1,37,0,7,8,9,7,8,9,10, + 0,47,0,27,28,29,30,0,32,33, + 34,35,36,6,38,39,40,41,42,43, + 44,45,0,46,0,0,37,2,3,4, + 5,55,68,0,0,0,11,61,62,63, + 64,65,66,67,68,0,1,2,3,4, + 5,6,18,46,47,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,0,49,0,0,31,0,0,2, + 3,4,5,38,0,7,8,9,11,15, + 6,69,70,48,102,50,51,52,53,54, + 0,56,57,58,59,60,0,1,2,3, + 4,5,6,0,37,31,10,11,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,0,0,0,0,31,0,0, + 7,8,9,10,38,7,8,9,10,72, + 0,0,18,18,48,83,50,51,52,53, + 54,86,56,57,58,59,60,0,18,2, + 3,4,5,6,7,8,9,0,11,12, + 0,0,2,3,4,5,0,0,7,8, + 9,11,0,1,27,28,29,30,18,32, + 33,34,35,36,0,38,39,40,41,42, + 43,44,45,27,28,29,0,0,0,86, + 69,70,55,6,86,7,8,9,61,62, + 63,64,65,66,67,68,0,1,2,3, + 4,5,6,27,28,29,10,11,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,46,47,0,0,31,2,3, + 4,5,0,0,38,71,0,11,0,7, + 8,9,6,18,48,0,50,51,52,53, + 54,6,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,46,0,0,0,31,0, + 0,0,47,0,49,38,7,8,9,0, + 7,8,9,18,68,48,0,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,0,0,84,31, + 0,0,7,8,9,0,38,7,8,9, + 0,10,7,8,9,18,48,0,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,18,0,0,49, + 31,85,0,27,28,29,0,38,6,0, + 0,0,0,7,73,74,18,48,6,50, + 51,52,53,54,18,56,57,58,59,60, + 0,1,2,3,4,5,6,27,28,29, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,0,49,47, + 49,31,0,0,7,8,9,0,38,0, + 68,0,0,0,7,8,9,0,48,6, + 50,51,52,53,54,0,56,57,58,59, + 60,0,1,2,3,4,5,6,27,28, + 29,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,49,0, + 47,49,31,0,0,0,1,0,0,38, + 6,6,0,6,7,8,9,0,0,48, + 0,50,51,52,53,54,0,56,57,58, + 59,60,0,1,2,3,4,5,31,7, + 8,9,37,11,12,0,0,2,3,4, + 5,47,47,46,0,0,11,49,0,27, + 28,29,30,18,32,33,34,35,36,49, + 0,39,40,41,42,43,44,45,71,0, + 1,27,28,29,0,6,0,55,0,0, + 6,0,0,61,62,63,64,65,66,67, + 0,0,2,3,4,5,0,7,8,9, + 0,11,12,0,1,31,37,0,0,6, + 0,0,0,0,69,70,47,27,28,29, + 30,47,32,33,34,35,36,49,49,39, + 40,41,42,43,44,45,0,0,0,0, + 37,0,0,6,0,55,7,8,9,0, + 47,61,62,63,64,65,66,67,0,0, + 2,3,4,5,0,7,8,9,31,11, + 12,7,8,9,0,0,69,70,0,69, + 70,0,0,46,0,27,28,29,30,0, + 32,33,34,35,36,0,0,39,40,41, + 42,43,44,45,0,0,0,0,0,0, + 0,0,0,55,0,0,0,0,0,61, + 62,63,64,65,66,67,0,0,2,3, + 4,5,0,7,8,9,0,11,12,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,27,28,29,30,0,32,33, + 34,35,36,0,0,39,40,41,42,43, + 44,45,0,0,0,0,0,0,0,0, + 0,55,7,8,9,0,0,61,62,63, + 64,65,66,67,0,0,0,0,0,0, + 0,0,27,28,29,30,0,32,33,34, + 35,36,0,0,39,40,41,42,43,44, + 45,0,0,0,0,0,0,0,0,0, + 55,0,0,0,0,0,61,62,63,64, + 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,0,0,0,0,0, + 0,0,0,0,0,0,0,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,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,0,0, + 0,0,0,0,0,0,0,0,0,0, + 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, + 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,0, + 0,0,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,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,7,8,9,0,0, + 0,0,0,0,0,7,8,9,0,0, + 6,7,8,9,0,27,28,29,30,0, + 32,33,34,35,36,27,28,29,30,0, + 32,33,34,35,36,31,0,1,0,0, + 0,0,0,0,0,0,0,0,0,0, + 46,0,16,17,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,37,0,71,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,72,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,87,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, + 3774,1,6180,6111,6043,6099,1798,3534,1,1, + 1,6179,1,1,1,1,1,1,815,1, + 1,1,1,1,1,1,1,1,1,1, + 1,3783,1,1,1,1,1,1,3875,1, + 1,1,1,1,1,1,55,157,1640,286, + 1175,1073,1401,1716,605,1,1630,1042,1682,1199, + 1656,1,1,1,1,1,1,1,3781,8, + 3750,3750,3750,3750,3750,3750,3750,3750,3750,3750, + 3750,3750,3750,3750,3750,3750,3750,3750,3750,3750, + 3750,3750,3750,3750,3750,3750,3750,3750,3750,3750, + 3750,3750,3750,3750,3750,3750,3774,3750,3750,3750, + 3750,3750,3750,3750,3750,1234,1357,3750,458,3750, + 3750,3750,3750,3750,3750,3750,3750,3750,3750,3750, + 3750,3750,3750,3750,3750,3750,3750,3750,3774,1, + 6180,6111,6043,6099,1798,3534,1,1,1,6179, + 1,1,1,1,1,1,815,1,1,1, + 1,1,1,1,1,1,1,1,1,3783, + 1,1,1,1,1,3774,3875,1,1,1, + 1,1,1,1,358,2192,1640,3774,1175,1073, + 1401,1716,605,1,1630,1042,1682,1199,1656,1, + 1,1,1,1,1,1,3781,3774,1,6180, + 6111,6043,6099,3784,3534,1,1,1,6179,1, + 1,1,1,1,1,815,1,1,1,1, + 1,1,1,1,1,1,1,1,3783,1, + 1,1,1,1,3774,3875,1,1,1,1, + 1,1,1,1234,1357,1640,3774,1175,1073,1401, + 1716,605,1,1630,1042,1682,1199,1656,1,1, + 1,1,1,1,1,3774,1,6180,6111,6043, + 6099,3784,3534,1,1,1,6179,1,1,1, + 1,1,1,815,1,1,1,1,1,1, + 1,1,1,1,1,1,3783,1,1,1, + 1,1,3774,3875,1,1,1,1,1,1, + 1,3774,326,1640,4101,1175,1073,1401,1716,605, + 1,1630,1042,1682,1199,1656,1,1,1,1, + 1,1,1,3774,3131,3785,4185,4187,3687,4102, + 540,516,531,3246,3786,3385,3235,2285,3255,3361, + 2092,3774,3790,1179,3787,3788,3789,734,496,1129, + 3988,3990,3989,3937,3774,3938,3936,3991,3939,3935, + 3774,476,3942,3946,3944,3945,3943,3948,3949,1, + 3774,3690,268,2342,4000,4188,4190,4189,3947,540, + 516,531,253,49,3941,3950,3951,3952,1275,3347, + 3077,1,4187,3333,3774,443,3774,4187,1082,3774, + 3780,4187,3780,2521,4187,4187,4187,4187,4187,909, + 1,3131,3785,4185,4187,4186,3778,222,487,2548, + 997,3786,541,3235,2285,3255,3361,2092,4187,3790, + 1179,3787,3788,3789,734,496,1129,4187,3774,614, + 784,3779,3533,3779,1,3058,4000,4188,4190,4189, + 3774,3543,3537,3540,909,4032,3309,3295,3774,4187, + 4187,4187,4187,4187,4187,4187,4187,4187,4187,4187, + 4187,4187,4187,4187,4187,4187,4187,3774,4187,4187, + 4187,4187,4187,4187,4187,4187,4187,4187,4187,4187, + 4187,1,4186,1943,3774,626,1,4186,344,52, + 3778,4186,117,3534,4186,4186,4186,4186,4186,182, + 3777,3774,2824,2419,4167,4169,540,516,531,3774, + 3131,3785,4185,4187,4186,3778,4117,117,4186,2552, + 3786,541,3235,2285,3255,3361,2092,4186,3790,1179, + 3787,3788,3789,734,496,1129,60,3774,521,1813, + 4172,4168,4174,4175,4173,4170,4171,3774,940,4186, + 4186,4186,4186,4186,4186,4186,4186,4186,4186,4186, + 4186,4186,4186,4186,4186,4186,4186,3774,4186,4186, + 4186,4186,4186,4186,4186,4186,4186,4186,4186,4186, + 4186,1,4185,3774,3777,1737,1,4185,413,3618, + 3774,4185,3784,1797,4185,4185,4185,4185,4185,1, + 3058,4000,4188,4190,4189,3774,3543,3537,3540,3777, + 483,3065,3049,3033,3017,3001,2980,3783,4185,51, + 1,3131,5002,4802,4602,4702,29,4185,349,3333, + 3246,4902,541,3235,2285,3255,3361,2092,5973,3790, + 1179,3787,3788,3789,734,496,1129,1059,1943,4185, + 4185,4185,4185,4185,4185,4185,4185,4185,4185,4185, + 4185,4185,4185,4185,4185,4185,4185,3774,4185,4185, + 4185,4185,4185,4185,4185,4185,4185,4185,4185,4185, + 4185,1,3786,412,3621,411,3624,3786,29,11, + 3627,3786,3309,3295,3786,3786,3786,3786,3786,3774, + 3774,3131,3785,4185,4187,4186,3778,63,3774,442, + 3246,3786,541,3235,2285,3255,3361,2092,3786,3790, + 1179,3787,3788,3789,734,496,1129,3786,1,3058, + 4000,4188,4190,4189,73,3543,3537,3540,253,3058, + 4000,4188,4190,4189,347,540,516,531,2630,3786, + 3786,3786,3786,3786,3786,3786,3786,3786,3786,3786, + 3786,3786,3786,3786,3786,3786,3786,62,3786,3786, + 3786,3786,3786,3786,3786,3786,3786,3786,3786,3786, + 3786,1,3785,270,814,1839,3774,3785,2863,2846, + 999,3785,1,3774,3785,3785,3785,3785,3785,3784, + 3777,356,367,367,367,367,367,3768,367,367, + 367,3768,1,3058,4000,4188,4190,4189,3785,5973, + 909,3774,847,636,3783,3774,61,3785,367,367, + 367,367,3768,367,367,367,367,367,367,2313, + 1026,2,3065,3049,3033,3017,3001,2980,3768,3785, + 3785,3785,3785,3785,3785,3785,3785,3785,3785,3785, + 3785,3785,3785,3785,3785,3785,3785,3774,3785,3785, + 3785,3785,3785,3785,3785,3785,3785,3785,3785,3785, + 3785,3774,1,1,1,1,1,3784,3534,1, + 1,1,1,1,1,2342,4000,4188,4190,4189, + 262,3065,3049,3033,3017,3001,2980,3774,1,1, + 1,1,3783,1,1,1,1,1,220,4080, + 1,1,1,1,1,1,1,350,1230,67, + 1,909,3774,3774,1952,3774,1,3534,3780,54, + 262,262,1,1,1,1,1,1,1,69, + 64,1909,2824,2419,1059,909,3774,1,1,1, + 1,1,3784,3534,1,1,1,1,1,185, + 256,3585,3585,3585,3585,229,3576,3582,3579,3779, + 3585,71,300,1,1,1,1,3783,1,1, + 1,1,1,232,4080,1,1,1,1,1, + 1,1,3774,3774,3785,4185,4187,4186,43,3774, + 3774,1,1376,3786,292,3778,794,1,1,1, + 1,1,1,1,3774,1,6180,6111,6043,6099, + 3784,2863,2846,675,1,6179,1,1,1,1, + 1,1,815,1,1,1,1,1,1,1, + 1,2020,1,337,1545,3783,184,299,3597,3597, + 3597,3597,3875,3588,3594,3591,1101,3597,3774,3074, + 815,271,1640,211,1175,1073,1401,1716,605,1683, + 1630,1042,1682,1199,1656,3774,1753,1,1,1, + 1,191,1,1,1,2047,1,1,1657,1631, + 1605,1579,1553,1501,1527,1475,1449,1417,909,3777, + 1,3774,1,1,1,1,3774,1,1,1, + 1,1,3780,3970,1,1,1,1,1,1, + 1,3774,1953,3774,206,2013,5949,5949,5949,5949, + 1,540,516,531,1864,5949,1,1,1,1, + 1,1,1,191,3774,1,6180,6111,6043,6099, + 3784,3774,452,3779,1,6179,1,1,1,1, + 1,1,815,1,1,1,1,1,1,1, + 1,3774,3774,65,4012,3783,377,53,5969,5969, + 5969,5969,3875,540,516,531,4032,5969,1764,1405, + 2824,2419,1640,3774,1175,1073,1401,1716,605,2006, + 1630,1042,1682,1199,1656,3774,1,6180,6111,6043, + 6099,3784,3774,2145,3774,1,6179,1,1,1, + 1,1,1,815,1,1,1,1,1,1, + 1,1,253,3774,3774,2300,3783,324,938,540, + 516,531,3774,3875,1,2342,3762,3759,3753,3756, + 3780,1510,3370,1640,1,1175,1073,1401,1716,605, + 3645,1630,1042,1682,1199,1656,3774,89,1,1, + 1,1,190,1,1,1,159,1,1,268, + 2317,909,113,540,516,531,540,516,531,253, + 3774,3779,3774,1,1,1,1,3774,1,1, + 1,1,1,3780,3970,1,1,1,1,1, + 1,1,357,1728,3774,208,909,3785,4185,4187, + 4186,1,3781,3774,229,3774,3786,1,1,1, + 1,1,1,1,190,3774,1,6180,6111,6043, + 6099,3784,233,2005,3779,1,6179,1,1,1, + 1,1,1,815,1,1,1,1,1,1, + 1,1,68,2620,66,1,3783,3774,378,3785, + 4185,4187,4186,3875,3774,540,516,531,3786,1764, + 3784,1234,1357,1640,3771,1175,1073,1401,1716,605, + 3774,1630,1042,1682,1199,1656,3774,1,6180,6111, + 6043,6099,3784,3774,1968,3783,1,6179,1,1, + 1,1,1,1,815,1,1,1,1,1, + 1,1,1,1,3774,367,3774,3783,1,3774, + 3543,3537,3540,253,3875,3543,3537,3540,253,1642, + 356,59,1536,5973,1640,1376,1175,1073,1401,1716, + 605,4031,1630,1042,1682,1199,1656,3774,5973,1, + 1,1,1,191,1,1,1,3774,1,1, + 3774,381,3785,4185,4187,4186,3774,3774,540,516, + 531,3786,3774,2581,1,1,1,1,1060,1, + 1,1,1,1,3774,3970,1,1,1,1, + 1,1,1,3988,3990,3989,249,3774,380,4032, + 1234,1357,1,3780,4032,3648,3654,3651,1,1, + 1,1,1,1,1,191,3774,1,6180,6111, + 6043,6099,3784,1,1,1,1,6179,1,1, + 1,1,1,1,815,1,1,1,1,1, + 1,1,1,1291,3779,354,207,3783,1460,1460, + 1460,1460,372,3774,3875,879,3774,1460,30,540, + 516,531,3782,5973,1640,3774,1175,1073,1401,1716, + 605,3780,1630,1042,1682,1199,1656,3774,1,6180, + 6111,6043,6099,3784,70,3774,207,1,6179,1, + 1,1,1,1,1,815,1,1,1,1, + 1,1,1,1,3803,42,3774,3774,3783,371, + 3774,3774,3779,183,766,3875,540,516,531,3774, + 540,516,531,5973,3781,1640,3774,1175,1073,1401, + 1716,605,5787,1630,1042,1682,1199,1656,3774,1, + 6180,6111,6043,6099,3784,3774,72,30,1,6179, + 1,1,1,1,1,1,815,1,1,1, + 1,1,1,1,1,253,3774,3774,675,3783, + 373,50,3678,3684,3681,379,3875,540,516,531, + 3774,3333,540,516,531,5973,1640,3774,1175,1073, + 1401,1716,605,754,1630,1042,1682,1199,1656,3774, + 1,6180,6111,6043,6099,3784,248,3774,189,1, + 6179,1,1,1,1,1,1,815,1,1, + 1,1,1,1,1,1,206,3774,381,1891, + 3783,1101,285,3988,3990,3989,1,3875,1110,3774, + 250,201,3774,3534,3309,3295,377,1640,3780,1175, + 1073,1401,1716,605,815,1630,1042,1682,1199,1656, + 3774,1,6180,6111,6043,6099,3784,1,1,1, + 1,6179,1,1,1,1,1,1,815,1, + 1,1,1,1,1,1,1,200,1917,3779, + 1995,3783,3774,3774,540,516,531,374,3875,3774, + 1110,251,1,1,540,516,531,3774,1640,3780, + 1175,1073,1401,1716,605,3774,1630,1042,1682,1199, + 1656,3774,1,6180,6111,6043,6099,3784,3988,3990, + 3989,1,6179,1,1,1,1,1,1,815, + 1,1,1,1,1,1,1,1,4158,3774, + 3779,4187,3783,3774,1,1,2317,235,1,3875, + 91,388,3774,223,3642,3642,3642,3774,3774,1640, + 1,1175,1073,1401,1716,605,3774,1630,1042,1682, + 1199,1656,1,3058,726,677,600,3546,223,3543, + 3537,3540,909,3786,450,3774,3774,3785,4185,4187, + 4186,91,388,223,252,58,3786,4186,3774,3988, + 3990,3989,3937,1063,3938,3936,3991,3939,3935,4185, + 3774,3942,3946,3944,3945,3943,3948,3949,223,1, + 2317,3988,3990,3989,1,265,3774,3947,1,1, + 117,3774,3774,3941,3950,3951,3952,1275,3347,3077, + 3774,3774,3785,4185,4187,3639,3774,540,516,531, + 3774,3786,450,1,2317,117,909,57,3774,3780, + 56,3774,3774,3774,1234,1357,265,3988,3990,3989, + 3937,117,3938,3936,3991,3939,3935,3786,3785,3942, + 3946,3944,3945,3943,3948,3949,3774,3774,3774,375, + 909,3774,3774,3784,3774,3947,540,516,531,3774, + 3779,3941,3950,3951,3952,1275,3347,3077,3774,3774, + 3785,4185,4187,3687,376,540,516,531,3783,3786, + 450,540,516,531,3774,3774,1234,1357,3774,1234, + 1357,3774,3774,2327,3774,3988,3990,3989,3937,3774, + 3938,3936,3991,3939,3935,3774,3774,3942,3946,3944, + 3945,3943,3948,3949,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3947,3774,3774,3774,3774,3774,3941, + 3950,3951,3952,1275,3347,3077,3774,3774,3785,4185, + 4187,4186,3774,540,516,531,3774,3786,450,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3988,3990,3989,3937,3774,3938,3936, + 3991,3939,3935,3774,3774,3942,3946,3944,3945,3943, + 3948,3949,3774,3774,3774,129,3774,3774,3774,3774, + 3774,3947,3555,3549,3552,3774,3774,3941,3950,3951, + 3952,1275,3347,3077,3774,3774,3774,3774,3774,3774, + 3774,3774,3988,3990,3989,3937,3774,3938,3936,3991, + 3939,3935,3774,3774,3942,3946,3944,3945,3943,3948, + 3949,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3947,3774,3774,3774,3774,3774,3941,3950,3951,3952, + 3774,3131,3785,4185,4187,4186,3774,3774,3774,3774, + 3246,3786,541,3235,2285,3255,3361,2092,5973,3790, + 1179,3787,3788,3789,734,496,1129,20,3747,179, + 179,179,179,3747,179,179,179,3747,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3774,179,179,179,179,3747,179, + 179,179,179,179,3747,3774,3131,3785,4185,4187, + 4186,3774,3774,3774,3747,3246,3786,541,3235,2285, + 3255,3361,2092,5973,3790,1179,3787,3788,3789,734, + 496,1129,355,366,366,366,366,366,3765,366, + 366,366,3765,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,366, + 366,366,366,3765,366,366,366,366,366,366, + 1,3131,5002,4802,4602,4702,3774,3774,3774,3765, + 3246,4902,541,3235,2285,3255,3361,2092,5973,3790, + 1179,3787,3788,3789,734,496,1129,382,3131,3785, + 4185,4187,4186,3774,3774,3774,3774,3246,3786,541, + 3235,2285,3255,3361,2092,5973,3790,1179,3787,3788, + 3789,734,496,1129,3774,3131,3785,4185,4187,4186, + 3774,3774,3774,3774,3246,3786,541,3235,2285,3255, + 3361,2092,5973,3790,1179,3787,3788,3789,734,496, + 1129,3774,2106,3785,4185,4187,4186,3774,3774,3774, + 3774,3246,3786,541,3235,2285,3255,3361,2092,3774, + 3790,1179,3787,3788,3789,734,496,1129,3774,3082, + 3785,4185,4187,4186,3774,3774,3774,3774,3246,3786, + 541,3235,2285,3255,3361,2092,3774,3790,1179,3787, + 3788,3789,734,496,1129,3774,3099,3785,4185,4187, + 4186,3774,3774,3774,3774,3246,3786,541,3235,2285, + 3255,3361,2092,3774,3790,1179,3787,3788,3789,734, + 496,1129,3774,3120,3785,4185,4187,4186,3774,3774, + 3774,3774,3246,3786,541,3235,2285,3255,3361,2092, + 3774,3790,1179,3787,3788,3789,734,496,1129,3774, + 3131,3785,4185,4187,4186,3774,3774,3774,3774,3246, + 3786,541,3235,2285,3255,3361,2092,3774,3790,1179, + 3787,3788,3789,734,496,1129,3774,3145,3785,4185, + 4187,4186,3774,3774,3774,3774,3246,3786,541,3235, + 2285,3255,3361,2092,3774,3790,1179,3787,3788,3789, + 734,496,1129,407,3774,3774,3675,3672,3774,3774, + 3669,3663,3666,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3988,3990,3989,3937,3774,3938,3936,3991,3939,3935, + 3774,3774,4172,4168,4174,4175,4173,4170,4171,1, + 3131,3785,4185,4187,4186,3774,3774,3774,3774,3246, + 3786,541,3235,2285,3255,3361,2092,3774,3790,1179, + 3787,3788,3789,734,496,1129,406,3774,3774,3744, + 3741,3774,3774,3738,3732,3735,3774,3774,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3988,3990,3989,3937,3774,3938,3936, + 3991,3939,3935,3774,3774,4172,4168,4174,4175,4173, + 4170,4171,3774,3166,3785,4185,4187,4186,3774,3774, + 3774,3774,3246,3786,541,3235,2285,3255,3361,2092, + 3774,3790,1179,3787,3788,3789,734,496,1129,332, + 3131,3785,4185,4187,4186,3774,3774,3774,3774,3246, + 3786,541,3235,2285,3255,3361,2092,3774,3790,1179, + 3787,3788,3789,734,496,1129,130,3774,3774,3774, + 3774,3774,3774,3564,3558,3561,131,3774,3774,3774, + 3774,3774,3774,3573,3567,3570,3774,3774,3774,3774, + 3774,3774,3774,3988,3990,3989,3937,3774,3938,3936, + 3991,3939,3935,3988,3990,3989,3937,132,3938,3936, + 3991,3939,3935,3774,3606,3600,3603,133,3774,3774, + 3774,3774,3774,3774,3615,3609,3612,3774,3774,3774, + 3774,3774,3774,3774,3988,3990,3989,3937,3774,3938, + 3936,3991,3939,3935,3988,3990,3989,3937,368,3938, + 3936,3991,3939,3935,3774,3636,3630,3633,403,3774, + 3774,3774,3774,3774,236,3702,3696,3699,3774,3774, + 223,3693,3693,3693,3774,3988,3990,3989,3937,3774, + 3938,3936,3991,3939,3935,3714,3708,3711,3723,3774, + 3720,3726,3705,3717,3729,223,32,3657,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 223,3774,3800,3801,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3660,3774,223,3774,3774,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,819,3774, + 3774,3774,3774,3774,3774,3774,3774,3774,3774,3774, + 3774,3774,3774,672 + }; + }; + 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, + 735,1,165,347,345,562,735,166,347,347, + 809,141,658,166,166,166,79,648,79,648, + 648,79,648,79,352,347,336,336,336,336, + 166,79,33,564,9,515,224,347,105,104, + 352,227,141,564,515,194,352,260,588,533, + 413,691,53,136,648,652,649,652,136,652, + 648,347,355,400,414,698,33,33,33,33, + 33,33,33,33,33,33,33,608,294,522, + 417,521,347,224,224,232,698,347,120,564, + 347,666,534,3,691,690,414,264,423,141, + 460,355,400,700,608,608,608,608,608,414, + 414,414,408,408,549,533,652,652,270,33, + 9,516,772,53,224,143,257,731,475,236, + 486,491,489,499,493,502,501,504,503,505, + 700,457,141,623,564,345,194,260,666,666, + 533,31,516,516,652,166,166,18,166,166, + 516,102,33,102,345,112,470,289,141,264, + 423,460,460,400,400,414,403,564,112,414, + 414,414,414,414,78,352,695,111,469,519, + 298,33,534,414,33,257,656,414,731,257, + 235,232,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,457,118,347,530,516, + 516,547,33,598,33,33,18,102,600,18, + 347,3,414,269,414,414,423,457,91,423, + 460,465,603,465,400,731,695,352,564,700, + 357,357,357,120,141,408,414,775,698,33, + 302,608,533,414,33,33,257,236,489,489, + 486,486,493,493,491,491,491,491,491,491, + 501,499,503,502,102,102,504,656,118,31, + 516,414,166,414,414,18,33,18,352,112, + 423,93,465,457,33,652,731,400,775,403, + 414,700,414,257,257,33,33,465,186,516, + 31,18,33,18,18,347,269,457,515,33, + 511,93,512,457,400,414,361,457,116,230, + 168,652,33,102,14,270,516,414,532,93, + 33,512,512,294,120,526,652,33,414,270, + 516,18,512,33,257,18,414,257,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, + 101,0,6,46,47,2,27,0,6,49, + 47,19,0,71,37,72,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,71,31,8,9,7, + 37,47,6,46,0,6,68,37,72,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,71,1,21, + 22,23,19,16,17,15,10,13,14,24, + 25,20,26,12,18,2,11,3,5,4, + 37,72,0,55,65,33,40,34,41,42, + 35,29,43,44,30,66,36,67,45,61, + 28,62,63,64,2,11,12,27,39,32, + 5,3,4,8,9,7,6,46,31,71, + 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,100,6,0,6, + 71,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,86,100,68,72,87,16, + 17,37,15,13,14,73,74,69,70,75, + 76,77,78,81,82,83,84,85,88,89, + 71,90,91,92,93,94,95,96,97,98, + 99,46,79,80,47,32,27,33,34,35, + 29,30,36,28,31,6,2,1,5,3, + 4,8,9,7,10,0,49,86,100,68, + 35,30,36,34,33,32,15,13,14,73, + 74,69,70,75,76,77,78,81,82,83, + 84,85,88,89,71,90,91,92,93,94, + 95,96,97,98,99,79,80,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,65,33,40,34, + 41,42,35,29,43,44,30,66,36,67, + 45,61,28,62,63,64,2,11,12,8, + 9,7,5,3,4,38,6,68,0,2, + 11,5,3,4,6,68,46,0,37,6, + 46,47,1,0,71,90,91,92,93,94, + 96,95,97,98,99,10,73,74,13,14, + 70,69,75,76,77,78,79,80,81,82, + 15,83,84,85,86,100,47,68,88,89, + 49,8,9,7,46,31,6,0,100,31, + 46,47,6,49,0,100,6,86,0,47, + 101,102,68,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,65,66,67,61, + 55,62,63,64,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, + 86,0,6,46,68,71,0,20,21,22, + 23,19,1,16,17,15,10,13,14,24, + 25,26,32,39,27,55,65,33,40,34, + 41,42,35,29,43,44,30,66,36,67, + 45,61,28,62,63,64,12,18,8,9, + 7,11,3,5,4,2,0,49,46,31, + 61,55,62,63,64,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,65,33,40,34,41,42,35,43, + 44,30,66,36,67,45,61,62,63,64, + 2,11,12,8,9,7,5,3,4,86, + 27,29,28,0,101,32,39,27,55,65, + 33,40,34,41,42,35,29,43,44,30, + 66,36,67,45,61,28,62,63,64,11, + 1,12,8,9,5,3,4,31,6,38, + 7,2,10,0,10,32,39,27,55,65, + 33,40,34,41,42,35,29,43,44,30, + 66,36,67,45,61,28,62,63,64,2, + 11,12,3,4,86,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,103,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,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, + 104,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, + 109,0,0,0,0,111,115,116,193,0, + 0,0,117,118,119,120,121,106,122,123, + 124,125,126,0,108,0,194,127,136,132, + 144,0,110,167,0,170,164,166,0,168, + 0,203,128,131,0,0,0,0,0,143, + 0,0,0,105,114,154,0,169,107,158, + 135,0,0,130,165,113,146,0,181,182, + 183,0,145,147,148,149,150,155,178,0, + 201,0,151,152,153,171,177,180,134,137, + 138,139,140,141,142,176,200,0,0,157, + 161,163,172,198,0,204,0,112,129,133, + 0,156,160,0,162,175,185,190,0,192, + 0,195,0,197,0,205,0,0,0,0, + 0,159,0,173,174,179,184,0,186,187, + 0,188,189,191,0,0,196,0,0,199, + 202,0,0,206,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[] = { + 68,68,47,68,47,27,100,100,68,68, + 47,102,31,100,47,27,100,47,47,18, + 31,31,47,47,47,47,68,18,47,100, + 31,31,68,47,47,100,47,47,47,49, + 47,31,8,8,47,100,100,47,1,100, + 2,47,2,2,2,2,31,47,2,49, + 2,71,10,2,2,49,47,47,5,86, + 10,18,18,48,2,2,2,2,12,31, + 2,65,66,66,61,31,31,2,2,86, + 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, + 208,105,0,100,204,0,0,193,105,145, + 0,108,0,105,145,0,137,108,0,167, + 86,167,37,0,105,0,167,37,0,30, + 130,105,0,204,130,0,194,0,130,0, + 161,194,0,161,0,159,130,0,154,194, + 0,154,0,169,1,12,0,106,0,176, + 0,201,0,167,0,30,130,0,253,51, + 0,29,131,0,133,1,0,169,1,26, + 0,249,1,225,0,248,1,1,8,0, + 106,106,0,213,105,18,0,107,0,206, + 105,132,0,192,0,105,132,0,172,192, + 0,242,105,0,31,153,0,201,240,105, + 18,160,0,107,0,0,189,105,1,173, + 0,189,105,1,0,191,1,0,168,105, + 0,181,0,105,144,10,144,168,0,176, + 0,144,168,0,9,0,0,176,0,105, + 144,10,144,0,144,0,9,0,0,131, + 30,219,105,37,0,131,219,105,30,37, + 0,131,30,37,0,131,219,105,37,0, + 131,37,0,137,0,2,0,173,106,0, + 170,0,2,106,0,189,105,1,137,0, + 2,0,171,106,0,159,1,0,164,0, + 201,217,105,18,104,236,65,0,236,65, + 0,109,3,0,0,0,107,0,201,217, + 105,18,236,65,0,3,0,0,0,107, + 0,163,0,235,105,163,0,105,163,0, + 159,108,0,202,65,0,109,0,202,67, + 0,202,66,0,214,105,18,234,104,233, + 181,0,234,104,233,181,0,3,0,0, + 107,0,233,181,0,109,0,3,0,0, + 107,0,214,105,18,233,181,0,150,0, + 149,0,148,0,147,0,146,0,193,105, + 132,0,132,0,136,59,0,185,128,185, + 164,1,56,0,106,131,0,185,164,1, + 56,0,108,0,106,131,0,185,128,185, + 128,185,1,56,0,185,128,185,1,56, + 0,185,1,56,0,108,0,108,0,106, + 131,0,136,1,48,0,136,1,48,147, + 54,0,106,108,0,147,54,0,79,2, + 110,106,108,0,136,1,60,0,147,121, + 136,1,58,0,55,131,0,136,1,58, + 0,106,131,55,131,0,146,0,167,51, + 0,136,89,126,0,29,127,0,169,1, + 0,106,116,0,169,1,20,0,106,114, + 0,232,1,109,0,136,37,109,0,136, + 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, + 551,0,830,0,2327,2272,0,3343,875,2623, + 0,1073,0,452,443,0,879,821,754,1277, + 696,1276,2261,1215,1176,1056,670,458,0,3166, + 1259,3145,3131,3120,3099,3082,2106,2796,2769,2738, + 2730,2703,2670,2630,2620,1220,2548,2521,1098,605, + 986,947,0,1158,1131,721,714,2119,2872,2342, + 2317,983,3220,2834,0,3385,3361,2092,1179,1129, + 541,450,2552,2261,847,675,1101,1764,1376,3065, + 3049,3033,3017,3001,2980,2863,2846,2824,2419,1357, + 1234,3333,3309,3295,997,3255,3246,3235,2285,734, + 496,2047,2020,879,1995,1968,821,1943,1291,1917, + 1891,1864,1839,1813,1787,1728,938,1683,1657,1631, + 1605,1579,1553,1527,1501,1475,1449,1417,1190,1149, + 1073,784,417,458,909,754,696,0,517,488, + 0,1708,1335,655,566,417,518,0,2601,518, + 2499,2119,2453,2433,2327,523,2272,2342,983,1217, + 3058,2078,2214,2313,1316,2173,0,3467,3447,3423, + 2327,3417,523,2499,2119,2272,2872,1708,2078,2214, + 655,3370,3265,2406,2960,566,3172,417,2192,2140, + 2091,2453,2433,3409,2495,2313,2065,2601,1712,1329, + 572,1217,3404,1335,2947,2914,1275,2900,3347,3077, + 2885,1058,2466,2227,1316,2173,518,2680,3342,2575, + 3319,3270,3207,3203,2792,0,2078,1316,518,0, + 3166,3145,3131,3120,3099,3082,2106,3074,1259,3264, + 1220,1098,986,947,2330,2500,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,230,7,145,132,105,246,251,105,105, + 208,206,194,8,9,7,195,181,196,67, + 66,197,65,198,105,1,4,5,3,2, + 137,200,12,176,1,193,159,130,141,137, + 105,187,206,238,193,143,105,139,5,18, + 1,1,1,233,130,202,130,202,236,202, + 130,168,144,130,159,1,12,26,20,25, + 24,14,13,10,15,17,16,1,109,252, + 19,207,46,130,159,37,1,168,71,105, + 168,209,105,1,250,2,19,104,18,104, + 18,144,10,105,1,1,1,1,1,133, + 169,136,145,163,105,18,87,72,1,37, + 49,121,1,46,130,30,131,105,110,10, + 116,118,117,120,119,123,122,125,124,126, + 105,18,160,247,105,132,143,139,176,257, + 213,59,50,52,57,56,48,54,60,58, + 146,53,51,104,132,248,225,1,234,130, + 105,18,105,10,144,189,132,105,190,169, + 169,169,169,169,121,105,1,174,173,212, + 104,12,105,232,105,136,10,2,105,131, + 219,199,99,98,97,95,96,94,93,92, + 91,90,71,74,73,10,69,70,14,13, + 82,81,80,79,78,77,76,75,83,15, + 85,84,89,88,237,105,18,105,6,136, + 104,1,1,147,1,1,49,253,167,49, + 105,46,121,1,19,2,18,214,163,215, + 105,217,104,218,144,105,1,105,176,46, + 121,121,121,121,121,168,191,105,1,46, + 110,1,213,2,219,30,131,10,117,117, + 116,116,119,119,118,118,118,118,118,118, + 122,120,124,123,231,136,125,46,105,164, + 185,136,48,136,136,49,86,49,105,249, + 105,105,217,201,71,46,105,199,105,168, + 189,105,169,131,131,49,49,240,105,185, + 128,121,1,121,121,168,46,214,235,49, + 159,130,204,201,199,189,121,201,46,242, + 254,72,37,104,243,128,185,136,147,46, + 49,204,130,162,71,167,72,37,185,128, + 121,102,130,86,167,121,185,167,121 + }; + }; + 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", + "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 = 103, + LA_STATE_OFFSET = 4190, + MAX_LA = 2147483647, + NUM_RULES = 416, + NUM_NONTERMINALS = 155, + NUM_SYMBOLS = 258, + SEGMENT_SIZE = 8192, + START_STATE = 2500, + IDENTIFIER_SYMBOL = 0, + EOFT_SYMBOL = 101, + EOLT_SYMBOL = 101, + ACCEPT_ACTION = 3533, + ERROR_ACTION = 3774; + + 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..3e6465e8aeb --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/c/XlcCParsersym.java @@ -0,0 +1,230 @@ +/******************************************************************************* +* 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 = 102, + TK_enum = 65, + 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 = 66, + TK_switch = 60, + TK_typedef = 36, + TK_union = 67, + 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 = 103, + TK_LeftBracket = 37, + TK_LeftParen = 1, + TK_LeftBrace = 18, + TK_Dot = 72, + TK_Arrow = 87, + 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 = 73, + TK_Percent = 74, + TK_RightShift = 69, + TK_LeftShift = 70, + TK_LT = 75, + TK_GT = 76, + TK_LE = 77, + TK_GE = 78, + TK_EQ = 81, + TK_NE = 82, + TK_Caret = 83, + TK_Or = 84, + TK_AndAnd = 85, + TK_OrOr = 88, + TK_Question = 89, + TK_Colon = 49, + TK_DotDotDot = 86, + TK_Assign = 71, + TK_StarAssign = 90, + TK_SlashAssign = 91, + TK_PercentAssign = 92, + TK_PlusAssign = 93, + TK_MinusAssign = 94, + TK_RightShiftAssign = 95, + TK_LeftShiftAssign = 96, + TK_AndAssign = 97, + TK_CaretAssign = 98, + TK_OrAssign = 99, + TK_Comma = 46, + TK_RightBracket = 100, + TK_RightParen = 47, + TK_RightBrace = 68, + TK_SemiColon = 31, + TK_typeof = 12, + TK___alignof__ = 26, + TK___attribute__ = 8, + TK___declspec = 9, + TK_MAX = 79, + TK_MIN = 80, + TK_asm = 7, + TK_vector = 5, + TK_pixel = 3, + TK_bool = 4, + TK_ERROR_TOKEN = 38, + TK_EOF_TOKEN = 101; + + 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", + "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..53e72993fb8 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParser.java @@ -0,0 +1,2149 @@ +/******************************************************************************* +* 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.internal.core.dom.parser.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 ::= char + // + case 262: { action. consumeToken(); break; + } + + // + // Rule 263: simple_type_specifier ::= wchar_t + // + case 263: { action. consumeToken(); break; + } + + // + // Rule 264: simple_type_specifier ::= bool + // + case 264: { action. consumeToken(); break; + } + + // + // Rule 265: simple_type_specifier ::= short + // + case 265: { action. consumeToken(); break; + } + + // + // Rule 266: simple_type_specifier ::= int + // + case 266: { action. consumeToken(); break; + } + + // + // Rule 267: simple_type_specifier ::= long + // + case 267: { action. consumeToken(); break; + } + + // + // Rule 268: simple_type_specifier ::= signed + // + case 268: { action. consumeToken(); break; + } + + // + // Rule 269: simple_type_specifier ::= unsigned + // + case 269: { action. consumeToken(); break; + } + + // + // Rule 270: simple_type_specifier ::= float + // + case 270: { action. consumeToken(); break; + } + + // + // Rule 271: simple_type_specifier ::= double + // + case 271: { action. consumeToken(); break; + } + + // + // Rule 272: simple_type_specifier ::= void + // + case 272: { action. consumeToken(); break; + } + + // + // Rule 275: type_name_specifier ::= dcolon_opt nested_name_specifier_opt type_name + // + case 275: { action. consumeQualifiedId(false); break; + } + + // + // Rule 276: type_name_specifier ::= dcolon_opt nested_name_specifier template template_id_name + // + case 276: { action. consumeQualifiedId(false); break; + } + + // + // Rule 277: type_name_specifier ::= typename dcolon_opt nested_name_specifier identifier_name + // + case 277: { action. consumeQualifiedId(false); break; + } + + // + // Rule 278: type_name_specifier ::= typename dcolon_opt nested_name_specifier template_opt template_id_name + // + case 278: { action. consumeQualifiedId(true); break; + } + + // + // Rule 280: elaborated_type_specifier ::= class_keyword elaborated_specifier_hook dcolon_opt nested_name_specifier_opt identifier_name + // + case 280: { action. consumeTypeSpecifierElaborated(false); break; + } + + // + // Rule 281: elaborated_type_specifier ::= class_keyword elaborated_specifier_hook dcolon_opt nested_name_specifier_opt template_opt template_id_name + // + case 281: { action. consumeTypeSpecifierElaborated(true); break; + } + + // + // Rule 282: elaborated_type_specifier ::= enum elaborated_specifier_hook dcolon_opt nested_name_specifier_opt identifier_name + // + case 282: { action. consumeTypeSpecifierElaborated(false); break; + } + + // + // Rule 284: enum_specifier ::= enum enum_specifier_hook { <openscope-ast> enumerator_list_opt } + // + case 284: { action. consumeTypeSpecifierEnumeration(false); break; + } + + // + // Rule 285: enum_specifier ::= enum enum_specifier_hook identifier_token { <openscope-ast> enumerator_list_opt } + // + case 285: { action. consumeTypeSpecifierEnumeration(true); break; + } + + // + // Rule 291: enumerator_definition ::= identifier_token + // + case 291: { action. consumeEnumerator(false); break; + } + + // + // Rule 292: enumerator_definition ::= identifier_token = constant_expression + // + case 292: { action. consumeEnumerator(true); break; + } + + // + // Rule 294: namespace_definition ::= namespace namespace_name namespace_definition_hook { <openscope-ast> declaration_seq_opt } + // + case 294: { action. consumeNamespaceDefinition(true); break; + } + + // + // Rule 295: namespace_definition ::= namespace namespace_definition_hook { <openscope-ast> declaration_seq_opt } + // + case 295: { action. consumeNamespaceDefinition(false); break; + } + + // + // Rule 297: namespace_alias_definition ::= namespace identifier_token = dcolon_opt nested_name_specifier_opt namespace_name ; + // + case 297: { action. consumeNamespaceAliasDefinition(); break; + } + + // + // Rule 298: using_declaration ::= using typename_opt dcolon_opt nested_name_specifier_opt unqualified_id_name ; + // + case 298: { action. consumeUsingDeclaration(); break; + } + + // + // Rule 299: typename_opt ::= typename + // + case 299: { action. consumePlaceHolder(); break; + } + + // + // Rule 300: typename_opt ::= $Empty + // + case 300: { action. consumeEmpty(); break; + } + + // + // Rule 301: using_directive ::= using namespace dcolon_opt nested_name_specifier_opt namespace_name ; + // + case 301: { action. consumeUsingDirective(); break; + } + + // + // Rule 302: linkage_specification ::= extern stringlit { <openscope-ast> declaration_seq_opt } + // + case 302: { action. consumeLinkageSpecification(); break; + } + + // + // Rule 303: linkage_specification ::= extern stringlit <openscope-ast> declaration + // + case 303: { action. consumeLinkageSpecification(); break; + } + + // + // Rule 308: init_declarator_complete ::= init_declarator + // + case 308: { action. consumeInitDeclaratorComplete(); break; + } + + // + // Rule 310: init_declarator ::= complete_declarator initializer + // + case 310: { action. consumeDeclaratorWithInitializer(true); break; + } + + // + // Rule 313: declarator ::= <openscope-ast> ptr_operator_seq direct_declarator + // + case 313: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 315: function_declarator ::= <openscope-ast> ptr_operator_seq direct_declarator + // + case 315: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 319: basic_direct_declarator ::= declarator_id_name + // + case 319: { action. consumeDirectDeclaratorIdentifier(); break; + } + + // + // Rule 320: basic_direct_declarator ::= ( declarator ) + // + case 320: { action. consumeDirectDeclaratorBracketed(); break; + } + + // + // Rule 321: function_direct_declarator ::= basic_direct_declarator ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt + // + case 321: { action. consumeDirectDeclaratorFunctionDeclarator(true); break; + } + + // + // Rule 322: array_direct_declarator ::= array_direct_declarator array_modifier + // + case 322: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 323: array_direct_declarator ::= basic_direct_declarator array_modifier + // + case 323: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 324: array_modifier ::= [ constant_expression ] + // + case 324: { action. consumeDirectDeclaratorArrayModifier(true); break; + } + + // + // Rule 325: array_modifier ::= [ ] + // + case 325: { action. consumeDirectDeclaratorArrayModifier(false); break; + } + + // + // Rule 326: ptr_operator ::= pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt + // + case 326: { action. consumePointer(); break; + } + + // + // Rule 327: ptr_operator ::= pointer_hook & pointer_hook + // + case 327: { action. consumeReferenceOperator(); break; + } + + // + // Rule 328: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt + // + case 328: { action. consumePointerToMember(); break; + } + + // + // Rule 335: cv_qualifier ::= const + // + case 335: { action. consumeToken(); break; + } + + // + // Rule 336: cv_qualifier ::= volatile + // + case 336: { action. consumeToken(); break; + } + + // + // Rule 338: declarator_id_name ::= dcolon_opt nested_name_specifier_opt type_name + // + case 338: { action. consumeQualifiedId(false); break; + } + + // + // Rule 339: type_id ::= type_specifier_seq + // + case 339: { action. consumeTypeId(false); break; + } + + // + // Rule 340: type_id ::= type_specifier_seq abstract_declarator + // + case 340: { action. consumeTypeId(true); break; + } + + // + // Rule 343: abstract_declarator ::= <openscope-ast> ptr_operator_seq + // + case 343: { action. consumeDeclaratorWithPointer(false); break; + } + + // + // Rule 344: abstract_declarator ::= <openscope-ast> ptr_operator_seq direct_abstract_declarator + // + case 344: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 348: basic_direct_abstract_declarator ::= ( abstract_declarator ) + // + case 348: { action. consumeDirectDeclaratorBracketed(); break; + } + + // + // Rule 349: basic_direct_abstract_declarator ::= ( ) + // + case 349: { action. consumeAbstractDeclaratorEmpty(); break; + } + + // + // Rule 350: array_direct_abstract_declarator ::= array_modifier + // + case 350: { action. consumeDirectDeclaratorArrayDeclarator(false); break; + } + + // + // Rule 351: array_direct_abstract_declarator ::= array_direct_abstract_declarator array_modifier + // + case 351: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 352: array_direct_abstract_declarator ::= basic_direct_abstract_declarator array_modifier + // + case 352: { action. consumeDirectDeclaratorArrayDeclarator(true); break; + } + + // + // Rule 353: 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 353: { action. consumeDirectDeclaratorFunctionDeclarator(true); break; + } + + // + // Rule 354: function_direct_abstract_declarator ::= ( <openscope-ast> parameter_declaration_clause ) <openscope-ast> cv_qualifier_seq_opt <openscope-ast> exception_specification_opt + // + case 354: { action. consumeDirectDeclaratorFunctionDeclarator(false); break; + } + + // + // Rule 355: parameter_declaration_clause ::= parameter_declaration_list_opt ... + // + case 355: { action. consumePlaceHolder(); break; + } + + // + // Rule 356: parameter_declaration_clause ::= parameter_declaration_list_opt + // + case 356: { action. consumeEmpty(); break; + } + + // + // Rule 357: parameter_declaration_clause ::= parameter_declaration_list , ... + // + case 357: { action. consumePlaceHolder(); break; + } + + // + // Rule 363: abstract_declarator_opt ::= $Empty + // + case 363: { action. consumeEmpty(); break; + } + + // + // Rule 364: parameter_declaration ::= declaration_specifiers parameter_init_declarator + // + case 364: { action. consumeParameterDeclaration(); break; + } + + // + // Rule 365: parameter_declaration ::= declaration_specifiers + // + case 365: { action. consumeParameterDeclarationWithoutDeclarator(); break; + } + + // + // Rule 367: parameter_init_declarator ::= declarator = parameter_initializer + // + case 367: { action. consumeDeclaratorWithInitializer(true); break; + } + + // + // Rule 369: parameter_init_declarator ::= abstract_declarator = parameter_initializer + // + case 369: { action. consumeDeclaratorWithInitializer(true); break; + } + + // + // Rule 370: parameter_init_declarator ::= = parameter_initializer + // + case 370: { action. consumeDeclaratorWithInitializer(false); break; + } + + // + // Rule 371: parameter_initializer ::= assignment_expression + // + case 371: { action. consumeInitializer(); break; + } + + // + // Rule 372: function_definition ::= declaration_specifiers_opt function_declarator <openscope-ast> ctor_initializer_list_opt function_body + // + case 372: { action. consumeFunctionDefinition(false); break; + } + + // + // Rule 373: function_definition ::= declaration_specifiers_opt function_declarator try <openscope-ast> ctor_initializer_list_opt function_body <openscope-ast> handler_seq + // + case 373: { action. consumeFunctionDefinition(true); break; + } + + // + // Rule 376: initializer ::= ( expression_list ) + // + case 376: { action. consumeInitializerConstructor(); break; + } + + // + // Rule 377: initializer_clause ::= assignment_expression + // + case 377: { action. consumeInitializer(); break; + } + + // + // Rule 379: initializer_list ::= start_initializer_list { <openscope-ast> initializer_seq , } end_initializer_list + // + case 379: { action. consumeInitializerList(); break; + } + + // + // Rule 380: initializer_list ::= start_initializer_list { <openscope-ast> initializer_seq } end_initializer_list + // + case 380: { action. consumeInitializerList(); break; + } + + // + // Rule 381: initializer_list ::= { <openscope-ast> } + // + case 381: { action. consumeInitializerList(); break; + } + + // + // Rule 382: start_initializer_list ::= $Empty + // + case 382: { action. initializerListStart(); break; + } + + // + // Rule 383: end_initializer_list ::= $Empty + // + case 383: { action. initializerListEnd(); break; + } + + // + // Rule 388: class_specifier ::= class_head { <openscope-ast> member_declaration_list_opt } + // + case 388: { action. consumeClassSpecifier(); break; + } + + // + // Rule 389: class_head ::= class_keyword composite_specifier_hook identifier_name_opt class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 389: { action. consumeClassHead(false); break; + } + + // + // Rule 390: class_head ::= class_keyword composite_specifier_hook template_id_name class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 390: { action. consumeClassHead(false); break; + } + + // + // Rule 391: class_head ::= class_keyword composite_specifier_hook nested_name_specifier identifier_name class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 391: { action. consumeClassHead(true); break; + } + + // + // Rule 392: class_head ::= class_keyword composite_specifier_hook nested_name_specifier template_id_name class_name_suffix_hook <openscope-ast> base_clause_opt + // + case 392: { action. consumeClassHead(true); break; + } + + // + // Rule 396: identifier_name_opt ::= $Empty + // + case 396: { action. consumeEmpty(); break; + } + + // + // Rule 400: visibility_label ::= access_specifier_keyword : + // + case 400: { action. consumeVisibilityLabel(); break; + } + + // + // Rule 401: member_declaration ::= declaration_specifiers_opt <openscope-ast> member_declarator_list ; + // + case 401: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 402: member_declaration ::= declaration_specifiers_opt ; + // + case 402: { action. consumeDeclarationSimple(false); break; + } + + // + // Rule 405: member_declaration ::= dcolon_opt nested_name_specifier template_opt unqualified_id_name ; + // + case 405: { action. consumeMemberDeclarationQualifiedId(); break; + } + + // + // Rule 411: member_declaration ::= ERROR_TOKEN + // + case 411: { action. consumeDeclarationProblem(); break; + } + + // + // Rule 420: member_declarator ::= declarator constant_initializer + // + case 420: { action. consumeMemberDeclaratorWithInitializer(); break; + } + + // + // Rule 421: member_declarator ::= bit_field_declarator : constant_expression + // + case 421: { action. consumeBitField(true); break; + } + + // + // Rule 422: member_declarator ::= : constant_expression + // + case 422: { action. consumeBitField(false); break; + } + + // + // Rule 423: bit_field_declarator ::= identifier_name + // + case 423: { action. consumeDirectDeclaratorIdentifier(); break; + } + + // + // Rule 424: constant_initializer ::= = constant_expression + // + case 424: { action. consumeInitializer(); break; + } + + // + // Rule 430: base_specifier ::= dcolon_opt nested_name_specifier_opt class_name + // + case 430: { action. consumeBaseSpecifier(false, false); break; + } + + // + // Rule 431: base_specifier ::= virtual access_specifier_keyword_opt dcolon_opt nested_name_specifier_opt class_name + // + case 431: { action. consumeBaseSpecifier(true, true); break; + } + + // + // Rule 432: base_specifier ::= access_specifier_keyword virtual dcolon_opt nested_name_specifier_opt class_name + // + case 432: { action. consumeBaseSpecifier(true, true); break; + } + + // + // Rule 433: base_specifier ::= access_specifier_keyword dcolon_opt nested_name_specifier_opt class_name + // + case 433: { action. consumeBaseSpecifier(true, false); break; + } + + // + // Rule 434: access_specifier_keyword ::= private + // + case 434: { action. consumeToken(); break; + } + + // + // Rule 435: access_specifier_keyword ::= protected + // + case 435: { action. consumeToken(); break; + } + + // + // Rule 436: access_specifier_keyword ::= public + // + case 436: { action. consumeToken(); break; + } + + // + // Rule 438: access_specifier_keyword_opt ::= $Empty + // + case 438: { action. consumeEmpty(); break; + } + + // + // Rule 440: conversion_function_id_name ::= conversion_function_id < <openscope-ast> template_argument_list_opt > + // + case 440: { action. consumeTemplateId(); break; + } + + // + // Rule 441: conversion_function_id ::= operator conversion_type_id + // + case 441: { action. consumeConversionName(); break; + } + + // + // Rule 442: conversion_type_id ::= type_specifier_seq conversion_declarator + // + case 442: { action. consumeTypeId(true); break; + } + + // + // Rule 443: conversion_type_id ::= type_specifier_seq + // + case 443: { action. consumeTypeId(false); break; + } + + // + // Rule 444: conversion_declarator ::= <openscope-ast> ptr_operator_seq + // + case 444: { action. consumeDeclaratorWithPointer(false); break; + } + + // + // Rule 450: mem_initializer ::= mem_initializer_name ( expression_list_opt ) + // + case 450: { action. consumeConstructorChainInitializer(); break; + } + + // + // Rule 451: mem_initializer_name ::= dcolon_opt nested_name_specifier_opt class_name + // + case 451: { action. consumeQualifiedId(false); break; + } + + // + // Rule 454: operator_function_id_name ::= operator_id_name < <openscope-ast> template_argument_list_opt > + // + case 454: { action. consumeTemplateId(); break; + } + + // + // Rule 455: operator_id_name ::= operator overloadable_operator + // + case 455: { action. consumeOperatorName(); break; + } + + // + // Rule 498: template_declaration ::= export_opt template < <openscope-ast> template_parameter_list > declaration + // + case 498: { action. consumeTemplateDeclaration(); break; + } + + // + // Rule 499: export_opt ::= export + // + case 499: { action. consumePlaceHolder(); break; + } + + // + // Rule 500: export_opt ::= $Empty + // + case 500: { action. consumeEmpty(); break; + } + + // + // Rule 504: template_parameter ::= parameter_declaration + // + case 504: { action. consumeTemplateParamterDeclaration(); break; + } + + // + // Rule 505: type_parameter ::= class identifier_name_opt + // + case 505: { action. consumeSimpleTypeTemplateParameter(false); break; + } + + // + // Rule 506: type_parameter ::= class identifier_name_opt = type_id + // + case 506: { action. consumeSimpleTypeTemplateParameter(true); break; + } + + // + // Rule 507: type_parameter ::= typename identifier_name_opt + // + case 507: { action. consumeSimpleTypeTemplateParameter(false); break; + } + + // + // Rule 508: type_parameter ::= typename identifier_name_opt = type_id + // + case 508: { action. consumeSimpleTypeTemplateParameter(true); break; + } + + // + // Rule 509: type_parameter ::= template < <openscope-ast> template_parameter_list > class identifier_name_opt + // + case 509: { action. consumeTemplatedTypeTemplateParameter(false); break; + } + + // + // Rule 510: type_parameter ::= template < <openscope-ast> template_parameter_list > class identifier_name_opt = id_expression + // + case 510: { action. consumeTemplatedTypeTemplateParameter(true); break; + } + + // + // Rule 511: template_id_name ::= identifier_name < <openscope-ast> template_argument_list_opt > + // + case 511: { action. consumeTemplateId(); break; + } + + // + // Rule 516: template_argument ::= assignment_expression + // + case 516: { action. consumeTemplateArgumentExpression(); break; + } + + // + // Rule 517: template_argument ::= type_id + // + case 517: { action. consumeTemplateArgumentTypeId(); break; + } + + // + // Rule 518: explicit_instantiation ::= template declaration + // + case 518: { action. consumeTemplateExplicitInstantiation(); break; + } + + // + // Rule 519: explicit_specialization ::= template < > declaration + // + case 519: { action. consumeTemplateExplicitSpecialization(); break; + } + + // + // Rule 520: try_block ::= try compound_statement <openscope-ast> handler_seq + // + case 520: { action. consumeStatementTryBlock(); break; + } + + // + // Rule 523: handler ::= catch ( exception_declaration ) compound_statement + // + case 523: { action. consumeStatementCatchHandler(false); break; + } + + // + // Rule 524: handler ::= catch ( ... ) compound_statement + // + case 524: { action. consumeStatementCatchHandler(true); break; + } + + // + // Rule 525: exception_declaration ::= type_specifier_seq <openscope-ast> declarator + // + case 525: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 526: exception_declaration ::= type_specifier_seq <openscope-ast> abstract_declarator + // + case 526: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 527: exception_declaration ::= type_specifier_seq + // + case 527: { action. consumeDeclarationSimple(false); break; + } + + // + // Rule 529: exception_specification ::= throw ( ) + // + case 529: { action. consumePlaceHolder(); break; + } + + // + // Rule 550: attribute_parameter ::= assignment_expression + // + case 550: { action. consumeIgnore(); break; + } + + // + // Rule 561: extended_asm_declaration ::= asm volatile_opt ( extended_asm_param_seq ) ; + // + case 561: { gnuAction.consumeDeclarationASM(); break; + } + + // + // Rule 572: unary_expression ::= __alignof__ unary_expression + // + case 572: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_alignOf); break; + } + + // + // Rule 573: unary_expression ::= __alignof__ ( type_id ) + // + case 573: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_alignof); break; + } + + // + // Rule 574: unary_expression ::= typeof unary_expression + // + case 574: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); break; + } + + // + // Rule 575: unary_expression ::= typeof ( type_id ) + // + case 575: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); break; + } + + // + // Rule 576: relational_expression ::= relational_expression >? shift_expression + // + case 576: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_max); break; + } + + // + // Rule 577: relational_expression ::= relational_expression <? shift_expression + // + case 577: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_min); break; + } + + // + // Rule 578: conditional_expression ::= logical_or_expression ? <empty> : assignment_expression + // + case 578: { action. consumeExpressionConditional(); break; + } + + // + // Rule 579: primary_expression ::= ( compound_statement ) + // + case 579: { gnuAction.consumeCompoundStatementExpression(); break; + } + + // + // Rule 580: labeled_statement ::= case case_range_expression : statement + // + case 580: { action. consumeStatementCase(); break; + } + + // + // Rule 581: case_range_expression ::= constant_expression ... constant_expression + // + case 581: { action. consumeExpressionBinaryOperator(IASTBinaryExpression.op_assign); break; + } + + // + // Rule 585: typeof_type_specifier ::= typeof unary_expression + // + case 585: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); break; + } + + // + // Rule 586: typeof_type_specifier ::= typeof ( type_id ) + // + case 586: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); break; + } + + // + // Rule 587: declaration_specifiers ::= <openscope-ast> typeof_declaration_specifiers + // + case 587: { action. consumeDeclarationSpecifiersTypeof(); break; + } + + // + // Rule 600: declarator ::= <openscope-ast> ptr_operator_seq attribute_or_decl_specifier_seq direct_declarator + // + case 600: { action. consumeDeclaratorWithPointer(true); break; + } + + // + // Rule 603: simple_type_specifier ::= _Complex + // + case 603: { action. consumeToken(); break; + } + + // + // Rule 604: simple_type_specifier ::= _Imaginary + // + case 604: { action. consumeToken(); break; + } + + // + // Rule 605: cv_qualifier ::= restrict + // + case 605: { action. consumeToken(); break; + } + + // + // Rule 606: explicit_instantiation ::= extern template declaration + // + case 606: { action. consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_extern); break; + } + + // + // Rule 607: explicit_instantiation ::= static template declaration + // + case 607: { action. consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_static); break; + } + + // + // Rule 608: explicit_instantiation ::= inline template declaration + // + case 608: { action. consumeTemplateExplicitInstantiationGCC(IGPPASTExplicitTemplateInstantiation.ti_inline); break; + } + + // + // Rule 609: postfix_expression ::= ( type_id ) initializer_list + // + case 609: { action. consumeExpressionTypeIdInitializer(); break; + } + + // + // Rule 610: type_id ::= vector_type + // + case 610: { action. consumeTypeId(false); break; + } + + // + // Rule 611: type_id ::= vector_type abstract_declarator + // + case 611: { action. consumeTypeId(true); break; + } + + // + // Rule 612: vector_declaration ::= vector_type <openscope-ast> init_declarator_list ; + // + case 612: { action. consumeDeclarationSimple(true); break; + } + + // + // Rule 613: vector_type ::= <openscope-ast> no_type_declaration_specifiers_opt vector vector_type_specifier all_specifier_qualifier_list_opt + // + case 613: { action. consumeVectorTypeSpecifier(); break; + } + + // + // Rule 614: vector_type_specifier ::= vector_type_specifier_token + // + case 614: { action. consumeToken(); break; + } + + // + // Rule 635: specifier_qualifier ::= typedef + // + case 635: { action. consumeToken(); 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..cc2edc52e7c --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParserprs.java @@ -0,0 +1,3679 @@ +/******************************************************************************* +* 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 + }; + }; + 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,3,4,4,5,2,5, + 6,5,0,6,7,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,4,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,-180,0,0,0,-69, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-397,0,0,0,0,0,0,0,0, + 0,-171,0,0,0,-76,0,0,0,0, + -106,-568,0,0,-188,0,0,0,-4,0, + 0,0,0,0,0,0,0,0,0,-194, + 0,0,-259,0,0,-2,0,0,-8,0, + 0,0,-189,0,0,0,0,0,0,0, + 0,0,0,0,0,-370,0,-638,0,0, + 0,0,0,0,0,0,0,0,0,0, + -58,0,0,0,0,0,0,0,-32,0, + 0,0,0,0,-143,0,0,0,0,0, + 0,0,-294,0,0,0,-59,0,0,0, + 0,0,0,0,0,-283,0,0,0,-9, + 0,0,-548,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-10,0, + 0,0,-53,0,0,0,0,0,-96,0, + 0,0,0,0,0,0,0,0,-5,0, + 0,-296,0,0,0,-12,0,0,0,0, + 0,0,0,0,0,0,-155,0,-18,0, + -396,0,0,0,0,0,0,0,0,0, + -116,0,0,0,0,-70,0,0,0,0, + 0,0,0,0,0,0,-192,-19,0,-21, + 0,0,0,0,0,0,0,-61,-243,0, + 0,0,0,0,0,0,0,0,0,0, + -44,0,0,0,0,0,0,0,0,-7, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-22,-135,-149,0,-234,0,0,-162, + 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,0,0, + 0,0,0,0,0,-3,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-237, + 0,0,0,-39,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,0,0,0,0,0,0,0,0,-422, + 0,0,0,0,0,0,0,-113,0,0, + 0,0,0,-177,0,0,0,0,-573,0, + 0,-498,0,0,0,0,0,0,0,0, + 0,0,0,0,-249,0,0,0,0,-40, + 0,0,0,0,0,0,0,0,0,0, + 0,-144,0,0,0,0,-23,0,0,0, + 0,0,0,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,-125, + -67,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-172,0, + 0,-260,0,0,0,0,0,0,0,-204, + 0,0,0,0,-367,0,0,0,0,0, + 0,-400,0,0,0,-374,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-33,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-55,-273,0,0,-31, + -358,-196,0,0,0,-465,0,0,0,-57, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-25, + 0,0,0,0,0,0,-119,0,0,-593, + 0,0,-41,0,-440,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-42,0,0, + 0,0,0,0,-37,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-163,0, + 0,0,0,0,0,-45,0,-574,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-164, + 0,0,0,-72,0,0,0,0,0,0, + 0,-193,0,0,0,0,0,-165,0,0, + 0,0,0,0,0,0,-16,-140,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-68, + 0,-47,0,-79,0,0,0,0,0,0, + 0,0,0,-118,0,0,0,0,0,0, + 0,0,-54,0,0,0,0,-136,0,0, + 0,-510,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -263,0,0,0,0,0,0,-600,0,0, + 0,0,0,0,0,0,0,-105,0,0, + 0,0,0,-191,0,0,0,0,-272,0, + 0,-48,0,0,-360,0,0,0,-51,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-56,0,0, + -565,0,0,0,0,0,0,0,0,0, + -71,0,0,0,0,0,0,0,0,0, + -62,0,0,-212,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-257,0,0,0,0, + 0,0,0,-383,0,0,0,0,0,-17, + 0,0,0,0,0,0,0,-82,-603,0, + 0,0,-427,0,0,0,-107,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-314,0,0,-74,0,0, + 0,0,0,0,0,0,-480,0,-114,0, + 0,0,0,0,0,0,-421,0,0,0, + 0,0,0,-515,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-145,-315,0,0, + 0,0,0,-115,0,0,0,0,0,-83, + 0,0,0,0,0,0,0,-376,-97,0, + 0,0,-516,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-319,0,0,-126,0, + 0,0,0,0,0,0,-401,0,0,0, + 0,0,-187,-613,0,0,0,0,-127,0, + 0,-363,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,0,0,0, + 0,0,0,0,-536,0,0,0,0,0, + -98,0,0,0,0,0,0,0,0,-99, + 0,0,0,0,0,-478,0,-225,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,0,0,0,0, + 0,-100,0,-130,0,0,0,0,0,0, + 0,-408,0,0,0,0,-343,0,0,0, + -132,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-369,0, + 0,0,-131,0,0,0,0,0,0,0, + -101,0,-102,0,0,0,-190,0,0,0, + 0,0,0,0,0,-368,-133,-344,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-416, + 0,0,0,0,0,0,0,-425,0,0, + 0,0,0,0,0,0,0,-160,-419,0, + 0,0,0,-277,0,0,-345,0,0,0, + -152,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-415,0, + 0,0,-103,0,0,0,-513,0,0,0, + 0,0,-423,0,0,0,0,0,0,0, + 0,-554,0,0,0,-346,0,0,0,-104, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-209,0,-108, + 0,0,0,0,0,-316,0,0,0,-159, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-347,0,0,0,-174,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-499,0,0,0, + 0,0,0,0,-514,0,0,0,0,0, + -213,0,0,0,0,-112,0,0,0,0, + 0,0,0,-348,0,0,0,-539,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-508,0,0,0,0, + 0,0,0,-570,0,0,0,-120,0,-121, + 0,0,0,0,-473,0,0,0,-122,-278, + 0,0,-349,0,0,0,-608,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-509,0,0,0,0,0, + 0,0,-594,0,0,0,-214,0,-254,0, + 0,0,0,-474,0,0,0,0,0,0, + 0,-350,0,0,0,-175,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-557,0,0,0,0,0,0, + 0,-617,0,0,0,0,0,-563,0,0, + 0,0,0,0,0,0,0,0,0,0, + -351,0,0,0,-469,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-123,0,-202,0,0,0, + 0,0,0,0,0,0,-564,0,0,0, + 0,-146,0,0,0,0,0,0,0,-352, + 0,0,0,-147,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-582,0,-601,0,0,0,0, + 0,0,0,0,0,-256,0,0,0,0, + -176,0,0,0,0,0,0,0,-353,0, + 0,0,-151,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-157,-173,-258,0,0,0,0,0, + 0,0,-203,0,-292,0,0,0,-215,-535, + 0,0,0,-211,0,0,0,-387,0,0, + 0,-240,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-418, + 0,0,0,0,0,0,0,-229,0,0, + 0,0,0,-579,0,0,0,-150,0,0, + 0,-406,0,0,0,-232,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-216,0,0,0,0,0, + 0,-270,0,0,0,0,0,0,0,0, + 0,-354,0,0,0,0,-233,0,0,0, + 0,0,-523,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-304,0,-217,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-242,0,0,-622,0,0,0, + 0,-524,0,0,0,-218,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-219,0,-235,0,0, + 0,-245,0,0,0,-630,0,-220,0,0, + 0,-298,-321,0,0,-266,0,-317,0,0, + -475,-611,0,0,0,0,0,0,0,0, + 0,0,0,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,-320,-221,0,0,-222,-268,0,0,0, + -467,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-81,0,0,0,0,0,0,0, + 0,0,0,0,-389,0,0,0,0,0, + -269,0,0,0,-477,0,0,0,-286,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-599,0,-371, + 0,0,0,0,-628,0,0,0,0,0, + 0,0,0,0,-501,0,0,0,0,-287, + -398,-124,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,-365,0,0, + 0,0,0,0,0,-585,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-529, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-75,0,0,-610,-366,0,0,0,0, + 0,0,0,-223,0,-636,0,0,0,-224, + -399,0,0,0,0,0,0,0,-226,-230, + -544,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-581,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -293,0,0,0,-584,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-78,0,-297,0, + 0,0,0,0,-382,0,0,0,0,0, + -377,0,0,0,-308,-357,0,0,0,0, + 0,0,-181,-489,-236,-241,0,0,0,0, + -38,0,0,0,0,0,0,0,0,0, + 0,0,0,-246,0,0,-276,-299,0,0, + 0,0,0,0,0,0,0,-359,0,0, + -439,-6,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-153,0,-405,-248,0, + 0,0,-631,0,0,0,0,0,0,0, + -80,0,0,0,0,0,0,-378,0,0, + 0,0,0,0,0,0,0,0,0,0, + -250,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-420,-426, + 0,-261,0,0,0,0,0,0,0,0, + -13,0,0,0,0,-262,-264,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-138,-361,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-279,-280,0,0,0,0,0,0,0, + 0,0,-362,0,0,0,-384,0,-281,0, + -355,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -435,0,0,0,0,0,-558,0,0,0, + -364,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-375,-403,-94,0, + 0,0,0,0,0,0,-282,0,-20,-438, + -463,-464,-466,-117,0,0,0,0,0,-495, + 0,0,0,0,0,0,0,0,0,-580, + 0,0,0,0,0,0,0,0,0,-583, + 0,0,0,0,0,0,0,-476,0,0, + 0,0,0,0,-522,-479,-496,0,0,0, + -605,0,0,0,-43,-166,-167,-288,0,0, + 0,0,-307,0,0,0,0,0,0,-289, + 0,-290,0,0,0,0,0,0,0,0, + 0,0,0,-291,0,0,0,0,-300,0, + 0,0,0,0,0,-302,0,0,-492,0, + 0,0,0,0,0,0,-500,0,0,0, + 0,0,0,0,0,0,-303,0,0,0, + 0,-305,0,0,-306,0,0,0,0,0, + 0,0,-309,-512,0,0,0,0,0,-265, + 0,0,0,-511,0,-311,0,0,0,-342, + 0,0,0,-312,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-538,-313,0,-356,0,0,0,0,0, + 0,0,0,0,0,-372,0,0,-340,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -493,-73,0,0,0,0,0,0,-64,0, + 0,0,-27,0,-546,0,-518,0,0,0, + -526,0,0,0,0,0,0,0,0,-549, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-373,-551,0,0,0,0,0,-386, + -388,-555,0,-553,0,0,0,-589,0,0, + 0,-168,0,-556,-390,0,0,-590,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-502,0,-571,0,0,-559, + 0,-595,0,0,-616,0,0,0,0,0, + 0,-620,-271,-391,-392,0,0,0,0,0, + 0,-393,-395,0,-623,0,0,0,0,0, + 0,0,0,0,-141,0,0,0,0,0, + 0,-15,0,0,0,0,0,0,0,0, + 0,0,0,0,-29,-409,0,0,0,0, + -560,0,-195,0,0,0,0,-274,0,-561, + -562,0,-411,-412,0,-413,0,0,0,0, + -414,0,0,-428,0,0,0,0,-629,-614, + 0,-429,0,0,0,0,0,0,-597,0, + 0,0,0,0,-436,0,0,0,0,-24, + 0,0,0,0,0,-598,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-247,0,0, + -437,-197,-433,-609,0,0,0,-441,0,-442, + 0,0,0,0,0,0,0,-443,-444,0, + 0,0,0,0,0,0,0,-445,0,0, + 0,0,0,0,-577,-446,-447,0,-448,0, + -615,0,-618,0,0,0,-341,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-449,0,0,0,0,-633,0,0,0, + 0,0,-385,-450,0,-451,0,-452,-453,-134, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-627,-454,-432,0,0,0,0, + 0,0,0,0,0,-503,0,0,0,0, + -619,-455,-456,0,0,0,0,0,0,0, + -457,0,0,0,0,-458,0,0,0,0, + 0,0,0,0,0,0,-459,-460,-461,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-462,0,0,-468,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,-394,-470,-482,-484,0,0, + 0,0,-156,0,0,0,-485,-626,-637,-142, + 0,-624,0,0,0,0,-490,0,0,0, + 0,-494,-505,-506,0,0,0,0,0,-507, + 0,0,0,0,0,0,-60,0,0,0, + 0,0,0,-533,0,0,0,-534,0,0, + 0,0,0,0,0,0,0,-540,0,0, + 0,0,-472,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-483,-552, + -566,-567,0,-569,0,-572,-587,-596,-602,-604, + -612,-621,0,-634,0,0,0,0,0,-46, + 0,0,0,0,0,-182,0,0,0,0, + 0,-504,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-541,-486,0,0,0,0,0,0,0, + 0,0,0,-205,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-228,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -527,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-532,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-139,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-543,0, + 0,0,0,0,0,0,0,-547,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -231,0,-178,0,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,0,-591,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -586,0,0,0,0,0,0,-404,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-497, + 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,-252,0,0,0,0,-206,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-592,0, + 0,0,0,0,0,0,-200,0,0,0, + 0,0,0,-255,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-625,0,0,0,0,0,0,0, + -275,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,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,0,0,-253,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,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,-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,-179,0,0,0,0,0,0,0, + -519,0,0,0,0,0,0,0,0,-430, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,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,0,0,0, + 0,0,-186,0,0,0,-576,0,0,0, + 0,0,0,0,0,0,-471,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,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,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,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,0,0,0, + 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,-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,-632,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-244,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -1,0,0,0,0,-35,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-26,-251,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 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,-28,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,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,-531,0,0,0,0,0, + 0,0,0,0,0,-424,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,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,-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,-379,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-36,0,0,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, + -63,0,0,0,0,0,0,0,0,0, + 0,0,0,0,-575,0,0,0,-407,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -110,0,0,0,0,0,0,0,0,0, + 0,0,0,-201,0,0,0,-30,0,0, + 0,0,0,0,0,0,0,-431,0,-183, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-207,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -66,0,0,0,0,0,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,0,0,0,-417,0,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,-402, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-169, + -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,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,-324,0,0,0,0, + 0,0,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,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,-327,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,-11,0,0,0,0,0,0,0,0, + 0,0,0,0,-34,-185,0,0,0,0, + 0,0,-238,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-481,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,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-49, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-487, + 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, + 0,0,0,0,0,0,0,-52,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-381,0,0,0,0,-520,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + -87,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-88,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,-90,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, + -92,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,-95,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-128,0,0,0, + 0,-84,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-521,0,0,0,0,0,0,0,0, + 0,0,0,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,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-227,0,0,0, + 0,0,0,0,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,0, + 0,0,0,0,0,0,0,-322,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-323, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-380,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,-434,0,0,0,0,-85,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-488, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-86,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-285,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-517,0, + 0,0,0,0,-148,0,0,0,-239,-639, + -410,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-111,0,0,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,-158,0,0,0,0,-161, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,-210,0, + 0,0,0,0,0,-284,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,-295,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,-301,0,0,0,0,-550,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,-537,0,0,0,0,0,0,0,0, + 0,0,0,0,-578,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,-491, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,-606,0,0, + 0,0,0,0,0,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,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,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[] = { + 194,4,144,95,95,30,30,94,94,46, + 46,41,41,194,1,1,15,15,15,15, + 15,15,15,16,16,16,14,11,11,6, + 6,6,6,6,6,2,82,82,5,5, + 12,12,61,61,161,161,162,71,71,53, + 17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17, + 163,163,163,145,145,18,18,18,18,18, + 18,18,18,18,18,18,18,18,19,19, + 195,195,196,196,197,166,166,167,167,164, + 164,168,165,165,20,20,21,21,27,27, + 27,28,28,28,28,29,29,29,31,31, + 31,32,32,32,32,32,33,33,33,35, + 35,37,37,38,38,39,39,42,42,43, + 43,48,48,47,47,47,47,47,47,47, + 47,47,47,47,47,47,45,36,146,146, + 106,106,198,198,99,228,228,83,83,83, + 83,83,83,83,83,83,84,84,84,81, + 81,62,62,199,199,85,85,85,120,120, + 200,200,86,86,86,201,201,87,87,87, + 87,87,88,88,90,90,90,90,90,90, + 90,90,54,54,54,54,54,121,121,119, + 119,55,202,26,26,26,26,26,52,52, + 74,74,74,74,74,107,107,122,122,122, + 122,122,123,123,123,124,124,124,125,125, + 125,126,126,126,75,75,75,75,75,76, + 76,76,13,13,13,13,13,13,13,13, + 13,13,13,96,111,111,111,111,111,111, + 109,109,109,170,110,110,203,172,172,171, + 171,147,147,127,79,79,148,57,51,173, + 173,58,92,92,149,149,169,169,128,129, + 129,130,73,73,174,174,69,69,69,65, + 65,64,70,70,93,93,72,72,72,68, + 100,100,114,113,113,63,63,66,66,67, + 67,49,115,115,115,101,101,101,102,102, + 103,103,103,104,104,131,131,131,133,133, + 132,132,229,229,105,105,205,205,205,205, + 205,151,50,50,176,204,204,152,152,97, + 97,97,98,178,206,206,44,44,108,116, + 116,116,116,208,135,134,134,112,112,112, + 179,180,180,180,180,180,180,180,180,180, + 180,180,210,210,207,207,209,209,137,138, + 138,138,138,139,211,140,136,136,212,212, + 181,181,181,181,118,118,118,213,213,8, + 8,9,214,214,215,182,175,175,183,183, + 184,185,185,7,7,10,216,216,216,216, + 216,216,216,216,216,216,216,216,216,216, + 216,216,216,216,216,216,216,216,216,216, + 216,216,216,216,216,216,216,216,216,216, + 216,216,216,216,216,216,216,216,77,80, + 80,186,186,154,154,155,155,155,155,155, + 155,3,156,156,153,153,141,141,91,78, + 89,177,177,142,142,217,217,217,157,157, + 150,150,218,218,22,22,22,40,40,23, + 23,219,219,187,187,187,188,188,220,220, + 189,189,24,24,221,221,190,190,190,190, + 25,59,222,222,223,223,191,191,191,158, + 158,158,18,18,18,18,32,32,43,16, + 84,224,143,143,143,117,117,26,56,74, + 130,130,130,137,137,137,203,208,135,68, + 73,170,148,13,13,63,91,91,91,17, + 67,67,60,34,159,160,160,160,160,160, + 160,160,160,160,193,193,226,226,225,225, + 192,192,54,1,1,230,1607,35,3117,3049, + 3730,6746,27,30,31,1268,1243,26,28,3033, + 25,23,50,1960,106,76,77,108,589,534, + 535,536,4588,2339,2467,2415,1504,2516,2496,2583, + 540,2528,1222,2764,2586,2770,2238,1990,2779,143, + 273,1867,3723,158,144,3443,35,1296,32,3386, + 6777,27,30,31,1268,1243,57,28,156,232, + 1407,35,452,2219,3306,6793,1370,3331,200,1505, + 235,230,231,3757,35,1296,32,1898,6777,27, + 30,31,1268,1243,56,28,2219,3306,2508,35, + 1296,32,274,5488,27,30,31,1268,1243,26, + 28,3690,510,5233,242,245,248,251,3343,1407, + 35,279,1230,582,2941,1496,35,293,3119,3540, + 4992,5038,5368,2485,35,1296,32,1412,5488,27, + 30,31,1268,1243,59,28,1407,35,279,5785, + 2194,5279,3032,1681,35,3117,3049,612,6746,27, + 30,31,1268,1243,26,28,3033,25,23,50, + 1960,106,76,77,108,589,534,535,536,2196, + 2339,2467,2415,3938,2516,2496,2583,6286,2528,4001, + 2764,2586,2770,636,522,2779,143,273,878,50, + 158,144,2485,35,1296,32,4549,5488,27,30, + 31,1268,1243,58,28,341,232,4069,61,460, + 287,1496,3219,4103,1794,156,1332,235,230,231, + 1034,1833,1540,446,2291,4327,2768,3443,4573,537, + 534,535,536,287,2660,3373,60,1867,75,274, + 652,2156,2396,445,3209,3216,2009,4334,1618,2420, + 5364,242,245,248,251,3343,553,3158,3373,1230, + 582,1496,2225,2099,34,3119,3540,4992,5038,5368, + 2939,35,1296,32,2881,3880,27,30,31,1268, + 1243,337,28,750,76,1429,5785,1929,1504,3032, + 3149,35,1296,32,2912,3109,27,30,31,1268, + 1243,26,28,1933,25,23,50,1960,106,76, + 77,108,1496,35,4454,4262,341,2339,2467,2415, + 2344,2516,2496,2583,4103,2528,76,2764,2586,2770, + 3472,310,2779,143,314,1372,319,516,144,4573, + 2477,322,2139,388,3030,35,1296,32,3807,3880, + 27,30,31,1268,1243,337,28,517,3149,35, + 1296,32,2912,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,108, + 1496,35,1200,387,341,2339,2467,2415,3301,2516, + 2496,2583,4103,2528,2034,2764,2586,2770,3498,91, + 2779,143,5071,35,277,516,144,4573,317,1501, + 319,849,2898,312,888,2224,554,1028,320,446, + 1915,35,1296,32,451,517,41,30,31,1268, + 1243,512,3121,35,1296,32,442,838,2437,30, + 31,1268,1243,2982,1275,2254,2996,2388,3149,35, + 1296,32,2912,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,108, + 1675,1929,541,2876,341,2339,2467,2415,565,2516, + 2496,2583,4103,2528,2174,2764,2586,2770,182,2430, + 2779,143,1496,35,282,516,144,4573,567,512, + 3121,35,1296,32,2352,2948,40,30,31,1268, + 1243,3242,1496,3792,2996,517,3538,35,1296,32, + 2912,3109,27,30,31,1268,1243,26,28,1933, + 25,23,50,1960,106,76,77,108,1365,35, + 1200,387,341,2339,2467,2415,1880,2516,2496,2583, + 4103,2528,1140,2764,2586,2770,2298,4009,2779,143, + 1389,1429,4131,516,144,4573,3121,35,1296,32, + 2844,1140,3351,30,31,1268,1243,380,537,534, + 535,536,49,517,537,534,535,536,1540,512, + 3129,1640,538,534,535,536,1210,3301,2041,1548, + 3762,3245,3017,1520,2996,3618,35,1296,32,2613, + 3109,27,30,31,1268,1243,26,28,1933,25, + 23,50,1960,106,76,77,108,496,2047,2254, + 327,1324,2339,2467,2415,763,2516,2496,2583,681, + 2528,389,2764,2586,2770,426,2041,2779,143,3369, + 35,277,377,144,609,2137,2519,513,3230,35, + 1296,32,564,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,108, + 1496,35,2099,276,76,2339,2467,2415,2926,2516, + 2496,2583,3129,2528,1627,2764,2586,2770,3577,2041, + 2779,143,378,2137,1811,377,144,462,3692,35, + 1296,32,5250,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,108, + 1416,1421,934,1034,76,2339,2467,2415,930,2516, + 2496,2583,522,2528,1817,2764,2586,2770,542,2876, + 2780,164,1549,3129,374,378,2137,384,3304,35, + 1296,32,2484,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,108, + 3260,1496,35,2099,278,2339,2467,2415,1861,2516, + 2496,2583,3124,2528,1833,2764,2586,2770,76,2041, + 2779,143,877,325,76,377,144,2378,1504,76, + 385,3165,2605,1504,341,3458,35,1296,32,955, + 3109,27,30,31,1268,1243,26,28,1933,25, + 23,50,1960,106,76,77,108,3442,948,497, + 156,177,2339,2467,2415,3047,2516,2496,2583,2532, + 2528,2296,2764,2586,2770,378,2137,2779,143,42, + 2997,2033,550,144,3906,35,1296,32,372,3109, + 27,30,31,1268,1243,26,28,1933,25,23, + 50,1960,106,76,77,108,3369,35,280,6625, + 614,2339,2467,2415,4895,2516,2496,2583,5814,2528, + 462,2764,2586,2770,521,5451,2779,143,2248,91, + 375,158,144,3906,35,1296,32,1318,3109,27, + 30,31,1268,1243,26,28,1933,25,23,50, + 1960,106,76,77,108,1931,35,395,462,682, + 2339,2467,2415,6715,2516,2496,2583,3237,2528,76, + 2764,2586,2770,998,323,2779,143,2760,35,452, + 371,144,6793,221,3906,35,1296,32,1829,3109, + 27,30,31,1268,1243,26,28,1933,25,23, + 50,1960,106,76,77,108,70,1363,1931,35, + 395,2339,2467,2415,76,2516,2496,2583,1088,2528, + 1038,2764,2586,2770,548,3691,2779,143,4327,940, + 3032,371,144,3906,35,1296,32,2518,3109,27, + 30,31,1268,1243,26,28,1933,25,23,50, + 1960,106,76,77,108,3122,1496,35,293,76, + 2339,2467,2415,3934,2516,2496,2583,3129,2528,2041, + 2764,2586,2770,3416,3839,2779,143,1504,1504,76, + 371,144,2430,4267,370,3458,35,1296,32,3535, + 3109,27,30,31,1268,1243,26,28,1933,25, + 23,50,1960,106,76,77,108,379,1034,160, + 156,93,2339,2467,2415,3043,2516,2496,2583,162, + 2528,2684,2764,2586,2770,609,2137,2779,143,3130, + 2685,2058,550,144,3828,369,1496,3306,3378,35, + 1296,32,3571,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,108, + 449,3209,3216,462,1206,2339,2467,2415,6720,2516, + 2496,2583,3048,2528,76,2764,2586,2770,5407,2821, + 2779,143,4456,2911,367,142,144,3906,35,1296, + 32,3129,3109,27,30,31,1268,1243,26,28, + 1933,25,23,50,1960,106,76,77,108,1496, + 35,2099,281,76,2339,2467,2415,5479,2516,2496, + 2583,3063,2528,462,2764,2586,2770,3416,4643,2779, + 143,1504,1978,437,155,144,2948,462,3906,35, + 1296,32,6739,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,108, + 1496,35,3794,160,1140,2339,2467,2415,1825,2516, + 2496,2583,3778,2528,549,2764,2586,2770,76,2065, + 2779,143,703,288,2338,154,144,3906,35,1296, + 32,3301,3109,27,30,31,1268,1243,26,28, + 1933,25,23,50,1960,106,76,77,108,1496, + 35,2099,3793,1036,2339,2467,2415,1825,2516,2496, + 2583,560,2528,3416,2764,2586,2770,1504,3140,2779, + 143,1937,2484,2849,153,144,3906,35,1296,32, + 5010,3109,27,30,31,1268,1243,26,28,1933, + 25,23,50,1960,106,76,77,108,76,160, + 550,1140,5551,2339,2467,2415,2420,2516,2496,2583, + 3129,2528,390,2764,2586,2770,426,351,2779,143, + 1937,326,333,152,144,3906,35,1296,32,3301, + 3109,27,30,31,1268,1243,26,28,1933,25, + 23,50,1960,106,76,77,108,2386,35,2099, + 276,2325,2339,2467,2415,2031,2516,2496,2583,1197, + 2528,76,2764,2586,2770,2582,358,2779,143,3264, + 332,333,151,144,3906,35,1296,32,4461,3109, + 27,30,31,1268,1243,26,28,1933,25,23, + 50,1960,106,76,77,108,1496,3861,2099,74, + 302,2339,2467,2415,1825,2516,2496,2583,1656,2528, + 1977,2764,2586,2770,521,2948,2779,143,1937,3659, + 2406,150,144,3906,35,1296,32,4538,3109,27, + 30,31,1268,1243,26,28,1933,25,23,50, + 1960,106,76,77,108,2386,35,2099,3862,1240, + 2339,2467,2415,2031,2516,2496,2583,3129,2528,76, + 2764,2586,2770,1145,2948,2779,143,1937,3427,333, + 149,144,3906,35,1296,32,3301,3109,27,30, + 31,1268,1243,26,28,1933,25,23,50,1960, + 106,76,77,108,1496,35,2099,3868,2533,2339, + 2467,2415,2031,2516,2496,2583,579,2528,3416,2764, + 2586,2770,1504,352,2779,143,1937,328,333,148, + 144,3906,35,1296,32,3465,3109,27,30,31, + 1268,1243,26,28,1933,25,23,50,1960,106, + 76,77,108,88,160,1345,102,1817,2339,2467, + 2415,392,2516,2496,2583,426,2528,3416,2764,2586, + 2770,1504,1126,2779,143,1937,3435,333,147,144, + 3906,35,1296,32,646,3109,27,30,31,1268, + 1243,26,28,1933,25,23,50,1960,106,76, + 77,108,89,160,3587,102,4266,2339,2467,2415, + 391,2516,2496,2583,426,2528,76,2764,2586,2770, + 1856,3301,2779,143,3529,3519,333,146,144,3906, + 35,1296,32,1132,3109,27,30,31,1268,1243, + 26,28,1933,25,23,50,1960,106,76,77, + 108,24,459,461,1476,76,2339,2467,2415,726, + 2516,2496,2583,1817,2528,3606,2764,2586,2770,1324, + 3884,2779,143,3546,3301,6825,145,144,4296,35, + 1296,32,2586,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,108, + 2311,35,1200,387,376,2339,2467,2415,1817,2516, + 2496,2583,2908,2528,462,2764,2586,2770,2768,6858, + 2780,164,3906,35,1296,32,1318,3109,27,30, + 31,1268,1243,26,28,1933,25,23,50,1960, + 106,76,77,108,273,1493,420,1929,552,2339, + 2467,2415,1817,2516,2496,2583,321,2528,458,2764, + 2586,2770,2855,530,2779,143,1504,1318,2107,159, + 144,3828,301,3906,35,1296,32,3777,3109,27, + 30,31,1268,1243,26,28,1933,25,23,50, + 1960,106,76,77,108,76,3800,70,156,1888, + 2339,2467,2415,324,2516,2496,2583,3719,2528,1880, + 2764,2586,2770,298,3656,2779,143,1931,35,395, + 578,144,3906,35,1296,32,3768,3109,27,30, + 31,1268,1243,26,28,1933,25,23,50,1960, + 106,76,77,108,557,72,77,6462,1318,2339, + 2467,2415,2660,2516,2496,2583,3129,2528,742,2764, + 2586,2770,1817,76,2779,143,3301,1245,2420,140, + 144,5064,3971,35,1296,32,6812,3109,27,30, + 31,1268,1243,26,28,1933,25,23,50,1960, + 106,76,77,108,561,3301,1648,1034,403,2339, + 2467,2415,3768,2516,2496,2583,3718,2528,555,2764, + 2586,2770,2420,2506,2779,143,2752,3301,524,189, + 144,4296,35,1296,32,2861,3109,27,30,31, + 1268,1243,26,28,1933,25,23,50,1960,106, + 76,77,108,1496,35,1200,387,2948,2339,2467, + 2415,3874,2516,2496,2583,1318,2528,51,2764,2586, + 2770,3301,295,2780,164,4296,35,1296,32,3301, + 3109,27,30,31,1268,1243,26,28,1933,25, + 23,50,1960,106,76,77,108,273,177,2340, + 2420,5208,2339,2467,2415,4266,2516,2496,2583,69, + 2528,179,2764,2586,2770,76,381,2780,164,1504, + 3301,1318,1496,35,1200,387,4296,35,1296,32, + 422,3109,27,30,31,1268,1243,26,28,1933, + 25,23,50,1960,106,76,77,108,76,275, + 68,156,2095,2339,2467,2415,1817,2516,2496,2583, + 3430,2528,428,2764,2586,2770,273,198,2780,164, + 4296,35,1296,32,292,3109,27,30,31,1268, + 1243,26,28,1933,25,23,50,1960,106,76, + 77,108,3526,3818,284,1817,76,2339,2467,2415, + 2144,2516,2496,2583,1819,2528,4266,2764,2586,2770, + 270,1318,2780,164,538,534,535,536,338,4554, + 454,4296,35,1296,32,421,3109,27,30,31, + 1268,1243,26,28,1933,25,23,50,1960,106, + 76,77,108,71,1496,35,1200,387,2339,2467, + 2415,97,2516,2496,2583,354,2528,197,2764,2586, + 2770,3301,530,2780,164,4426,35,1296,32,424, + 3109,27,30,31,1268,1243,26,28,1933,25, + 23,50,1960,106,76,77,108,1949,430,3301, + 98,53,2339,2467,2415,76,2516,2496,2583,1587, + 2528,4393,2764,2586,2770,3301,3301,2780,164,538, + 534,535,536,76,4588,1830,1228,636,783,52, + 581,4612,35,1296,32,3807,6682,27,30,31, + 1268,1243,337,28,1983,2980,570,3936,3129,341, + 3374,4198,2041,537,534,535,536,4103,3301,156, + 156,1318,4491,35,1200,387,353,1178,2680,2625, + 180,5351,4573,530,2755,237,1755,349,76,3873, + 3124,4917,4230,3129,589,534,535,536,539,1034, + 2639,1496,35,1200,387,317,1501,319,4464,2046, + 312,888,228,330,3339,195,273,297,609,2137, + 374,3409,35,1296,32,3091,3880,27,30,31, + 1268,1243,337,28,1034,232,2522,406,2961,76, + 76,5024,1243,1402,2035,49,235,230,231,2041, + 350,1540,1478,293,1640,523,2492,1134,342,2100, + 1904,347,1289,407,408,409,709,402,274,304, + 308,767,3108,537,534,535,536,3490,3301,5233, + 242,245,248,251,3343,314,1372,319,1230,582, + 1980,1210,2493,1565,3119,3540,4992,5038,5368,538, + 534,535,536,3301,2894,609,2137,3301,559,4927, + 1557,4296,35,1296,32,5785,3109,27,30,31, + 1268,1243,26,28,1933,25,23,50,1960,106, + 76,77,108,558,2979,6798,196,90,2339,2467, + 2415,76,2516,2496,2583,4581,2528,4851,2764,2586, + 3732,1962,35,3766,32,3807,6682,27,30,31, + 1268,1243,337,28,878,410,412,3683,3301,1862, + 35,1200,387,537,534,535,536,4836,1196,2064, + 2420,3301,2859,4261,4715,35,1200,387,2041,1178, + 76,3833,239,889,1952,1275,4993,237,348,1393, + 462,589,534,535,536,6879,589,534,535,536, + 3416,571,544,49,1504,317,1501,319,2420,2046, + 312,888,1640,330,2205,3417,3301,3301,273,401, + 1129,1496,35,1200,387,4587,4001,4001,2244,3124, + 636,636,232,4813,609,2137,160,232,4045,3260, + 2765,5024,2856,240,230,231,3292,3382,235,230, + 231,341,341,341,2946,537,534,535,536,2494, + 4103,4103,156,156,294,433,1824,1034,1034,1318, + 274,2291,2291,3017,861,4573,4573,3301,4657,418, + 3735,5364,242,245,248,251,3343,1947,2156,2156, + 1230,582,2947,2536,2565,3118,3119,3540,4992,5038, + 5368,2046,285,753,76,331,3574,3087,2084,1039, + 1496,35,1200,387,3301,201,2517,5785,44,2997, + 4296,35,1296,32,2032,3109,27,30,31,1268, + 1243,26,28,1933,25,23,50,1960,106,76, + 77,108,76,3913,450,2207,2274,2339,2467,2415, + 3123,2516,2496,2583,49,2528,2217,2764,3717,4296, + 35,1296,32,46,3109,27,30,31,1268,1243, + 26,28,1933,25,23,50,1960,106,76,77, + 108,1318,1931,35,2323,3773,2339,2467,2415,3139, + 2516,2496,2583,3338,2528,3301,3701,3052,35,1296, + 32,1318,6682,27,30,31,1268,1243,337,28, + 3301,537,534,535,536,537,534,535,536,537, + 534,535,536,2857,76,4191,49,199,3398,3780, + 3037,3039,76,2752,3301,1640,2133,6347,1318,441, + 4255,455,4001,952,3301,97,636,405,3180,35, + 1296,32,3807,3880,27,30,31,1268,1243,337, + 28,317,1501,319,4319,2046,313,888,341,331, + 537,534,535,536,3432,76,4103,76,156,1504, + 3301,2276,76,1034,1694,76,2182,2291,5261,2665, + 350,4573,4465,1326,2183,3297,4903,3124,344,2100, + 1904,347,3489,3724,2156,1496,35,1200,387,2587, + 67,156,317,1501,319,3605,847,312,888,341, + 3491,3339,1806,35,1296,32,3807,3880,27,30, + 31,1268,1243,337,28,1560,4942,537,534,535, + 536,3301,1534,3800,537,534,535,536,289,432, + 3301,3301,636,4002,4067,4101,4132,537,534,535, + 536,4197,5261,1578,2606,537,534,535,536,76, + 1318,66,3143,2766,228,2847,304,308,767,3301, + 65,64,966,3017,156,3271,317,1501,319,1034, + 1364,312,888,2625,180,3339,3301,1980,203,215, + 910,3332,202,212,213,214,216,588,632,55, + 169,3237,589,534,535,536,222,3520,1540,35, + 293,3385,4131,3524,3301,1140,54,3124,166,168, + 262,183,167,170,171,172,173,174,1491,2767, + 537,534,535,536,537,534,535,536,2858,4510, + 304,308,767,232,101,5064,269,459,1210,557, + 6812,3301,3017,3301,244,230,231,4296,35,1296, + 32,741,3109,27,30,31,1268,1243,26,28, + 1933,25,23,50,1960,106,76,77,108,2855, + 2465,3674,563,2526,2339,2467,2415,4595,2516,2496, + 2583,2912,3706,1,651,1783,749,636,3523,3765, + 1806,35,1296,32,3807,3880,27,30,31,1268, + 1243,337,28,341,1318,2670,1362,529,504,228, + 3124,4103,537,534,535,536,76,966,676,156, + 1504,3301,4999,5012,1034,1196,4573,3653,2625,180, + 5261,2074,4510,203,215,910,1325,202,212,213, + 214,216,588,632,532,169,1393,2842,3067,3068, + 193,2933,156,2340,317,1501,319,502,503,312, + 888,3500,558,3339,168,3221,184,167,170,171, + 172,173,174,4296,35,1296,32,181,3109,27, + 30,31,1268,1243,26,28,1933,25,23,50, + 1960,106,76,77,108,385,2972,193,3389,636, + 2339,2467,2415,2669,2516,2496,3675,2404,3301,4198, + 4066,359,1496,35,1200,387,429,2770,305,308, + 767,228,3545,4263,4331,537,534,535,536,966, + 1230,156,538,534,535,536,1034,2192,4447,528, + 2625,180,4045,4334,5031,203,215,910,3299,202, + 212,213,214,216,588,632,431,169,3280,537, + 534,535,536,2961,35,3766,32,3807,3880,27, + 30,31,1268,1243,337,28,168,3017,3787,167, + 170,171,172,173,174,3814,534,535,536,481, + 4462,4043,3128,636,4496,3779,2113,3939,4537,1555, + 4003,1360,4591,4018,4068,2046,8018,8018,8018,330, + 1365,35,1200,387,8018,228,76,8018,8018,8018, + 2912,8018,76,966,8018,156,1504,317,1501,319, + 1034,8018,312,888,2625,180,2205,5075,2286,203, + 215,910,341,202,212,213,214,216,588,632, + 4103,169,76,577,49,8018,1504,636,156,8018, + 8018,8018,8018,1640,2496,4573,8018,3501,3124,8018, + 168,1110,178,167,170,171,172,173,174,228, + 8018,2682,8018,3178,8018,8018,8018,966,156,156, + 4510,8018,8018,8018,1034,4134,8018,2716,2625,180, + 5095,418,3735,203,215,910,8018,202,212,213, + 214,216,588,632,8018,169,8018,537,534,535, + 536,2170,35,3766,32,3807,3880,27,30,31, + 1268,1243,337,28,168,3017,176,167,170,171, + 172,173,174,537,534,535,536,8018,3260,35, + 3766,32,3807,3880,27,30,31,1268,1243,337, + 28,4018,8018,3237,8018,8018,8018,8018,8018,358, + 3814,534,535,536,8018,1496,35,1200,387,8018, + 8018,8018,8018,8018,8018,317,1501,319,4018,673, + 312,888,8018,636,2205,2865,3253,3266,3214,35, + 1296,32,3807,3880,27,30,31,1268,1243,337, + 28,8018,317,1501,319,228,8018,312,888,49, + 8018,2205,8018,966,8018,156,8018,8018,1640,8018, + 1034,4196,8018,3496,2625,180,3965,4391,8018,203, + 215,910,8018,202,212,213,214,216,588,632, + 8018,169,8018,538,534,535,536,769,5275,418, + 3735,636,317,1501,319,76,8018,312,888,1504, + 168,3867,580,167,170,171,172,173,174,8018, + 8018,8018,8018,228,8018,5095,418,3735,8018,8018, + 8018,966,8018,156,8018,8018,8018,8018,1034,8018, + 8018,156,2625,180,8018,8018,8018,203,215,910, + 3611,202,212,213,214,216,588,632,8018,169, + 8018,865,8018,8018,8018,636,350,8018,2415,8018, + 8018,8018,3124,4045,342,2100,1904,347,168,8018, + 177,167,170,171,172,173,174,228,611,8018, + 537,534,535,536,4510,966,8018,156,8018,8018, + 2496,8018,1034,8018,3124,8018,2625,180,3017,8018, + 8018,203,215,910,8018,202,212,213,214,216, + 588,632,8018,169,8018,961,4510,8018,8018,636, + 8018,8018,4069,8018,8018,8018,2046,3524,8018,8018, + 330,3124,168,8018,187,167,170,171,172,173, + 174,228,8018,8018,537,534,535,536,8018,966, + 8018,156,8018,4510,8018,8018,1034,8018,5520,8018, + 2625,180,4334,358,8018,203,215,910,8018,202, + 212,213,214,216,588,632,8018,169,8018,1057, + 8018,8018,8018,636,8018,8018,8018,2192,8018,3167, + 3253,3266,4045,8018,4199,358,168,8018,3871,167, + 170,171,172,173,174,228,8018,8018,8018,537, + 534,535,536,966,8018,156,538,534,535,536, + 1034,3394,3253,3266,2625,180,8018,3017,8018,203, + 215,910,504,202,212,213,214,216,588,632, + 8018,169,8018,1153,8018,8018,8018,636,8018,8018, + 8018,2192,8018,8018,8018,2046,4045,2708,8018,330, + 168,8018,192,167,170,171,172,173,174,228, + 8018,8018,8018,537,534,535,536,966,8018,156, + 8018,501,503,8018,1034,8018,8018,3183,2625,180, + 8018,3017,8018,203,215,910,8018,202,212,213, + 214,216,588,632,8018,169,8018,1249,8018,8018, + 8018,636,8018,3274,3874,8018,8018,8018,8018,2046, + 8018,8018,4326,330,168,8018,186,167,170,171, + 172,173,174,228,8018,8018,537,534,535,536, + 8018,966,8018,156,538,534,535,536,1034,8018, + 8018,5520,2625,180,4334,8018,8018,203,215,910, + 8018,202,212,213,214,216,588,632,8018,169, + 1848,35,1296,32,5378,3880,27,30,31,1268, + 1243,337,28,8018,8018,8018,8018,8018,168,8018, + 194,167,170,171,172,173,174,4296,35,1296, + 32,8018,3109,27,30,31,1268,1243,26,28, + 1933,25,23,50,1960,106,76,77,108,8018, + 8018,8018,8018,8018,2339,2467,2415,8018,2516,3692, + 8018,8018,8018,4987,317,1501,319,4391,8018,312, + 888,3956,8018,3522,8018,3124,8018,8018,8018,2756, + 2598,35,1296,32,6619,3880,27,30,31,1268, + 1243,337,28,350,8018,8018,8018,4510,8018,8018, + 8018,342,2100,1904,347,8018,8018,8018,8018,8018, + 349,4296,35,1296,32,3514,3109,27,30,31, + 1268,1243,26,28,1933,25,23,50,1960,106, + 76,77,108,1496,35,1200,387,3937,2339,2467, + 2415,8018,2516,3693,317,1501,319,4262,8018,312, + 888,8018,8018,1028,8018,8018,350,8018,8018,538, + 534,535,536,8018,342,2100,1904,347,8018,537, + 534,535,536,350,8018,8018,504,49,340,8018, + 8018,342,2100,1904,347,8018,1640,4462,8018,8018, + 8018,8018,8018,8018,2335,3108,8018,8018,8018,8018, + 8018,4296,35,1296,32,364,3109,27,30,31, + 1268,1243,26,28,1933,25,23,50,1960,106, + 76,77,108,8018,8018,501,503,8018,2339,2467, + 2415,8018,3606,4296,35,1296,32,8018,3109,27, + 30,31,1268,1243,26,28,1933,25,23,50, + 1960,106,76,77,108,8018,8018,3866,8018,8018, + 2339,2467,2415,8018,3607,4296,35,1296,32,8018, + 3109,27,30,31,1268,1243,26,28,1933,25, + 23,50,1960,106,76,77,108,8018,8018,8018, + 8018,8018,2339,2467,2415,8018,3609,4296,35,1296, + 32,8018,3109,27,30,31,1268,1243,26,28, + 1933,25,23,50,1960,106,76,77,108,8018, + 8018,8018,8018,8018,2339,2467,2415,8018,3642,4296, + 35,1296,32,8018,3109,27,30,31,1268,1243, + 26,28,1933,25,23,50,1960,106,76,77, + 108,8018,8018,8018,8018,8018,2339,2467,2415,8018, + 3654,4296,35,1296,32,8018,3109,27,30,31, + 1268,1243,26,28,1933,25,23,50,1960,106, + 76,77,108,8018,8018,8018,8018,8018,2339,2467, + 2415,8018,3656,3648,35,1296,32,5378,3880,27, + 30,31,1268,1243,337,28,8018,1496,35,1200, + 387,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 8018,2119,8018,8018,8018,2912,4036,35,1296,32, + 8018,3109,27,30,31,1268,1243,26,28,1933, + 25,23,50,1960,585,76,77,228,8018,8018, + 8018,49,8018,8018,8018,966,8018,317,1501,319, + 1640,8018,312,888,8018,8018,525,8018,1702,8018, + 8018,205,215,910,8018,204,212,213,214,216, + 588,632,1495,1871,8018,8018,350,3124,4917,8018, + 8018,8018,8018,8018,342,2100,1904,347,206,208, + 210,709,8018,8018,589,534,535,536,526,228, + 8018,217,207,209,2393,35,1296,32,8018,6682, + 27,30,31,1268,1243,337,28,8018,2295,8018, + 8018,8018,8018,2522,406,2961,537,534,535,536, + 13,8018,5821,8018,8018,232,8018,8018,8018,8018, + 589,534,535,536,3017,8018,247,230,231,8018, + 407,408,409,709,8018,2393,35,1296,32,8018, + 6682,27,30,31,1268,1243,337,28,317,1501, + 319,8018,2046,315,888,4391,331,537,534,535, + 536,232,8018,8018,8018,8018,4131,8018,8018,8018, + 8018,2894,250,230,231,6347,8018,537,534,535, + 536,8018,8018,8018,8018,706,8018,8018,537,534, + 535,536,8018,8018,8018,4647,8018,8018,8018,317, + 1501,319,8018,2046,313,888,3017,331,4296,35, + 1296,32,8018,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,108, + 8018,8018,410,413,3254,2339,2467,3658,4296,35, + 1296,32,8018,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,108, + 8018,8018,8018,8018,8018,2339,2467,3659,3770,35, + 1296,32,8018,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,107, + 8018,8018,8018,4544,35,1200,387,8018,1178,8018, + 8018,8018,8018,8018,8018,8018,238,8018,8018,2041, + 1749,35,1200,387,8018,589,534,535,536,8018, + 8018,1806,35,1296,32,3807,3880,27,30,31, + 1268,1243,337,28,8018,4394,8018,273,8018,1496, + 35,1200,387,538,534,535,536,8018,8018,8018, + 8018,8018,8018,8018,49,8018,232,537,534,535, + 536,8018,8018,1640,8018,609,2137,236,230,231, + 8018,47,8018,8018,8018,4462,8018,8018,8018,8018, + 8018,755,8018,49,8018,317,1501,319,8018,274, + 312,888,1640,8018,3465,8018,8018,8018,8018,8018, + 1042,243,246,249,252,3343,8018,8018,8018,1230, + 583,4639,35,1296,32,3807,3880,27,30,31, + 1268,1243,337,28,4768,35,1200,387,2659,1178, + 8018,8018,8018,538,534,535,536,238,2192,8018, + 76,8018,8018,4045,2912,8018,589,534,535,536, + 589,534,535,536,8018,8018,8018,8018,8018,8018, + 537,534,535,536,8018,8018,341,2342,273,8018, + 8018,2912,8018,8018,4103,317,1501,319,3017,8018, + 312,888,8018,8018,3465,8018,8018,232,8018,4573, + 8018,232,8018,228,8018,8018,8018,8018,236,230, + 231,966,253,230,231,8018,2046,3190,8018,8018, + 330,1799,35,1200,387,8018,8018,205,215,910, + 274,204,212,213,214,216,588,632,8018,8018, + 8018,8018,243,246,249,252,3343,8018,3347,2433, + 1230,583,8018,2912,206,208,210,709,1496,35, + 1200,387,8018,8018,8018,49,8018,217,207,209, + 8018,8018,8018,8018,1640,228,8018,8018,8018,8018, + 8018,8018,47,966,76,8018,8018,8018,2912,8018, + 2035,8018,1072,8018,8018,4045,1986,8018,5821,205, + 215,910,49,204,212,213,214,216,588,632, + 341,1640,537,534,535,536,8018,8018,4103,1129, + 4001,2524,8018,8018,636,2912,206,208,210,709, + 3017,8018,8018,4573,8018,8018,8018,8018,8018,217, + 207,209,8018,8018,8018,8018,341,228,8018,8018, + 8018,3192,8018,8018,4103,966,156,8018,2046,8018, + 8018,1034,331,8018,8018,2291,8018,8018,2538,4573, + 5821,205,215,910,8018,204,212,213,214,216, + 588,632,2156,350,8018,8018,8018,2631,8018,8018, + 8018,344,2100,1904,347,8018,8018,8018,206,208, + 210,709,8018,8018,8018,8018,8018,8018,8018,8018, + 8018,217,207,209,8018,8018,4296,35,1296,32, + 8018,3109,27,30,31,1268,1243,26,28,1933, + 25,23,50,1960,106,76,77,108,8018,8018, + 3120,8018,5821,2339,3578,4296,35,1296,32,8018, + 3109,27,30,31,1268,1243,26,28,1933,25, + 23,50,1960,106,76,77,108,8018,8018,8018, + 8018,8018,2339,3580,4296,35,1296,32,8018,3109, + 27,30,31,1268,1243,26,28,1933,25,23, + 50,1960,106,76,77,108,8018,4296,35,1296, + 32,3588,3109,27,30,31,1268,1243,26,28, + 1933,25,23,50,1960,106,76,77,108,8018, + 4296,35,1296,32,3589,3109,27,30,31,1268, + 1243,26,28,1933,25,23,50,1960,106,76, + 77,108,2251,8018,8018,8018,2912,3598,8018,8018, + 8018,8018,8018,8018,8018,2750,76,8018,8018,8018, + 2912,8018,8018,2841,8018,8018,8018,8018,228,8018, + 8018,8018,8018,8018,8018,8018,966,589,534,535, + 536,8018,341,8018,2192,589,534,535,536,4045, + 4103,1987,205,215,910,2912,204,212,213,214, + 216,588,632,8018,8018,4573,537,534,535,536, + 8018,8018,8018,8018,8018,8018,8018,228,232,206, + 208,210,709,3204,3017,966,232,8018,8018,584, + 230,231,518,207,209,8018,8018,236,230,231, + 2615,205,215,910,2912,204,212,213,214,216, + 588,632,2046,8018,8018,8018,6689,8018,8018,8018, + 8018,8018,8018,8018,8018,8018,228,8018,206,208, + 210,709,8018,8018,966,8018,8018,8018,8018,8018, + 76,218,207,209,783,8018,8018,8018,8018,2706, + 205,215,910,2912,204,212,213,214,216,588, + 632,8018,8018,8018,8018,8018,341,8018,8018,8018, + 8018,8018,8018,8018,8018,228,156,206,208,210, + 709,8018,8018,966,8018,188,8018,8018,8018,4068, + 608,207,209,8018,8018,8018,8018,8018,2797,205, + 215,910,2912,204,212,213,214,216,588,632, + 94,8018,76,8018,8018,8018,2912,76,8018,8018, + 8018,2912,8018,8018,228,8018,206,208,210,709, + 8018,8018,966,8018,8018,8018,8018,8018,341,607, + 207,209,8018,341,8018,8018,4103,8018,205,215, + 910,4103,204,212,213,214,216,588,632,8018, + 3345,4573,8018,8018,8018,8018,4573,8018,8018,8018, + 8018,8018,8018,8018,8018,206,208,210,709,3166, + 8018,8018,8018,8018,508,8018,8018,8018,606,207, + 209,4296,35,1296,32,8018,3109,27,30,31, + 1268,1243,26,28,1933,25,23,50,1960,106, + 76,77,85,4296,35,1296,32,8018,3109,27, + 30,31,1268,1243,26,28,1933,25,23,50, + 1960,106,76,77,83,4296,35,1296,32,8018, + 3109,27,30,31,1268,1243,26,28,1933,25, + 23,50,1960,106,76,77,82,4296,35,1296, + 32,8018,3109,27,30,31,1268,1243,26,28, + 1933,25,23,50,1960,106,76,77,81,4296, + 35,1296,32,8018,3109,27,30,31,1268,1243, + 26,28,1933,25,23,50,1960,106,76,77, + 80,4296,35,1296,32,8018,3109,27,30,31, + 1268,1243,26,28,1933,25,23,50,1960,106, + 76,77,79,4296,35,1296,32,8018,3109,27, + 30,31,1268,1243,26,28,1933,25,23,50, + 1960,106,76,77,78,4296,2225,1296,2324,8018, + 3109,27,30,31,1268,1243,26,28,1933,25, + 23,50,1960,106,76,77,84,2888,8018,8018, + 8018,2912,4101,35,1296,32,8018,3109,27,30, + 31,1268,1243,26,28,1933,25,23,50,1960, + 574,76,77,228,8018,8018,8018,8018,8018,8018, + 8018,966,76,8018,8018,8018,2912,8018,8018,8018, + 8018,8018,8018,8018,8018,8018,2979,205,215,910, + 2912,204,212,213,214,216,588,632,341,8018, + 8018,8018,8018,8018,8018,8018,4103,8018,8018,8018, + 8018,8018,228,8018,206,208,210,709,8018,8018, + 966,4573,8018,8018,8018,8018,8018,519,207,209, + 8018,8018,8018,8018,8018,8018,205,215,910,506, + 204,212,213,214,216,588,632,2575,35,1296, + 32,8018,3880,27,30,31,1268,1243,337,28, + 8018,8018,8018,206,208,210,709,8018,8018,538, + 534,535,536,8018,8018,8018,303,207,209,3841, + 35,1296,32,8018,3109,27,30,31,1268,1243, + 26,28,1933,25,23,50,1960,106,76,77, + 104,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 8018,317,1501,319,8018,8018,600,888,4296,35, + 1296,32,8018,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,106,76,77,110, + 4296,35,1296,32,8018,3109,27,30,31,1268, + 1243,26,28,1933,25,23,50,1960,106,76, + 77,109,4296,35,1296,32,8018,3109,27,30, + 31,1268,1243,26,28,1933,25,23,50,1960, + 106,76,77,105,3070,8018,8018,8018,2912,4166, + 35,1296,32,8018,3109,27,30,31,1268,1243, + 26,28,1933,25,23,50,1960,572,76,77, + 228,8018,8018,8018,8018,8018,8018,8018,966,8018, + 76,8018,8018,8018,783,8018,8018,8018,8018,8018, + 8018,8018,8018,8018,205,215,910,8018,204,212, + 213,214,216,588,632,8018,341,8018,8018,8018, + 8018,8018,8018,8018,8018,8018,156,8018,8018,8018, + 8018,206,208,210,709,188,8018,8018,8018,4068, + 8018,8018,8018,8018,498,207,209,4231,35,1296, + 32,8018,3109,27,30,31,1268,1243,26,28, + 1933,25,23,50,1960,86,76,77,4361,35, + 1296,32,8018,3109,27,30,31,1268,1243,26, + 28,1933,25,23,50,1960,3486,76,77,2415, + 8018,8018,8018,3124,4045,2195,8018,8018,8018,4988, + 76,4001,8018,8018,2912,636,8018,8018,8018,8018, + 3360,537,534,535,536,4510,8018,589,534,535, + 536,589,534,535,536,8018,341,341,8018,3017, + 8018,8018,8018,8018,4103,4103,8018,156,8018,8018, + 8018,8018,1034,8018,8018,8018,2291,8018,8018,4573, + 4573,8018,1365,35,1200,387,8018,2046,232,5046, + 8018,330,232,2156,4045,8018,8018,533,3227,235, + 230,231,8018,235,230,231,8018,8018,8018,8018, + 8018,537,534,535,536,1799,35,1200,387,3347, + 1365,35,1200,387,358,8018,49,8018,8018,3017, + 8018,8018,5793,8018,8018,1640,5793,8018,8018,2163, + 35,1200,387,3493,8018,8018,1978,35,1200,387, + 3167,3253,3266,2682,8018,8018,8018,2046,8018,49, + 8018,6689,8018,8018,49,8018,8018,8018,1640,8018, + 8018,8018,8018,1640,8018,8018,47,1799,35,1200, + 387,47,8018,49,624,614,1526,8018,624,614, + 49,1132,1640,1365,35,1200,387,8018,4657,1640, + 47,8018,783,8018,8018,8018,8018,1802,8018,8018, + 1676,8018,1365,35,1200,387,8018,2613,626,8018, + 8018,49,627,8018,341,1365,35,1200,387,8018, + 1640,8018,8018,8018,156,8018,8018,49,1899,8018, + 76,8018,8018,188,783,8018,1640,4068,2370,8018, + 613,6629,8018,8018,47,96,49,8018,1365,35, + 1200,387,8018,8018,1020,1640,341,8018,8018,49, + 8018,8018,8018,47,8018,8018,156,8018,1640,1365, + 35,1200,387,2804,8018,188,47,8018,8018,4068, + 8018,8018,8018,8018,8018,8018,3171,8018,8018,8018, + 8018,8018,49,8018,8018,8018,8018,8018,8018,8018, + 8018,1640,8018,8018,8018,8018,8018,8018,190,47, + 8018,8018,8018,49,8018,8018,8018,8018,8018,3455, + 8018,8018,1640,8018,8018,8018,8018,8018,8018,8018, + 47,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 3782,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 3384,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 8018,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 8018,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 8018,8018,8018,8018,8018,8018,8018,8018,3388,8018, + 0,1,229,829,0,500,5772,0,1,229, + 0,39,8652,0,39,8651,631,0,39,8033, + 0,39,8032,0,1,984,0,1060,1,0, + 39,1,8652,0,39,1,8651,0,39,1, + 8033,0,39,1,8032,0,1,3175,0,1, + 901,0,229,219,0,1,880,0,1,923, + 0,1,1077,0,8252,223,0,8251,223,0, + 880,223,0,923,223,0,1077,223,0,8623, + 223,0,8354,223,0,8353,223,0,8279,223, + 0,8278,223,0,8277,223,0,8276,223,0, + 8275,223,0,8274,223,0,8273,223,0,8272, + 223,0,8252,224,0,8251,224,0,880,224, + 0,923,224,0,1077,224,0,8623,224,0, + 8354,224,0,8353,224,0,8279,224,0,8278, + 224,0,8277,224,0,8276,224,0,8275,224, + 0,8274,224,0,8273,224,0,8272,224,0, + 8252,225,0,8251,225,0,880,225,0,923, + 225,0,1077,225,0,8623,225,0,8354,225, + 0,8353,225,0,8279,225,0,8278,225,0, + 8277,225,0,8276,225,0,8275,225,0,8274, + 225,0,8273,225,0,8272,225,0,1077,393, + 0,923,393,0,880,393,0,283,393,0, + 8252,226,0,8251,226,0,880,226,0,923, + 226,0,1077,226,0,8623,226,0,8354,226, + 0,8353,226,0,8279,226,0,8278,226,0, + 8277,226,0,8276,226,0,8275,226,0,8274, + 226,0,8273,226,0,8272,226,0,283,286, + 0,8252,227,0,8251,227,0,880,227,0, + 923,227,0,1077,227,0,8623,227,0,8354, + 227,0,8353,227,0,8279,227,0,8278,227, + 0,8277,227,0,8276,227,0,8275,227,0, + 8274,227,0,8273,227,0,8272,227,0,1374, + 386,0,39,8651,0,8652,48,0,8651,48, + 0,8033,48,0,8032,48,0,8252,587,0, + 8251,587,0,880,587,0,923,587,0,1077, + 587,0,8623,587,0,8354,587,0,8353,587, + 0,8279,587,0,8278,587,0,8277,587,0, + 8276,587,0,8275,587,0,8274,587,0,8273, + 587,0,8272,587,0,8252,241,0,8251,241, + 0,880,241,0,923,241,0,1077,241,0, + 8623,241,0,8354,241,0,8353,241,0,8279, + 241,0,8278,241,0,8277,241,0,8276,241, + 0,8275,241,0,8274,241,0,8273,241,0, + 8272,241,0,8622,241,0,8621,241,0,8290, + 241,0,8289,241,0,8288,241,0,8287,241, + 0,8286,241,0,8285,241,0,8284,241,0, + 8283,241,0,8282,241,0,8281,241,0,8280, + 241,0,39,241,8652,0,39,241,8651,630, + 0,39,241,8033,0,39,241,8032,0,8056, + 241,0,1,329,0,38,901,0,38,8652, + 0,38,8651,0,38,8033,0,38,8032,0, + 453,1589,0,439,1634,0,1374,29,0,8030, + 1,0,1679,316,0,1077,597,0,923,597, + 0,880,597,0,601,597,0,601,596,0, + 8081,75,0,8080,75,0,685,75,0,713, + 75,0,1847,75,0,1444,75,0,1,599, + 0,1,443,0,457,2227,0,456,2333,0, + 35,33,0,47,37,0,8030,382,0,8029, + 382,0,1077,599,0,923,599,0,880,599, + 0,880,629,0,923,629,0,1077,629,0, + 8633,629,0,500,2929,0,8056,1,229,0, + 39,1,229,0,229,415,0,1,1843,0, + 1,8622,0,1,8621,0,1,8290,0,1, + 8289,0,1,8288,0,1,8287,0,1,8286, + 0,1,8285,0,1,8284,0,1,8283,0, + 1,8282,0,1,8281,0,1,8280,0,1, + 6242,0,8652,37,0,8651,37,0,8033,37, + 0,8032,37,0,43,8054,0,43,37,0, + 1449,91,0,32,34,0,8026,1,0,39, + 901,0,1077,329,0,923,329,0,880,329, + 0,39,241,8651,0,1,1575,0,1,1628, + 0,229,220,0,4839,126,0,8252,625,0, + 8251,625,0,880,625,0,923,625,0,1077, + 625,0,8623,625,0,8354,625,0,8353,625, + 0,8279,625,0,8278,625,0,8277,625,0, + 8276,625,0,8275,625,0,8274,625,0,8273, + 625,0,8272,625,0,880,628,0,923,628, + 0,1077,628,0,8633,628,0,8028,404,0, + 8027,404,0,229,414,0,8030,586,382,0, + 8029,586,382,0,1,229,3381,0,8027,229, + 0,3395,229,0,8024,1,0,8023,1,0, + 237,1693,0,387,32,0,386,29,0,1077, + 444,0,923,444,0,880,444,0,8056,444, + 0,39,444,0,329,444,0,8054,45,0, + 37,45,0,8030,575,382,0,8029,575,382, + 0,8030,573,382,0,8029,573,382,0,8030, + 87,382,0,8029,87,382,0,1,92,0, + 3767,229,0,10,12,0,8056,1,0,39, + 1,0,585,574,0,8623,334,0,8354,334, + 0,8353,334,0,4839,128,0,4839,127,0, + 3922,100,0,8,10,12,0,8652,2,37, + 0,8651,2,37,0,8033,2,37,0,8032, + 2,37,0,8652,36,0,8651,36,0,8033, + 36,0,8032,36,0,1077,594,0,923,594, + 0,880,594,0,1077,593,0,923,593,0, + 880,593,0,537,538,0,3150,103,0,2825, + 99,0,1077,95,0,923,95,0,880,95, + 0,8056,95,0,39,95,0,329,95,0, + 8030,586,575,382,0,586,575,0,35,73, + 0,3870,382,0,1077,594,595,0,923,594, + 595,0,880,594,595,0,594,595,0,278, + 2188,0,8,12,0,185,4383,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,0, + 50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,67,68,0, + 70,71,72,73,0,0,0,3,78,79, + 31,81,13,83,84,85,86,87,88,89, + 0,91,92,93,94,95,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,0,50,51,52,53, + 54,55,56,57,58,59,60,61,62,63, + 64,65,66,67,68,0,70,71,72,73, + 101,102,96,97,78,79,0,81,13,83, + 84,85,86,87,88,89,10,91,92,93, + 94,95,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,0,50,51,52,53,54,55,56,57, + 58,59,60,61,62,63,64,65,66,67, + 68,0,70,71,72,73,101,102,0,0, + 78,79,0,81,13,83,84,85,86,87, + 88,89,0,91,92,93,94,95,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,0,50,51, + 52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,66,67,68,0,70,71, + 72,73,101,102,96,97,78,79,0,81, + 13,14,84,85,86,87,88,89,109,91, + 92,93,94,95,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,0,50,51,52,53,54,55, + 56,57,58,59,60,61,62,63,64,65, + 66,67,68,0,70,71,72,73,0,0, + 0,0,78,79,5,81,6,6,84,85, + 86,87,88,89,0,91,92,93,94,95, + 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,69, + 50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,67,68,0, + 70,71,72,73,96,97,0,0,78,79, + 0,81,0,110,84,85,86,87,88,89, + 117,91,92,93,94,95,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,76,50,51,52,53, + 54,55,56,57,58,59,60,61,62,63, + 64,65,66,67,68,0,70,71,72,73, + 0,0,96,97,78,79,5,81,96,97, + 84,85,86,87,88,89,109,91,92,93, + 94,95,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,76,50,51,52,53,54,55,56,57, + 58,59,60,61,62,63,64,65,66,67, + 68,0,70,71,72,73,96,97,0,0, + 78,79,0,81,5,14,84,85,86,87, + 88,89,0,91,92,93,94,95,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,0,50,51, + 52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,66,67,68,0,70,71, + 72,73,5,81,96,97,78,79,0,81, + 98,0,84,85,86,87,88,89,0,91, + 92,93,94,95,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,0,50,51,52,53,54,55, + 56,57,58,59,60,61,62,63,64,65, + 66,67,68,0,70,71,72,73,5,0, + 0,0,78,79,5,81,6,0,84,85, + 86,87,88,89,0,91,92,93,94,95, + 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,69, + 50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,67,68,82, + 70,71,72,73,80,0,0,0,78,79, + 5,81,6,6,84,85,86,87,88,89, + 0,91,92,93,94,95,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,69,50,51,52,53, + 54,55,56,57,58,59,60,61,62,63, + 64,65,66,67,68,0,70,71,72,73, + 5,0,0,0,78,79,5,81,6,6, + 84,85,86,87,88,89,0,91,92,93, + 94,95,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,69,50,51,52,53,54,55,56,57, + 58,59,60,61,62,63,64,65,66,67, + 68,0,70,71,72,73,5,0,0,0, + 78,79,5,81,6,6,84,85,86,87, + 88,89,0,91,92,93,94,95,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,69,50,51, + 52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,66,67,68,0,70,71, + 72,73,80,0,0,0,78,79,11,81, + 5,0,84,85,86,87,88,89,14,91, + 92,93,94,95,0,1,2,3,4,5, + 6,7,8,9,10,11,12,13,14,0, + 43,0,0,0,0,1,2,3,4,0, + 7,8,9,11,30,31,32,33,34,35, + 36,37,38,39,40,41,42,43,0,45, + 46,47,48,30,31,32,33,34,35,36, + 37,38,39,40,41,42,0,1,2,3, + 4,0,6,69,70,0,5,2,74,75, + 76,77,99,100,80,81,82,83,0,1, + 15,16,17,18,19,20,21,75,23,77, + 96,97,98,99,100,101,102,103,104,105, + 106,107,108,109,110,111,112,69,30,98, + 116,117,118,119,120,121,122,123,124,125, + 126,127,128,0,130,0,1,2,3,4, + 5,6,7,8,9,10,11,12,13,14, + 0,132,0,82,0,0,1,2,3,4, + 131,7,8,9,0,30,31,32,33,34, + 35,36,37,38,39,40,41,42,43,0, + 45,46,47,48,30,31,32,33,34,35, + 36,37,38,39,40,41,42,45,46,0, + 1,2,3,4,69,70,7,8,9,74, + 75,76,77,49,0,80,81,82,83,0, + 1,2,3,4,0,6,7,8,9,5, + 0,96,97,98,99,100,101,102,103,104, + 105,106,107,108,109,110,111,112,69,99, + 100,116,117,118,119,120,121,122,123,124, + 125,126,127,128,50,130,0,1,2,3, + 4,5,6,7,8,9,10,0,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,0, + 44,45,46,47,48,0,50,51,52,53, + 54,55,56,57,58,59,60,61,62,63, + 64,65,66,67,0,1,2,3,4,73, + 0,1,2,3,4,5,6,7,8,9, + 10,74,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,49,44,45,46,47,48,74, + 50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,67,0,1, + 2,3,4,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,0,1, + 2,3,4,49,50,0,1,2,3,4, + 5,6,7,8,9,10,0,12,0,65, + 66,67,68,0,0,71,72,11,5,0, + 1,77,0,1,2,3,4,83,6,7, + 8,9,13,0,90,13,14,0,1,2, + 3,4,5,6,30,31,32,10,11,12, + 0,0,1,2,3,4,0,113,114,115, + 0,1,2,3,4,5,6,7,8,9, + 10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 30,31,32,33,34,35,36,37,38,39, + 40,41,42,43,0,1,2,3,4,49, + 50,74,75,76,10,107,12,80,0,82, + 0,1,2,3,4,65,66,67,68,78, + 79,71,72,77,128,98,0,77,0,1, + 2,3,4,83,6,7,8,9,98,13, + 90,0,1,2,3,4,5,6,7,8, + 9,10,44,12,13,14,0,0,1,2, + 3,4,0,113,114,115,0,1,2,3, + 4,5,6,7,8,9,10,11,12,13, + 14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43, + 0,0,0,0,0,49,50,5,77,5, + 6,7,8,9,11,11,0,13,14,0, + 74,65,66,67,68,78,79,71,72,77, + 30,31,32,0,0,1,2,3,4,83, + 7,8,9,0,10,0,90,0,15,16, + 17,18,19,20,21,0,23,24,25,26, + 27,28,0,30,31,32,33,34,35,36, + 37,38,39,40,41,42,74,76,74,75, + 76,80,0,49,80,69,83,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,0,1,2,3,4,49,50,0, + 1,2,3,4,5,6,7,8,9,10, + 107,12,0,65,66,67,68,5,76,71, + 72,0,80,0,0,0,2,6,7,8, + 9,7,8,9,13,14,0,1,90,15, + 16,17,18,19,20,21,0,23,0,1, + 2,3,4,0,30,31,32,33,34,35, + 36,37,38,39,40,41,42,0,1,2, + 3,4,49,0,49,22,77,0,11,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,0,0,49,0,82,49, + 50,7,8,9,7,8,9,70,0,0, + 0,1,2,3,4,65,66,67,68,69, + 10,71,72,80,30,31,32,33,34,35, + 36,37,38,39,40,41,42,0,0,44, + 90,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,0,1,2,3,4, + 49,50,0,1,2,3,4,5,6,7, + 8,9,10,0,12,0,65,66,67,68, + 5,74,71,72,0,1,2,3,4,0, + 6,7,8,9,83,11,0,13,14,0, + 11,90,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,0,0,49,74, + 77,49,50,0,0,1,2,3,4,75, + 6,0,0,0,10,0,12,65,66,67, + 68,98,83,71,72,0,11,0,1,2, + 3,4,98,6,0,83,0,10,0,12, + 44,0,90,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,76,76,76, + 75,0,49,50,0,1,2,3,4,5, + 6,7,8,9,10,0,12,69,65,66, + 67,68,76,98,71,72,11,0,1,2, + 3,4,5,6,0,0,83,10,11,12, + 105,106,129,90,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,0,0, + 75,76,0,49,50,7,8,9,0,0, + 11,74,75,69,6,7,8,9,0,65, + 66,67,68,0,0,71,72,82,30,31, + 32,33,34,35,36,37,38,39,40,41, + 42,0,43,0,90,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,0, + 49,0,69,69,49,50,7,8,9,0, + 1,2,3,4,0,6,0,0,1,0, + 65,66,67,68,105,106,71,72,11,30, + 31,32,33,34,35,36,37,38,39,40, + 41,42,0,0,0,90,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, + 0,0,75,0,80,49,50,7,8,9, + 7,8,9,84,0,0,0,0,0,108, + 0,65,66,67,68,99,100,71,72,11, + 30,31,32,33,34,35,36,37,38,39, + 40,41,42,0,0,0,90,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,77,76,75,76,80,49,50,0,1, + 2,3,4,5,6,0,0,0,10,108, + 12,0,65,66,67,68,99,100,71,72, + 0,1,2,3,4,5,6,7,8,9, + 10,0,12,13,14,0,0,90,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,0,0,77,80,80,49,50,0, + 1,2,3,4,5,6,0,77,0,10, + 69,12,0,65,66,67,68,0,77,71, + 72,0,1,2,3,4,5,6,7,8, + 9,10,0,12,13,14,0,0,90,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,77,0,77,69,0,49,50, + 0,1,2,3,4,74,0,0,0,0, + 10,69,12,6,65,66,67,68,0,11, + 71,72,0,77,77,7,8,9,0,1, + 2,3,4,5,6,113,114,115,10,90, + 12,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,49,0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,44,45,46,47,48,80,70,51, + 52,53,54,55,56,57,58,59,60,61, + 62,63,64,0,1,2,3,4,5,6, + 0,73,43,10,82,12,78,79,80,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,27,28,29,0, + 1,2,3,4,5,6,7,8,9,10, + 0,12,0,44,45,46,47,48,0,0, + 51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,0,0,0,77,0,70, + 0,5,73,0,1,2,3,4,5,6, + 74,11,83,10,11,12,13,14,15,16, + 17,18,19,20,21,22,23,24,25,26, + 27,28,29,0,0,0,77,0,1,2, + 3,4,0,6,7,8,9,44,45,46, + 47,48,82,74,51,52,53,54,55,56, + 57,58,59,60,61,62,63,64,0,1, + 2,3,4,70,76,75,73,0,1,2, + 3,4,5,6,0,0,49,10,0,12, + 13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,22,0,1, + 2,3,4,5,6,0,0,49,10,11, + 12,44,45,46,47,48,11,11,51,52, + 53,54,55,56,57,58,59,60,61,62, + 63,64,0,1,2,3,4,0,6,0, + 73,43,10,68,12,78,79,0,1,2, + 3,4,5,6,0,77,82,10,0,12, + 13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,0,0,0, + 75,49,76,5,0,0,7,8,9,83, + 5,44,45,46,47,48,11,0,51,52, + 53,54,55,56,57,58,59,60,61,62, + 63,64,0,0,0,0,1,2,3,4, + 73,6,7,8,9,78,79,0,1,2, + 3,4,5,6,0,22,82,10,0,12, + 13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,45,46,74, + 75,76,49,50,49,80,0,1,2,3, + 4,44,45,46,47,48,0,0,51,52, + 53,54,55,56,57,58,59,60,61,62, + 63,64,0,0,0,0,1,2,3,4, + 73,7,8,9,0,78,79,0,1,2, + 3,4,5,6,0,49,82,10,11,12, + 13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,0,1,2, + 3,4,5,6,49,0,1,10,0,12, + 74,44,45,46,47,48,11,0,51,52, + 53,54,55,56,57,58,59,60,61,62, + 63,64,0,1,2,3,4,70,0,0, + 73,0,1,2,3,4,5,6,0,44, + 11,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28, + 29,74,0,0,0,0,0,69,5,0, + 75,49,43,0,5,44,45,46,47,48, + 11,0,51,52,53,54,55,56,57,58, + 59,60,61,62,63,64,0,1,2,3, + 4,0,6,0,0,76,10,0,12,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,27,28,29,0, + 1,2,3,4,75,49,7,8,9,45, + 46,0,13,44,45,46,47,48,0,128, + 51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,0,0,69,0,0,70, + 0,1,2,3,4,5,6,80,49,11, + 10,129,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 103,104,0,0,0,0,0,0,111,112, + 7,8,9,0,44,45,46,47,48,6, + 129,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,0,1,2,3,4, + 5,6,0,75,74,10,33,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,0,0,0,0,0, + 5,69,69,7,8,9,11,11,11,44, + 45,46,47,48,0,0,51,52,53,54, + 55,56,57,58,59,60,61,62,63,64, + 0,1,2,3,4,5,6,22,73,43, + 10,69,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 0,0,0,0,49,50,5,70,0,74, + 75,11,76,11,44,45,46,47,48,11, + 82,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,0,1,2,3,4, + 5,6,0,73,0,10,0,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,0,0,0,0,0, + 70,5,7,8,9,7,8,9,70,44, + 45,46,47,48,0,83,51,52,53,54, + 55,56,57,58,59,60,61,62,63,64, + 0,1,2,3,4,5,6,0,0,0, + 10,69,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 0,0,0,0,0,0,5,7,8,9, + 7,8,9,0,44,45,46,47,48,82, + 0,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,0,1,2,3,4, + 5,6,0,0,0,10,69,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,0,0,0,0,0, + 0,5,7,8,9,7,8,9,11,44, + 45,46,47,48,0,0,51,52,53,54, + 55,56,57,58,59,60,61,62,63,64, + 0,1,2,3,4,5,6,0,0,0, + 10,0,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 0,0,0,0,0,0,0,5,7,8, + 9,11,75,76,44,45,46,47,48,0, + 0,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,0,1,2,3,4, + 5,6,0,43,0,10,0,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,0,0,0,0,0, + 0,0,7,8,9,5,76,11,73,44, + 45,46,47,48,0,0,51,52,53,54, + 55,56,57,58,59,60,61,62,63,64, + 0,1,2,3,4,5,6,0,0,0, + 10,0,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29, + 0,0,0,0,0,0,70,7,8,9, + 7,8,9,11,44,45,46,47,48,0, + 0,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,0,1,2,3,4, + 5,6,0,0,0,10,0,12,13,14, + 15,16,17,18,19,20,21,22,23,24, + 25,26,27,28,29,0,1,2,3,4, + 0,0,70,0,0,5,5,0,0,44, + 45,46,47,48,11,11,51,52,53,54, + 55,56,57,58,59,60,61,62,63,64, + 0,1,2,3,4,0,6,7,8,9, + 5,0,0,0,49,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,70,0,0,0,0,0,75, + 50,5,5,0,1,2,3,4,0,6, + 7,8,9,0,0,65,66,67,15,16, + 17,18,19,20,21,22,23,24,25,26, + 27,28,29,30,31,32,33,34,35,36, + 37,38,39,40,41,42,0,0,0,0, + 0,5,44,50,0,5,10,49,11,13, + 14,0,0,0,0,11,0,0,65,66, + 67,0,1,2,3,4,5,6,7,8, + 9,10,0,12,13,14,0,0,0,0, + 43,45,46,47,48,82,0,51,0,1, + 2,3,4,5,6,7,8,9,10,0, + 12,13,14,0,0,69,0,0,0,0, + 74,0,76,110,78,79,80,11,82,75, + 117,118,119,120,121,122,123,124,125,126, + 127,0,96,97,0,99,0,101,102,103, + 104,105,106,107,108,109,110,0,44,43, + 0,0,116,49,118,119,120,121,122,123, + 124,125,126,127,0,1,2,3,4,0, + 6,7,8,9,0,0,0,0,0,15, + 16,17,18,19,20,21,22,23,24,25, + 26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,42,0,0,0, + 0,0,0,0,50,0,0,0,1,2, + 3,4,0,6,7,8,9,0,0,65, + 66,67,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,40,41,42, + 0,0,0,1,2,3,4,50,6,7, + 8,9,0,0,0,13,14,0,0,0, + 0,0,65,66,67,0,1,2,3,4, + 5,6,7,8,9,10,11,12,13,14, + 0,1,2,3,4,5,6,7,8,9, + 10,11,12,13,14,30,31,32,33,34, + 35,36,37,38,39,40,41,42,43,0, + 30,31,32,33,34,35,36,37,38,39, + 40,41,42,43,0,1,2,3,4,0, + 6,7,8,9,69,0,0,13,14,74, + 75,0,0,0,0,0,0,0,0,0, + 70,0,0,0,74,75,0,1,2,3, + 4,5,6,7,8,9,10,11,12,13, + 14,0,1,2,3,4,5,6,7,8, + 9,10,11,12,13,14,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43, + 0,30,31,32,33,34,35,36,37,38, + 39,40,41,42,43,0,0,0,0,2, + 0,5,0,0,7,8,9,11,0,0, + 74,75,15,16,17,18,19,20,21,0, + 23,0,0,0,5,74,75,30,31,32, + 33,34,35,36,37,38,39,40,41,42, + 0,1,2,3,4,5,6,7,8,9, + 10,0,12,13,14,0,1,2,3,4, + 0,6,7,8,9,0,47,48,13,14, + 74,75,76,0,0,0,80,69,0,6, + 0,1,2,3,4,0,0,0,80,0, + 69,0,0,74,0,0,0,0,0,0, + 0,80,0,0,0,0,33,0,0,0, + 0,103,104,0,0,0,0,77,0,111, + 112,0,0,0,103,104,0,0,0,49, + 0,0,111,112,0,116,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,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,113,114,115,0, + 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, + 8018,7794,7008,7008,7008,7008,7008,7001,7008,7008, + 7008,7870,7008,7008,7008,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,7798,1,1,1,1,1,563, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1152,115, + 8029,689,8193,1,8018,1,121,1370,1,1, + 8580,1687,5750,8025,3453,2771,2348,2681,3380,3765, + 383,3452,851,3445,662,3444,10,7873,7873,7873, + 7873,7873,7873,7873,7873,7873,7873,7873,7873,7873, + 7873,7873,7873,7873,7873,7873,7873,7873,7873,7873, + 7873,7873,7873,7873,7873,7873,7873,7873,7873,7873, + 7873,7873,7873,7873,7873,7873,7873,7873,7873,7873, + 7873,7873,7873,7873,7873,8018,7873,7873,7873,7873, + 7873,7873,7873,7873,7873,7873,7873,7873,7873,7873, + 7873,7873,7873,7873,7873,117,7873,7873,7873,7873, + 5727,5704,5148,5178,7873,7873,8018,7873,5750,7873, + 7873,7873,7873,7873,7873,7873,2076,7873,7873,7873, + 7873,7873,8,7903,7903,7903,7903,7903,7903,7903, + 7903,7903,7903,7903,7903,7903,7903,7903,7903,7903, + 7903,7903,7903,7903,7903,7903,7903,7903,7903,7903, + 7903,7903,7903,7903,7903,7903,7903,7903,7903,7903, + 7903,7903,7903,7903,7903,7903,7903,7903,7903,7903, + 7903,8018,7903,7903,7903,7903,7903,7903,7903,7903, + 7903,7903,7903,7903,7903,7903,7903,7903,7903,7903, + 7903,116,7903,7903,7903,7903,5727,5704,577,137, + 7903,7903,8018,7903,5750,7903,7903,7903,7903,7903, + 7903,7903,8018,7903,7903,7903,7903,7903,8018,7794, + 7008,7008,7008,7008,7008,7001,7008,7008,7008,7801, + 7008,7008,7008,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,7798,1,1,1,1,1,8018,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1152,8018,8029,689, + 8193,1,5727,5704,5148,5178,1,1,8018,1687, + 3572,1202,3453,2771,2348,2681,3380,3765,3270,3452, + 851,3445,662,3444,8018,7794,7008,7008,7008,7008, + 7008,7001,7008,7008,7008,7801,7008,7008,7008,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,7798,1,1, + 1,1,1,8018,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1152,139,8029,689,8193,1,576,8018, + 395,39,1,1,1111,1687,386,8056,3453,2771, + 2348,2681,3380,3765,8018,3452,851,3445,662,3444, + 8018,7794,7008,7008,7008,7008,7008,7001,7008,7008, + 7008,7801,7008,7008,7008,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,7798,1,1,1,1,1,1374, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1152,306, + 8029,689,8193,1,5148,5178,125,138,1,1, + 8018,1687,124,3051,3453,2771,2348,2681,3380,3765, + 2432,3452,851,3445,662,3444,8018,7794,7008,7008, + 7008,7008,7008,7001,7008,7008,7008,7801,7008,7008, + 7008,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,7798, + 1,1,1,1,1,3660,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1152,566,8029,689,8193,1, + 123,8018,5148,5178,1,1,640,1687,5148,5178, + 3453,2771,2348,2681,3380,3765,3270,3452,851,3445, + 662,3444,8018,7794,7008,7008,7008,7008,7008,7001, + 7008,7008,7008,7801,7008,7008,7008,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,7798,1,1,1,1, + 1,980,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1152,131,8029,689,8193,1,5148,5178,122,8018, + 1,1,356,1687,866,3743,3453,2771,2348,2681, + 3380,3765,1,3452,851,3445,662,3444,8018,7794, + 7008,7008,7008,7008,7008,7001,7008,7008,7008,7801, + 7008,7008,7008,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,7798,1,1,1,1,1,8018,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1152,8018,8029,689, + 8193,1,1491,1438,5148,5178,1,1,8018,1687, + 8373,8018,3453,2771,2348,2681,3380,3765,8018,3452, + 851,3445,662,3444,8018,7794,7008,7008,7008,7008, + 7008,7001,7008,7008,7008,7801,7008,7008,7008,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,7798,1,1, + 1,1,1,8018,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1152,8018,8029,689,8193,1,1679,8018, + 48,8018,1,1,2873,1687,8652,35,3453,2771, + 2348,2681,3380,3765,8018,3452,851,3445,662,3444, + 8018,7794,7008,7008,7008,7008,7008,7001,7008,7008, + 7008,7801,7008,7008,7008,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,7798,1,1,1,1,1,8652, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1152,1857, + 8029,689,8193,1,6237,8018,48,8018,1,1, + 1693,1687,8651,1338,3453,2771,2348,2681,3380,3765, + 8018,3452,851,3445,662,3444,8018,7794,7008,7008, + 7008,7008,7008,7001,7008,7008,7008,7801,7008,7008, + 7008,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,7798, + 1,1,1,1,1,8651,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1152,569,8029,689,8193,1, + 2875,556,48,8018,1,1,2484,1687,8033,3107, + 3453,2771,2348,2681,3380,3765,8018,3452,851,3445, + 662,3444,8018,7794,7008,7008,7008,7008,7008,7001, + 7008,7008,7008,7801,7008,7008,7008,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,7798,1,1,1,1, + 1,8033,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1152,91,8029,689,8193,1,7680,543,48,8018, + 1,1,1455,1687,8032,1481,3453,2771,2348,2681, + 3380,3765,8018,3452,851,3445,662,3444,8018,7794, + 7008,7008,7008,7008,7008,7001,7008,7008,7008,7801, + 7008,7008,7008,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,7798,1,1,1,1,1,8032,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1152,8018,8029,689, + 8193,1,8529,111,132,1,1,1,8028,1687, + 5982,8018,3453,2771,2348,2681,3380,3765,3743,3452, + 851,3445,662,3444,8018,7570,7570,7570,7570,7570, + 7570,7570,7570,7570,7570,7570,7570,7570,7570,185, + 8027,1,8018,224,8018,7334,7325,7328,7331,8018, + 7124,7118,7121,8024,7570,7570,7570,7570,7570,7570, + 7570,7570,7570,7570,7570,7570,7570,7570,386,7570, + 7570,7570,7570,7133,7130,7127,7139,7157,7136,7148, + 7115,7142,7145,7154,7151,7112,8018,7021,7011,7322, + 7018,309,8056,7570,7570,8018,924,8633,7570,7570, + 7570,7570,6418,6440,7570,7570,7570,7570,545,8564, + 8635,8638,8634,8640,8641,8639,8636,8023,8637,927, + 7570,7570,7570,7570,7570,7570,7570,7570,7570,7570, + 7570,7570,7570,7570,7570,7570,7570,7319,8565,8375, + 7570,7570,7570,7570,7570,7570,7570,7570,7570,7570, + 7570,7570,7570,8018,7570,8018,7683,7683,7683,7683, + 7683,7683,7683,7683,7683,7683,7683,7683,7683,7683, + 114,8015,118,1398,225,8018,8032,8652,8651,8033, + 7000,7172,7166,7169,8018,7683,7683,7683,7683,7683, + 7683,7683,7683,7683,7683,7683,7683,7683,7683,453, + 7683,7683,7683,7683,7181,7178,7175,7187,7205,7184, + 7196,7163,7190,7193,7202,7199,7160,5675,5646,296, + 8032,8652,8651,8033,7683,7683,1077,880,923,7683, + 7683,7683,7683,1452,8018,7683,7683,7683,7683,286, + 7268,7268,7268,7268,237,283,1077,880,923,7810, + 8018,7683,7683,7683,7683,7683,7683,7683,7683,7683, + 7683,7683,7683,7683,7683,7683,7683,7683,7510,6418, + 6440,7683,7683,7683,7683,7683,7683,7683,7683,7683, + 7683,7683,7683,7683,2487,7683,39,7021,7011,7014, + 7018,5550,1060,1077,880,923,6215,318,3175,6127, + 6149,8282,8280,8288,8284,8285,8283,8286,776,8287, + 8621,8622,8289,8290,8281,6598,8353,8354,8623,8278, + 8272,8279,8275,8251,8277,8276,8273,8274,8252,8018, + 8037,6105,6083,6193,6171,457,8415,6061,1741,1841, + 8039,1750,6577,1792,8040,8038,1649,8034,8035,8036, + 6489,3485,8416,8417,37,7573,7573,7573,7573,1758, + 39,7021,7011,7322,7018,5550,1060,1077,880,923, + 6215,1348,3175,6127,6149,8282,8280,8288,8284,8285, + 8283,8286,776,8287,8621,8622,8289,8290,8281,6598, + 8353,8354,8623,8278,8272,8279,8275,8251,8277,8276, + 8273,8274,8252,8054,8037,6105,6083,6193,6171,7564, + 8415,6061,1741,1841,8039,1750,6577,1792,8040,8038, + 1649,8034,8035,8036,6489,3485,8416,8417,8018,9882, + 9594,9690,9786,1758,8018,7610,7610,7610,7610,229, + 7606,7008,7008,7008,229,7614,229,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,229,48,7334, + 7325,7328,7331,7603,1,1,7042,7030,7034,7038, + 984,7027,7061,7055,7058,901,8018,3175,133,1, + 1,1,3568,8018,334,1055,8429,8022,1943,8018, + 2866,229,443,7561,7561,7561,7561,415,7561,7561, + 7561,7561,3295,8018,8517,7561,7561,1,7042,7030, + 7034,7038,4590,7027,7891,7888,7885,901,365,3175, + 1,8018,8032,8652,8651,8033,447,8452,8453,8454, + 8018,7610,7610,7610,7610,229,7606,7008,7008,7008, + 229,7783,229,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,229,38,7507,7498,7501,7504,7603, + 1,1348,365,365,7495,3617,3175,365,568,1553, + 396,8032,8652,8651,8033,1,1,1,3568,6379, + 672,1055,8429,700,8021,365,8018,229,596,7537, + 7537,7537,7537,414,601,1077,880,923,3613,5106, + 8517,8018,7042,7030,7034,7038,984,7027,7061,7055, + 7058,901,2242,3175,7492,7492,456,8018,7334,7325, + 7328,7331,8018,8452,8453,8454,8018,7008,7008,7008, + 7008,229,7008,7001,7008,7008,229,7052,229,229, + 229,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,13308,1,11355,1,1,11783,1,229, + 334,8018,316,1,39,7005,1,7522,2591,2897, + 8056,1077,880,923,7686,343,439,329,329,8018, + 7567,1,1,1,2991,6379,672,689,8229,8418, + 8353,8354,8623,223,37,7573,7573,7573,7573,219, + 7076,7070,7073,134,7573,8018,8517,8018,8282,8280, + 8288,8284,8285,8283,8286,8018,8287,8621,8622,8289, + 8290,8281,8018,7085,7082,7079,7091,7109,7088,7100, + 7067,7094,7097,7106,7103,7064,1348,3573,1348,343, + 343,6484,8018,2125,343,7513,8025,219,8018,7008, + 7008,7008,7008,229,7008,7001,7008,7008,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,13308,1,11355,1,1,11783, + 1,229,8018,9882,9594,9690,9786,7005,1,1, + 7042,7030,7034,7038,984,7027,7061,7055,7058,901, + 3617,3175,8018,1,1,1,2991,5910,3573,689, + 8229,39,3869,8018,629,8018,7600,8056,1077,880, + 923,7597,7591,7594,329,329,8018,3121,8517,8635, + 8638,8634,8640,8641,8639,8636,291,8637,290,8032, + 8652,8651,8033,300,8353,8354,8623,8278,8272,8279, + 8275,8251,8277,8276,8273,8274,8252,8018,8032,8652, + 8651,8033,5870,8018,5919,8317,2591,47,8030,220, + 8018,7008,7008,7008,7008,229,7008,7001,7008,7008, + 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,13308,1,11355,1, + 1,11783,1,229,226,8018,1320,296,2635,7005, + 1,7232,7226,7229,1077,880,923,8029,8018,8018, + 8018,8032,8652,8651,8033,1,1,1,2991,1459, + 2076,689,8229,3503,7241,7238,7235,7247,7265,7244, + 7256,7223,7250,7253,7262,7259,7220,346,8018,1911, + 8517,8018,7008,7008,7008,7008,229,7008,7001,7008, + 7008,229,7711,229,229,229,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,13308,1,11355, + 1,1,11783,1,229,36,7932,7923,7926,7929, + 7005,1,329,7021,7011,7322,7018,984,1060,1077, + 880,923,901,8018,3175,345,1,1,1,2991, + 2928,1348,689,8229,1,7879,7879,7879,7879,8018, + 7876,7061,7055,7058,220,361,8018,329,329,37, + 8026,8517,8018,7008,7008,7008,7008,229,7008,7001, + 7008,7008,229,7711,229,229,229,1,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,13308,1, + 11355,1,1,11783,1,229,8018,8018,8054,1348, + 4127,7005,1,8018,8018,7021,7011,7322,7018,361, + 1060,514,157,448,901,1,3175,1,1,1, + 2991,2781,8025,689,8229,129,361,8018,7021,7011, + 7322,7018,361,1060,8018,220,360,901,29,3175, + 2242,8018,8517,8018,7008,7008,7008,7008,229,7008, + 7001,7008,7008,229,7711,229,229,229,1,1, + 1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,13308, + 1,11355,1,1,11783,1,229,1156,2392,1597, + 361,8018,7005,1,599,7021,7011,7322,7018,984, + 1060,1077,880,923,901,8018,3175,7516,1,1, + 1,2991,3676,361,689,8229,8024,1,7042,7030, + 7034,7038,4590,7027,8018,368,220,901,7804,3175, + 4621,4537,3864,8517,8018,7008,7008,7008,7008,229, + 7008,7001,7008,7008,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, + 13308,1,11355,1,1,11783,1,229,227,404, + 8023,1201,8018,7005,1,7283,7277,7280,394,130, + 7777,1348,7807,1699,387,1077,880,923,8018,1, + 1,1,2991,8018,8018,689,8229,1604,7292,7289, + 7286,7298,7316,7295,7307,7274,7301,7304,7313,7310, + 7271,1,7780,8018,8517,8018,7008,7008,7008,7008, + 229,7008,7001,7008,7008,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,13308,1,11355,1,1,11783,1,229,587, + 780,135,3886,5380,7005,1,7349,7343,7346,8018, + 7021,7011,7322,7018,8018,8056,113,8018,2303,8018, + 1,1,1,2991,4621,4537,689,8229,8024,7358, + 7355,7352,7364,7382,7361,7373,7340,7367,7370,7379, + 7376,7337,8018,8018,8018,8517,8018,7008,7008,7008, + 7008,229,7008,7001,7008,7008,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,13308,1,11355,1,1,11783,1,229, + 625,136,8023,602,3504,7005,1,7729,7723,7726, + 1077,880,923,3860,1,8018,289,112,8018,3309, + 8018,1,1,1,2991,6418,6440,689,8229,8024, + 7738,7735,7732,7744,7762,7741,7753,7720,7747,7750, + 7759,7756,7717,8018,8018,8018,8517,8018,7008,7008, + 7008,7008,229,7008,7001,7008,7008,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,13308,1,11355,1,1,11783,1, + 229,2,1756,8023,1705,3506,7005,1,1,7042, + 7030,7034,7038,7024,7027,8018,8018,427,7049,3309, + 7046,8018,1,1,1,2991,6418,6440,689,8229, + 8018,7042,7030,7034,7038,984,7027,7061,7055,7058, + 901,29,3175,7558,7558,8018,8018,8517,8018,7008, + 7008,7008,7008,229,7008,7001,7008,7008,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,13308,1,11355,1,1,11783, + 1,229,8018,8018,2541,3511,8472,7005,1,1, + 7042,7030,7034,7038,984,7027,8018,2591,8018,901, + 1374,3175,438,1,1,1,2991,8018,423,689, + 8229,343,7021,7011,7322,7018,4590,1060,1077,880, + 923,901,8018,3175,329,329,8018,8018,8517,8018, + 7008,7008,7008,7008,229,7008,7001,7008,7008,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,13308,1,11355,1,1, + 11783,1,229,3859,8018,3923,5514,8018,7005,1, + 8018,8032,8652,8651,8033,1348,8018,8018,8018,1, + 901,5786,3175,2658,1,1,1,2991,311,8030, + 689,8229,366,2443,2492,1077,880,923,1,7042, + 7030,7034,7038,5550,7027,8452,8453,8454,6215,8517, + 3175,6127,6149,7650,7656,7632,7644,7641,7647,7638, + 7617,7635,7623,7620,7629,7626,7653,7659,809,1, + 7042,7030,7034,7038,984,7027,7061,7055,7058,901, + 307,3175,8037,6105,6083,6193,6171,8458,8029,6061, + 1741,1841,8039,1750,6577,1792,8040,8038,1649,8034, + 8035,8036,6489,1,7042,7030,7034,7038,984,7027, + 8018,1758,307,901,1653,3175,39,39,515,39, + 7021,7011,7322,7018,5550,1060,100,8018,8018,6215, + 7991,3175,6127,6149,8282,8280,8288,8284,8285,8283, + 8286,1843,8287,8621,8622,8289,8290,8281,6242,1, + 7042,7030,7034,7038,984,7027,7061,7055,7058,901, + 507,3175,8018,8037,6105,6083,6193,6171,8018,99, + 6061,1741,1841,8039,1750,6577,1792,8040,8038,1649, + 8034,8035,8036,6489,8018,8018,8018,2686,425,7579, + 8018,6520,1758,39,7021,7011,7322,7018,5550,1060, + 7900,8024,8025,6215,7576,3175,6127,6149,8282,8280, + 8288,8284,8285,8283,8286,1843,8287,8621,8622,8289, + 8290,8281,6242,8018,8018,8018,2591,393,7217,7217, + 7217,7217,8018,283,7208,7214,7211,8037,6105,6083, + 6193,6171,5987,7959,6061,1741,1841,8039,1750,6577, + 1792,8040,8038,1649,8034,8035,8036,6489,8018,7671, + 7662,7665,7668,7579,3605,8023,1758,141,7021,7011, + 7322,7018,5550,1060,505,300,283,6215,8018,3175, + 6127,6149,8282,8280,8288,8284,8285,8283,8286,1843, + 8287,8621,8622,8289,8290,8281,6242,8317,1,7042, + 7030,7034,7038,7024,7027,1,8018,8054,7049,8028, + 7046,8037,6105,6083,6193,6171,161,8026,6061,1741, + 1841,8039,1750,6577,1792,8040,8038,1649,8034,8035, + 8036,6489,8018,7021,7011,7322,7018,8018,1060,8018, + 1758,8027,7689,1347,3175,39,39,551,7021,7011, + 7322,7018,5550,1060,419,4059,6272,6215,8018,3175, + 6127,6149,8282,8280,8288,8284,8285,8283,8286,1843, + 8287,8621,8622,8289,8290,8281,6242,8018,8018,599, + 161,763,1298,2874,8018,1,7582,7588,7585,8025, + 2897,8037,6105,6083,6193,6171,610,8018,6061,1741, + 1841,8039,1750,6577,1792,8040,8038,1649,8034,8035, + 8036,6489,120,1,8018,597,7534,7534,7534,7534, + 1758,601,7525,7531,7528,39,39,1,7042,7030, + 7034,7038,5550,7027,8018,7705,2730,6215,8018,3175, + 6127,6149,7650,7656,7632,7644,7641,7647,7638,7617, + 7635,7623,7620,7629,7626,7653,7659,5675,5646,1348, + 610,610,3293,7708,601,610,43,7677,7677,7677, + 7677,8037,6105,6083,6193,6171,100,8018,6061,1741, + 1841,8039,1750,6577,1792,8040,8038,1649,8034,8035, + 8036,6489,8018,8018,590,8018,12761,12761,12761,12761, + 1758,1077,880,923,8018,39,39,39,7021,7011, + 7322,7018,5550,1060,8018,7674,1857,6215,7576,3175, + 6127,6149,8282,8280,8288,8284,8285,8283,8286,1843, + 8287,8621,8622,8289,8290,8281,6242,1,7042,7030, + 7034,7038,4590,7027,8054,8018,3043,901,8018,3175, + 7900,8037,6105,6083,6193,6171,8024,8018,6061,1741, + 1841,8039,1750,6577,1792,8040,8038,1649,8034,8035, + 8036,6489,45,7840,7840,7840,7840,7579,8018,8018, + 1758,39,7021,7011,7322,7018,5550,1060,8018,3018, + 8028,6215,8022,3175,6127,6149,8282,8280,8288,8284, + 8285,8283,8286,1843,8287,8621,8622,8289,8290,8281, + 6242,1348,373,8018,8018,8018,8018,1374,6840,8018, + 8023,7837,8027,8018,925,8037,6105,6083,6193,6171, + 8024,8018,6061,1741,1841,8039,1750,6577,1792,8040, + 8038,1649,8034,8035,8036,6489,8018,7021,7011,7322, + 7018,520,1060,8018,119,3660,7689,126,3175,39, + 7021,7011,7322,7018,5550,1060,8018,8018,8018,6215, + 7576,3175,6127,6149,8282,8280,8288,8284,8285,8283, + 8286,1843,8287,8621,8622,8289,8290,8281,6242,37, + 7573,7573,7573,7573,8023,832,1077,880,923,5675, + 5646,8018,329,8037,6105,6083,6193,6171,8018,8021, + 6061,1741,1841,8039,1750,6577,1792,8040,8038,1649, + 8034,8035,8036,6489,8018,8018,4871,8018,1,7579, + 39,7021,7011,7322,7018,5550,1060,7714,8054,163, + 6215,3864,3175,6127,6149,8282,8280,8288,8284,8285, + 8283,8286,1843,8287,8621,8622,8289,8290,8281,6242, + 4807,4775,8018,394,8018,8018,8018,8018,4743,4711, + 1077,880,923,39,8037,6105,6083,6193,6171,8056, + 3864,6061,1741,1841,8039,1750,6577,1792,8040,8038, + 1649,8034,8035,8036,6489,39,7021,7011,7322,7018, + 5550,1060,8018,163,2422,6215,2384,3175,6127,6149, + 8282,8280,8288,8284,8285,8283,8286,1843,8287,8621, + 8622,8289,8290,8281,6242,1,8018,1,8018,8018, + 2897,1459,1374,7994,8002,7998,7804,8006,7519,8037, + 6105,6083,6193,6171,8018,1,6061,1741,1841,8039, + 1750,6577,1792,8040,8038,1649,8034,8035,8036,6489, + 39,7021,7011,7322,7018,5550,1060,7705,1758,8006, + 6215,3081,3175,6127,6149,8282,8280,8288,8284,8285, + 8283,8286,1843,8287,8621,8622,8289,8290,8281,6242, + 1,8018,8,8018,3293,7708,2675,8029,586,1348, + 7807,8030,8006,8012,8037,6105,6083,6193,6171,7786, + 2542,6061,1741,1841,8039,1750,6577,1792,8040,8038, + 1649,8034,8035,8036,6489,39,7021,7011,7322,7018, + 819,1060,73,1758,8018,6215,8018,3175,6127,6149, + 8282,8280,8288,8284,8285,8283,8286,1843,8287,8621, + 8622,8289,8290,8281,6242,591,8018,509,394,8018, + 8029,3425,1077,880,923,1077,880,923,7790,8037, + 6105,6083,6193,6171,8018,8012,6061,1741,1841,8039, + 1750,6577,1792,8040,8038,1649,8034,8035,8036,6489, + 39,7021,7011,7322,7018,3176,1060,2,8018,8018, + 6215,7988,3175,6127,6149,8282,8280,8288,8284,8285, + 8283,8286,1843,8287,8621,8622,8289,8290,8281,6242, + 329,8018,8018,329,8018,8018,3686,7692,7698,7695, + 1077,880,923,8018,8037,6105,6083,6193,6171,728, + 8018,6061,1741,1841,8039,1750,6577,1792,8040,8038, + 1649,8034,8035,8036,6489,39,7021,7011,7322,7018, + 3177,1060,8018,8018,8018,6215,37,3175,6127,6149, + 8282,8280,8288,8284,8285,8283,8286,1843,8287,8621, + 8622,8289,8290,8281,6242,592,8018,8018,598,8018, + 8018,3892,1077,880,923,1077,880,923,8024,8037, + 6105,6083,6193,6171,8018,8018,6061,1741,1841,8039, + 1750,6577,1792,8040,8038,1649,8034,8035,8036,6489, + 39,7021,7011,7322,7018,3392,1060,8018,8018,8018, + 6215,8018,3175,6127,6149,8282,8280,8288,8284,8285, + 8283,8286,1843,8287,8621,8622,8289,8290,8281,6242, + 8018,416,8018,8018,8018,531,8018,2188,1077,880, + 923,8028,8023,6630,8037,6105,6083,6193,6171,8018, + 8018,6061,1741,1841,8039,1750,6577,1792,8040,8038, + 1649,8034,8035,8036,6489,39,7021,7011,7322,7018, + 5550,1060,8018,8027,8018,6215,8018,3175,6127,6149, + 8282,8280,8288,8284,8285,8283,8286,1843,8287,8621, + 8622,8289,8290,8281,6242,594,575,8018,8018,8018, + 8018,8018,7935,7941,7938,2237,3991,7843,3872,8037, + 6105,6083,6193,6171,8018,8018,6061,1741,1841,8039, + 1750,6577,1792,8040,8038,1649,8034,8035,8036,6489, + 39,7021,7011,7322,7018,6631,1060,8018,8018,8018, + 6215,8018,3175,6127,6149,8282,8280,8288,8284,8285, + 8283,8286,1843,8287,8621,8622,8289,8290,8281,6242, + 593,8018,573,417,8018,8018,7847,7944,7950,7947, + 1077,880,923,7851,8037,6105,6083,6193,6171,8018, + 8018,6061,1741,1841,8039,1750,6577,1792,8040,8038, + 1649,8034,8035,8036,6489,39,7021,7011,7322,7018, + 5550,1060,8018,8018,8018,6215,8018,3175,6127,6149, + 8282,8280,8288,8284,8285,8283,8286,1843,8287,8621, + 8622,8289,8290,8281,6242,37,7573,7573,7573,7573, + 103,8018,7855,87,1,7956,4135,8018,8018,8037, + 6105,6083,6193,6171,7859,527,6061,1741,1841,8039, + 1750,6577,1792,8040,8038,1649,8034,8035,8036,6489, + 8018,7021,7011,7014,7018,8018,8056,1077,880,923, + 1428,8018,8018,8018,2027,8282,8280,8288,8284,8285, + 8283,8286,749,8287,8621,8622,8289,8290,8281,4936, + 8353,8354,8623,8278,8272,8279,8275,8251,8277,8276, + 8273,8274,8252,7863,8018,8018,278,103,8018,527, + 8415,8009,7956,241,7485,7472,7476,7481,8018,7489, + 7397,7391,7394,139,8018,3485,8416,8417,7463,7469, + 7445,7457,7454,7460,7451,749,7448,7436,7433,7442, + 7439,7466,4936,7406,7403,7400,7412,7430,7409,7421, + 7388,7415,7418,7427,7424,7385,1,1,8018,8018, + 8018,1237,813,8415,1,3647,8486,5968,8028,8480, + 8484,8018,8018,8018,8018,8024,8018,8018,3485,8416, + 8417,307,7042,7030,7034,7038,984,7027,7061,7055, + 7058,901,8018,3175,7492,7492,8018,8018,8018,8018, + 8027,8478,8479,8509,8510,2299,8018,8487,8018,7042, + 7030,7034,7038,984,7027,7061,7055,7058,901,8018, + 3175,7558,7558,8018,1,8489,1,8018,8018,8018, + 1384,8018,8511,3051,2088,2090,8490,191,8488,8023, + 2432,2250,2201,2152,2103,2054,2005,1956,1907,1858, + 1807,8018,8500,8499,8018,8512,8018,8481,8482,8505, + 8506,8503,8504,8483,8485,8507,8508,8018,836,191, + 8018,8018,8513,836,8493,8494,8495,8491,8492,8501, + 8502,8497,8496,8498,8018,7021,7011,7322,7018,8018, + 8056,1077,880,923,8018,8018,8018,8018,8018,8282, + 8280,8288,8284,8285,8283,8286,749,8287,8621,8622, + 8289,8290,8281,4936,8353,8354,8623,8278,8272,8279, + 8275,8251,8277,8276,8273,8274,8252,8018,8018,8018, + 8018,8018,8018,8018,8415,8018,8018,241,7485,7472, + 7701,7481,8018,7489,7397,7391,7394,8018,8018,3485, + 8416,8417,7463,7469,7445,7457,7454,7460,7451,749, + 7448,7436,7433,7442,7439,7466,4936,7406,7403,7400, + 7412,7430,7409,7421,7388,7415,7418,7427,7424,7385, + 8018,8018,444,7831,7831,7831,7831,8415,7828,7819, + 7825,7822,8018,8018,8018,7834,7834,8018,8018,8018, + 8018,8018,3485,8416,8417,29,386,386,386,386, + 7816,386,386,386,386,386,7816,386,7816,7816, + 575,586,586,586,586,586,586,586,586,586, + 586,7980,586,7985,7985,386,386,386,386,386, + 386,386,386,386,386,386,386,386,7816,8018, + 586,586,586,586,586,586,586,586,586,586, + 586,586,586,7985,92,7867,7867,7867,7867,8018, + 7867,7867,7867,7867,7516,8018,8018,7867,7867,7816, + 7816,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 7579,8018,8018,8018,586,7985,32,387,387,387, + 387,7813,387,387,387,387,387,7813,387,7813, + 7813,574,585,585,585,585,585,585,585,585, + 585,585,7882,585,7882,7882,387,387,387,387, + 387,387,387,387,387,387,387,387,387,7813, + 8018,585,585,585,585,585,585,585,585,585, + 585,585,585,585,7882,8018,1,628,8018,7774, + 8018,2897,8018,8018,7771,7765,7768,339,128,8018, + 7813,7813,8635,8638,8634,8640,8641,8639,8636,75, + 8637,127,8018,8018,7552,585,7882,8353,8354,8623, + 8278,8272,8279,8275,8251,8277,8276,8273,8274,8252, + 8018,7953,7953,7953,7953,7953,7953,7953,7953,7953, + 7953,8018,7953,7953,7953,95,7974,7974,7974,7974, + 8018,7971,7962,7968,7965,8018,7543,7540,7977,7977, + 1348,339,339,39,8018,8018,339,4871,8018,8056, + 8018,7919,7907,7911,7915,8018,8018,8018,7894,8018, + 4871,8018,8018,7555,8018,8018,8018,8018,8018,8018, + 8018,7897,8018,8018,8018,8018,1735,8018,8018,8018, + 8018,4807,4775,8018,8018,8018,8018,7953,8018,4743, + 4711,8018,8018,8018,4807,4775,8018,8018,8018,8054, + 8018,8018,4743,4711,8018,7546,8018,8018,8018,8018, + 8018,8018,8018,8018,8018,8018,8018,8018,8018,7549, + 8018,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 8018,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 8018,8018,8018,8018,8018,8018,8018,8018,8018,8018, + 8018,8018,8018,8018,8018,8018,8452,8453,8454 + }; + }; + 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, + 1322,60,1253,1311,186,802,1360,325,325,325, + 1267,189,855,1321,1253,1261,178,1172,443,1180, + 1172,1172,1172,1193,205,1193,852,1193,876,1193, + 1193,1261,1262,1193,991,1122,213,1360,1253,436, + 1193,1193,762,1262,1193,1262,1172,445,274,274, + 874,274,62,205,202,447,202,654,935,1256, + 192,192,1253,746,1262,179,208,1028,1170,518, + 1422,269,854,320,852,858,1261,876,376,1262, + 1262,321,841,991,991,991,991,991,991,991, + 991,991,991,438,991,116,1172,445,445,445, + 445,1261,1172,1193,608,608,655,654,1253,1253, + 1262,704,594,376,376,1193,802,373,594,1193, + 1193,445,1193,1262,108,1078,285,274,274,273, + 273,205,1261,1253,990,136,1253,1193,1262,327, + 746,746,1262,179,758,597,757,1424,1458,518, + 1169,594,269,1262,201,1038,603,321,205,262, + 1262,376,321,1262,104,116,116,116,116,1376, + 801,108,1193,594,594,594,951,580,580,970, + 970,802,802,802,802,1262,472,51,51,472, + 990,608,205,1261,104,1193,1193,376,376,1256, + 1174,373,373,179,1078,285,273,273,273,1262, + 594,990,266,205,612,617,614,621,619,628, + 626,630,629,631,462,632,1253,1371,373,645, + 746,655,655,208,655,48,1422,1424,1424,593, + 592,517,266,1262,269,732,855,445,177,717, + 269,201,604,608,201,608,321,262,262,1262, + 874,873,1262,841,1262,594,594,594,594,373, + 801,990,1193,952,1256,1074,1064,1063,755,1130, + 1199,1199,1261,438,991,594,594,874,874,874, + 874,321,594,178,180,178,594,373,205,843, + 1262,1172,1374,1193,874,874,1193,594,1068,1051, + 1067,873,445,454,454,266,266,273,1262,266, + 136,991,991,991,991,991,991,991,991,991, + 991,991,991,991,991,991,991,991,991,991, + 991,991,990,990,990,990,990,990,990,990, + 990,990,990,658,991,1265,594,1458,594,471, + 594,594,108,719,608,608,608,608,1262,262, + 266,847,848,970,104,1193,1193,1193,137,991, + 802,1193,1193,594,951,732,991,732,655,950, + 1172,1172,1172,952,1172,1262,1,655,655,1262, + 205,580,594,1076,1078,990,1262,108,1203,116, + 1172,1172,1172,1172,1262,1262,1262,180,108,734, + 1261,1262,472,1193,1193,736,990,1065,1065,1072, + 1256,887,285,274,285,872,872,266,655,136, + 614,614,612,612,612,619,619,619,619,619, + 619,617,617,626,621,621,629,628,630,732, + 732,631,594,593,179,654,991,732,747,929, + 651,719,608,608,707,266,991,1262,594,1193, + 1256,941,952,732,1046,952,970,970,968,1049, + 970,655,655,753,734,594,1078,321,179,594, + 990,990,990,990,1172,1172,841,1262,179,734, + 594,1193,522,736,990,990,1076,1051,285,802, + 802,848,990,990,471,655,719,991,991,651, + 651,719,719,843,836,708,1262,1193,1193,1193, + 990,1193,952,991,952,594,1253,970,594,968, + 1360,1172,594,734,865,594,1262,532,594,594, + 594,594,472,472,184,1193,841,942,1172,1193, + 739,873,1193,218,651,651,707,1262,1261,1261, + 1262,1193,472,991,373,952,753,952,655,1360, + 990,952,949,865,865,1236,594,594,184,887, + 739,1120,1193,1193,1262,1262,1262,1193,594,373, + 990,950,472,655,594,868,865,594,594,1250, + 1172,454,1262,1262,952,594,655,868,868,205, + 205,1252,1079,872,952,868,593,178,802 + }; + }; + 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, + 24,25,15,16,52,78,26,53,54,17, + 18,19,79,12,55,20,21,56,57,58, + 73,59,60,22,23,27,28,61,62,63, + 44,4,5,47,48,14,45,46,10,51, + 6,29,64,3,2,43,11,1,13,0, + 12,6,49,10,1,4,3,2,0,131, + 0,24,25,32,34,15,16,50,30,26, + 65,35,90,36,17,37,38,18,19,39, + 68,40,20,21,41,66,42,22,67,23, + 71,33,27,31,28,5,14,6,43,29, + 72,70,11,13,8,9,7,12,10,49, + 1,4,3,2,0,32,7,34,50,30, + 65,35,36,37,38,39,40,41,66,42, + 67,33,31,8,9,73,78,79,47,48, + 14,13,45,46,51,56,64,29,5,61, + 62,63,44,59,54,58,16,28,15,20, + 18,19,21,23,17,26,27,24,25,53, + 57,55,52,60,70,11,22,6,12,1, + 4,3,2,10,0,5,31,0,44,49, + 0,81,5,80,98,82,76,75,43,74, + 77,8,9,7,70,11,0,11,77,75, + 44,0,11,77,70,81,0,78,79,73, + 47,48,14,13,45,46,10,51,56,64, + 29,5,6,12,61,62,63,44,59,54, + 58,16,28,15,20,18,19,21,23,17, + 26,27,24,25,22,53,57,55,52,60, + 70,1,4,3,2,11,83,0,113,114, + 115,77,83,12,11,5,14,13,10,43, + 72,68,90,71,24,25,32,7,34,15, + 16,50,30,26,65,35,36,17,37,38, + 18,19,39,40,20,21,41,66,42,22, + 67,23,33,27,31,28,29,8,9,6, + 1,4,3,2,49,0,78,79,5,22, + 53,57,55,52,60,16,28,15,20,18, + 19,21,23,17,26,27,24,25,61,62, + 63,44,59,54,58,10,12,6,47,48, + 14,13,45,46,51,56,64,29,1,4, + 3,2,128,11,0,24,25,32,7,34, + 15,16,50,30,52,26,53,65,35,36, + 54,17,37,38,18,19,39,40,55,20, + 21,56,41,57,66,58,73,59,42,60, + 22,67,23,33,27,31,28,61,62,63, + 44,5,47,48,14,13,45,46,51,80, + 6,29,64,8,9,12,10,1,4,2, + 79,78,3,0,69,0,7,11,70,8, + 9,82,0,80,82,76,1,4,3,2, + 0,7,80,77,98,128,83,43,8,9, + 76,24,25,15,16,52,78,26,53,54, + 17,18,19,79,12,55,20,21,56,57, + 58,73,59,60,22,23,27,28,61,62, + 63,4,5,47,48,14,13,45,46,10, + 51,6,29,64,3,2,44,75,11,1, + 0,73,81,130,116,47,48,77,98,128, + 83,35,36,37,38,39,12,40,41,42, + 33,31,30,34,10,32,100,99,45,46, + 101,102,96,97,69,103,104,105,106,107, + 108,109,110,117,82,118,119,120,121,122, + 123,124,125,126,127,111,112,43,70,80, + 7,1,4,14,13,6,8,9,3,2, + 74,5,76,75,11,0,11,77,76,75, + 5,0,6,8,9,7,69,11,77,70, + 0,100,99,13,101,102,45,46,97,96, + 69,103,104,111,112,105,106,14,107,108, + 109,80,75,82,118,119,120,121,122,123, + 124,125,126,127,77,98,128,83,110,117, + 8,9,7,76,43,11,0,24,25,15, + 16,52,78,26,53,54,17,18,19,79, + 12,55,20,21,56,57,58,73,59,60, + 22,23,27,28,61,62,63,44,1,4, + 5,47,48,45,46,10,51,6,29,64, + 3,2,77,13,14,0,33,1,4,6, + 3,2,113,114,115,0,43,11,5,12, + 10,14,13,6,1,4,3,2,8,9, + 7,77,0,129,0,32,30,31,73,81, + 80,77,98,75,70,5,7,11,76,43, + 8,9,82,0,128,43,76,75,11,77, + 0,79,78,45,46,13,101,102,107,14, + 108,10,51,82,69,80,121,122,118,119, + 120,126,125,127,97,96,123,124,105,106, + 103,104,109,110,47,48,76,99,116,74, + 5,29,22,65,50,66,67,16,28,15, + 20,18,19,21,23,17,26,27,24,25, + 34,40,41,36,39,38,35,30,31,32, + 7,9,8,37,42,1,4,3,2,33, + 6,0,11,70,76,0,82,11,83,76, + 0,6,49,77,8,9,7,1,4,3, + 2,70,11,0,32,30,31,73,11,98, + 75,82,76,80,0,6,11,70,8,9, + 7,1,4,3,2,0,24,25,32,7, + 34,15,16,50,30,26,65,35,36,17, + 37,38,18,19,39,40,20,21,41,66, + 42,22,67,23,33,27,31,28,1,4, + 6,29,8,9,3,2,98,0,77,7, + 74,8,9,69,11,76,43,82,5,0, + 75,90,113,114,115,49,77,131,129,132, + 83,72,81,71,68,85,87,94,92,84, + 89,91,93,95,70,86,88,43,11,65, + 50,66,67,34,40,41,36,39,38,33, + 35,30,31,32,7,9,8,37,42,73, + 78,79,22,53,57,55,52,60,5,28, + 26,27,24,25,61,62,63,44,59,54, + 58,10,12,6,47,48,14,13,45,46, + 51,56,64,29,1,4,3,2,17,15, + 21,23,16,20,18,19,0,6,11,77, + 70,8,9,7,0,77,98,0,84,0, + 7,14,13,8,9,12,10,6,1,4, + 3,2,5,74,80,82,76,11,75,98, + 0,10,12,5,74,13,14,98,24,25, + 32,7,34,15,16,30,26,65,35,36, + 17,37,38,18,19,39,40,20,21,41, + 66,42,22,67,23,33,27,31,28,1, + 4,6,29,8,9,3,2,75,11,50, + 0,80,76,29,22,65,50,66,67,24, + 25,32,7,34,15,16,30,26,35,36, + 17,37,38,18,19,39,12,40,20,21, + 41,42,23,33,27,31,28,4,74,14, + 13,10,6,43,8,9,3,2,1,75, + 11,5,0,29,22,65,50,66,67,16, + 28,15,20,18,19,21,23,17,26,27, + 24,25,81,77,98,128,83,70,130,116, + 47,48,100,99,45,46,101,102,96,97, + 69,80,103,104,105,106,107,108,109,110, + 117,82,118,119,120,121,122,123,124,125, + 126,127,76,111,112,32,34,30,35,36, + 37,38,39,40,41,42,33,31,43,11, + 75,74,12,5,10,14,13,8,9,7, + 6,4,3,2,1,0,30,26,65,35, + 17,37,18,19,39,40,20,21,66,42, + 67,23,33,27,31,28,50,16,15,29, + 34,32,25,24,11,5,14,13,43,71, + 90,36,41,38,72,69,8,9,7,49, + 12,1,4,10,6,3,2,22,68,0, + 83,24,25,32,34,15,16,50,30,26, + 65,35,17,37,18,19,39,40,20,21, + 66,42,22,67,23,33,27,31,28,29, + 131,72,68,36,41,38,90,71,49,11, + 14,43,10,12,1,4,3,2,6,5, + 8,9,7,13,0,78,79,47,48,14, + 13,45,46,10,51,56,64,29,5,6, + 12,61,62,63,59,54,58,16,28,15, + 20,18,19,21,23,17,26,27,24,25, + 22,53,57,55,52,60,74,1,4,3, + 2,44,0,12,4,74,5,14,13,10, + 80,6,3,17,15,21,23,16,20,18, + 19,34,40,41,36,39,38,33,35,31, + 32,37,42,2,7,9,8,11,76,75, + 1,30,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, + 266,13,70,33,48,5,192,13,13,13, + 308,13,199,308,171,264,264,13,13,288, + 13,13,13,289,279,289,177,289,177,289, + 13,11,85,289,94,281,70,170,259,216, + 13,13,202,322,13,85,13,13,308,308, + 13,308,227,279,177,13,300,16,39,252, + 56,56,294,177,291,291,81,114,240,53, + 13,70,206,264,300,20,264,300,70,85, + 12,13,13,94,94,94,94,94,94,94, + 94,94,94,85,318,41,13,13,13,13, + 13,264,13,13,70,23,16,13,212,294, + 85,13,240,70,70,50,5,112,240,13, + 13,13,13,12,79,70,70,308,308,70, + 70,279,264,171,58,92,212,300,85,107, + 177,300,231,216,240,13,13,325,61,154, + 13,240,184,207,177,177,13,291,279,70, + 291,63,88,207,103,41,41,41,41,94, + 18,79,13,240,240,240,72,180,180,1, + 43,68,68,68,68,85,128,27,27,128, + 247,23,100,35,220,177,177,63,63,252, + 281,112,112,216,167,167,266,266,70,291, + 240,94,70,279,13,13,13,13,13,13, + 13,13,13,13,94,13,295,177,112,13, + 300,16,16,81,16,13,81,289,325,240, + 13,240,73,85,16,13,230,13,33,191, + 184,177,177,70,300,70,88,70,323,12, + 13,13,207,13,12,240,240,240,240,112, + 69,58,277,223,252,179,56,56,13,13, + 13,13,11,85,94,240,240,13,13,13, + 13,78,240,215,85,215,240,112,100,13, + 291,13,13,70,13,13,304,240,13,257, + 13,13,13,121,121,73,73,266,231,73, + 70,94,94,94,94,94,94,94,94,94, + 94,94,94,94,94,94,94,94,94,94, + 94,94,94,94,94,94,94,94,94,94, + 94,94,94,157,94,13,240,61,240,94, + 240,240,79,170,70,70,83,83,207,323, + 73,13,13,63,103,277,277,277,272,94, + 68,70,118,240,242,13,144,13,16,13, + 13,13,13,243,13,323,14,16,16,323, + 125,302,240,250,70,94,85,79,13,41, + 13,13,13,13,207,12,85,151,79,70, + 35,12,128,177,136,70,94,13,13,256, + 252,167,167,308,70,13,13,73,16,92, + 13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13, + 13,13,240,240,216,16,94,13,140,13, + 177,294,83,83,161,73,94,323,240,123, + 304,13,243,13,13,243,314,314,165,13, + 314,16,16,13,70,240,167,77,207,240, + 247,247,247,247,13,13,13,322,207,116, + 240,70,136,136,94,94,250,210,167,68, + 68,73,94,94,94,16,171,94,94,300, + 177,294,13,13,264,134,291,70,138,13, + 247,304,243,94,243,240,259,1,240,327, + 70,13,240,116,70,240,207,277,240,240, + 240,240,128,128,152,13,13,25,13,136, + 70,13,75,91,177,300,233,291,264,264, + 12,123,128,94,112,243,13,243,16,171, + 247,243,25,136,70,13,240,240,152,69, + 142,13,75,13,12,291,291,138,240,112, + 94,13,131,16,240,70,136,240,240,70, + 13,121,12,12,243,240,16,142,70,125, + 125,257,237,13,243,142,240,215,68 + }; + }; + 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,107,143,125,112,124,123, + 5,2,0,4,45,46,0,195,0,41, + 1,0,175,0,142,0,5,2,9,10, + 163,0,173,0,185,5,184,0,204,0, + 41,62,4,49,34,45,0,222,0,4, + 215,0,221,30,0,93,0,4,36,0, + 188,0,5,10,9,2,13,34,49,4, + 0,4,94,0,178,0,2,144,82,0, + 158,0,136,0,2,61,0,2,82,0, + 94,98,41,13,2,9,10,5,0,41, + 176,0,82,162,161,0,13,2,9,10, + 5,95,0,159,0,177,0,4,197,0, + 134,0,167,0,41,62,0,4,106,0, + 4,198,0,213,0,63,0,165,0,211, + 0,150,0,13,2,9,10,5,224,0, + 2,145,0,30,190,0,4,45,144,0, + 5,118,212,0,45,201,26,4,0,100, + 70,5,2,9,10,4,40,0,30,102, + 103,4,0,4,52,80,118,50,5,0, + 46,5,2,9,10,4,174,0,40,1, + 0,4,49,216,0,61,2,3,0,103, + 102,40,70,72,5,10,9,2,0,40, + 82,0,34,52,45,199,41,4,0,40, + 127,0,5,118,181,0,49,34,4,30, + 0,94,41,52,34,83,4,45,0,26, + 4,5,40,100,0,30,103,102,70,2, + 9,10,4,5,0,121,80,52,4,34, + 0,5,10,9,2,13,98,97,41,0, + 2,5,112,108,109,110,117,13,74,0, + 2,71,0,4,5,10,9,2,70,22, + 0,103,102,40,5,72,0,4,34,52, + 80,90,0,4,49,120,0,5,10,9, + 13,3,1,0,107,0,49,4,200,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, + 120,84,10,9,53,57,73,79,80,91, + 92,105,107,48,49,65,110,112,127,59, + 111,50,109,52,69,71,75,78,81,88, + 94,103,125,117,11,12,7,8,98,58, + 14,60,66,72,89,93,95,99,102,104, + 114,115,116,128,68,96,106,82,19,126, + 108,133,100,1,123,44,30,63,83,20, + 101,33,124,113,54,55,61,62,64,70, + 74,76,77,90,97,17,18,32,6,4, + 15,16,21,22,23,24,25,26,27,28, + 45,46,85,86,87,5,29,34,35,36, + 37,38,39,40,41,42,43,122,56,3, + 134,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, + 140,145,146,0,0,144,0,0,240,246, + 143,0,153,142,0,0,152,158,0,0, + 159,255,0,0,0,190,168,169,170,136, + 171,172,173,264,174,161,175,176,177,256, + 139,178,0,151,141,138,179,0,162,187, + 0,0,148,0,0,0,0,0,0,0, + 147,182,197,0,214,0,155,0,211,215, + 0,165,185,196,0,0,0,0,0,0, + 0,0,181,0,0,0,0,0,0,188, + 0,0,216,137,135,156,228,0,167,212, + 218,219,220,0,222,0,198,199,200,201, + 202,203,0,0,217,230,263,231,0,184, + 189,191,192,193,194,195,206,208,0,209, + 0,0,221,0,0,0,235,0,237,0, + 251,252,262,0,157,180,205,0,207,0, + 224,227,0,249,0,250,0,260,265,0, + 149,150,154,0,0,164,166,0,0,0, + 0,204,0,213,0,225,226,0,0,232, + 239,0,243,244,245,248,0,257,0,259, + 0,0,266,0,0,160,163,0,183,0, + 186,0,0,210,223,229,0,0,233,234, + 236,238,0,241,242,247,253,254,0,0, + 258,0,0,261,0,267,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[] = { + 267,723,742,420,431,674,690,701,712,512, + 375,389,406,447,465,137,400,532,570,275, + 731,617,115,146,166,175,180,185,238,303, + 458,473,478,90,252,381,395,645,122,252, + 522,478,750,122,325,356,8,26,58,58, + 82,86,98,109,156,171,199,483,501,505, + 588,610,639,666,670,760,764,768,190,102, + 190,550,566,579,597,658,209,209,337,427, + 579,681,697,708,719,315,628,38,50,79, + 151,151,264,330,32,151,351,372,32,32, + 151,509,607,614,264,151,783,14,20,32, + 73,203,487,554,594,20,1,151,218,412, + 438,487,218,218,438,541,285,43,43,64, + 197,64,64,64,64,592,772,779,43,43, + 68,346,772,779,160,560,245,197,346,197, + 361 + }; + }; + public final static char scopePrefix[] = ScopePrefix.scopePrefix; + public final int scopePrefix(int index) { return scopePrefix[index]; } + + public interface ScopeSuffix { + public final static char scopeSuffix[] = { + 113,62,62,243,243,62,62,62,62,519, + 243,12,243,243,471,143,386,538,576,281, + 162,623,120,120,120,154,154,12,243,308, + 463,463,471,95,257,386,194,650,133,260, + 527,737,755,127,319,319,12,30,62,62, + 62,62,62,113,62,154,12,463,12,12, + 243,354,62,62,62,62,62,354,781,106, + 194,519,519,519,601,650,213,227,341,415, + 583,685,685,685,685,319,632,41,41,62, + 154,154,62,62,333,335,354,62,30,30, + 335,12,62,354,62,643,62,17,23,35, + 76,206,490,557,76,604,4,662,213,415, + 453,653,221,232,441,544,288,48,56,66, + 12,493,495,497,499,12,774,774,45,53, + 70,348,776,776,162,562,247,310,341,295, + 363 + }; + }; + public final static char scopeSuffix[] = ScopeSuffix.scopeSuffix; + public final int scopeSuffix(int index) { return scopeSuffix[index]; } + + public interface ScopeLhs { + public final static char scopeLhs[] = { + 50,17,17,79,110,17,17,17,17,86, + 92,51,79,110,109,77,57,86,85,50, + 17,19,3,7,8,181,181,180,108,50, + 109,109,111,23,97,58,51,163,155,97, + 86,17,17,155,104,64,60,73,117,18, + 18,187,157,89,184,181,180,111,202,55, + 62,167,18,17,17,17,17,17,12,142, + 180,86,85,85,43,163,116,116,72,79, + 85,17,17,17,17,104,19,137,130,16, + 185,181,204,102,115,66,93,65,174,73, + 111,87,168,167,195,163,16,60,17,73, + 84,180,111,120,84,21,34,163,116,79, + 110,163,116,116,110,86,50,137,130,143, + 180,126,125,124,123,81,161,61,137,130, + 224,72,161,61,184,120,108,50,72,50, + 64 + }; + }; + public final static char scopeLhs[] = ScopeLhs.scopeLhs; + public final int scopeLhs(int index) { return scopeLhs[index]; } + + public interface ScopeLa { + public final static char scopeLa[] = { + 129,75,75,83,83,75,75,75,75,75, + 83,43,83,83,1,80,1,75,132,70, + 5,75,80,80,80,1,1,43,83,70, + 1,1,1,75,83,1,1,6,80,76, + 43,1,1,80,75,75,43,1,75,75, + 75,75,75,129,75,1,43,1,43,43, + 83,128,75,75,75,75,75,128,1,75, + 1,75,75,75,77,6,1,1,13,70, + 75,80,80,80,80,75,5,8,8,75, + 1,1,75,75,5,1,128,75,1,1, + 1,43,75,128,75,10,75,1,75,8, + 77,1,49,82,77,75,3,1,1,70, + 70,49,1,1,1,84,81,1,1,29, + 43,1,65,50,50,43,6,6,1,1, + 98,14,6,6,5,1,70,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[] = { + 388,242,242,400,159,242,242,242,242,82, + 447,388,400,159,159,400,435,82,82,388, + 242,242,166,212,212,21,21,412,159,388, + 159,159,159,320,61,435,388,50,43,61, + 82,242,242,43,99,134,435,140,159,242, + 242,58,1,82,47,21,412,159,41,435, + 71,18,242,242,242,242,242,242,216,8, + 412,82,82,82,280,50,159,159,372,400, + 82,242,242,242,242,99,242,24,151,242, + 47,21,108,99,101,134,95,134,156,140, + 159,82,5,18,53,50,242,435,242,140, + 82,412,159,13,82,247,415,50,159,400, + 159,50,159,159,159,82,388,24,151,161, + 412,161,161,161,161,29,55,110,24,151, + 318,372,55,110,47,13,159,388,372,388, + 134 + }; + }; + 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, + 325,137,0,131,265,0,0,282,137,167, + 0,138,0,137,167,0,207,138,0,200, + 5,0,136,228,0,173,233,137,0,211, + 0,233,137,0,256,211,0,270,173,0, + 256,0,173,0,235,256,0,235,0,206, + 173,0,185,256,0,185,0,200,5,29, + 0,136,0,240,0,263,0,232,0,32, + 167,0,357,86,0,30,181,0,195,5, + 0,200,5,64,0,353,5,321,0,352, + 5,5,8,0,136,136,0,351,5,73, + 0,350,5,129,0,136,182,0,137,195, + 81,0,226,0,286,137,69,135,0,20, + 0,319,137,69,49,0,20,58,0,33, + 142,0,20,58,0,0,319,137,69,49, + 213,0,20,188,0,286,137,69,143,0, + 204,138,0,151,0,239,5,318,0,318, + 0,2,0,136,0,286,137,69,142,0, + 204,138,251,0,204,138,33,251,0,204, + 138,346,33,0,139,215,194,138,0,215, + 194,138,0,144,138,0,185,0,342,137, + 185,0,137,185,0,233,138,0,194,341, + 245,0,146,0,0,0,0,341,245,0, + 147,146,0,0,0,0,145,0,0,0, + 0,147,145,0,0,0,0,340,137,174, + 249,0,137,0,249,0,139,0,0,137, + 0,339,137,174,231,0,137,0,0,44, + 137,0,0,169,5,0,137,309,308,137, + 81,307,185,0,308,137,81,307,185,0, + 225,0,226,0,307,185,0,101,0,0, + 225,0,226,0,213,101,0,0,225,0, + 226,0,308,137,307,185,0,225,0,213, + 0,0,225,0,264,137,5,0,136,0, + 0,0,0,0,264,137,5,235,0,248, + 5,0,218,0,156,0,201,194,138,0, + 10,0,0,0,0,201,0,9,0,0, + 232,74,0,135,0,264,137,5,198,0, + 198,0,2,0,0,136,0,0,0,0, + 0,206,5,0,252,137,174,44,36,0, + 204,138,68,71,0,206,138,0,139,204, + 138,306,71,0,204,138,306,71,0,204, + 138,82,134,68,0,252,137,174,281,68, + 0,281,68,0,139,0,0,137,0,252, + 137,174,281,260,68,0,281,260,68,0, + 304,137,174,134,336,65,0,336,65,0, + 140,139,0,0,137,0,304,137,174,336, + 65,0,139,0,0,137,0,204,138,303, + 65,0,145,0,215,204,138,303,245,0, + 146,0,204,138,303,245,0,215,194,138, + 22,0,194,138,22,0,194,138,0,98, + 146,0,202,0,201,0,200,0,199,0, + 302,137,159,0,302,137,185,0,178,94, + 0,331,179,333,334,5,91,0,136,181, + 0,333,334,5,91,0,138,0,136,181, + 0,178,5,84,216,89,0,136,138,0, + 216,89,0,113,2,141,136,138,0,253, + 5,84,0,206,182,0,33,179,0,182, + 0,185,33,179,0,253,5,95,0,216, + 163,253,5,93,0,67,181,0,253,5, + 93,0,136,181,67,181,0,332,137,174, + 0,178,0,232,86,0,178,117,175,0, + 30,179,0,136,159,0,239,5,0,232, + 74,300,0,178,74,0,200,5,328,79, + 138,0,136,0,0,0,0,328,79,138, + 0,2,155,136,0,0,0,0,200,5, + 56,0,157,0,136,49,194,138,0,31, + 157,0,98,146,31,157,0,229,204,138, + 0,156,31,157,0,200,5,60,0,178, + 5,60,0,178,5,80,200,69,52,0, + 200,69,52,0,20,2,141,136,0,178, + 5,80,200,69,55,0,200,69,55,0, + 178,5,80,200,69,57,0,200,69,57, + 0,178,5,80,200,69,53,0,200,69, + 53,0,239,5,136,215,194,138,22,0, + 136,215,194,138,22,0,146,2,0,136, + 0,239,5,135,277,194,138,22,0,277, + 194,138,22,0,145,2,0,136,0,239, + 5,146,0,239,5,150,0,178,74,150, + 0,295,0,31,0,31,149,0,186,0, + 144,0,178,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, + 2766,2665,2276,0,2107,2058,0,1240,682,1952, + 1402,0,6798,6840,6520,5910,0,2274,1587,0, + 3605,2541,0,4018,3991,3833,3091,0,4447,4383, + 4319,4255,4191,4127,4059,3923,3859,3765,3653,3498, + 2874,0,4581,3573,4267,0,1597,700,0,713, + 685,0,672,0,3107,1338,0,1201,925,0, + 1298,3087,1245,5208,2948,2861,1648,1197,1398,0, + 2933,2526,6631,1687,2898,1332,5550,3392,3177,3176, + 819,4447,4383,4319,4255,4191,4127,4059,3923,3859, + 3765,3653,3498,0,2100,1904,1501,888,3347,5520, + 4903,4590,4510,2897,4573,4103,0,767,0,6879, + 6858,6825,6812,5488,5279,6793,6777,6746,4917,6739, + 4643,6720,6715,4045,6682,3109,2941,3332,5451,5250, + 3880,1178,0,3347,2961,6347,5075,5024,910,4903, + 4068,4018,3991,3833,4590,3091,4510,5351,5261,984, + 3398,3660,2881,3472,0,2961,910,0,5364,5233, + 783,636,3124,2912,0,3782,3455,6879,6858,3171, + 2804,6825,2174,6812,2125,2076,2027,1020,2370,5488, + 1929,5279,1829,6793,6777,6746,3260,1421,4917,6739, + 5364,4643,1320,6720,6715,952,4045,2682,3124,6682, + 3109,2613,2941,3332,5451,5250,3880,901,5233,1178, + 2912,1206,1140,1072,1060,728,4903,3398,4068,4018, + 3991,3347,3833,4590,3091,4510,832,763,2961,6347, + 713,685,5075,3660,5351,5024,5261,984,2881,3472, + 910,6598,6577,6489,6242,4936,6462,5208,3051,3270, + 3617,3309,4621,4537,3743,5178,5148,4871,4839,4807, + 4775,4743,4711,5750,5727,5704,5675,5646,6440,6418, + 6379,6215,6193,6171,6149,6127,6105,6083,6061,2542, + 2825,1298,783,2781,2730,2686,1705,2492,2443,1653, + 1604,2635,2591,1245,1553,2392,1156,1455,2299,2250, + 2201,2152,2103,2054,2005,1956,1907,1858,1807,1758, + 1504,1088,998,636,930,1348,1398,2348,0,3398, + 4647,5275,783,4018,5095,4462,3991,3833,4657,5106, + 4334,4454,4262,3568,6629,5793,4101,3965,6347,5364, + 3572,1202,3493,636,3773,847,6625,3780,3465,3017, + 3660,3124,5351,2847,2752,3339,5261,1210,1196,5233, + 5785,5368,3485,5038,3343,4992,3540,3119,3472,2991, + 2912,6689,3347,6619,5814,5378,4198,5520,3091,3183, + 4391,4327,5075,5024,3807,2881,0,4447,4383,4319, + 4255,4191,4127,4059,3923,3859,3765,3653,3498,6484, + 5551,5479,5407,6286,6237,5968,5919,5870,5821,5772, + 4931,4993,2926,0,6630,3647,6272,5987,6631,5982, + 1156,1088,998,5786,5514,5380,3886,2873,5550,3392, + 3177,3176,930,819,4447,4383,4319,4255,4191,4127, + 4059,3923,3859,3765,3653,3498,6484,5551,5479,5407, + 6286,6237,5968,5919,5870,5821,5772,4931,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,327,167,71,7,137,185,213,38,41, + 49,36,68,254,137,68,306,355,325,255, + 8,9,7,256,249,257,245,258,65,259, + 135,22,138,276,29,240,307,137,5,6, + 143,142,12,10,135,138,198,49,49,49, + 69,49,44,281,260,134,173,282,263,137, + 203,198,173,206,138,138,5,3,5,5, + 5,174,341,303,173,336,303,173,69,138, + 204,194,186,29,64,56,51,46,45,13, + 14,48,47,138,10,5,60,52,55,57, + 53,22,146,150,81,137,302,282,233,173, + 138,201,206,69,69,182,137,74,5,78, + 79,135,134,204,194,5,69,80,137,174, + 174,281,82,76,5,82,233,173,138,74, + 206,173,204,204,356,44,291,292,5,354, + 1,44,137,194,267,136,135,138,134,174, + 138,137,194,49,6,5,5,5,5,78, + 79,194,136,200,195,178,174,167,182,137, + 5,69,69,69,69,138,5,116,130,5, + 74,137,308,77,194,14,13,137,137,137, + 240,74,74,215,137,137,137,137,174,138, + 169,137,174,231,160,162,161,165,164,168, + 166,171,170,172,73,175,173,194,232,175, + 173,260,139,77,163,5,76,240,359,352, + 321,5,340,138,183,251,68,49,71,185, + 343,136,135,268,173,268,204,174,137,204, + 286,289,215,295,215,200,200,200,200,74, + 328,5,163,137,137,5,236,235,279,146, + 136,135,22,138,29,200,178,200,200,200, + 200,194,239,49,138,49,239,178,308,317, + 138,318,201,201,286,286,233,264,265,159, + 266,319,49,22,50,252,252,137,204,137, + 174,99,100,46,45,102,101,13,112,111, + 104,103,80,69,96,97,14,106,105,108, + 107,109,127,126,125,124,123,122,121,120, + 119,118,82,117,110,13,1,76,163,5, + 44,1,194,137,268,268,137,137,215,137, + 304,134,305,76,6,163,163,163,163,228, + 5,329,182,169,332,88,86,1,178,11, + 95,93,91,89,84,92,94,87,85,68, + 81,233,248,137,5,76,138,194,151,5, + 80,80,80,80,215,277,138,204,194,309, + 76,204,5,13,137,163,82,248,206,5, + 137,76,76,80,69,267,267,252,260,137, + 161,161,160,160,160,164,164,164,164,164, + 164,162,162,166,165,165,170,168,171,277, + 178,172,1,353,215,342,77,272,206,135, + 270,173,137,137,77,304,82,76,200,137, + 137,11,77,357,232,77,5,5,5,216, + 5,134,178,134,195,264,137,194,49,200, + 5,5,5,5,136,135,229,10,49,137, + 239,201,196,137,82,82,137,233,137,82, + 82,339,77,77,76,139,76,77,82,173, + 270,173,155,345,251,33,138,163,297,300, + 74,205,77,98,77,253,182,137,253,334, + 159,84,253,137,163,264,215,163,178,178, + 178,178,5,5,6,134,136,310,129,137, + 246,319,227,76,270,173,76,138,33,346, + 204,137,5,74,178,163,206,163,333,137, + 5,163,310,137,163,136,239,239,6,5, + 137,80,227,11,204,138,138,297,239,232, + 82,216,179,302,178,246,137,98,350,182, + 73,50,204,204,132,331,163,137,246,163, + 163,137,5,267,163,137,351,82,76 + }; + }; + 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", + "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_list", + "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" + }; + }; + public final static String name[] = Name.name; + public final String name(int index) { return name[index]; } + + public final static int + ERROR_SYMBOL = 72, + SCOPE_UBOUND = 150, + SCOPE_SIZE = 151, + 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 = 639, + NT_OFFSET = 133, + LA_STATE_OFFSET = 8653, + MAX_LA = 2147483647, + NUM_RULES = 635, + NUM_NONTERMINALS = 230, + NUM_SYMBOLS = 363, + SEGMENT_SIZE = 8192, + START_STATE = 4931, + IDENTIFIER_SYMBOL = 0, + EOFT_SYMBOL = 131, + EOLT_SYMBOL = 131, + ACCEPT_ACTION = 7000, + ERROR_ACTION = 8018; + + 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..4194c56b920 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/parser/org/eclipse/cdt/internal/core/lrparser/xlc/cpp/XlcCPPParsersym.java @@ -0,0 +1,290 @@ +/******************************************************************************* +* 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 = 32, + TK_asm = 7, + TK_auto = 34, + TK_bool = 15, + TK_break = 85, + TK_case = 86, + TK_catch = 129, + TK_char = 16, + TK_class = 50, + TK_const = 30, + TK_const_cast = 52, + TK_continue = 87, + TK_default = 88, + TK_delete = 78, + TK_do = 89, + TK_double = 26, + TK_dynamic_cast = 53, + TK_else = 132, + TK_enum = 65, + TK_explicit = 35, + TK_export = 90, + TK_extern = 36, + TK_false = 54, + TK_float = 17, + TK_for = 91, + TK_friend = 37, + TK_goto = 92, + TK_if = 93, + TK_inline = 38, + TK_int = 18, + TK_long = 19, + TK_mutable = 39, + TK_namespace = 68, + TK_new = 79, + TK_operator = 12, + TK_private = 113, + TK_protected = 114, + TK_public = 115, + TK_register = 40, + TK_reinterpret_cast = 55, + TK_return = 94, + TK_short = 20, + TK_signed = 21, + TK_sizeof = 56, + TK_static = 41, + TK_static_cast = 57, + TK_struct = 66, + TK_switch = 95, + TK_template = 49, + TK_this = 58, + TK_throw = 73, + TK_try = 81, + TK_true = 59, + TK_typedef = 42, + TK_typeid = 60, + TK_typename = 22, + TK_union = 67, + TK_unsigned = 23, + TK_using = 71, + TK_virtual = 33, + TK_void = 27, + TK_volatile = 31, + TK_wchar_t = 28, + TK_while = 84, + TK_integer = 61, + TK_floating = 62, + TK_charconst = 63, + TK_stringlit = 44, + TK_identifier = 1, + TK_Completion = 4, + TK_EndOfCompletion = 11, + TK_Invalid = 133, + TK_LeftBracket = 74, + TK_LeftParen = 5, + TK_Dot = 130, + TK_DotStar = 100, + TK_Arrow = 116, + TK_ArrowStar = 99, + TK_PlusPlus = 47, + TK_MinusMinus = 48, + TK_And = 14, + TK_Star = 13, + TK_Plus = 45, + TK_Minus = 46, + TK_Tilde = 10, + TK_Bang = 51, + TK_Slash = 101, + TK_Percent = 102, + TK_RightShift = 96, + TK_LeftShift = 97, + TK_LT = 69, + TK_GT = 80, + TK_LE = 103, + TK_GE = 104, + TK_EQ = 105, + TK_NE = 106, + TK_Caret = 107, + TK_Or = 108, + TK_AndAnd = 109, + TK_OrOr = 110, + TK_Question = 117, + TK_Colon = 77, + TK_ColonColon = 6, + TK_DotDotDot = 98, + TK_Assign = 82, + TK_StarAssign = 118, + TK_SlashAssign = 119, + TK_PercentAssign = 120, + TK_PlusAssign = 121, + TK_MinusAssign = 122, + TK_RightShiftAssign = 123, + TK_LeftShiftAssign = 124, + TK_AndAssign = 125, + TK_CaretAssign = 126, + TK_OrAssign = 127, + TK_Comma = 76, + TK_RightBracket = 128, + TK_RightParen = 75, + TK_RightBrace = 83, + TK_SemiColon = 43, + TK_LeftBrace = 70, + TK_typeof = 29, + TK___alignof__ = 64, + TK___attribute__ = 8, + TK___declspec = 9, + TK_MAX = 111, + TK_MIN = 112, + TK_vector = 3, + TK_pixel = 2, + TK_ERROR_TOKEN = 72, + TK_EOF_TOKEN = 131; + + public final static String orderedTerminalSymbols[] = { + "", + "identifier", + "pixel", + "vector", + "Completion", + "LeftParen", + "ColonColon", + "asm", + "__attribute__", + "__declspec", + "Tilde", + "EndOfCompletion", + "operator", + "Star", + "And", + "bool", + "char", + "float", + "int", + "long", + "short", + "signed", + "typename", + "unsigned", + "_Complex", + "_Imaginary", + "double", + "void", + "wchar_t", + "typeof", + "const", + "volatile", + "restrict", + "virtual", + "auto", + "explicit", + "extern", + "friend", + "inline", + "mutable", + "register", + "static", + "typedef", + "SemiColon", + "stringlit", + "Plus", + "Minus", + "PlusPlus", + "MinusMinus", + "template", + "class", + "Bang", + "const_cast", + "dynamic_cast", + "false", + "reinterpret_cast", + "sizeof", + "static_cast", + "this", + "true", + "typeid", + "integer", + "floating", + "charconst", + "__alignof__", + "enum", + "struct", + "union", + "namespace", + "LT", + "LeftBrace", + "using", + "ERROR_TOKEN", + "throw", + "LeftBracket", + "RightParen", + "Comma", + "Colon", + "delete", + "new", + "GT", + "try", + "Assign", + "RightBrace", + "while", + "break", + "case", + "continue", + "default", + "do", + "export", + "for", + "goto", + "if", + "return", + "switch", + "RightShift", + "LeftShift", + "DotDotDot", + "ArrowStar", + "DotStar", + "Slash", + "Percent", + "LE", + "GE", + "EQ", + "NE", + "Caret", + "Or", + "AndAnd", + "OrOr", + "MAX", + "MIN", + "private", + "protected", + "public", + "Arrow", + "Question", + "StarAssign", + "SlashAssign", + "PercentAssign", + "PlusAssign", + "MinusAssign", + "RightShiftAssign", + "LeftShiftAssign", + "AndAssign", + "CaretAssign", + "OrAssign", + "RightBracket", + "catch", + "Dot", + "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..a68e6b4f065 --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/plugin.properties @@ -0,0 +1,18 @@ +############################################################################### +# 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 = LR Parser Plug-in +Bundle-Vendor.0 = Eclipse.org +Bundle-Name.1 = LR Parser Plug-in + +# built-in languages +language.name.c99= C99 +language.name.isocpp= ISO C++
\ 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..b439382746c --- /dev/null +++ b/xlc/org.eclipse.cdt.core.lrparser.xlc/plugin.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?eclipse version="3.4"?> +<plugin> + <extension point="org.eclipse.cdt.core.language"> + <language + class="org.eclipse.cdt.core.lrparser.xlc.XlcCLanguage" + id="c" + name="XLC C"> + </language> + + <language + class="org.eclipse.cdt.core.lrparser.xlc.XlcCPPLanguage" + id="cpp" + name="XLC C++"> + </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="XLC Language Options"> + </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="XLC Language Options"> + </page> + </extension> +</plugin> 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..79d1b7741cb --- /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,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.internal.core.lrparser.xlc.ui.preferences; + +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 { + NLS.initializeMessages(BUNDLE_NAME, PreferenceMessages.class); + } + + + public static String + XlcLanguageOptionsPreferencePage_link, + XlcLanguageOptionsPreferencePage_group, + XlcLanguageOptionsPreferencePage_preference_vectors; + +} + 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..efad63b2024 --- /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,4 @@ + +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_preference_vectors=Support vector types
\ 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/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..7bed893e08e --- /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,130 @@ +/******************************************************************************* + * 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.XlcPreferenceKeys; +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.Button; +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 Button button_vectors; + + + 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 + } + + @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); + + button_vectors = ControlFactory.createCheckBox(group, PreferenceMessages.XlcLanguageOptionsPreferencePage_preference_vectors); + initCheckbox(button_vectors, XlcPreferenceKeys.KEY_SUPPORT_VECTOR_TYPES); + + return page; + } + + + private void initCheckbox(Button checkbox, String prefKey) { + String preference = null; + + if(isPropertyPage()) { + IProject project = getProject(); + preference = XlcLanguagePreferences.getProjectPreference(prefKey, project); + } + else { + preference = XlcLanguagePreferences.getWorkspacePreference(prefKey); + } + + if(preference == null) { + preference = XlcLanguagePreferences.getDefaultPreference(prefKey); + } + + checkbox.setSelection(Boolean.valueOf(preference)); + } + + + + @Override + protected void performDefaults() { + button_vectors.setSelection(Boolean.valueOf(XlcLanguagePreferences.getDefaultPreference(XlcPreferenceKeys.KEY_SUPPORT_VECTOR_TYPES))); + + super.performDefaults(); + } + + @Override + public boolean performOk() { + setPreference(XlcPreferenceKeys.KEY_SUPPORT_VECTOR_TYPES, button_vectors.getSelection(), getProject()); + return true; + } + + + private IProject getProject() { + return isPropertyPage() ? (IProject)element.getAdapter(IProject.class) : null; + } + + private static void setPreference(String key, boolean val, IProject project) { + if(project != null) + XlcLanguagePreferences.setProjectPreference(key, String.valueOf(val), project); + else + XlcLanguagePreferences.setWorkspacePreference(key, String.valueOf(val)); + } + + +} |