diff -Nru glassfish/entity-persistence/build.xml glassfish-gil/entity-persistence/build.xml --- glassfish/entity-persistence/build.xml 2012-05-24 17:51:52.505918327 +0200 +++ glassfish-gil/entity-persistence/build.xml 2012-05-24 17:40:05.000000000 +0200 @@ -122,6 +122,7 @@ failonerror="true"> <classpath> <pathelement location="${javaee.jar}"/> + <pathelement location="/usr/share/java/antlr.jar"/> </classpath> </javac> <delete file="${component.classes.dir}/oracle/toplink/essentials/Version.java"/> @@ -184,18 +185,23 @@ <target name="docs" depends="init"> <mkdir dir="${build.dir}/javadoc"/> <javadoc sourcepath="${src.dir}" - packagenames="persistence.antlr,oracle.toplink" - destdir="${build.dir}/javadoc" - classpath="${javaee.jar}"/> - + packagenames="oracle.toplink.*" + destdir="${build.dir}/javadoc"> + <classpath> + <pathelement location="${javaee.jar}"/> + <pathelement location="/usr/share/java/antlr.jar"/> + <pathelement location="/usr/share/java/geronimo-jpa.jar"/> + <pathelement location="/usr/share/java/geronimo-jta.jar"/> + </classpath> + </javadoc> </target> <!-- Run ANTLR. --> - <target name="antlr-generate" depends="compile.persistence.antlr"> - <java classname="persistence.antlr.Tool" fork="true" dir="${query.antlr.dir}"> + <target name="antlr-generate"> + <java classname="antlr.Tool" fork="true" dir="${query.antlr.dir}"> <arg value="EJBQLParser.g"/> <classpath> - <pathelement location="${component.classes.dir}"/> + <pathelement location="/usr/share/java/antlr.jar"/> </classpath> </java> </target> @@ -238,7 +244,7 @@ <fileset dir="${component.classes.dir}"> <include name="oracle/toplink/essentials/**/*.class"/> <include name="oracle/toplink/libraries/**/*.class"/> - <include name="persistence/antlr/**/*.class"/> + <!--include name="persistence/antlr/**/*.class"/--> <include name="javax/persistence/**/*.class"/> <include name="orm*.xsd"/> <include name="persistence*.xsd"/> @@ -269,7 +275,7 @@ <fileset dir="${src.dir}"> <include name="oracle/toplink/essentials/**/*.java"/> <include name="oracle/toplink/libraries/**/*.java"/> - <include name="persistence/antlr/**/*.java"/> + <!--include name="persistence/antlr/**/*.java"/--> </fileset> <fileset dir="${basedir}/../persistence-api/src/java"> <include name="javax/persistence/**/*.java"/> diff -Nru glassfish/entity-persistence/src/java/oracle/toplink/essentials/internal/parsing/ejbql/antlr273/EJBQLParserBuilder.java glassfish-gil/entity-persistence/src/java/oracle/toplink/essentials/internal/parsing/ejbql/antlr273/EJBQLParserBuilder.java --- glassfish/entity-persistence/src/java/oracle/toplink/essentials/internal/parsing/ejbql/antlr273/EJBQLParserBuilder.java 2007-01-04 15:31:36.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/oracle/toplink/essentials/internal/parsing/ejbql/antlr273/EJBQLParserBuilder.java 2012-05-24 17:40:06.000000000 +0200 @@ -21,7 +21,7 @@ // Copyright (c) 1998, 2007, Oracle. All rights reserved. package oracle.toplink.essentials.internal.parsing.ejbql.antlr273; -import persistence.antlr.TokenBuffer; +import antlr.TokenBuffer; //java imports import java.io.StringReader; diff -Nru glassfish/entity-persistence/src/java/oracle/toplink/essentials/internal/parsing/ejbql/EJBQLParser.java glassfish-gil/entity-persistence/src/java/oracle/toplink/essentials/internal/parsing/ejbql/EJBQLParser.java --- glassfish/entity-persistence/src/java/oracle/toplink/essentials/internal/parsing/ejbql/EJBQLParser.java 2007-01-04 15:31:35.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/oracle/toplink/essentials/internal/parsing/ejbql/EJBQLParser.java 2012-05-24 17:40:06.000000000 +0200 @@ -25,19 +25,19 @@ import java.util.ArrayList; // Third party (ANLTR) stuff -import persistence.antlr.ANTLRException; -import persistence.antlr.LLkParser; -import persistence.antlr.MismatchedCharException; -import persistence.antlr.MismatchedTokenException; -import persistence.antlr.NoViableAltException; -import persistence.antlr.NoViableAltForCharException; -import persistence.antlr.ParserSharedInputState; -import persistence.antlr.RecognitionException; -import persistence.antlr.Token; -import persistence.antlr.TokenBuffer; -import persistence.antlr.TokenStream; -import persistence.antlr.TokenStreamException; -import persistence.antlr.TokenStreamRecognitionException; +import antlr.ANTLRException; +import antlr.LLkParser; +import antlr.MismatchedCharException; +import antlr.MismatchedTokenException; +import antlr.NoViableAltException; +import antlr.NoViableAltForCharException; +import antlr.ParserSharedInputState; +import antlr.RecognitionException; +import antlr.Token; +import antlr.TokenBuffer; +import antlr.TokenStream; +import antlr.TokenStreamException; +import antlr.TokenStreamRecognitionException; //toplink imports import oracle.toplink.essentials.exceptions.EJBQLException; diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ActionElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ActionElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/ActionElement.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ActionElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,32 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class ActionElement extends AlternativeElement { - protected String actionText; - protected boolean isSemPred = false; - - - public ActionElement(Grammar g, Token t) { - super(g); - actionText = t.getText(); - line = t.getLine(); - column = t.getColumn(); - } - - public void generate() { - grammar.generator.gen(this); - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public String toString() { - return " " + actionText + (isSemPred?"?":""); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/actions/cpp/ActionLexer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/cpp/ActionLexer.java --- glassfish/entity-persistence/src/java/persistence/antlr/actions/cpp/ActionLexer.java 2006-02-08 22:31:08.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/cpp/ActionLexer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,2545 +0,0 @@ -// $ANTLR : "action.g" -> "ActionLexer.java"$ - - package persistence.antlr.actions.cpp; - -import java.io.InputStream; -import persistence.antlr.TokenStreamException; -import persistence.antlr.TokenStreamIOException; -import persistence.antlr.TokenStreamRecognitionException; -import persistence.antlr.CharStreamException; -import persistence.antlr.CharStreamIOException; -import persistence.antlr.ANTLRException; -import java.io.Reader; -import java.util.Hashtable; -import persistence.antlr.CharScanner; -import persistence.antlr.InputBuffer; -import persistence.antlr.ByteBuffer; -import persistence.antlr.CharBuffer; -import persistence.antlr.Token; -import persistence.antlr.CommonToken; -import persistence.antlr.RecognitionException; -import persistence.antlr.NoViableAltForCharException; -import persistence.antlr.MismatchedCharException; -import persistence.antlr.TokenStream; -import persistence.antlr.ANTLRHashString; -import persistence.antlr.LexerSharedInputState; -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.SemanticException; - - import java.io.StringReader; - import persistence.antlr.collections.impl.Vector; - import persistence.antlr.*; - -/** Perform the following translations: - - AST related translations - - ## -> currentRule_AST - #(x,y,z) -> codeGenerator.getASTCreateString(vector-of(x,y,z)) - #[x] -> codeGenerator.getASTCreateString(x) - #x -> codeGenerator.mapTreeId(x) - - Inside context of #(...), you can ref (x,y,z), [x], and x as shortcuts. - - Text related translations - - $append(x) -> text.append(x) - $setText(x) -> text.setLength(_begin); text.append(x) - $getText -> new String(text.getBuffer(),_begin,text.length()-_begin) - $setToken(x) -> _token = x - $setType(x) -> _ttype = x - $FOLLOW(r) -> FOLLOW set name for rule r (optional arg) - $FIRST(r) -> FIRST set name for rule r (optional arg) - */ -public class ActionLexer extends persistence.antlr.CharScanner implements ActionLexerTokenTypes, TokenStream - { - - protected RuleBlock currentRule; - protected CodeGenerator generator; - protected int lineOffset = 0; - private Tool antlrTool; // The ANTLR tool - ActionTransInfo transInfo; - - public ActionLexer(String s, RuleBlock currentRule, - CodeGenerator generator, - ActionTransInfo transInfo ) - { - this(new StringReader(s)); - this.currentRule = currentRule; - this.generator = generator; - this.transInfo = transInfo; - } - - public void setLineOffset(int lineOffset) - { - setLine(lineOffset); - } - - public void setTool(Tool tool) - { - this.antlrTool = tool; - } - - public void reportError(RecognitionException e) - { - antlrTool.error("Syntax error in action: "+e,getFilename(),getLine(),getColumn()); - } - - public void reportError(String s) - { - antlrTool.error(s,getFilename(),getLine(),getColumn()); - } - - public void reportWarning(String s) - { - if ( getFilename()==null ) - antlrTool.warning(s); - else - antlrTool.warning(s,getFilename(),getLine(),getColumn()); - } -public ActionLexer(InputStream in) { - this(new ByteBuffer(in)); -} -public ActionLexer(Reader in) { - this(new CharBuffer(in)); -} -public ActionLexer(InputBuffer ib) { - this(new LexerSharedInputState(ib)); -} -public ActionLexer(LexerSharedInputState state) { - super(state); - caseSensitiveLiterals = true; - setCaseSensitive(true); - literals = new Hashtable(); -} - -public Token nextToken() throws TokenStreamException { - Token theRetToken=null; -tryAgain: - for (;;) { - Token _token = null; - int _ttype = Token.INVALID_TYPE; - resetText(); - try { // for char stream error handling - try { // for lexical error handling - if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff'))) { - mACTION(true); - theRetToken=_returnToken; - } - else { - if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);} - else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - if ( _returnToken==null ) continue tryAgain; // found SKIP token - _ttype = _returnToken.getType(); - _returnToken.setType(_ttype); - return _returnToken; - } - catch (RecognitionException e) { - throw new TokenStreamRecognitionException(e); - } - } - catch (CharStreamException cse) { - if ( cse instanceof CharStreamIOException ) { - throw new TokenStreamIOException(((CharStreamIOException)cse).io); - } - else { - throw new TokenStreamException(cse.getMessage()); - } - } - } -} - - public final void mACTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ACTION; - int _saveIndex; - - { - int _cnt502=0; - _loop502: - do { - switch ( LA(1)) { - case '#': - { - mAST_ITEM(false); - break; - } - case '$': - { - mTEXT_ITEM(false); - break; - } - default: - if ((_tokenSet_0.member(LA(1)))) { - mSTUFF(false); - } - else { - if ( _cnt502>=1 ) { break _loop502; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - } - _cnt502++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - -/** stuff in between #(...) and #id items - * Allow the escaping of the # for C preprocessor stuff. - */ - protected final void mSTUFF(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = STUFF; - int _saveIndex; - - switch ( LA(1)) { - case '"': - { - mSTRING(false); - break; - } - case '\'': - { - mCHAR(false); - break; - } - case '\n': - { - match('\n'); - newline(); - break; - } - default: - if ((LA(1)=='/') && (LA(2)=='*'||LA(2)=='/')) { - mCOMMENT(false); - } - else if ((LA(1)=='\r') && (LA(2)=='\n') && (true)) { - match("\r\n"); - newline(); - } - else if ((LA(1)=='\\') && (LA(2)=='#') && (true)) { - match('\\'); - match('#'); - text.setLength(_begin); text.append("#"); - } - else if ((LA(1)=='/') && (_tokenSet_1.member(LA(2)))) { - match('/'); - { - match(_tokenSet_1); - } - } - else if ((LA(1)=='\r') && (true) && (true)) { - match('\r'); - newline(); - } - else if ((_tokenSet_2.member(LA(1))) && (true) && (true)) { - { - match(_tokenSet_2); - } - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mAST_ITEM(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = AST_ITEM; - int _saveIndex; - Token t=null; - Token id=null; - Token ctor=null; - - if ((LA(1)=='#') && (LA(2)=='(')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mTREE(true); - t=_returnToken; - } - else if ((LA(1)=='#') && (_tokenSet_3.member(LA(2)))) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case ':': case 'A': case 'B': case 'C': - case 'D': case 'E': case 'F': case 'G': - case 'H': case 'I': case 'J': case 'K': - case 'L': case 'M': case 'N': case 'O': - case 'P': case 'Q': case 'R': case 'S': - case 'T': case 'U': case 'V': case 'W': - case 'X': case 'Y': case 'Z': case '_': - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mID(true); - id=_returnToken; - - String idt = id.getText(); - String mapped = generator.mapTreeId(id.getText(), transInfo); - - // verify that it's not a preprocessor macro... - if( mapped!=null && ! idt.equals( mapped ) ) - { - text.setLength(_begin); text.append(mapped); - } - else - { - if(idt.equals("if") || - idt.equals("define") || - idt.equals("ifdef") || - idt.equals("ifndef") || - idt.equals("else") || - idt.equals("elif") || - idt.equals("endif") || - idt.equals("warning") || - idt.equals("error") || - idt.equals("ident") || - idt.equals("pragma") || - idt.equals("include")) - { - text.setLength(_begin); text.append("#"+idt); - } - } - - { - if ((_tokenSet_4.member(LA(1))) && (true) && (true)) { - mWS(false); - } - else { - } - - } - { - if ((LA(1)=='=') && (true) && (true)) { - mVAR_ASSIGN(false); - } - else { - } - - } - } - else if ((LA(1)=='#') && (LA(2)=='[')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mAST_CONSTRUCTOR(true); - ctor=_returnToken; - } - else if ((LA(1)=='#') && (LA(2)=='#')) { - match("##"); - - if( currentRule != null ) - { - String r = currentRule.getRuleName()+"_AST"; - text.setLength(_begin); text.append(r); - - if ( transInfo!=null ) { - transInfo.refRuleRoot=r; // we ref root of tree - } - } - else - { - reportWarning("\"##\" not valid in this context"); - text.setLength(_begin); text.append("##"); - } - - { - if ((_tokenSet_4.member(LA(1))) && (true) && (true)) { - mWS(false); - } - else { - } - - } - { - if ((LA(1)=='=') && (true) && (true)) { - mVAR_ASSIGN(false); - } - else { - } - - } - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ITEM(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ITEM; - int _saveIndex; - Token a1=null; - Token a2=null; - Token a3=null; - Token a4=null; - Token a5=null; - Token a6=null; - - if ((LA(1)=='$') && (LA(2)=='F') && (LA(3)=='O')) { - match("$FOLLOW"); - { - if ((_tokenSet_5.member(LA(1))) && (_tokenSet_6.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a5=_returnToken; - match(')'); - } - else { - } - - } - - String rule = currentRule.getRuleName(); - if ( a5!=null ) { - rule = a5.getText(); - } - String setName = generator.getFOLLOWBitSet(rule, 1); - // System.out.println("FOLLOW("+rule+")="+setName); - if ( setName==null ) { - reportError("$FOLLOW("+rule+")"+ - ": unknown rule or bad lookahead computation"); - } - else { - text.setLength(_begin); text.append(setName); - } - - } - else if ((LA(1)=='$') && (LA(2)=='F') && (LA(3)=='I')) { - match("$FIRST"); - { - if ((_tokenSet_5.member(LA(1))) && (_tokenSet_6.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a6=_returnToken; - match(')'); - } - else { - } - - } - - String rule = currentRule.getRuleName(); - if ( a6!=null ) { - rule = a6.getText(); - } - String setName = generator.getFIRSTBitSet(rule, 1); - // System.out.println("FIRST("+rule+")="+setName); - if ( setName==null ) { - reportError("$FIRST("+rule+")"+ - ": unknown rule or bad lookahead computation"); - } - else { - text.setLength(_begin); text.append(setName); - } - - } - else if ((LA(1)=='$') && (LA(2)=='a')) { - match("$append"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a1=_returnToken; - match(')'); - - String t = "text += "+a1.getText(); - text.setLength(_begin); text.append(t); - - } - else if ((LA(1)=='$') && (LA(2)=='s')) { - match("$set"); - { - if ((LA(1)=='T') && (LA(2)=='e')) { - match("Text"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a2=_returnToken; - match(')'); - - String t; - t = "{ text.erase(_begin); text += "+a2.getText()+"; }"; - text.setLength(_begin); text.append(t); - - } - else if ((LA(1)=='T') && (LA(2)=='o')) { - match("Token"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a3=_returnToken; - match(')'); - - String t="_token = "+a3.getText(); - text.setLength(_begin); text.append(t); - - } - else if ((LA(1)=='T') && (LA(2)=='y')) { - match("Type"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a4=_returnToken; - match(')'); - - String t="_ttype = "+a4.getText(); - text.setLength(_begin); text.append(t); - - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else if ((LA(1)=='$') && (LA(2)=='g')) { - match("$getText"); - - text.setLength(_begin); text.append("text.substr(_begin,text.length()-_begin)"); - - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mCOMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = COMMENT; - int _saveIndex; - - if ((LA(1)=='/') && (LA(2)=='/')) { - mSL_COMMENT(false); - } - else if ((LA(1)=='/') && (LA(2)=='*')) { - mML_COMMENT(false); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mSTRING(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = STRING; - int _saveIndex; - - match('"'); - { - _loop599: - do { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_7.member(LA(1)))) { - matchNot('"'); - } - else { - break _loop599; - } - - } while (true); - } - match('"'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mCHAR(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = CHAR; - int _saveIndex; - - match('\''); - { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_8.member(LA(1)))) { - matchNot('\''); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - match('\''); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTREE(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TREE; - int _saveIndex; - Token t=null; - Token t2=null; - - StringBuffer buf = new StringBuffer(); - int n=0; - Vector terms = new Vector(10); - - - _saveIndex=text.length(); - match('('); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case ':': - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case '[': case '_': - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mTREE_ELEMENT(true); - text.setLength(_saveIndex); - t=_returnToken; - - terms.appendElement( - generator.processStringForASTConstructor(t.getText()) - ); - - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': case ',': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop528: - do { - if ((LA(1)==',')) { - _saveIndex=text.length(); - match(','); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case ':': - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case '[': case '_': - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mTREE_ELEMENT(true); - text.setLength(_saveIndex); - t2=_returnToken; - - terms.appendElement( - generator.processStringForASTConstructor(t2.getText()) - ); - - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': case ',': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - } - else { - break _loop528; - } - - } while (true); - } - text.setLength(_begin); text.append(generator.getASTCreateString(terms)); - _saveIndex=text.length(); - match(')'); - text.setLength(_saveIndex); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mWS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = WS; - int _saveIndex; - - { - int _cnt619=0; - _loop619: - do { - if ((LA(1)=='\r') && (LA(2)=='\n') && (true)) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)==' ') && (true) && (true)) { - match(' '); - } - else if ((LA(1)=='\t') && (true) && (true)) { - match('\t'); - } - else if ((LA(1)=='\r') && (true) && (true)) { - match('\r'); - newline(); - } - else if ((LA(1)=='\n') && (true) && (true)) { - match('\n'); - newline(); - } - else { - if ( _cnt619>=1 ) { break _loop619; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt619++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mID(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ID; - int _saveIndex; - - { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '_': - { - match('_'); - break; - } - case ':': - { - match("::"); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop585: - do { - if ((_tokenSet_9.member(LA(1))) && (true) && (true)) { - { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - matchRange('0','9'); - break; - } - case '_': - { - match('_'); - break; - } - case ':': - { - match("::"); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - } - else { - break _loop585; - } - - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mVAR_ASSIGN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = VAR_ASSIGN; - int _saveIndex; - - match('='); - - // inform the code generator that an assignment was done to - // AST root for the rule if invoker set refRuleRoot. - if ( LA(1)!='=' && transInfo!=null && transInfo.refRuleRoot!=null ) { - transInfo.assignToRoot=true; - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mAST_CONSTRUCTOR(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = AST_CONSTRUCTOR; - int _saveIndex; - Token x=null; - Token y=null; - - _saveIndex=text.length(); - match('['); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case '0': - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': - case '9': case ':': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '[': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mAST_CTOR_ELEMENT(true); - text.setLength(_saveIndex); - x=_returnToken; - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ',': case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - switch ( LA(1)) { - case ',': - { - _saveIndex=text.length(); - match(','); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case '0': - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': - case '9': case ':': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '[': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mAST_CTOR_ELEMENT(true); - text.setLength(_saveIndex); - y=_returnToken; - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - match(']'); - text.setLength(_saveIndex); - - // System.out.println("AST_CONSTRUCTOR: "+((x==null)?"null":x.getText())+ - // ", "+((y==null)?"null":y.getText())); - String ys = generator.processStringForASTConstructor(x.getText()); - - // the second does not need processing coz it's a string - // (eg second param of astFactory.create(x,y) - if ( y!=null ) - ys += ","+y.getText(); - - text.setLength(_begin); text.append( generator.getASTCreateString(null,ys) ); - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ARG(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ARG; - int _saveIndex; - - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '"': case '$': case '\'': case '+': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case ':': case 'A': - case 'B': case 'C': case 'D': case 'E': - case 'F': case 'G': case 'H': case 'I': - case 'J': case 'K': case 'L': case 'M': - case 'N': case 'O': case 'P': case 'Q': - case 'R': case 'S': case 'T': case 'U': - case 'V': case 'W': case 'X': case 'Y': - case 'Z': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - int _cnt559=0; - _loop559: - do { - if ((_tokenSet_10.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mTEXT_ARG_ELEMENT(false); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_11.member(LA(2))) && (true)) { - mWS(false); - } - else if ((_tokenSet_11.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else { - if ( _cnt559>=1 ) { break _loop559; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt559++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTREE_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TREE_ELEMENT; - int _saveIndex; - Token id=null; - boolean was_mapped; - - switch ( LA(1)) { - case '(': - { - mTREE(false); - break; - } - case '[': - { - mAST_CONSTRUCTOR(false); - break; - } - case ':': case 'A': case 'B': case 'C': - case 'D': case 'E': case 'F': case 'G': - case 'H': case 'I': case 'J': case 'K': - case 'L': case 'M': case 'N': case 'O': - case 'P': case 'Q': case 'R': case 'S': - case 'T': case 'U': case 'V': case 'W': - case 'X': case 'Y': case 'Z': case '_': - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - mID_ELEMENT(false); - break; - } - case '"': - { - mSTRING(false); - break; - } - default: - if ((LA(1)=='#') && (LA(2)=='(')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mTREE(false); - } - else if ((LA(1)=='#') && (LA(2)=='[')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mAST_CONSTRUCTOR(false); - } - else if ((LA(1)=='#') && (_tokenSet_12.member(LA(2)))) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - was_mapped=mID_ELEMENT(true); - id=_returnToken; - // RK: I have a queer feeling that this maptreeid is redundant.. - if ( ! was_mapped ) - { - String t = generator.mapTreeId(id.getText(), null); - // System.out.println("mapped: "+id.getText()+" -> "+t); - if ( t!=null ) { - text.setLength(_begin); text.append(t); - } - } - - } - else if ((LA(1)=='#') && (LA(2)=='#')) { - match("##"); - - if( currentRule != null ) - { - String t = currentRule.getRuleName()+"_AST"; - text.setLength(_begin); text.append(t); - } - else - { - reportError("\"##\" not valid in this context"); - text.setLength(_begin); text.append("##"); - } - - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - -/** An ID_ELEMENT can be a func call, array ref, simple var, - * or AST label ref. - */ - protected final boolean mID_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - boolean mapped=false; - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ID_ELEMENT; - int _saveIndex; - Token id=null; - - mID(true); - id=_returnToken; - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_13.member(LA(2))) && (true)) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_13.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case '(': case '<': - { - { - switch ( LA(1)) { - case '<': - { - match('<'); - { - _loop542: - do { - if ((_tokenSet_14.member(LA(1)))) { - matchNot('>'); - } - else { - break _loop542; - } - - } while (true); - } - match('>'); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_15.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_15.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case ':': case 'A': - case 'B': case 'C': case 'D': case 'E': - case 'F': case 'G': case 'H': case 'I': - case 'J': case 'K': case 'L': case 'M': - case 'N': case 'O': case 'P': case 'Q': - case 'R': case 'S': case 'T': case 'U': - case 'V': case 'W': case 'X': case 'Y': - case 'Z': case '[': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - mARG(false); - { - _loop547: - do { - if ((LA(1)==',')) { - match(','); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case ':': case 'A': - case 'B': case 'C': case 'D': case 'E': - case 'F': case 'G': case 'H': case 'I': - case 'J': case 'K': case 'L': case 'M': - case 'N': case 'O': case 'P': case 'Q': - case 'R': case 'S': case 'T': case 'U': - case 'V': case 'W': case 'X': case 'Y': - case 'Z': case '[': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mARG(false); - } - else { - break _loop547; - } - - } while (true); - } - break; - } - case '\t': case '\n': case '\r': case ' ': - case ')': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(')'); - break; - } - case '[': - { - { - int _cnt552=0; - _loop552: - do { - if ((LA(1)=='[')) { - match('['); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case ':': case 'A': - case 'B': case 'C': case 'D': case 'E': - case 'F': case 'G': case 'H': case 'I': - case 'J': case 'K': case 'L': case 'M': - case 'N': case 'O': case 'P': case 'Q': - case 'R': case 'S': case 'T': case 'U': - case 'V': case 'W': case 'X': case 'Y': - case 'Z': case '[': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mARG(false); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(']'); - } - else { - if ( _cnt552>=1 ) { break _loop552; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt552++; - } while (true); - } - break; - } - case '.': - { - match('.'); - mID_ELEMENT(false); - break; - } - case ':': - { - match("::"); - mID_ELEMENT(false); - break; - } - default: - if ((LA(1)=='-') && (LA(2)=='>') && (_tokenSet_12.member(LA(3)))) { - match("->"); - mID_ELEMENT(false); - } - else if ((_tokenSet_16.member(LA(1))) && (true) && (true)) { - - mapped = true; - String t = generator.mapTreeId(id.getText(), transInfo); - // System.out.println("mapped: "+id.getText()+" -> "+t); - if ( t!=null ) { - text.setLength(_begin); text.append(t); - } - - { - if (((_tokenSet_17.member(LA(1))) && (_tokenSet_16.member(LA(2))) && (true))&&(transInfo!=null && transInfo.refRuleRoot!=null)) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '=': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mVAR_ASSIGN(false); - } - else if ((_tokenSet_18.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - return mapped; - } - -/** The arguments of a #[...] constructor are text, token type, - * or a tree. - */ - protected final void mAST_CTOR_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = AST_CTOR_ELEMENT; - int _saveIndex; - - if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mSTRING(false); - } - else if ((_tokenSet_19.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mTREE_ELEMENT(false); - } - else if (((LA(1) >= '0' && LA(1) <= '9'))) { - mINT(false); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mINT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = INT; - int _saveIndex; - - { - int _cnt610=0; - _loop610: - do { - if (((LA(1) >= '0' && LA(1) <= '9'))) { - mDIGIT(false); - } - else { - if ( _cnt610>=1 ) { break _loop610; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt610++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mARG(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ARG; - int _saveIndex; - - { - switch ( LA(1)) { - case '\'': - { - mCHAR(false); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - mINT_OR_FLOAT(false); - break; - } - default: - if ((_tokenSet_19.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mTREE_ELEMENT(false); - } - else if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mSTRING(false); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop580: - do { - if ((_tokenSet_20.member(LA(1))) && (_tokenSet_21.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '*': case '+': case '-': case '/': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - switch ( LA(1)) { - case '+': - { - match('+'); - break; - } - case '-': - { - match('-'); - break; - } - case '*': - { - match('*'); - break; - } - case '/': - { - match('/'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case ':': case 'A': - case 'B': case 'C': case 'D': case 'E': - case 'F': case 'G': case 'H': case 'I': - case 'J': case 'K': case 'L': case 'M': - case 'N': case 'O': case 'P': case 'Q': - case 'R': case 'S': case 'T': case 'U': - case 'V': case 'W': case 'X': case 'Y': - case 'Z': case '[': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mARG(false); - } - else { - break _loop580; - } - - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ARG_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ARG_ELEMENT; - int _saveIndex; - - switch ( LA(1)) { - case ':': case 'A': case 'B': case 'C': - case 'D': case 'E': case 'F': case 'G': - case 'H': case 'I': case 'J': case 'K': - case 'L': case 'M': case 'N': case 'O': - case 'P': case 'Q': case 'R': case 'S': - case 'T': case 'U': case 'V': case 'W': - case 'X': case 'Y': case 'Z': case '_': - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - mTEXT_ARG_ID_ELEMENT(false); - break; - } - case '"': - { - mSTRING(false); - break; - } - case '\'': - { - mCHAR(false); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - mINT_OR_FLOAT(false); - break; - } - case '$': - { - mTEXT_ITEM(false); - break; - } - case '+': - { - match('+'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ARG_ID_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ARG_ID_ELEMENT; - int _saveIndex; - Token id=null; - - mID(true); - id=_returnToken; - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_22.member(LA(2))) && (true)) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_22.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case '(': - { - match('('); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_23.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_23.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - _loop568: - do { - if ((_tokenSet_24.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mTEXT_ARG(false); - { - _loop567: - do { - if ((LA(1)==',')) { - match(','); - mTEXT_ARG(false); - } - else { - break _loop567; - } - - } while (true); - } - } - else { - break _loop568; - } - - } while (true); - } - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(')'); - break; - } - case '[': - { - { - int _cnt573=0; - _loop573: - do { - if ((LA(1)=='[')) { - match('['); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_24.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_24.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - mTEXT_ARG(false); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(']'); - } - else { - if ( _cnt573>=1 ) { break _loop573; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt573++; - } while (true); - } - break; - } - case '.': - { - match('.'); - mTEXT_ARG_ID_ELEMENT(false); - break; - } - case '-': - { - match("->"); - mTEXT_ARG_ID_ELEMENT(false); - break; - } - default: - if ((LA(1)==':') && (LA(2)==':') && (_tokenSet_12.member(LA(3)))) { - match("::"); - mTEXT_ARG_ID_ELEMENT(false); - } - else if ((_tokenSet_11.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mINT_OR_FLOAT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = INT_OR_FLOAT; - int _saveIndex; - - { - int _cnt613=0; - _loop613: - do { - if (((LA(1) >= '0' && LA(1) <= '9')) && (_tokenSet_25.member(LA(2))) && (true)) { - mDIGIT(false); - } - else { - if ( _cnt613>=1 ) { break _loop613; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt613++; - } while (true); - } - { - if ((LA(1)=='L') && (_tokenSet_26.member(LA(2))) && (true)) { - match('L'); - } - else if ((LA(1)=='l') && (_tokenSet_26.member(LA(2))) && (true)) { - match('l'); - } - else if ((LA(1)=='.')) { - match('.'); - { - _loop616: - do { - if (((LA(1) >= '0' && LA(1) <= '9')) && (_tokenSet_26.member(LA(2))) && (true)) { - mDIGIT(false); - } - else { - break _loop616; - } - - } while (true); - } - } - else if ((_tokenSet_26.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mSL_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = SL_COMMENT; - int _saveIndex; - - match("//"); - { - _loop590: - do { - // nongreedy exit test - if ((LA(1)=='\n'||LA(1)=='\r') && (true) && (true)) break _loop590; - if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - matchNot(EOF_CHAR); - } - else { - break _loop590; - } - - } while (true); - } - { - if ((LA(1)=='\r') && (LA(2)=='\n') && (true)) { - match("\r\n"); - } - else if ((LA(1)=='\n')) { - match('\n'); - } - else if ((LA(1)=='\r') && (true) && (true)) { - match('\r'); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - newline(); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mML_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ML_COMMENT; - int _saveIndex; - - match("/*"); - { - _loop594: - do { - // nongreedy exit test - if ((LA(1)=='*') && (LA(2)=='/') && (true)) break _loop594; - if ((LA(1)=='\r') && (LA(2)=='\n') && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - match('\r'); - newline(); - } - else if ((LA(1)=='\n') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - match('\n'); - newline(); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - matchNot(EOF_CHAR); - } - else { - break _loop594; - } - - } while (true); - } - match("*/"); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mESC(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ESC; - int _saveIndex; - - match('\\'); - { - switch ( LA(1)) { - case 'n': - { - match('n'); - break; - } - case 'r': - { - match('r'); - break; - } - case 't': - { - match('t'); - break; - } - case 'v': - { - match('v'); - break; - } - case 'b': - { - match('b'); - break; - } - case 'f': - { - match('f'); - break; - } - case '"': - { - match('"'); - break; - } - case '\'': - { - match('\''); - break; - } - case '\\': - { - match('\\'); - break; - } - case '0': case '1': case '2': case '3': - { - { - matchRange('0','3'); - } - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mDIGIT(false); - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mDIGIT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - case '4': case '5': case '6': case '7': - { - { - matchRange('4','7'); - } - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mDIGIT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = DIGIT; - int _saveIndex; - - matchRange('0','9'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - - private static final long[] mk_tokenSet_0() { - long[] data = new long[8]; - data[0]=-103079215112L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - private static final long[] mk_tokenSet_1() { - long[] data = new long[8]; - data[0]=-145135534866440L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1()); - private static final long[] mk_tokenSet_2() { - long[] data = new long[8]; - data[0]=-141407503262728L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2()); - private static final long[] mk_tokenSet_3() { - long[] data = { 288230380446688768L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3()); - private static final long[] mk_tokenSet_4() { - long[] data = { 4294977024L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4()); - private static final long[] mk_tokenSet_5() { - long[] data = { 1103806604800L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5()); - private static final long[] mk_tokenSet_6() { - long[] data = { 576189812881499648L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6()); - private static final long[] mk_tokenSet_7() { - long[] data = new long[8]; - data[0]=-17179869192L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7()); - private static final long[] mk_tokenSet_8() { - long[] data = new long[8]; - data[0]=-549755813896L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8()); - private static final long[] mk_tokenSet_9() { - long[] data = { 576179277326712832L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_9 = new BitSet(mk_tokenSet_9()); - private static final long[] mk_tokenSet_10() { - long[] data = { 576188709074894848L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_10 = new BitSet(mk_tokenSet_10()); - private static final long[] mk_tokenSet_11() { - long[] data = { 576208504579171840L, 576460746532061182L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_11 = new BitSet(mk_tokenSet_11()); - private static final long[] mk_tokenSet_12() { - long[] data = { 288230376151711744L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_12 = new BitSet(mk_tokenSet_12()); - private static final long[] mk_tokenSet_13() { - long[] data = { 3747275269732312576L, 671088640L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_13 = new BitSet(mk_tokenSet_13()); - private static final long[] mk_tokenSet_14() { - long[] data = new long[8]; - data[0]=-4611686018427387912L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_14 = new BitSet(mk_tokenSet_14()); - private static final long[] mk_tokenSet_15() { - long[] data = { 576183181451994624L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_15 = new BitSet(mk_tokenSet_15()); - private static final long[] mk_tokenSet_16() { - long[] data = { 2306051920717948416L, 536870912L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_16 = new BitSet(mk_tokenSet_16()); - private static final long[] mk_tokenSet_17() { - long[] data = { 2305843013508670976L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_17 = new BitSet(mk_tokenSet_17()); - private static final long[] mk_tokenSet_18() { - long[] data = { 208911504254464L, 536870912L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_18 = new BitSet(mk_tokenSet_18()); - private static final long[] mk_tokenSet_19() { - long[] data = { 288231527202947072L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_19 = new BitSet(mk_tokenSet_19()); - private static final long[] mk_tokenSet_20() { - long[] data = { 189120294954496L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_20 = new BitSet(mk_tokenSet_20()); - private static final long[] mk_tokenSet_21() { - long[] data = { 576370098428716544L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_21 = new BitSet(mk_tokenSet_21()); - private static final long[] mk_tokenSet_22() { - long[] data = { 576315157207066112L, 576460746666278910L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_22 = new BitSet(mk_tokenSet_22()); - private static final long[] mk_tokenSet_23() { - long[] data = { 576190912393127424L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_23 = new BitSet(mk_tokenSet_23()); - private static final long[] mk_tokenSet_24() { - long[] data = { 576188713369871872L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_24 = new BitSet(mk_tokenSet_24()); - private static final long[] mk_tokenSet_25() { - long[] data = { 576459193230304768L, 576460746532061182L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_25 = new BitSet(mk_tokenSet_25()); - private static final long[] mk_tokenSet_26() { - long[] data = { 576388824486127104L, 576460746532061182L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_26 = new BitSet(mk_tokenSet_26()); - - } diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/actions/cpp/ActionLexerTokenTypes.java glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/cpp/ActionLexerTokenTypes.java --- glassfish/entity-persistence/src/java/persistence/antlr/actions/cpp/ActionLexerTokenTypes.java 2006-02-08 22:31:09.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/cpp/ActionLexerTokenTypes.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,33 +0,0 @@ -// $ANTLR : "action.g" -> "ActionLexer.java"$ - - package persistence.antlr.actions.cpp; - -public interface ActionLexerTokenTypes { - int EOF = 1; - int NULL_TREE_LOOKAHEAD = 3; - int ACTION = 4; - int STUFF = 5; - int AST_ITEM = 6; - int TEXT_ITEM = 7; - int TREE = 8; - int TREE_ELEMENT = 9; - int AST_CONSTRUCTOR = 10; - int AST_CTOR_ELEMENT = 11; - int ID_ELEMENT = 12; - int TEXT_ARG = 13; - int TEXT_ARG_ELEMENT = 14; - int TEXT_ARG_ID_ELEMENT = 15; - int ARG = 16; - int ID = 17; - int VAR_ASSIGN = 18; - int COMMENT = 19; - int SL_COMMENT = 20; - int ML_COMMENT = 21; - int CHAR = 22; - int STRING = 23; - int ESC = 24; - int DIGIT = 25; - int INT = 26; - int INT_OR_FLOAT = 27; - int WS = 28; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/actions/csharp/ActionLexer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/csharp/ActionLexer.java --- glassfish/entity-persistence/src/java/persistence/antlr/actions/csharp/ActionLexer.java 2006-02-08 22:31:09.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/csharp/ActionLexer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,2574 +0,0 @@ -// $ANTLR : "action.g" -> "ActionLexer.java"$ - - package persistence.antlr.actions.csharp; - -import java.io.InputStream; -import persistence.antlr.TokenStreamException; -import persistence.antlr.TokenStreamIOException; -import persistence.antlr.TokenStreamRecognitionException; -import persistence.antlr.CharStreamException; -import persistence.antlr.CharStreamIOException; -import persistence.antlr.ANTLRException; -import java.io.Reader; -import java.util.Hashtable; -import persistence.antlr.CharScanner; -import persistence.antlr.InputBuffer; -import persistence.antlr.ByteBuffer; -import persistence.antlr.CharBuffer; -import persistence.antlr.Token; -import persistence.antlr.CommonToken; -import persistence.antlr.RecognitionException; -import persistence.antlr.NoViableAltForCharException; -import persistence.antlr.MismatchedCharException; -import persistence.antlr.TokenStream; -import persistence.antlr.ANTLRHashString; -import persistence.antlr.LexerSharedInputState; -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.SemanticException; - - import java.io.StringReader; - import persistence.antlr.collections.impl.Vector; - import persistence.antlr.*; - -/** Perform the following translations: - - AST related translations - - ## -> currentRule_AST - #(x,y,z) -> codeGenerator.getASTCreateString(vector-of(x,y,z)) - #[x] -> codeGenerator.getASTCreateString(x) - #x -> codeGenerator.mapTreeId(x) - - Inside context of #(...), you can ref (x,y,z), [x], and x as shortcuts. - - Text related translations - - $append(x) -> text.append(x) - $setText(x) -> text.setLength(_begin); text.append(x) - $getText -> new String(text.getBuffer(),_begin,text.length()-_begin) - $setToken(x) -> _token = x - $setType(x) -> _ttype = x - $FOLLOW(r) -> FOLLOW set name for rule r (optional arg) - $FIRST(r) -> FIRST set name for rule r (optional arg) - */ -public class ActionLexer extends persistence.antlr.CharScanner implements ActionLexerTokenTypes, TokenStream - { - - protected RuleBlock currentRule; - protected CodeGenerator generator; - protected int lineOffset = 0; - private Tool antlrTool; // The ANTLR tool - ActionTransInfo transInfo; - - public ActionLexer( String s, RuleBlock currentRule, - CodeGenerator generator, - ActionTransInfo transInfo ) - { - this(new StringReader(s)); - this.currentRule = currentRule; - this.generator = generator; - this.transInfo = transInfo; - } - - public void setLineOffset(int lineOffset) - { - setLine(lineOffset); - } - - public void setTool(Tool tool) - { - this.antlrTool = tool; - } - - public void reportError(RecognitionException e) - { - antlrTool.error("Syntax error in action: "+e,getFilename(),getLine(),getColumn()); - } - - public void reportError(String s) - { - antlrTool.error(s,getFilename(),getLine(),getColumn()); - } - - public void reportWarning(String s) - { - if ( getFilename()==null ) - antlrTool.warning(s); - else - antlrTool.warning(s,getFilename(),getLine(),getColumn()); - } -public ActionLexer(InputStream in) { - this(new ByteBuffer(in)); -} -public ActionLexer(Reader in) { - this(new CharBuffer(in)); -} -public ActionLexer(InputBuffer ib) { - this(new LexerSharedInputState(ib)); -} -public ActionLexer(LexerSharedInputState state) { - super(state); - caseSensitiveLiterals = true; - setCaseSensitive(true); - literals = new Hashtable(); -} - -public Token nextToken() throws TokenStreamException { - Token theRetToken=null; -tryAgain: - for (;;) { - Token _token = null; - int _ttype = Token.INVALID_TYPE; - resetText(); - try { // for char stream error handling - try { // for lexical error handling - if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff'))) { - mACTION(true); - theRetToken=_returnToken; - } - else { - if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);} - else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - if ( _returnToken==null ) continue tryAgain; // found SKIP token - _ttype = _returnToken.getType(); - _returnToken.setType(_ttype); - return _returnToken; - } - catch (RecognitionException e) { - throw new TokenStreamRecognitionException(e); - } - } - catch (CharStreamException cse) { - if ( cse instanceof CharStreamIOException ) { - throw new TokenStreamIOException(((CharStreamIOException)cse).io); - } - else { - throw new TokenStreamException(cse.getMessage()); - } - } - } -} - - public final void mACTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ACTION; - int _saveIndex; - - { - int _cnt623=0; - _loop623: - do { - switch ( LA(1)) { - case '#': - { - mAST_ITEM(false); - break; - } - case '$': - { - mTEXT_ITEM(false); - break; - } - default: - if ((_tokenSet_0.member(LA(1)))) { - mSTUFF(false); - } - else { - if ( _cnt623>=1 ) { break _loop623; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - } - _cnt623++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - -/** stuff in between #(...) and #id items - * Allow the escaping of the # for C# preprocessor stuff. - */ - protected final void mSTUFF(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = STUFF; - int _saveIndex; - - switch ( LA(1)) { - case '"': - { - mSTRING(false); - break; - } - case '\'': - { - mCHAR(false); - break; - } - case '\n': - { - match('\n'); - newline(); - break; - } - default: - if ((LA(1)=='/') && (LA(2)=='*'||LA(2)=='/')) { - mCOMMENT(false); - } - else if ((LA(1)=='\r') && (LA(2)=='\n') && (true)) { - match("\r\n"); - newline(); - } - else if ((LA(1)=='\\') && (LA(2)=='#') && (true)) { - match('\\'); - match('#'); - text.setLength(_begin); text.append("#"); - } - else if ((LA(1)=='/') && (_tokenSet_1.member(LA(2)))) { - match('/'); - { - match(_tokenSet_1); - } - } - else if ((LA(1)=='\r') && (true) && (true)) { - match('\r'); - newline(); - } - else if ((_tokenSet_2.member(LA(1))) && (true) && (true)) { - { - match(_tokenSet_2); - } - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mAST_ITEM(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = AST_ITEM; - int _saveIndex; - Token t=null; - Token id=null; - Token ctor=null; - - if ((LA(1)=='#') && (LA(2)=='(')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mTREE(true); - t=_returnToken; - } - else if ((LA(1)=='#') && (_tokenSet_3.member(LA(2)))) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mID(true); - id=_returnToken; - - String idt = id.getText(); - String mapped = generator.mapTreeId(id.getText(), transInfo); - - // verify that it's not a preprocessor macro... - if ( (mapped != null) && !idt.equals(mapped) ) - { - text.setLength(_begin); text.append(mapped); - } - else - { - if (idt.equals("define") || - idt.equals("undef") || - idt.equals("if") || - idt.equals("elif") || - idt.equals("else") || - idt.equals("endif") || - idt.equals("line") || - idt.equals("error") || - idt.equals("warning") || - idt.equals("region") || - idt.equals("endregion")) - { - text.setLength(_begin); text.append("#"+idt); - } - } - - { - if ((_tokenSet_4.member(LA(1))) && (true) && (true)) { - mWS(false); - } - else { - } - - } - { - if ((LA(1)=='=') && (true) && (true)) { - mVAR_ASSIGN(false); - } - else { - } - - } - } - else if ((LA(1)=='#') && (LA(2)=='[')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mAST_CONSTRUCTOR(true); - ctor=_returnToken; - } - else if ((LA(1)=='#') && (LA(2)=='#')) { - match("##"); - - if( currentRule != null ) - { - String r = currentRule.getRuleName()+"_AST"; - text.setLength(_begin); text.append(r); - - if ( transInfo!=null ) { - transInfo.refRuleRoot=r; // we ref root of tree - } - } - else - { - reportWarning("\"##\" not valid in this context"); - text.setLength(_begin); text.append("##"); - } - - { - if ((_tokenSet_4.member(LA(1))) && (true) && (true)) { - mWS(false); - } - else { - } - - } - { - if ((LA(1)=='=') && (true) && (true)) { - mVAR_ASSIGN(false); - } - else { - } - - } - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ITEM(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ITEM; - int _saveIndex; - Token a1=null; - Token a2=null; - Token a3=null; - Token a4=null; - Token a5=null; - Token a6=null; - - if ((LA(1)=='$') && (LA(2)=='F') && (LA(3)=='O')) { - match("$FOLLOW"); - { - if ((_tokenSet_5.member(LA(1))) && (_tokenSet_6.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a5=_returnToken; - match(')'); - } - else { - } - - } - - String rule = currentRule.getRuleName(); - if ( a5!=null ) { - rule = a5.getText(); - } - String setName = generator.getFOLLOWBitSet(rule, 1); - // System.out.println("FOLLOW("+rule+")="+setName); - if ( setName==null ) { - reportError("$FOLLOW("+rule+")"+ - ": unknown rule or bad lookahead computation"); - } - else { - text.setLength(_begin); text.append(setName); - } - - } - else if ((LA(1)=='$') && (LA(2)=='F') && (LA(3)=='I')) { - match("$FIRST"); - { - if ((_tokenSet_5.member(LA(1))) && (_tokenSet_6.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a6=_returnToken; - match(')'); - } - else { - } - - } - - String rule = currentRule.getRuleName(); - if ( a6!=null ) { - rule = a6.getText(); - } - String setName = generator.getFIRSTBitSet(rule, 1); - // System.out.println("FIRST("+rule+")="+setName); - if ( setName==null ) { - reportError("$FIRST("+rule+")"+ - ": unknown rule or bad lookahead computation"); - } - else { - text.setLength(_begin); text.append(setName); - } - - } - else if ((LA(1)=='$') && (LA(2)=='a')) { - match("$append"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a1=_returnToken; - match(')'); - - String t = "text.Append("+a1.getText()+")"; - text.setLength(_begin); text.append(t); - - } - else if ((LA(1)=='$') && (LA(2)=='s')) { - match("$set"); - { - if ((LA(1)=='T') && (LA(2)=='e')) { - match("Text"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a2=_returnToken; - match(')'); - - String t; - t = "text.Length = _begin; text.Append("+a2.getText()+")"; - text.setLength(_begin); text.append(t); - - } - else if ((LA(1)=='T') && (LA(2)=='o')) { - match("Token"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a3=_returnToken; - match(')'); - - String t="_token = "+a3.getText(); - text.setLength(_begin); text.append(t); - - } - else if ((LA(1)=='T') && (LA(2)=='y')) { - match("Type"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a4=_returnToken; - match(')'); - - String t="_ttype = "+a4.getText(); - text.setLength(_begin); text.append(t); - - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else if ((LA(1)=='$') && (LA(2)=='g')) { - match("$getText"); - - text.setLength(_begin); text.append("text.ToString(_begin, text.Length-_begin)"); - - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mCOMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = COMMENT; - int _saveIndex; - - if ((LA(1)=='/') && (LA(2)=='/')) { - mSL_COMMENT(false); - } - else if ((LA(1)=='/') && (LA(2)=='*')) { - mML_COMMENT(false); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mSTRING(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = STRING; - int _saveIndex; - - match('"'); - { - _loop720: - do { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_7.member(LA(1)))) { - matchNot('"'); - } - else { - break _loop720; - } - - } while (true); - } - match('"'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mCHAR(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = CHAR; - int _saveIndex; - - match('\''); - { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_8.member(LA(1)))) { - matchNot('\''); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - match('\''); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTREE(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TREE; - int _saveIndex; - Token t=null; - Token t2=null; - - StringBuffer buf = new StringBuffer(); - int n=0; - Vector terms = new Vector(10); - - - _saveIndex=text.length(); - match('('); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case 'A': - case 'B': case 'C': case 'D': case 'E': - case 'F': case 'G': case 'H': case 'I': - case 'J': case 'K': case 'L': case 'M': - case 'N': case 'O': case 'P': case 'Q': - case 'R': case 'S': case 'T': case 'U': - case 'V': case 'W': case 'X': case 'Y': - case 'Z': case '[': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mTREE_ELEMENT(true); - text.setLength(_saveIndex); - t=_returnToken; - - terms.appendElement( - generator.processStringForASTConstructor(t.getText()) - ); - - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': case ',': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop649: - do { - if ((LA(1)==',')) { - _saveIndex=text.length(); - match(','); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case 'A': - case 'B': case 'C': case 'D': case 'E': - case 'F': case 'G': case 'H': case 'I': - case 'J': case 'K': case 'L': case 'M': - case 'N': case 'O': case 'P': case 'Q': - case 'R': case 'S': case 'T': case 'U': - case 'V': case 'W': case 'X': case 'Y': - case 'Z': case '[': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mTREE_ELEMENT(true); - text.setLength(_saveIndex); - t2=_returnToken; - - terms.appendElement( - generator.processStringForASTConstructor(t2.getText()) - ); - - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': case ',': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - } - else { - break _loop649; - } - - } while (true); - } - text.setLength(_begin); text.append(generator.getASTCreateString(terms)); - _saveIndex=text.length(); - match(')'); - text.setLength(_saveIndex); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mWS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = WS; - int _saveIndex; - - { - int _cnt740=0; - _loop740: - do { - if ((LA(1)=='\r') && (LA(2)=='\n') && (true)) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)==' ') && (true) && (true)) { - match(' '); - } - else if ((LA(1)=='\t') && (true) && (true)) { - match('\t'); - } - else if ((LA(1)=='\r') && (true) && (true)) { - match('\r'); - newline(); - } - else if ((LA(1)=='\n') && (true) && (true)) { - match('\n'); - newline(); - } - else { - if ( _cnt740>=1 ) { break _loop740; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt740++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mID(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ID; - int _saveIndex; - - { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '_': - { - match('_'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop706: - do { - if ((_tokenSet_9.member(LA(1))) && (true) && (true)) { - { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - matchRange('0','9'); - break; - } - case '_': - { - match('_'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - } - else { - break _loop706; - } - - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mVAR_ASSIGN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = VAR_ASSIGN; - int _saveIndex; - - match('='); - - // inform the code generator that an assignment was done to - // AST root for the rule if invoker set refRuleRoot. - if ( LA(1)!='=' && transInfo!=null && transInfo.refRuleRoot!=null ) { - transInfo.assignToRoot=true; - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mAST_CONSTRUCTOR(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = AST_CONSTRUCTOR; - int _saveIndex; - Token x=null; - Token y=null; - Token z=null; - - _saveIndex=text.length(); - match('['); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case '0': - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': - case '9': case 'A': case 'B': case 'C': - case 'D': case 'E': case 'F': case 'G': - case 'H': case 'I': case 'J': case 'K': - case 'L': case 'M': case 'N': case 'O': - case 'P': case 'Q': case 'R': case 'S': - case 'T': case 'U': case 'V': case 'W': - case 'X': case 'Y': case 'Z': case '[': - case '_': case 'a': case 'b': case 'c': - case 'd': case 'e': case 'f': case 'g': - case 'h': case 'i': case 'j': case 'k': - case 'l': case 'm': case 'n': case 'o': - case 'p': case 'q': case 'r': case 's': - case 't': case 'u': case 'v': case 'w': - case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mAST_CTOR_ELEMENT(true); - text.setLength(_saveIndex); - x=_returnToken; - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ',': case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - if ((LA(1)==',') && (_tokenSet_10.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - match(','); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case '0': - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': - case '9': case 'A': case 'B': case 'C': - case 'D': case 'E': case 'F': case 'G': - case 'H': case 'I': case 'J': case 'K': - case 'L': case 'M': case 'N': case 'O': - case 'P': case 'Q': case 'R': case 'S': - case 'T': case 'U': case 'V': case 'W': - case 'X': case 'Y': case 'Z': case '[': - case '_': case 'a': case 'b': case 'c': - case 'd': case 'e': case 'f': case 'g': - case 'h': case 'i': case 'j': case 'k': - case 'l': case 'm': case 'n': case 'o': - case 'p': case 'q': case 'r': case 's': - case 't': case 'u': case 'v': case 'w': - case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mAST_CTOR_ELEMENT(true); - text.setLength(_saveIndex); - y=_returnToken; - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ',': case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - } - else if ((LA(1)==','||LA(1)==']') && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case ',': - { - _saveIndex=text.length(); - match(','); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case '0': - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': - case '9': case 'A': case 'B': case 'C': - case 'D': case 'E': case 'F': case 'G': - case 'H': case 'I': case 'J': case 'K': - case 'L': case 'M': case 'N': case 'O': - case 'P': case 'Q': case 'R': case 'S': - case 'T': case 'U': case 'V': case 'W': - case 'X': case 'Y': case 'Z': case '[': - case '_': case 'a': case 'b': case 'c': - case 'd': case 'e': case 'f': case 'g': - case 'h': case 'i': case 'j': case 'k': - case 'l': case 'm': case 'n': case 'o': - case 'p': case 'q': case 'r': case 's': - case 't': case 'u': case 'v': case 'w': - case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mAST_CTOR_ELEMENT(true); - text.setLength(_saveIndex); - z=_returnToken; - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - match(']'); - text.setLength(_saveIndex); - - String args = generator.processStringForASTConstructor(x.getText()); - - // the second does not need processing coz it's a string - // (eg second param of astFactory.create(x,y) - if ( y!=null ) - args += ","+y.getText(); - if ( z!=null ) - args += ","+z.getText(); - - text.setLength(_begin); text.append(generator.getASTCreateString(null,args)); - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ARG(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ARG; - int _saveIndex; - - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '"': case '$': case '\'': case '+': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '_': case 'a': case 'b': case 'c': - case 'd': case 'e': case 'f': case 'g': - case 'h': case 'i': case 'j': case 'k': - case 'l': case 'm': case 'n': case 'o': - case 'p': case 'q': case 'r': case 's': - case 't': case 'u': case 'v': case 'w': - case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - int _cnt680=0; - _loop680: - do { - if ((_tokenSet_11.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mTEXT_ARG_ELEMENT(false); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_12.member(LA(2))) && (true)) { - mWS(false); - } - else if ((_tokenSet_12.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else { - if ( _cnt680>=1 ) { break _loop680; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt680++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTREE_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TREE_ELEMENT; - int _saveIndex; - Token id=null; - boolean was_mapped; - - switch ( LA(1)) { - case '(': - { - mTREE(false); - break; - } - case '[': - { - mAST_CONSTRUCTOR(false); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - mID_ELEMENT(false); - break; - } - case '"': - { - mSTRING(false); - break; - } - default: - if ((LA(1)=='#') && (LA(2)=='(')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mTREE(false); - } - else if ((LA(1)=='#') && (LA(2)=='[')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mAST_CONSTRUCTOR(false); - } - else if ((LA(1)=='#') && (_tokenSet_13.member(LA(2)))) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - was_mapped=mID_ELEMENT(true); - id=_returnToken; - // RK: I have a queer feeling that this maptreeid is redundant.. - if ( ! was_mapped ) - { - String t = generator.mapTreeId(id.getText(), null); - if ( t!=null ) { - text.setLength(_begin); text.append(t); - } - } - - } - else if ((LA(1)=='#') && (LA(2)=='#')) { - match("##"); - - if( currentRule != null ) - { - String t = currentRule.getRuleName()+"_AST"; - text.setLength(_begin); text.append(t); - } - else - { - reportError("\"##\" not valid in this context"); - text.setLength(_begin); text.append("##"); - } - - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - -/** An ID_ELEMENT can be a func call, array ref, simple var, - * or AST label ref. - */ - protected final boolean mID_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - boolean mapped=false; - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ID_ELEMENT; - int _saveIndex; - Token id=null; - - mID(true); - id=_returnToken; - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_14.member(LA(2))) && (true)) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_14.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case '(': - { - match('('); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_15.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_15.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '[': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - mARG(false); - { - _loop668: - do { - if ((LA(1)==',')) { - match(','); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '[': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mARG(false); - } - else { - break _loop668; - } - - } while (true); - } - break; - } - case '\t': case '\n': case '\r': case ' ': - case ')': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(')'); - break; - } - case '[': - { - { - int _cnt673=0; - _loop673: - do { - if ((LA(1)=='[')) { - match('['); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '[': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mARG(false); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(']'); - } - else { - if ( _cnt673>=1 ) { break _loop673; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt673++; - } while (true); - } - break; - } - case '.': - { - match('.'); - mID_ELEMENT(false); - break; - } - default: - if ((LA(1)=='-') && (LA(2)=='>') && (_tokenSet_13.member(LA(3)))) { - match("->"); - mID_ELEMENT(false); - } - else if ((_tokenSet_16.member(LA(1))) && (true) && (true)) { - - mapped = true; - String t = generator.mapTreeId(id.getText(), transInfo); - // System.out.println("mapped: "+id.getText()+" -> "+t); - if ( t!=null ) { - text.setLength(_begin); text.append(t); - } - - { - if (((_tokenSet_17.member(LA(1))) && (_tokenSet_16.member(LA(2))) && (true))&&(transInfo!=null && transInfo.refRuleRoot!=null)) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '=': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mVAR_ASSIGN(false); - } - else if ((_tokenSet_18.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - return mapped; - } - -/** The arguments of a #[...] constructor are text, token type, - * or a tree. - */ - protected final void mAST_CTOR_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = AST_CTOR_ELEMENT; - int _saveIndex; - - if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mSTRING(false); - } - else if ((_tokenSet_19.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mTREE_ELEMENT(false); - } - else if (((LA(1) >= '0' && LA(1) <= '9'))) { - mINT(false); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mINT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = INT; - int _saveIndex; - - { - int _cnt731=0; - _loop731: - do { - if (((LA(1) >= '0' && LA(1) <= '9'))) { - mDIGIT(false); - } - else { - if ( _cnt731>=1 ) { break _loop731; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt731++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mARG(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ARG; - int _saveIndex; - - { - switch ( LA(1)) { - case '\'': - { - mCHAR(false); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - mINT_OR_FLOAT(false); - break; - } - default: - if ((_tokenSet_19.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mTREE_ELEMENT(false); - } - else if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mSTRING(false); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop701: - do { - if ((_tokenSet_20.member(LA(1))) && (_tokenSet_21.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '*': case '+': case '-': case '/': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - switch ( LA(1)) { - case '+': - { - match('+'); - break; - } - case '-': - { - match('-'); - break; - } - case '*': - { - match('*'); - break; - } - case '/': - { - match('/'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '[': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mARG(false); - } - else { - break _loop701; - } - - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ARG_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ARG_ELEMENT; - int _saveIndex; - - switch ( LA(1)) { - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - mTEXT_ARG_ID_ELEMENT(false); - break; - } - case '"': - { - mSTRING(false); - break; - } - case '\'': - { - mCHAR(false); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - mINT_OR_FLOAT(false); - break; - } - case '$': - { - mTEXT_ITEM(false); - break; - } - case '+': - { - match('+'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ARG_ID_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ARG_ID_ELEMENT; - int _saveIndex; - Token id=null; - - mID(true); - id=_returnToken; - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_22.member(LA(2))) && (true)) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_22.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case '(': - { - match('('); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_23.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_23.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - _loop689: - do { - if ((_tokenSet_24.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mTEXT_ARG(false); - { - _loop688: - do { - if ((LA(1)==',')) { - match(','); - mTEXT_ARG(false); - } - else { - break _loop688; - } - - } while (true); - } - } - else { - break _loop689; - } - - } while (true); - } - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(')'); - break; - } - case '[': - { - { - int _cnt694=0; - _loop694: - do { - if ((LA(1)=='[')) { - match('['); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_24.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_24.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - mTEXT_ARG(false); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(']'); - } - else { - if ( _cnt694>=1 ) { break _loop694; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt694++; - } while (true); - } - break; - } - case '.': - { - match('.'); - mTEXT_ARG_ID_ELEMENT(false); - break; - } - case '-': - { - match("->"); - mTEXT_ARG_ID_ELEMENT(false); - break; - } - case '\t': case '\n': case '\r': case ' ': - case '"': case '$': case '\'': case ')': - case '+': case ',': case '0': case '1': - case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case ']': case '_': - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mINT_OR_FLOAT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = INT_OR_FLOAT; - int _saveIndex; - - { - int _cnt734=0; - _loop734: - do { - if (((LA(1) >= '0' && LA(1) <= '9')) && (_tokenSet_25.member(LA(2))) && (true)) { - mDIGIT(false); - } - else { - if ( _cnt734>=1 ) { break _loop734; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt734++; - } while (true); - } - { - if ((LA(1)=='L') && (_tokenSet_26.member(LA(2))) && (true)) { - match('L'); - } - else if ((LA(1)=='l') && (_tokenSet_26.member(LA(2))) && (true)) { - match('l'); - } - else if ((LA(1)=='.')) { - match('.'); - { - _loop737: - do { - if (((LA(1) >= '0' && LA(1) <= '9')) && (_tokenSet_26.member(LA(2))) && (true)) { - mDIGIT(false); - } - else { - break _loop737; - } - - } while (true); - } - } - else if ((_tokenSet_26.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mSL_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = SL_COMMENT; - int _saveIndex; - - match("//"); - { - _loop711: - do { - // nongreedy exit test - if ((LA(1)=='\n'||LA(1)=='\r') && (true) && (true)) break _loop711; - if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - matchNot(EOF_CHAR); - } - else { - break _loop711; - } - - } while (true); - } - { - if ((LA(1)=='\r') && (LA(2)=='\n') && (true)) { - match("\r\n"); - } - else if ((LA(1)=='\n')) { - match('\n'); - } - else if ((LA(1)=='\r') && (true) && (true)) { - match('\r'); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - newline(); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mML_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ML_COMMENT; - int _saveIndex; - - match("/*"); - { - _loop715: - do { - // nongreedy exit test - if ((LA(1)=='*') && (LA(2)=='/') && (true)) break _loop715; - if ((LA(1)=='\r') && (LA(2)=='\n') && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - match('\r'); - newline(); - } - else if ((LA(1)=='\n') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - match('\n'); - newline(); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - matchNot(EOF_CHAR); - } - else { - break _loop715; - } - - } while (true); - } - match("*/"); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mESC(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ESC; - int _saveIndex; - - match('\\'); - { - switch ( LA(1)) { - case 'n': - { - match('n'); - break; - } - case 'r': - { - match('r'); - break; - } - case 't': - { - match('t'); - break; - } - case 'b': - { - match('b'); - break; - } - case 'f': - { - match('f'); - break; - } - case '"': - { - match('"'); - break; - } - case '\'': - { - match('\''); - break; - } - case '\\': - { - match('\\'); - break; - } - case '0': case '1': case '2': case '3': - { - { - matchRange('0','3'); - } - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mDIGIT(false); - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mDIGIT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - case '4': case '5': case '6': case '7': - { - { - matchRange('4','7'); - } - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mDIGIT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = DIGIT; - int _saveIndex; - - matchRange('0','9'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - - private static final long[] mk_tokenSet_0() { - long[] data = new long[8]; - data[0]=-103079215112L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - private static final long[] mk_tokenSet_1() { - long[] data = new long[8]; - data[0]=-145135534866440L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1()); - private static final long[] mk_tokenSet_2() { - long[] data = new long[8]; - data[0]=-141407503262728L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2()); - private static final long[] mk_tokenSet_3() { - long[] data = { 4294977024L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3()); - private static final long[] mk_tokenSet_4() { - long[] data = { 4294977024L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4()); - private static final long[] mk_tokenSet_5() { - long[] data = { 1103806604800L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5()); - private static final long[] mk_tokenSet_6() { - long[] data = { 287959436729787904L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6()); - private static final long[] mk_tokenSet_7() { - long[] data = new long[8]; - data[0]=-17179869192L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7()); - private static final long[] mk_tokenSet_8() { - long[] data = new long[8]; - data[0]=-549755813896L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8()); - private static final long[] mk_tokenSet_9() { - long[] data = { 287948901175001088L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_9 = new BitSet(mk_tokenSet_9()); - private static final long[] mk_tokenSet_10() { - long[] data = { 287950056521213440L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_10 = new BitSet(mk_tokenSet_10()); - private static final long[] mk_tokenSet_11() { - long[] data = { 287958332923183104L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_11 = new BitSet(mk_tokenSet_11()); - private static final long[] mk_tokenSet_12() { - long[] data = { 287978128427460096L, 576460746532061182L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_12 = new BitSet(mk_tokenSet_12()); - private static final long[] mk_tokenSet_13() { - long[] data = { 0L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_13 = new BitSet(mk_tokenSet_13()); - private static final long[] mk_tokenSet_14() { - long[] data = { 2306123388973753856L, 671088640L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_14 = new BitSet(mk_tokenSet_14()); - private static final long[] mk_tokenSet_15() { - long[] data = { 287952805300282880L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_15 = new BitSet(mk_tokenSet_15()); - private static final long[] mk_tokenSet_16() { - long[] data = { 2306051920717948416L, 536870912L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_16 = new BitSet(mk_tokenSet_16()); - private static final long[] mk_tokenSet_17() { - long[] data = { 2305843013508670976L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_17 = new BitSet(mk_tokenSet_17()); - private static final long[] mk_tokenSet_18() { - long[] data = { 208911504254464L, 536870912L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_18 = new BitSet(mk_tokenSet_18()); - private static final long[] mk_tokenSet_19() { - long[] data = { 1151051235328L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_19 = new BitSet(mk_tokenSet_19()); - private static final long[] mk_tokenSet_20() { - long[] data = { 189120294954496L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_20 = new BitSet(mk_tokenSet_20()); - private static final long[] mk_tokenSet_21() { - long[] data = { 288139722277004800L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_21 = new BitSet(mk_tokenSet_21()); - private static final long[] mk_tokenSet_22() { - long[] data = { 288084781055354368L, 576460746666278910L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_22 = new BitSet(mk_tokenSet_22()); - private static final long[] mk_tokenSet_23() { - long[] data = { 287960536241415680L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_23 = new BitSet(mk_tokenSet_23()); - private static final long[] mk_tokenSet_24() { - long[] data = { 287958337218160128L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_24 = new BitSet(mk_tokenSet_24()); - private static final long[] mk_tokenSet_25() { - long[] data = { 288228817078593024L, 576460746532061182L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_25 = new BitSet(mk_tokenSet_25()); - private static final long[] mk_tokenSet_26() { - long[] data = { 288158448334415360L, 576460746532061182L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_26 = new BitSet(mk_tokenSet_26()); - - } diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/actions/csharp/ActionLexerTokenTypes.java glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/csharp/ActionLexerTokenTypes.java --- glassfish/entity-persistence/src/java/persistence/antlr/actions/csharp/ActionLexerTokenTypes.java 2006-02-08 22:31:09.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/csharp/ActionLexerTokenTypes.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,33 +0,0 @@ -// $ANTLR : "action.g" -> "ActionLexer.java"$ - - package persistence.antlr.actions.csharp; - -public interface ActionLexerTokenTypes { - int EOF = 1; - int NULL_TREE_LOOKAHEAD = 3; - int ACTION = 4; - int STUFF = 5; - int AST_ITEM = 6; - int TEXT_ITEM = 7; - int TREE = 8; - int TREE_ELEMENT = 9; - int AST_CONSTRUCTOR = 10; - int AST_CTOR_ELEMENT = 11; - int ID_ELEMENT = 12; - int TEXT_ARG = 13; - int TEXT_ARG_ELEMENT = 14; - int TEXT_ARG_ID_ELEMENT = 15; - int ARG = 16; - int ID = 17; - int VAR_ASSIGN = 18; - int COMMENT = 19; - int SL_COMMENT = 20; - int ML_COMMENT = 21; - int CHAR = 22; - int STRING = 23; - int ESC = 24; - int DIGIT = 25; - int INT = 26; - int INT_OR_FLOAT = 27; - int WS = 28; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/actions/java/ActionLexer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/java/ActionLexer.java --- glassfish/entity-persistence/src/java/persistence/antlr/actions/java/ActionLexer.java 2006-02-08 22:31:10.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/java/ActionLexer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,2470 +0,0 @@ -// $ANTLR : "action.g" -> "ActionLexer.java"$ - -package persistence.antlr.actions.java; - -import java.io.InputStream; -import persistence.antlr.TokenStreamException; -import persistence.antlr.TokenStreamIOException; -import persistence.antlr.TokenStreamRecognitionException; -import persistence.antlr.CharStreamException; -import persistence.antlr.CharStreamIOException; -import persistence.antlr.ANTLRException; -import java.io.Reader; -import java.util.Hashtable; -import persistence.antlr.CharScanner; -import persistence.antlr.InputBuffer; -import persistence.antlr.ByteBuffer; -import persistence.antlr.CharBuffer; -import persistence.antlr.Token; -import persistence.antlr.CommonToken; -import persistence.antlr.RecognitionException; -import persistence.antlr.NoViableAltForCharException; -import persistence.antlr.MismatchedCharException; -import persistence.antlr.TokenStream; -import persistence.antlr.ANTLRHashString; -import persistence.antlr.LexerSharedInputState; -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.SemanticException; - -import java.io.StringReader; -import persistence.antlr.collections.impl.Vector; -import persistence.antlr.*; - -/** Perform the following translations: - - AST related translations - - ## -> currentRule_AST - #(x,y,z) -> codeGenerator.getASTCreateString(vector-of(x,y,z)) - #[x] -> codeGenerator.getASTCreateString(x) - #x -> codeGenerator.mapTreeId(x) - - Inside context of #(...), you can ref (x,y,z), [x], and x as shortcuts. - - Text related translations - - $append(x) -> text.append(x) - $setText(x) -> text.setLength(_begin); text.append(x) - $getText -> new String(text.getBuffer(),_begin,text.length()-_begin) - $setToken(x) -> _token = x - $setType(x) -> _ttype = x - $FOLLOW(r) -> FOLLOW set name for rule r (optional arg) - $FIRST(r) -> FIRST set name for rule r (optional arg) - */ -public class ActionLexer extends persistence.antlr.CharScanner implements ActionLexerTokenTypes, TokenStream - { - - protected RuleBlock currentRule; - protected CodeGenerator generator; - protected int lineOffset = 0; - private Tool antlrTool; // The ANTLR tool - ActionTransInfo transInfo; - - public ActionLexer( String s, - RuleBlock currentRule, - CodeGenerator generator, - ActionTransInfo transInfo) { - this(new StringReader(s)); - this.currentRule = currentRule; - this.generator = generator; - this.transInfo = transInfo; - } - - public void setLineOffset(int lineOffset) { - // this.lineOffset = lineOffset; - setLine(lineOffset); - } - - public void setTool(Tool tool) { - this.antlrTool = tool; - } - - public void reportError(RecognitionException e) - { - antlrTool.error("Syntax error in action: "+e,getFilename(),getLine(),getColumn()); - } - - public void reportError(String s) - { - antlrTool.error(s,getFilename(),getLine(),getColumn()); - } - - public void reportWarning(String s) - { - if ( getFilename()==null ) { - antlrTool.warning(s); - } - else { - antlrTool.warning(s,getFilename(),getLine(), getColumn()); - } - } -public ActionLexer(InputStream in) { - this(new ByteBuffer(in)); -} -public ActionLexer(Reader in) { - this(new CharBuffer(in)); -} -public ActionLexer(InputBuffer ib) { - this(new LexerSharedInputState(ib)); -} -public ActionLexer(LexerSharedInputState state) { - super(state); - caseSensitiveLiterals = true; - setCaseSensitive(true); - literals = new Hashtable(); -} - -public Token nextToken() throws TokenStreamException { - Token theRetToken=null; -tryAgain: - for (;;) { - Token _token = null; - int _ttype = Token.INVALID_TYPE; - resetText(); - try { // for char stream error handling - try { // for lexical error handling - if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff'))) { - mACTION(true); - theRetToken=_returnToken; - } - else { - if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);} - else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - if ( _returnToken==null ) continue tryAgain; // found SKIP token - _ttype = _returnToken.getType(); - _returnToken.setType(_ttype); - return _returnToken; - } - catch (RecognitionException e) { - throw new TokenStreamRecognitionException(e); - } - } - catch (CharStreamException cse) { - if ( cse instanceof CharStreamIOException ) { - throw new TokenStreamIOException(((CharStreamIOException)cse).io); - } - else { - throw new TokenStreamException(cse.getMessage()); - } - } - } -} - - public final void mACTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ACTION; - int _saveIndex; - - { - int _cnt382=0; - _loop382: - do { - switch ( LA(1)) { - case '#': - { - mAST_ITEM(false); - break; - } - case '$': - { - mTEXT_ITEM(false); - break; - } - default: - if ((_tokenSet_0.member(LA(1)))) { - mSTUFF(false); - } - else { - if ( _cnt382>=1 ) { break _loop382; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - } - _cnt382++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mSTUFF(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = STUFF; - int _saveIndex; - - switch ( LA(1)) { - case '"': - { - mSTRING(false); - break; - } - case '\'': - { - mCHAR(false); - break; - } - case '\n': - { - match('\n'); - newline(); - break; - } - default: - if ((LA(1)=='/') && (LA(2)=='*'||LA(2)=='/')) { - mCOMMENT(false); - } - else if ((LA(1)=='\r') && (LA(2)=='\n') && (true)) { - match("\r\n"); - newline(); - } - else if ((LA(1)=='/') && (_tokenSet_1.member(LA(2)))) { - match('/'); - { - match(_tokenSet_1); - } - } - else if ((LA(1)=='\r') && (true) && (true)) { - match('\r'); - newline(); - } - else if ((_tokenSet_2.member(LA(1)))) { - { - match(_tokenSet_2); - } - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mAST_ITEM(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = AST_ITEM; - int _saveIndex; - Token t=null; - Token id=null; - Token ctor=null; - - if ((LA(1)=='#') && (LA(2)=='(')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mTREE(true); - t=_returnToken; - } - else if ((LA(1)=='#') && (_tokenSet_3.member(LA(2)))) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mID(true); - id=_returnToken; - - String idt = id.getText(); - String var = generator.mapTreeId(idt,transInfo); - if ( var!=null ) { - text.setLength(_begin); text.append(var); - } - - { - if ((_tokenSet_4.member(LA(1))) && (true) && (true)) { - mWS(false); - } - else { - } - - } - { - if ((LA(1)=='=') && (true) && (true)) { - mVAR_ASSIGN(false); - } - else { - } - - } - } - else if ((LA(1)=='#') && (LA(2)=='[')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mAST_CONSTRUCTOR(true); - ctor=_returnToken; - } - else if ((LA(1)=='#') && (LA(2)=='#')) { - match("##"); - - String r=currentRule.getRuleName()+"_AST"; text.setLength(_begin); text.append(r); - if ( transInfo!=null ) { - transInfo.refRuleRoot=r; // we ref root of tree - } - - { - if ((_tokenSet_4.member(LA(1))) && (true) && (true)) { - mWS(false); - } - else { - } - - } - { - if ((LA(1)=='=') && (true) && (true)) { - mVAR_ASSIGN(false); - } - else { - } - - } - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ITEM(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ITEM; - int _saveIndex; - Token a1=null; - Token a2=null; - Token a3=null; - Token a4=null; - Token a5=null; - Token a6=null; - - if ((LA(1)=='$') && (LA(2)=='F') && (LA(3)=='O')) { - match("$FOLLOW"); - { - if ((_tokenSet_5.member(LA(1))) && (_tokenSet_6.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a5=_returnToken; - match(')'); - } - else { - } - - } - - String rule = currentRule.getRuleName(); - if ( a5!=null ) { - rule = a5.getText(); - } - String setName = generator.getFOLLOWBitSet(rule, 1); - // System.out.println("FOLLOW("+rule+")="+setName); - if ( setName==null ) { - reportError("$FOLLOW("+rule+")"+ - ": unknown rule or bad lookahead computation"); - } - else { - text.setLength(_begin); text.append(setName); - } - - } - else if ((LA(1)=='$') && (LA(2)=='F') && (LA(3)=='I')) { - match("$FIRST"); - { - if ((_tokenSet_5.member(LA(1))) && (_tokenSet_6.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a6=_returnToken; - match(')'); - } - else { - } - - } - - String rule = currentRule.getRuleName(); - if ( a6!=null ) { - rule = a6.getText(); - } - String setName = generator.getFIRSTBitSet(rule, 1); - // System.out.println("FIRST("+rule+")="+setName); - if ( setName==null ) { - reportError("$FIRST("+rule+")"+ - ": unknown rule or bad lookahead computation"); - } - else { - text.setLength(_begin); text.append(setName); - } - - } - else if ((LA(1)=='$') && (LA(2)=='a')) { - match("$append"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a1=_returnToken; - match(')'); - - String t = "text.append("+a1.getText()+")"; - text.setLength(_begin); text.append(t); - - } - else if ((LA(1)=='$') && (LA(2)=='s')) { - match("$set"); - { - if ((LA(1)=='T') && (LA(2)=='e')) { - match("Text"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a2=_returnToken; - match(')'); - - String t; - t = "text.setLength(_begin); text.append("+a2.getText()+")"; - text.setLength(_begin); text.append(t); - - } - else if ((LA(1)=='T') && (LA(2)=='o')) { - match("Token"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a3=_returnToken; - match(')'); - - String t="_token = "+a3.getText(); - text.setLength(_begin); text.append(t); - - } - else if ((LA(1)=='T') && (LA(2)=='y')) { - match("Type"); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '(': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('('); - mTEXT_ARG(true); - a4=_returnToken; - match(')'); - - String t="_ttype = "+a4.getText(); - text.setLength(_begin); text.append(t); - - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else if ((LA(1)=='$') && (LA(2)=='g')) { - match("$getText"); - - text.setLength(_begin); text.append("new String(text.getBuffer(),_begin,text.length()-_begin)"); - - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mCOMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = COMMENT; - int _saveIndex; - - if ((LA(1)=='/') && (LA(2)=='/')) { - mSL_COMMENT(false); - } - else if ((LA(1)=='/') && (LA(2)=='*')) { - mML_COMMENT(false); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mSTRING(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = STRING; - int _saveIndex; - - match('"'); - { - _loop478: - do { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_7.member(LA(1)))) { - matchNot('"'); - } - else { - break _loop478; - } - - } while (true); - } - match('"'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mCHAR(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = CHAR; - int _saveIndex; - - match('\''); - { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_8.member(LA(1)))) { - matchNot('\''); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - match('\''); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTREE(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TREE; - int _saveIndex; - Token t=null; - Token t2=null; - - StringBuffer buf = new StringBuffer(); - int n=0; - Vector terms = new Vector(10); - - - _saveIndex=text.length(); - match('('); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case 'A': - case 'B': case 'C': case 'D': case 'E': - case 'F': case 'G': case 'H': case 'I': - case 'J': case 'K': case 'L': case 'M': - case 'N': case 'O': case 'P': case 'Q': - case 'R': case 'S': case 'T': case 'U': - case 'V': case 'W': case 'X': case 'Y': - case 'Z': case '[': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mTREE_ELEMENT(true); - text.setLength(_saveIndex); - t=_returnToken; - terms.appendElement(t.getText()); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': case ',': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop407: - do { - if ((LA(1)==',')) { - _saveIndex=text.length(); - match(','); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case 'A': - case 'B': case 'C': case 'D': case 'E': - case 'F': case 'G': case 'H': case 'I': - case 'J': case 'K': case 'L': case 'M': - case 'N': case 'O': case 'P': case 'Q': - case 'R': case 'S': case 'T': case 'U': - case 'V': case 'W': case 'X': case 'Y': - case 'Z': case '[': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mTREE_ELEMENT(true); - text.setLength(_saveIndex); - t2=_returnToken; - terms.appendElement(t2.getText()); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': case ',': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - } - else { - break _loop407; - } - - } while (true); - } - text.setLength(_begin); text.append(generator.getASTCreateString(terms)); - _saveIndex=text.length(); - match(')'); - text.setLength(_saveIndex); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mID(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ID; - int _saveIndex; - - { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '_': - { - match('_'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop464: - do { - if ((_tokenSet_9.member(LA(1))) && (true) && (true)) { - { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - matchRange('0','9'); - break; - } - case '_': - { - match('_'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - } - else { - break _loop464; - } - - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mWS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = WS; - int _saveIndex; - - { - int _cnt498=0; - _loop498: - do { - if ((LA(1)=='\r') && (LA(2)=='\n') && (true)) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)==' ') && (true) && (true)) { - match(' '); - } - else if ((LA(1)=='\t') && (true) && (true)) { - match('\t'); - } - else if ((LA(1)=='\r') && (true) && (true)) { - match('\r'); - newline(); - } - else if ((LA(1)=='\n') && (true) && (true)) { - match('\n'); - newline(); - } - else { - if ( _cnt498>=1 ) { break _loop498; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt498++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mVAR_ASSIGN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = VAR_ASSIGN; - int _saveIndex; - - match('='); - - // inform the code generator that an assignment was done to - // AST root for the rule if invoker set refRuleRoot. - if ( LA(1)!='=' && transInfo!=null && transInfo.refRuleRoot!=null ) { - transInfo.assignToRoot=true; - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mAST_CONSTRUCTOR(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = AST_CONSTRUCTOR; - int _saveIndex; - Token x=null; - Token y=null; - Token z=null; - - _saveIndex=text.length(); - match('['); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case '0': - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': - case '9': case 'A': case 'B': case 'C': - case 'D': case 'E': case 'F': case 'G': - case 'H': case 'I': case 'J': case 'K': - case 'L': case 'M': case 'N': case 'O': - case 'P': case 'Q': case 'R': case 'S': - case 'T': case 'U': case 'V': case 'W': - case 'X': case 'Y': case 'Z': case '[': - case '_': case 'a': case 'b': case 'c': - case 'd': case 'e': case 'f': case 'g': - case 'h': case 'i': case 'j': case 'k': - case 'l': case 'm': case 'n': case 'o': - case 'p': case 'q': case 'r': case 's': - case 't': case 'u': case 'v': case 'w': - case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mAST_CTOR_ELEMENT(true); - text.setLength(_saveIndex); - x=_returnToken; - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ',': case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - if ((LA(1)==',') && (_tokenSet_10.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - match(','); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case '0': - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': - case '9': case 'A': case 'B': case 'C': - case 'D': case 'E': case 'F': case 'G': - case 'H': case 'I': case 'J': case 'K': - case 'L': case 'M': case 'N': case 'O': - case 'P': case 'Q': case 'R': case 'S': - case 'T': case 'U': case 'V': case 'W': - case 'X': case 'Y': case 'Z': case '[': - case '_': case 'a': case 'b': case 'c': - case 'd': case 'e': case 'f': case 'g': - case 'h': case 'i': case 'j': case 'k': - case 'l': case 'm': case 'n': case 'o': - case 'p': case 'q': case 'r': case 's': - case 't': case 'u': case 'v': case 'w': - case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mAST_CTOR_ELEMENT(true); - text.setLength(_saveIndex); - y=_returnToken; - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ',': case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - } - else if ((LA(1)==','||LA(1)==']') && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case ',': - { - _saveIndex=text.length(); - match(','); - text.setLength(_saveIndex); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '(': case '0': - case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': - case '9': case 'A': case 'B': case 'C': - case 'D': case 'E': case 'F': case 'G': - case 'H': case 'I': case 'J': case 'K': - case 'L': case 'M': case 'N': case 'O': - case 'P': case 'Q': case 'R': case 'S': - case 'T': case 'U': case 'V': case 'W': - case 'X': case 'Y': case 'Z': case '[': - case '_': case 'a': case 'b': case 'c': - case 'd': case 'e': case 'f': case 'g': - case 'h': case 'i': case 'j': case 'k': - case 'l': case 'm': case 'n': case 'o': - case 'p': case 'q': case 'r': case 's': - case 't': case 'u': case 'v': case 'w': - case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - mAST_CTOR_ELEMENT(true); - text.setLength(_saveIndex); - z=_returnToken; - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _saveIndex=text.length(); - match(']'); - text.setLength(_saveIndex); - - String args = x.getText(); - if ( y!=null ) { - args += ","+y.getText(); - } - if ( z!=null ) { - args += ","+z.getText(); - } - text.setLength(_begin); text.append(generator.getASTCreateString(null,args)); - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ARG(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ARG; - int _saveIndex; - - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '"': case '$': case '\'': case '+': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '_': case 'a': case 'b': case 'c': - case 'd': case 'e': case 'f': case 'g': - case 'h': case 'i': case 'j': case 'k': - case 'l': case 'm': case 'n': case 'o': - case 'p': case 'q': case 'r': case 's': - case 't': case 'u': case 'v': case 'w': - case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - int _cnt438=0; - _loop438: - do { - if ((_tokenSet_11.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mTEXT_ARG_ELEMENT(false); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_12.member(LA(2))) && (true)) { - mWS(false); - } - else if ((_tokenSet_12.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else { - if ( _cnt438>=1 ) { break _loop438; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt438++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTREE_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TREE_ELEMENT; - int _saveIndex; - Token id=null; - boolean was_mapped; - - switch ( LA(1)) { - case '(': - { - mTREE(false); - break; - } - case '[': - { - mAST_CONSTRUCTOR(false); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - mID_ELEMENT(false); - break; - } - case '"': - { - mSTRING(false); - break; - } - default: - if ((LA(1)=='#') && (LA(2)=='(')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mTREE(false); - } - else if ((LA(1)=='#') && (LA(2)=='[')) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - mAST_CONSTRUCTOR(false); - } - else if ((LA(1)=='#') && (_tokenSet_3.member(LA(2)))) { - _saveIndex=text.length(); - match('#'); - text.setLength(_saveIndex); - was_mapped=mID_ELEMENT(true); - id=_returnToken; - // RK: I have a queer feeling that this maptreeid is redundant - if( ! was_mapped ) - { - String t = generator.mapTreeId(id.getText(), null); - text.setLength(_begin); text.append(t); - } - - } - else if ((LA(1)=='#') && (LA(2)=='#')) { - match("##"); - String t = currentRule.getRuleName()+"_AST"; text.setLength(_begin); text.append(t); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - -/** An ID_ELEMENT can be a func call, array ref, simple var, - * or AST label ref. - */ - protected final boolean mID_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - boolean mapped=false; - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ID_ELEMENT; - int _saveIndex; - Token id=null; - - mID(true); - id=_returnToken; - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_13.member(LA(2))) && (true)) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_13.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case '(': - { - match('('); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_14.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_14.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '[': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - mARG(false); - { - _loop426: - do { - if ((LA(1)==',')) { - match(','); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '[': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mARG(false); - } - else { - break _loop426; - } - - } while (true); - } - break; - } - case '\t': case '\n': case '\r': case ' ': - case ')': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(')'); - break; - } - case '[': - { - { - int _cnt431=0; - _loop431: - do { - if ((LA(1)=='[')) { - match('['); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '[': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mARG(false); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(']'); - } - else { - if ( _cnt431>=1 ) { break _loop431; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt431++; - } while (true); - } - break; - } - case '.': - { - match('.'); - mID_ELEMENT(false); - break; - } - case '\t': case '\n': case '\r': case ' ': - case ')': case '*': case '+': case ',': - case '-': case '/': case '=': case ']': - { - - mapped = true; - String t = generator.mapTreeId(id.getText(), transInfo); - text.setLength(_begin); text.append(t); - - { - if (((_tokenSet_15.member(LA(1))) && (_tokenSet_16.member(LA(2))) && (true))&&(transInfo!=null && transInfo.refRuleRoot!=null)) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '=': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mVAR_ASSIGN(false); - } - else if ((_tokenSet_17.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - return mapped; - } - -/** The arguments of a #[...] constructor are text, token type, - * or a tree. - */ - protected final void mAST_CTOR_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = AST_CTOR_ELEMENT; - int _saveIndex; - - if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mSTRING(false); - } - else if ((_tokenSet_18.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mTREE_ELEMENT(false); - } - else if (((LA(1) >= '0' && LA(1) <= '9'))) { - mINT(false); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mINT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = INT; - int _saveIndex; - - { - int _cnt489=0; - _loop489: - do { - if (((LA(1) >= '0' && LA(1) <= '9'))) { - mDIGIT(false); - } - else { - if ( _cnt489>=1 ) { break _loop489; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt489++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mARG(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ARG; - int _saveIndex; - - { - switch ( LA(1)) { - case '\'': - { - mCHAR(false); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - mINT_OR_FLOAT(false); - break; - } - default: - if ((_tokenSet_18.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mTREE_ELEMENT(false); - } - else if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mSTRING(false); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop459: - do { - if ((_tokenSet_19.member(LA(1))) && (_tokenSet_20.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '*': case '+': case '-': case '/': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - switch ( LA(1)) { - case '+': - { - match('+'); - break; - } - case '-': - { - match('-'); - break; - } - case '*': - { - match('*'); - break; - } - case '/': - { - match('/'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '"': case '#': case '\'': case '(': - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': case 'A': case 'B': - case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': - case 'K': case 'L': case 'M': case 'N': - case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': - case 'W': case 'X': case 'Y': case 'Z': - case '[': case '_': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - mARG(false); - } - else { - break _loop459; - } - - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ARG_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ARG_ELEMENT; - int _saveIndex; - - switch ( LA(1)) { - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - mTEXT_ARG_ID_ELEMENT(false); - break; - } - case '"': - { - mSTRING(false); - break; - } - case '\'': - { - mCHAR(false); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - mINT_OR_FLOAT(false); - break; - } - case '$': - { - mTEXT_ITEM(false); - break; - } - case '+': - { - match('+'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mTEXT_ARG_ID_ELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TEXT_ARG_ID_ELEMENT; - int _saveIndex; - Token id=null; - - mID(true); - id=_returnToken; - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_21.member(LA(2))) && (true)) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_21.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case '(': - { - match('('); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_22.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_22.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - _loop447: - do { - if ((_tokenSet_23.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - mTEXT_ARG(false); - { - _loop446: - do { - if ((LA(1)==',')) { - match(','); - mTEXT_ARG(false); - } - else { - break _loop446; - } - - } while (true); - } - } - else { - break _loop447; - } - - } while (true); - } - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ')': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(')'); - break; - } - case '[': - { - { - int _cnt452=0; - _loop452: - do { - if ((LA(1)=='[')) { - match('['); - { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_23.member(LA(2))) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_23.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - mTEXT_ARG(false); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ']': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(']'); - } - else { - if ( _cnt452>=1 ) { break _loop452; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt452++; - } while (true); - } - break; - } - case '.': - { - match('.'); - mTEXT_ARG_ID_ELEMENT(false); - break; - } - case '\t': case '\n': case '\r': case ' ': - case '"': case '$': case '\'': case ')': - case '+': case ',': case '0': case '1': - case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case ']': case '_': - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mINT_OR_FLOAT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = INT_OR_FLOAT; - int _saveIndex; - - { - int _cnt492=0; - _loop492: - do { - if (((LA(1) >= '0' && LA(1) <= '9')) && (_tokenSet_24.member(LA(2))) && (true)) { - mDIGIT(false); - } - else { - if ( _cnt492>=1 ) { break _loop492; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt492++; - } while (true); - } - { - if ((LA(1)=='L') && (_tokenSet_25.member(LA(2))) && (true)) { - match('L'); - } - else if ((LA(1)=='l') && (_tokenSet_25.member(LA(2))) && (true)) { - match('l'); - } - else if ((LA(1)=='.')) { - match('.'); - { - _loop495: - do { - if (((LA(1) >= '0' && LA(1) <= '9')) && (_tokenSet_25.member(LA(2))) && (true)) { - mDIGIT(false); - } - else { - break _loop495; - } - - } while (true); - } - } - else if ((_tokenSet_25.member(LA(1))) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mSL_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = SL_COMMENT; - int _saveIndex; - - match("//"); - { - _loop469: - do { - // nongreedy exit test - if ((LA(1)=='\n'||LA(1)=='\r') && (true) && (true)) break _loop469; - if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - matchNot(EOF_CHAR); - } - else { - break _loop469; - } - - } while (true); - } - { - if ((LA(1)=='\r') && (LA(2)=='\n') && (true)) { - match("\r\n"); - } - else if ((LA(1)=='\n')) { - match('\n'); - } - else if ((LA(1)=='\r') && (true) && (true)) { - match('\r'); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - newline(); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mML_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ML_COMMENT; - int _saveIndex; - - match("/*"); - { - _loop473: - do { - // nongreedy exit test - if ((LA(1)=='*') && (LA(2)=='/') && (true)) break _loop473; - if ((LA(1)=='\r') && (LA(2)=='\n') && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - match('\r'); - newline(); - } - else if ((LA(1)=='\n') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - match('\n'); - newline(); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && ((LA(3) >= '\u0003' && LA(3) <= '\u00ff'))) { - matchNot(EOF_CHAR); - } - else { - break _loop473; - } - - } while (true); - } - match("*/"); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mESC(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ESC; - int _saveIndex; - - match('\\'); - { - switch ( LA(1)) { - case 'n': - { - match('n'); - break; - } - case 'r': - { - match('r'); - break; - } - case 't': - { - match('t'); - break; - } - case 'b': - { - match('b'); - break; - } - case 'f': - { - match('f'); - break; - } - case '"': - { - match('"'); - break; - } - case '\'': - { - match('\''); - break; - } - case '\\': - { - match('\\'); - break; - } - case '0': case '1': case '2': case '3': - { - { - matchRange('0','3'); - } - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mDIGIT(false); - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mDIGIT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - case '4': case '5': case '6': case '7': - { - { - matchRange('4','7'); - } - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')) && (true)) { - mDIGIT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = DIGIT; - int _saveIndex; - - matchRange('0','9'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - - private static final long[] mk_tokenSet_0() { - long[] data = new long[8]; - data[0]=-103079215112L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - private static final long[] mk_tokenSet_1() { - long[] data = new long[8]; - data[0]=-145135534866440L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1()); - private static final long[] mk_tokenSet_2() { - long[] data = new long[8]; - data[0]=-141407503262728L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2()); - private static final long[] mk_tokenSet_3() { - long[] data = { 0L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3()); - private static final long[] mk_tokenSet_4() { - long[] data = { 4294977024L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4()); - private static final long[] mk_tokenSet_5() { - long[] data = { 1103806604800L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5()); - private static final long[] mk_tokenSet_6() { - long[] data = { 287959436729787904L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6()); - private static final long[] mk_tokenSet_7() { - long[] data = new long[8]; - data[0]=-17179869192L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7()); - private static final long[] mk_tokenSet_8() { - long[] data = new long[8]; - data[0]=-549755813896L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8()); - private static final long[] mk_tokenSet_9() { - long[] data = { 287948901175001088L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_9 = new BitSet(mk_tokenSet_9()); - private static final long[] mk_tokenSet_10() { - long[] data = { 287950056521213440L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_10 = new BitSet(mk_tokenSet_10()); - private static final long[] mk_tokenSet_11() { - long[] data = { 287958332923183104L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_11 = new BitSet(mk_tokenSet_11()); - private static final long[] mk_tokenSet_12() { - long[] data = { 287978128427460096L, 576460746532061182L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_12 = new BitSet(mk_tokenSet_12()); - private static final long[] mk_tokenSet_13() { - long[] data = { 2306123388973753856L, 671088640L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_13 = new BitSet(mk_tokenSet_13()); - private static final long[] mk_tokenSet_14() { - long[] data = { 287952805300282880L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_14 = new BitSet(mk_tokenSet_14()); - private static final long[] mk_tokenSet_15() { - long[] data = { 2305843013508670976L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_15 = new BitSet(mk_tokenSet_15()); - private static final long[] mk_tokenSet_16() { - long[] data = { 2306051920717948416L, 536870912L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_16 = new BitSet(mk_tokenSet_16()); - private static final long[] mk_tokenSet_17() { - long[] data = { 208911504254464L, 536870912L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_17 = new BitSet(mk_tokenSet_17()); - private static final long[] mk_tokenSet_18() { - long[] data = { 1151051235328L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_18 = new BitSet(mk_tokenSet_18()); - private static final long[] mk_tokenSet_19() { - long[] data = { 189120294954496L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_19 = new BitSet(mk_tokenSet_19()); - private static final long[] mk_tokenSet_20() { - long[] data = { 288139722277004800L, 576460746129407998L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_20 = new BitSet(mk_tokenSet_20()); - private static final long[] mk_tokenSet_21() { - long[] data = { 288049596683265536L, 576460746666278910L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_21 = new BitSet(mk_tokenSet_21()); - private static final long[] mk_tokenSet_22() { - long[] data = { 287960536241415680L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_22 = new BitSet(mk_tokenSet_22()); - private static final long[] mk_tokenSet_23() { - long[] data = { 287958337218160128L, 576460745995190270L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_23 = new BitSet(mk_tokenSet_23()); - private static final long[] mk_tokenSet_24() { - long[] data = { 288228817078593024L, 576460746532061182L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_24 = new BitSet(mk_tokenSet_24()); - private static final long[] mk_tokenSet_25() { - long[] data = { 288158448334415360L, 576460746532061182L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_25 = new BitSet(mk_tokenSet_25()); - - } diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/actions/java/ActionLexerTokenTypes.java glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/java/ActionLexerTokenTypes.java --- glassfish/entity-persistence/src/java/persistence/antlr/actions/java/ActionLexerTokenTypes.java 2006-02-08 22:31:10.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/actions/java/ActionLexerTokenTypes.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,33 +0,0 @@ -// $ANTLR : "action.g" -> "ActionLexer.java"$ - -package persistence.antlr.actions.java; - -public interface ActionLexerTokenTypes { - int EOF = 1; - int NULL_TREE_LOOKAHEAD = 3; - int ACTION = 4; - int STUFF = 5; - int AST_ITEM = 6; - int TEXT_ITEM = 7; - int TREE = 8; - int TREE_ELEMENT = 9; - int AST_CONSTRUCTOR = 10; - int AST_CTOR_ELEMENT = 11; - int ID_ELEMENT = 12; - int TEXT_ARG = 13; - int TEXT_ARG_ELEMENT = 14; - int TEXT_ARG_ID_ELEMENT = 15; - int ARG = 16; - int ID = 17; - int VAR_ASSIGN = 18; - int COMMENT = 19; - int SL_COMMENT = 20; - int ML_COMMENT = 21; - int CHAR = 22; - int STRING = 23; - int ESC = 24; - int DIGIT = 25; - int INT = 26; - int INT_OR_FLOAT = 27; - int WS = 28; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ActionTransInfo.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ActionTransInfo.java --- glassfish/entity-persistence/src/java/persistence/antlr/ActionTransInfo.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ActionTransInfo.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** - * This class contains information about how an action - * was translated (using the AST conversion rules). - */ -public class ActionTransInfo { - public boolean assignToRoot = false; // somebody did a "#rule = " - public String refRuleRoot = null; // somebody referenced #rule; string is translated var - public String followSetName = null; // somebody referenced $FOLLOW; string is the name of the lookahead set - - public String toString() { - return "assignToRoot:" + assignToRoot + ", refRuleRoot:" - + refRuleRoot + ", FOLLOW Set:" + followSetName; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/AlternativeBlock.java glassfish-gil/entity-persistence/src/java/persistence/antlr/AlternativeBlock.java --- glassfish/entity-persistence/src/java/persistence/antlr/AlternativeBlock.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/AlternativeBlock.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,225 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.Vector; - -/**A list of alternatives */ -class AlternativeBlock extends AlternativeElement { - protected String initAction = null; // string for init action {...} - protected Vector alternatives; // Contains Alternatives - - protected String label; // can label a looping block to break out of it. - - protected int alti, altj; // which alts are being compared at the moment with - // deterministic()? - protected int analysisAlt; // which alt are we computing look on? Must be alti or altj - - protected boolean hasAnAction = false; // does any alt have an action? - protected boolean hasASynPred = false; // does any alt have a syntactic predicate? - - protected int ID = 0; // used to generate unique variables - protected static int nblks; // how many blocks have we allocated? - boolean not = false; // true if block is inverted. - - boolean greedy = true; // Blocks are greedy by default - boolean greedySet = false; // but, if not explicitly greedy, warning might be generated - - protected boolean doAutoGen = true; // false if no AST (or text) to be generated for block - - protected boolean warnWhenFollowAmbig = true; // warn when an empty path or exit path - - protected boolean generateAmbigWarnings = true; // the general warning "shut-up" mechanism - // conflicts with alt of subrule. - // Turning this off will suppress stuff - // like the if-then-else ambig. - - public AlternativeBlock(Grammar g) { - super(g); - alternatives = new Vector(5); - this.not = false; - nblks++; - ID = nblks; - } - - public AlternativeBlock(Grammar g, Token start, boolean not) { - super(g, start); - alternatives = new Vector(5); -// this.line = start.getLine(); -// this.column = start.getColumn(); - this.not = not; - nblks++; - ID = nblks; - } - - public void addAlternative(Alternative alt) { - alternatives.appendElement(alt); - } - - public void generate() { - grammar.generator.gen(this); - } - - public Alternative getAlternativeAt(int i) { - return (Alternative)alternatives.elementAt(i); - } - - public Vector getAlternatives() { - return alternatives; - } - - public boolean getAutoGen() { - return doAutoGen; - } - - public String getInitAction() { - return initAction; - } - - public String getLabel() { - return label; - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public void prepareForAnalysis() { - for (int i = 0; i < alternatives.size(); i++) { - // deterministic() uses an alternative cache and sets lookahead depth - Alternative a = (Alternative)alternatives.elementAt(i); - a.cache = new Lookahead[grammar.maxk + 1]; - a.lookaheadDepth = GrammarAnalyzer.LOOKAHEAD_DEPTH_INIT; - } - } - - /**Walk the syntactic predicate and, for a rule ref R, remove - * the ref from the list of FOLLOW references for R (stored - * in the symbol table. - */ - public void removeTrackingOfRuleRefs(Grammar g) { - for (int i = 0; i < alternatives.size(); i++) { - Alternative alt = getAlternativeAt(i); - AlternativeElement elem = alt.head; - while (elem != null) { - if (elem instanceof RuleRefElement) { - RuleRefElement rr = (RuleRefElement)elem; - RuleSymbol rs = (RuleSymbol)g.getSymbol(rr.targetRule); - if (rs == null) { - grammar.antlrTool.error("rule " + rr.targetRule + " referenced in (...)=>, but not defined"); - } - else { - rs.references.removeElement(rr); - } - } - else if (elem instanceof AlternativeBlock) {// recurse into subrules - ((AlternativeBlock)elem).removeTrackingOfRuleRefs(g); - } - elem = elem.next; - } - } - } - - public void setAlternatives(Vector v) { - alternatives = v; - } - - public void setAutoGen(boolean doAutoGen_) { - doAutoGen = doAutoGen_; - } - - public void setInitAction(String initAction_) { - initAction = initAction_; - } - - public void setLabel(String label_) { - label = label_; - } - - public void setOption(Token key, Token value) { - if (key.getText().equals("warnWhenFollowAmbig")) { - if (value.getText().equals("true")) { - warnWhenFollowAmbig = true; - } - else if (value.getText().equals("false")) { - warnWhenFollowAmbig = false; - } - else { - grammar.antlrTool.error("Value for warnWhenFollowAmbig must be true or false", grammar.getFilename(), key.getLine(), key.getColumn()); - } - } - else if (key.getText().equals("generateAmbigWarnings")) { - if (value.getText().equals("true")) { - generateAmbigWarnings = true; - } - else if (value.getText().equals("false")) { - generateAmbigWarnings = false; - } - else { - grammar.antlrTool.error("Value for generateAmbigWarnings must be true or false", grammar.getFilename(), key.getLine(), key.getColumn()); - } - } - else if (key.getText().equals("greedy")) { - if (value.getText().equals("true")) { - greedy = true; - greedySet = true; - } - else if (value.getText().equals("false")) { - greedy = false; - greedySet = true; - } - else { - grammar.antlrTool.error("Value for greedy must be true or false", grammar.getFilename(), key.getLine(), key.getColumn()); - } - } - else { - grammar.antlrTool.error("Invalid subrule option: " + key.getText(), grammar.getFilename(), key.getLine(), key.getColumn()); - } - } - - public String toString() { - String s = " ("; - if (initAction != null) { - s += initAction; - } - for (int i = 0; i < alternatives.size(); i++) { - Alternative alt = getAlternativeAt(i); - Lookahead cache[] = alt.cache; - int k = alt.lookaheadDepth; - // dump lookahead set - if (k == GrammarAnalyzer.LOOKAHEAD_DEPTH_INIT) { - } - else if (k == GrammarAnalyzer.NONDETERMINISTIC) { - s += "{?}:"; - } - else { - s += " {"; - for (int j = 1; j <= k; j++) { - s += cache[j].toString(",", grammar.tokenManager.getVocabulary()); - if (j < k && cache[j + 1] != null) s += ";"; - } - s += "}:"; - } - // dump alternative including pred (if any) - AlternativeElement p = alt.head; - String pred = alt.semPred; - if (pred != null) { - s += pred; - } - while (p != null) { - s += p; - p = p.next; - } - if (i < (alternatives.size() - 1)) { - s += " |"; - } - } - s += " )"; - return s; - } - -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/AlternativeElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/AlternativeElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/AlternativeElement.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/AlternativeElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,42 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -abstract class AlternativeElement extends GrammarElement { - AlternativeElement next; - protected int autoGenType = AUTO_GEN_NONE; - - protected String enclosingRuleName; - - public AlternativeElement(Grammar g) { - super(g); - } - - public AlternativeElement(Grammar g, Token start) { - super(g, start); - } - - public AlternativeElement(Grammar g, Token start, int autoGenType_) { - super(g, start); - autoGenType = autoGenType_; - } - - public int getAutoGenType() { - return autoGenType; - } - - public void setAutoGenType(int a) { - autoGenType = a; - } - - public String getLabel() { - return null; - } - - public void setLabel(String label) { - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/Alternative.java glassfish-gil/entity-persistence/src/java/persistence/antlr/Alternative.java --- glassfish/entity-persistence/src/java/persistence/antlr/Alternative.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/Alternative.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,72 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Hashtable; - -/** Intermediate data class holds information about an alternative */ -class Alternative { - // Tracking alternative linked list - AlternativeElement head; // head of alt element list - AlternativeElement tail; // last element added - - // Syntactic predicate block if non-null - protected SynPredBlock synPred; - // Semantic predicate action if non-null - protected String semPred; - // Exception specification if non-null - protected ExceptionSpec exceptionSpec; - // Init action if non-null; - protected Lookahead[] cache; // lookahead for alt. Filled in by - // deterministic() only!!!!!!! Used for - // code gen after calls to deterministic() - // and used by deterministic for (...)*, (..)+, - // and (..)? blocks. 1..k - protected int lookaheadDepth; // each alt has different look depth possibly. - // depth can be NONDETERMINISTIC too. - // 0..n-1 -// If non-null, Tree specification ala -> A B C (not implemented) - protected Token treeSpecifier = null; - // True of AST generation is on for this alt - private boolean doAutoGen; - - - public Alternative() { - } - - public Alternative(AlternativeElement firstElement) { - addElement(firstElement); - } - - public void addElement(AlternativeElement e) { - // Link the element into the list - if (head == null) { - head = tail = e; - } - else { - tail.next = e; - tail = e; - } - } - - public boolean atStart() { - return head == null; - } - - public boolean getAutoGen() { - // Don't build an AST if there is a tree-rewrite-specifier - return doAutoGen && treeSpecifier == null; - } - - public Token getTreeSpecifier() { - return treeSpecifier; - } - - public void setAutoGen(boolean doAutoGen_) { - doAutoGen = doAutoGen_; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRError.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRError.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRError.java 2006-08-31 00:34:02.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRError.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,25 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public class ANTLRError extends Error { - - /** - * ANTLRError constructor comment. - */ - public ANTLRError() { - super(); - } - - /** - * ANTLRError constructor comment. - * @param s java.lang.String - */ - public ANTLRError(String s) { - super(s); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRException.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRException.java 2006-08-31 00:34:02.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,18 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public class ANTLRException extends Exception { - - public ANTLRException() { - super(); - } - - public ANTLRException(String s) { - super(s); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRGrammarParseBehavior.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRGrammarParseBehavior.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRGrammarParseBehavior.java 2006-08-31 00:34:02.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRGrammarParseBehavior.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,123 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.BitSet; - -public interface ANTLRGrammarParseBehavior { - public void abortGrammar(); - - public void beginAlt(boolean doAST_); - - public void beginChildList(); - - // Exception handling - public void beginExceptionGroup(); - - public void beginExceptionSpec(Token label); - - public void beginSubRule(Token label, Token start, boolean not); - - // Trees - public void beginTree(Token tok) throws SemanticException; - - public void defineRuleName(Token r, String access, boolean ruleAST, String docComment) throws SemanticException; - - public void defineToken(Token tokname, Token tokliteral); - - public void endAlt(); - - public void endChildList(); - - public void endExceptionGroup(); - - public void endExceptionSpec(); - - public void endGrammar(); - - public void endOptions(); - - public void endRule(String r); - - public void endSubRule(); - - public void endTree(); - - public void hasError(); - - public void noASTSubRule(); - - public void oneOrMoreSubRule(); - - public void optionalSubRule(); - - public void refAction(Token action); - - public void refArgAction(Token action); - - public void setUserExceptions(String thr); - - public void refCharLiteral(Token lit, Token label, boolean inverted, int autoGenType, boolean lastInRule); - - public void refCharRange(Token t1, Token t2, Token label, int autoGenType, boolean lastInRule); - - public void refElementOption(Token option, Token value); - - public void refTokensSpecElementOption(Token tok, Token option, Token value); - - public void refExceptionHandler(Token exTypeAndName, Token action); - - public void refHeaderAction(Token name, Token act); - - public void refInitAction(Token action); - - public void refMemberAction(Token act); - - public void refPreambleAction(Token act); - - public void refReturnAction(Token returnAction); - - public void refRule(Token idAssign, Token r, Token label, Token arg, int autoGenType); - - public void refSemPred(Token pred); - - public void refStringLiteral(Token lit, Token label, int autoGenType, boolean lastInRule); - - public void refToken(Token assignId, Token t, Token label, Token args, - boolean inverted, int autoGenType, boolean lastInRule); - - public void refTokenRange(Token t1, Token t2, Token label, int autoGenType, boolean lastInRule); - - // Tree specifiers - public void refTreeSpecifier(Token treeSpec); - - public void refWildcard(Token t, Token label, int autoGenType); - - public void setArgOfRuleRef(Token argaction); - - public void setCharVocabulary(BitSet b); - - // Options - public void setFileOption(Token key, Token value, String filename); - - public void setGrammarOption(Token key, Token value); - - public void setRuleOption(Token key, Token value); - - public void setSubruleOption(Token key, Token value); - - public void startLexer(String file, Token name, String superClass, String doc); - - // Flow control for grammars - public void startParser(String file, Token name, String superClass, String doc); - - public void startTreeWalker(String file, Token name, String superClass, String doc); - - public void synPred(); - - public void zeroOrMoreSubRule(); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRHashString.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRHashString.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRHashString.java 2006-08-31 00:34:02.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRHashString.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,106 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -// class implements a String-like object whose sole purpose is to be -// entered into a lexer HashTable. It uses a lexer object to get -// information about case sensitivity. - -public class ANTLRHashString { - // only one of s or buf is non-null - private String s; - private char[] buf; - private int len; - private CharScanner lexer; - private static final int prime = 151; - - - public ANTLRHashString(char[] buf, int length, CharScanner lexer) { - this.lexer = lexer; - setBuffer(buf, length); - } - - // Hash strings constructed this way are unusable until setBuffer or setString are called. - public ANTLRHashString(CharScanner lexer) { - this.lexer = lexer; - } - - public ANTLRHashString(String s, CharScanner lexer) { - this.lexer = lexer; - setString(s); - } - - private final char charAt(int index) { - return (s != null) ? s.charAt(index) : buf[index]; - } - - // Return true if o is an ANTLRHashString equal to this. - public boolean equals(Object o) { - if (!(o instanceof ANTLRHashString) && !(o instanceof String)) { - return false; - } - - ANTLRHashString s; - if (o instanceof String) { - s = new ANTLRHashString((String)o, lexer); - } - else { - s = (ANTLRHashString)o; - } - int l = length(); - if (s.length() != l) { - return false; - } - if (lexer.getCaseSensitiveLiterals()) { - for (int i = 0; i < l; i++) { - if (charAt(i) != s.charAt(i)) { - return false; - } - } - } - else { - for (int i = 0; i < l; i++) { - if (lexer.toLower(charAt(i)) != lexer.toLower(s.charAt(i))) { - return false; - } - } - } - return true; - } - - public int hashCode() { - int hashval = 0; - int l = length(); - - if (lexer.getCaseSensitiveLiterals()) { - for (int i = 0; i < l; i++) { - hashval = hashval * prime + charAt(i); - } - } - else { - for (int i = 0; i < l; i++) { - hashval = hashval * prime + lexer.toLower(charAt(i)); - } - } - return hashval; - } - - private final int length() { - return (s != null) ? s.length() : len; - } - - public void setBuffer(char[] buf, int length) { - this.buf = buf; - this.len = length; - s = null; - } - - public void setString(String s) { - this.s = s; - buf = null; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRLexer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRLexer.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRLexer.java 2006-02-08 22:30:32.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRLexer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,1468 +0,0 @@ -// $ANTLR : "antlr.g" -> "ANTLRLexer.java"$ - -package persistence.antlr; - -import java.io.InputStream; -import persistence.antlr.TokenStreamException; -import persistence.antlr.TokenStreamIOException; -import persistence.antlr.TokenStreamRecognitionException; -import persistence.antlr.CharStreamException; -import persistence.antlr.CharStreamIOException; -import persistence.antlr.ANTLRException; -import java.io.Reader; -import java.util.Hashtable; -import persistence.antlr.CharScanner; -import persistence.antlr.InputBuffer; -import persistence.antlr.ByteBuffer; -import persistence.antlr.CharBuffer; -import persistence.antlr.Token; -import persistence.antlr.CommonToken; -import persistence.antlr.RecognitionException; -import persistence.antlr.NoViableAltForCharException; -import persistence.antlr.MismatchedCharException; -import persistence.antlr.TokenStream; -import persistence.antlr.ANTLRHashString; -import persistence.antlr.LexerSharedInputState; -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.SemanticException; - -public class ANTLRLexer extends persistence.antlr.CharScanner implements ANTLRTokenTypes, TokenStream - { - - /**Convert 'c' to an integer char value. */ - public static int escapeCharValue(String cs) { - //System.out.println("escapeCharValue("+cs+")"); - if ( cs.charAt(1)!='\\' ) return 0; - switch ( cs.charAt(2) ) { - case 'b' : return '\b'; - case 'r' : return '\r'; - case 't' : return '\t'; - case 'n' : return '\n'; - case 'f' : return '\f'; - case '"' : return '\"'; - case '\'' :return '\''; - case '\\' :return '\\'; - - case 'u' : - // Unicode char - if (cs.length() != 8) { - return 0; - } - else { - return - Character.digit(cs.charAt(3), 16) * 16 * 16 * 16 + - Character.digit(cs.charAt(4), 16) * 16 * 16 + - Character.digit(cs.charAt(5), 16) * 16 + - Character.digit(cs.charAt(6), 16); - } - - case '0' : - case '1' : - case '2' : - case '3' : - if ( cs.length()>5 && Character.isDigit(cs.charAt(4)) ) { - return (cs.charAt(2)-'0')*8*8 + (cs.charAt(3)-'0')*8 + (cs.charAt(4)-'0'); - } - if ( cs.length()>4 && Character.isDigit(cs.charAt(3)) ) { - return (cs.charAt(2)-'0')*8 + (cs.charAt(3)-'0'); - } - return cs.charAt(2)-'0'; - - case '4' : - case '5' : - case '6' : - case '7' : - if ( cs.length()>4 && Character.isDigit(cs.charAt(3)) ) { - return (cs.charAt(2)-'0')*8 + (cs.charAt(3)-'0'); - } - return cs.charAt(2)-'0'; - - default : - return 0; - } - } - - public static int tokenTypeForCharLiteral(String lit) { - if ( lit.length()>3 ) { // does char contain escape? - return escapeCharValue(lit); - } - else { - return lit.charAt(1); - } - } -public ANTLRLexer(InputStream in) { - this(new ByteBuffer(in)); -} -public ANTLRLexer(Reader in) { - this(new CharBuffer(in)); -} -public ANTLRLexer(InputBuffer ib) { - this(new LexerSharedInputState(ib)); -} -public ANTLRLexer(LexerSharedInputState state) { - super(state); - caseSensitiveLiterals = true; - setCaseSensitive(true); - literals = new Hashtable(); - literals.put(new ANTLRHashString("public", this), new Integer(31)); - literals.put(new ANTLRHashString("class", this), new Integer(10)); - literals.put(new ANTLRHashString("header", this), new Integer(5)); - literals.put(new ANTLRHashString("throws", this), new Integer(37)); - literals.put(new ANTLRHashString("lexclass", this), new Integer(9)); - literals.put(new ANTLRHashString("catch", this), new Integer(40)); - literals.put(new ANTLRHashString("private", this), new Integer(32)); - literals.put(new ANTLRHashString("options", this), new Integer(51)); - literals.put(new ANTLRHashString("extends", this), new Integer(11)); - literals.put(new ANTLRHashString("protected", this), new Integer(30)); - literals.put(new ANTLRHashString("TreeParser", this), new Integer(13)); - literals.put(new ANTLRHashString("Parser", this), new Integer(29)); - literals.put(new ANTLRHashString("Lexer", this), new Integer(12)); - literals.put(new ANTLRHashString("returns", this), new Integer(35)); - literals.put(new ANTLRHashString("charVocabulary", this), new Integer(18)); - literals.put(new ANTLRHashString("tokens", this), new Integer(4)); - literals.put(new ANTLRHashString("exception", this), new Integer(39)); -} - -public Token nextToken() throws TokenStreamException { - Token theRetToken=null; -tryAgain: - for (;;) { - Token _token = null; - int _ttype = Token.INVALID_TYPE; - resetText(); - try { // for char stream error handling - try { // for lexical error handling - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(true); - theRetToken=_returnToken; - break; - } - case '/': - { - mCOMMENT(true); - theRetToken=_returnToken; - break; - } - case '<': - { - mOPEN_ELEMENT_OPTION(true); - theRetToken=_returnToken; - break; - } - case '>': - { - mCLOSE_ELEMENT_OPTION(true); - theRetToken=_returnToken; - break; - } - case ',': - { - mCOMMA(true); - theRetToken=_returnToken; - break; - } - case '?': - { - mQUESTION(true); - theRetToken=_returnToken; - break; - } - case '#': - { - mTREE_BEGIN(true); - theRetToken=_returnToken; - break; - } - case '(': - { - mLPAREN(true); - theRetToken=_returnToken; - break; - } - case ')': - { - mRPAREN(true); - theRetToken=_returnToken; - break; - } - case ':': - { - mCOLON(true); - theRetToken=_returnToken; - break; - } - case '*': - { - mSTAR(true); - theRetToken=_returnToken; - break; - } - case '+': - { - mPLUS(true); - theRetToken=_returnToken; - break; - } - case ';': - { - mSEMI(true); - theRetToken=_returnToken; - break; - } - case '^': - { - mCARET(true); - theRetToken=_returnToken; - break; - } - case '!': - { - mBANG(true); - theRetToken=_returnToken; - break; - } - case '|': - { - mOR(true); - theRetToken=_returnToken; - break; - } - case '~': - { - mNOT_OP(true); - theRetToken=_returnToken; - break; - } - case '}': - { - mRCURLY(true); - theRetToken=_returnToken; - break; - } - case '\'': - { - mCHAR_LITERAL(true); - theRetToken=_returnToken; - break; - } - case '"': - { - mSTRING_LITERAL(true); - theRetToken=_returnToken; - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - mINT(true); - theRetToken=_returnToken; - break; - } - case '[': - { - mARG_ACTION(true); - theRetToken=_returnToken; - break; - } - case '{': - { - mACTION(true); - theRetToken=_returnToken; - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - mTOKEN_REF(true); - theRetToken=_returnToken; - break; - } - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - mRULE_REF(true); - theRetToken=_returnToken; - break; - } - default: - if ((LA(1)=='=') && (LA(2)=='>')) { - mIMPLIES(true); - theRetToken=_returnToken; - } - else if ((LA(1)=='.') && (LA(2)=='.')) { - mRANGE(true); - theRetToken=_returnToken; - } - else if ((LA(1)=='=') && (true)) { - mASSIGN(true); - theRetToken=_returnToken; - } - else if ((LA(1)=='.') && (true)) { - mWILDCARD(true); - theRetToken=_returnToken; - } - else { - if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);} - else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - } - if ( _returnToken==null ) continue tryAgain; // found SKIP token - _ttype = _returnToken.getType(); - _returnToken.setType(_ttype); - return _returnToken; - } - catch (RecognitionException e) { - throw new TokenStreamRecognitionException(e); - } - } - catch (CharStreamException cse) { - if ( cse instanceof CharStreamIOException ) { - throw new TokenStreamIOException(((CharStreamIOException)cse).io); - } - else { - throw new TokenStreamException(cse.getMessage()); - } - } - } -} - - public final void mWS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = WS; - int _saveIndex; - - { - switch ( LA(1)) { - case ' ': - { - match(' '); - break; - } - case '\t': - { - match('\t'); - break; - } - case '\n': - { - match('\n'); - newline(); - break; - } - default: - if ((LA(1)=='\r') && (LA(2)=='\n')) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)=='\r') && (true)) { - match('\r'); - newline(); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _ttype = Token.SKIP; - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mCOMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = COMMENT; - int _saveIndex; - Token t=null; - - { - if ((LA(1)=='/') && (LA(2)=='/')) { - mSL_COMMENT(false); - } - else if ((LA(1)=='/') && (LA(2)=='*')) { - mML_COMMENT(true); - t=_returnToken; - _ttype = t.getType(); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - if ( _ttype != DOC_COMMENT ) _ttype = Token.SKIP; - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mSL_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = SL_COMMENT; - int _saveIndex; - - match("//"); - { - _loop153: - do { - if ((_tokenSet_0.member(LA(1)))) { - { - match(_tokenSet_0); - } - } - else { - break _loop153; - } - - } while (true); - } - { - if ((LA(1)=='\r') && (LA(2)=='\n')) { - match('\r'); - match('\n'); - } - else if ((LA(1)=='\r') && (true)) { - match('\r'); - } - else if ((LA(1)=='\n')) { - match('\n'); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - newline(); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mML_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ML_COMMENT; - int _saveIndex; - - match("/*"); - { - if (((LA(1)=='*') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')))&&( LA(2)!='/' )) { - match('*'); - _ttype = DOC_COMMENT; - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - _loop159: - do { - // nongreedy exit test - if ((LA(1)=='*') && (LA(2)=='/')) break _loop159; - if ((LA(1)=='\r') && (LA(2)=='\n')) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - match('\r'); - newline(); - } - else if ((_tokenSet_0.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - { - match(_tokenSet_0); - } - } - else if ((LA(1)=='\n')) { - match('\n'); - newline(); - } - else { - break _loop159; - } - - } while (true); - } - match("*/"); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mOPEN_ELEMENT_OPTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = OPEN_ELEMENT_OPTION; - int _saveIndex; - - match('<'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mCLOSE_ELEMENT_OPTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = CLOSE_ELEMENT_OPTION; - int _saveIndex; - - match('>'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mCOMMA(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = COMMA; - int _saveIndex; - - match(','); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mQUESTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = QUESTION; - int _saveIndex; - - match('?'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mTREE_BEGIN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TREE_BEGIN; - int _saveIndex; - - match("#("); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mLPAREN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = LPAREN; - int _saveIndex; - - match('('); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mRPAREN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = RPAREN; - int _saveIndex; - - match(')'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mCOLON(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = COLON; - int _saveIndex; - - match(':'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mSTAR(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = STAR; - int _saveIndex; - - match('*'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mPLUS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = PLUS; - int _saveIndex; - - match('+'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mASSIGN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ASSIGN; - int _saveIndex; - - match('='); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mIMPLIES(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = IMPLIES; - int _saveIndex; - - match("=>"); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mSEMI(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = SEMI; - int _saveIndex; - - match(';'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mCARET(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = CARET; - int _saveIndex; - - match('^'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mBANG(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = BANG; - int _saveIndex; - - match('!'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mOR(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = OR; - int _saveIndex; - - match('|'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mWILDCARD(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = WILDCARD; - int _saveIndex; - - match('.'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mRANGE(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = RANGE; - int _saveIndex; - - match(".."); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mNOT_OP(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = NOT_OP; - int _saveIndex; - - match('~'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mRCURLY(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = RCURLY; - int _saveIndex; - - match('}'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mCHAR_LITERAL(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = CHAR_LITERAL; - int _saveIndex; - - match('\''); - { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_1.member(LA(1)))) { - matchNot('\''); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - match('\''); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mESC(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ESC; - int _saveIndex; - - match('\\'); - { - switch ( LA(1)) { - case 'n': - { - match('n'); - break; - } - case 'r': - { - match('r'); - break; - } - case 't': - { - match('t'); - break; - } - case 'b': - { - match('b'); - break; - } - case 'f': - { - match('f'); - break; - } - case 'w': - { - match('w'); - break; - } - case 'a': - { - match('a'); - break; - } - case '"': - { - match('"'); - break; - } - case '\'': - { - match('\''); - break; - } - case '\\': - { - match('\\'); - break; - } - case '0': case '1': case '2': case '3': - { - { - matchRange('0','3'); - } - { - if (((LA(1) >= '0' && LA(1) <= '7')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - matchRange('0','7'); - { - if (((LA(1) >= '0' && LA(1) <= '7')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - matchRange('0','7'); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - case '4': case '5': case '6': case '7': - { - { - matchRange('4','7'); - } - { - if (((LA(1) >= '0' && LA(1) <= '7')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - matchRange('0','7'); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - case 'u': - { - match('u'); - mXDIGIT(false); - mXDIGIT(false); - mXDIGIT(false); - mXDIGIT(false); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mSTRING_LITERAL(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = STRING_LITERAL; - int _saveIndex; - - match('"'); - { - _loop184: - do { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_2.member(LA(1)))) { - matchNot('"'); - } - else { - break _loop184; - } - - } while (true); - } - match('"'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mXDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = XDIGIT; - int _saveIndex; - - switch ( LA(1)) { - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - matchRange('0','9'); - break; - } - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': - { - matchRange('a','f'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': - { - matchRange('A','F'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = DIGIT; - int _saveIndex; - - matchRange('0','9'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mINT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = INT; - int _saveIndex; - - { - int _cnt196=0; - _loop196: - do { - if (((LA(1) >= '0' && LA(1) <= '9'))) { - matchRange('0','9'); - } - else { - if ( _cnt196>=1 ) { break _loop196; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt196++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mARG_ACTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ARG_ACTION; - int _saveIndex; - - mNESTED_ARG_ACTION(false); - setText(StringUtils.stripFrontBack(getText(), "[", "]")); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mNESTED_ARG_ACTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = NESTED_ARG_ACTION; - int _saveIndex; - - match('['); - { - _loop200: - do { - switch ( LA(1)) { - case '[': - { - mNESTED_ARG_ACTION(false); - break; - } - case '\n': - { - match('\n'); - newline(); - break; - } - case '\'': - { - mCHAR_LITERAL(false); - break; - } - case '"': - { - mSTRING_LITERAL(false); - break; - } - default: - if ((LA(1)=='\r') && (LA(2)=='\n')) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - match('\r'); - newline(); - } - else if ((_tokenSet_3.member(LA(1)))) { - matchNot(']'); - } - else { - break _loop200; - } - } - } while (true); - } - match(']'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mACTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ACTION; - int _saveIndex; - int actionLine=getLine(); int actionColumn = getColumn(); - - mNESTED_ACTION(false); - { - if ((LA(1)=='?')) { - match('?'); - _ttype = SEMPRED; - } - else { - } - - } - - if ( _ttype==ACTION ) { - setText(StringUtils.stripFrontBack(getText(), "{", "}")); - } - else { - setText(StringUtils.stripFrontBack(getText(), "{", "}?")); - } - CommonToken t = new CommonToken(_ttype,new String(text.getBuffer(),_begin,text.length()-_begin)); - t.setLine(actionLine); // set action line to start - t.setColumn(actionColumn); - _token = t; - - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mNESTED_ACTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = NESTED_ACTION; - int _saveIndex; - - match('{'); - { - _loop206: - do { - // nongreedy exit test - if ((LA(1)=='}') && (true)) break _loop206; - if ((LA(1)=='\n'||LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - { - if ((LA(1)=='\r') && (LA(2)=='\n')) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - match('\r'); - newline(); - } - else if ((LA(1)=='\n')) { - match('\n'); - newline(); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else if ((LA(1)=='{') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mNESTED_ACTION(false); - } - else if ((LA(1)=='\'') && (_tokenSet_4.member(LA(2)))) { - mCHAR_LITERAL(false); - } - else if ((LA(1)=='/') && (LA(2)=='*'||LA(2)=='/')) { - mCOMMENT(false); - } - else if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mSTRING_LITERAL(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - matchNot(EOF_CHAR); - } - else { - break _loop206; - } - - } while (true); - } - match('}'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mTOKEN_REF(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = TOKEN_REF; - int _saveIndex; - - matchRange('A','Z'); - { - _loop209: - do { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '_': - { - match('_'); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - matchRange('0','9'); - break; - } - default: - { - break _loop209; - } - } - } while (true); - } - _ttype = testLiteralsTable(_ttype); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mRULE_REF(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = RULE_REF; - int _saveIndex; - - int t=0; - - - t=mINTERNAL_RULE_REF(false); - _ttype=t; - { - if (( true )&&(t==LITERAL_options)) { - mWS_LOOP(false); - { - if ((LA(1)=='{')) { - match('{'); - _ttype = OPTIONS; - } - else { - } - - } - } - else if (( true )&&(t==LITERAL_tokens)) { - mWS_LOOP(false); - { - if ((LA(1)=='{')) { - match('{'); - _ttype = TOKENS; - } - else { - } - - } - } - else { - } - - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final int mINTERNAL_RULE_REF(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int t; - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = INTERNAL_RULE_REF; - int _saveIndex; - - t = RULE_REF; - - - matchRange('a','z'); - { - _loop219: - do { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '_': - { - match('_'); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - matchRange('0','9'); - break; - } - default: - { - break _loop219; - } - } - } while (true); - } - t = testLiteralsTable(t); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - return t; - } - - protected final void mWS_LOOP(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = WS_LOOP; - int _saveIndex; - - { - _loop216: - do { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '/': - { - mCOMMENT(false); - break; - } - default: - { - break _loop216; - } - } - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mWS_OPT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = WS_OPT; - int _saveIndex; - - { - if ((_tokenSet_5.member(LA(1)))) { - mWS(false); - } - else { - } - - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - - private static final long[] mk_tokenSet_0() { - long[] data = new long[8]; - data[0]=-9224L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - private static final long[] mk_tokenSet_1() { - long[] data = new long[8]; - data[0]=-549755813896L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1()); - private static final long[] mk_tokenSet_2() { - long[] data = new long[8]; - data[0]=-17179869192L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2()); - private static final long[] mk_tokenSet_3() { - long[] data = new long[8]; - data[0]=-566935692296L; - data[1]=-671088641L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3()); - private static final long[] mk_tokenSet_4() { - long[] data = new long[8]; - data[0]=-549755813896L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4()); - private static final long[] mk_tokenSet_5() { - long[] data = { 4294977024L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5()); - - } diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRParser.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRParser.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRParser.java 2006-02-08 22:30:33.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRParser.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,2978 +0,0 @@ -// $ANTLR : "antlr.g" -> "ANTLRParser.java"$ - -package persistence.antlr; - -import persistence.antlr.TokenBuffer; -import persistence.antlr.TokenStreamException; -import persistence.antlr.TokenStreamIOException; -import persistence.antlr.ANTLRException; -import persistence.antlr.LLkParser; -import persistence.antlr.Token; -import persistence.antlr.TokenStream; -import persistence.antlr.RecognitionException; -import persistence.antlr.NoViableAltException; -import persistence.antlr.MismatchedTokenException; -import persistence.antlr.SemanticException; -import persistence.antlr.ParserSharedInputState; -import persistence.antlr.collections.impl.BitSet; - -import java.util.Enumeration; -import java.io.DataInputStream; -import java.io.InputStream; -import java.io.FileInputStream; -import java.io.IOException; - -public class ANTLRParser extends persistence.antlr.LLkParser implements ANTLRTokenTypes - { - - private static final boolean DEBUG_PARSER = false; - - ANTLRGrammarParseBehavior behavior; - Tool antlrTool; - protected int blockNesting= -1; - - public ANTLRParser( - TokenBuffer tokenBuf, - ANTLRGrammarParseBehavior behavior_, - Tool tool_ - ) { - super(tokenBuf, 1); - tokenNames = _tokenNames; - behavior = behavior_; - antlrTool = tool_; - } - - public void reportError(String s) { - antlrTool.error(s, getFilename(), -1, -1); - } - - public void reportError(RecognitionException e) { - reportError(e, e.getErrorMessage()); - } - - public void reportError(RecognitionException e, String s) { - antlrTool.error(s, e.getFilename(), e.getLine(), e.getColumn()); - } - - public void reportWarning(String s) { - antlrTool.warning(s, getFilename(), -1, -1); - } - - private boolean lastInRule() throws TokenStreamException { - if ( blockNesting==0 && (LA(1)==SEMI || LA(1)==LITERAL_exception || LA(1)==OR) ) { - return true; - } - return false; - } - - private void checkForMissingEndRule(Token label) { - if ( label.getColumn()==1 ) { - antlrTool.warning("did you forget to terminate previous rule?", getFilename(), label.getLine(), label.getColumn()); - } - } - -protected ANTLRParser(TokenBuffer tokenBuf, int k) { - super(tokenBuf,k); - tokenNames = _tokenNames; -} - -public ANTLRParser(TokenBuffer tokenBuf) { - this(tokenBuf,2); -} - -protected ANTLRParser(TokenStream lexer, int k) { - super(lexer,k); - tokenNames = _tokenNames; -} - -public ANTLRParser(TokenStream lexer) { - this(lexer,2); -} - -public ANTLRParser(ParserSharedInputState state) { - super(state,2); - tokenNames = _tokenNames; -} - - public final void grammar() throws RecognitionException, TokenStreamException { - - Token n = null; - Token h = null; - - try { // for error handling - { - _loop4: - do { - if ((LA(1)==LITERAL_header)) { - if ( inputState.guessing==0 ) { - - n = null; // RK: prevent certain orders of header actions - // overwriting eachother. - - } - match(LITERAL_header); - { - switch ( LA(1)) { - case STRING_LITERAL: - { - n = LT(1); - match(STRING_LITERAL); - break; - } - case ACTION: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - h = LT(1); - match(ACTION); - if ( inputState.guessing==0 ) { - - // store the header action - // FIXME: 'n' should be checked for validity - behavior.refHeaderAction(n,h); - - } - } - else { - break _loop4; - } - - } while (true); - } - { - switch ( LA(1)) { - case OPTIONS: - { - fileOptionsSpec(); - break; - } - case EOF: - case ACTION: - case DOC_COMMENT: - case LITERAL_lexclass: - case LITERAL_class: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - _loop7: - do { - if (((LA(1) >= ACTION && LA(1) <= LITERAL_class))) { - classDef(); - } - else { - break _loop7; - } - - } while (true); - } - match(Token.EOF_TYPE); - } - catch (RecognitionException ex) { - if (inputState.guessing==0) { - - reportError(ex, "rule grammar trapped:\n"+ex.toString()); - consumeUntil(EOF); - - } else { - throw ex; - } - } - } - - public final void fileOptionsSpec() throws RecognitionException, TokenStreamException { - - Token idTok; Token value; - - match(OPTIONS); - { - _loop18: - do { - if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF)) { - idTok=id(); - match(ASSIGN); - value=optionValue(); - if ( inputState.guessing==0 ) { - behavior.setFileOption(idTok, value,getInputState().filename); - } - match(SEMI); - } - else { - break _loop18; - } - - } while (true); - } - match(RCURLY); - } - - public final void classDef() throws RecognitionException, TokenStreamException { - - Token a = null; - Token d = null; - String doc=null; - - try { // for error handling - { - switch ( LA(1)) { - case ACTION: - { - a = LT(1); - match(ACTION); - if ( inputState.guessing==0 ) { - behavior.refPreambleAction(a); - } - break; - } - case DOC_COMMENT: - case LITERAL_lexclass: - case LITERAL_class: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case DOC_COMMENT: - { - d = LT(1); - match(DOC_COMMENT); - if ( inputState.guessing==0 ) { - doc=d.getText(); - } - break; - } - case LITERAL_lexclass: - case LITERAL_class: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - boolean synPredMatched13 = false; - if (((LA(1)==LITERAL_lexclass||LA(1)==LITERAL_class) && (LA(2)==TOKEN_REF||LA(2)==RULE_REF))) { - int _m13 = mark(); - synPredMatched13 = true; - inputState.guessing++; - try { - { - switch ( LA(1)) { - case LITERAL_lexclass: - { - match(LITERAL_lexclass); - break; - } - case LITERAL_class: - { - match(LITERAL_class); - id(); - match(LITERAL_extends); - match(LITERAL_Lexer); - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - } - catch (RecognitionException pe) { - synPredMatched13 = false; - } - rewind(_m13); - inputState.guessing--; - } - if ( synPredMatched13 ) { - lexerSpec(doc); - } - else { - boolean synPredMatched15 = false; - if (((LA(1)==LITERAL_class) && (LA(2)==TOKEN_REF||LA(2)==RULE_REF))) { - int _m15 = mark(); - synPredMatched15 = true; - inputState.guessing++; - try { - { - match(LITERAL_class); - id(); - match(LITERAL_extends); - match(LITERAL_TreeParser); - } - } - catch (RecognitionException pe) { - synPredMatched15 = false; - } - rewind(_m15); - inputState.guessing--; - } - if ( synPredMatched15 ) { - treeParserSpec(doc); - } - else if ((LA(1)==LITERAL_class) && (LA(2)==TOKEN_REF||LA(2)==RULE_REF)) { - parserSpec(doc); - } - else { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - rules(); - if ( inputState.guessing==0 ) { - behavior.endGrammar(); - } - } - catch (RecognitionException ex) { - if (inputState.guessing==0) { - - if ( ex instanceof NoViableAltException ) { - NoViableAltException e = (NoViableAltException)ex; - // RK: These probably generate inconsequent error messages... - // have to see how this comes out.. - if ( e.token.getType()==DOC_COMMENT ) { - reportError(ex, "JAVADOC comments may only prefix rules and grammars"); - } - else { - reportError(ex, "rule classDef trapped:\n"+ex.toString()); - } - } - else { - reportError(ex, "rule classDef trapped:\n"+ex.toString()); - } - behavior.abortGrammar(); - boolean consuming = true; - // consume everything until the next class definition or EOF - while (consuming) { - consume(); - switch(LA(1)) { - case LITERAL_class: - case LITERAL_lexclass: - case EOF: - consuming = false; - break; - } - } - - } else { - throw ex; - } - } - } - - public final Token id() throws RecognitionException, TokenStreamException { - Token idTok ; - - Token a = null; - Token b = null; - idTok = null; - - switch ( LA(1)) { - case TOKEN_REF: - { - a = LT(1); - match(TOKEN_REF); - if ( inputState.guessing==0 ) { - idTok = a; - } - break; - } - case RULE_REF: - { - b = LT(1); - match(RULE_REF); - if ( inputState.guessing==0 ) { - idTok = b; - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - return idTok ; - } - - public final void lexerSpec( - String doc - ) throws RecognitionException, TokenStreamException { - - Token lc = null; - Token a = null; - - Token idTok; - String sup=null; - - - { - switch ( LA(1)) { - case LITERAL_lexclass: - { - lc = LT(1); - match(LITERAL_lexclass); - idTok=id(); - if ( inputState.guessing==0 ) { - - antlrTool.warning("lexclass' is deprecated; use 'class X extends Lexer'", - getFilename(), lc.getLine(), lc.getColumn()); - // System.out.println("warning: line " + lc.getLine() + ": 'lexclass' is deprecated; use 'class X extends Lexer'"); - - } - break; - } - case LITERAL_class: - { - match(LITERAL_class); - idTok=id(); - match(LITERAL_extends); - match(LITERAL_Lexer); - { - switch ( LA(1)) { - case LPAREN: - { - sup=superClass(); - break; - } - case SEMI: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.startLexer(getFilename(), idTok,sup,doc); - } - match(SEMI); - { - switch ( LA(1)) { - case OPTIONS: - { - lexerOptionsSpec(); - break; - } - case ACTION: - case DOC_COMMENT: - case TOKENS: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.endOptions(); - } - { - switch ( LA(1)) { - case TOKENS: - { - tokensSpec(); - break; - } - case ACTION: - case DOC_COMMENT: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case ACTION: - { - a = LT(1); - match(ACTION); - if ( inputState.guessing==0 ) { - behavior.refMemberAction(a); - } - break; - } - case DOC_COMMENT: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - } - - public final void treeParserSpec( - String doc - ) throws RecognitionException, TokenStreamException { - - Token a = null; - - Token idTok; - String sup=null; - - - match(LITERAL_class); - idTok=id(); - match(LITERAL_extends); - match(LITERAL_TreeParser); - { - switch ( LA(1)) { - case LPAREN: - { - sup=superClass(); - break; - } - case SEMI: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.startTreeWalker(getFilename(), idTok,sup,doc); - } - match(SEMI); - { - switch ( LA(1)) { - case OPTIONS: - { - treeParserOptionsSpec(); - break; - } - case ACTION: - case DOC_COMMENT: - case TOKENS: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.endOptions(); - } - { - switch ( LA(1)) { - case TOKENS: - { - tokensSpec(); - break; - } - case ACTION: - case DOC_COMMENT: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case ACTION: - { - a = LT(1); - match(ACTION); - if ( inputState.guessing==0 ) { - behavior.refMemberAction(a); - } - break; - } - case DOC_COMMENT: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - } - - public final void parserSpec( - String doc - ) throws RecognitionException, TokenStreamException { - - Token a = null; - - Token idTok; - String sup=null; - - - match(LITERAL_class); - idTok=id(); - { - switch ( LA(1)) { - case LITERAL_extends: - { - match(LITERAL_extends); - match(LITERAL_Parser); - { - switch ( LA(1)) { - case LPAREN: - { - sup=superClass(); - break; - } - case SEMI: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - break; - } - case SEMI: - { - if ( inputState.guessing==0 ) { - - antlrTool.warning("use 'class X extends Parser'", getFilename(), idTok.getLine(), idTok.getColumn()); - // System.out.println("warning: line " + - // idTok.getLine() + ": use 'class X extends Parser'"); - - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.startParser(getFilename(), idTok, sup, doc); - } - match(SEMI); - { - switch ( LA(1)) { - case OPTIONS: - { - parserOptionsSpec(); - break; - } - case ACTION: - case DOC_COMMENT: - case TOKENS: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.endOptions(); - } - { - switch ( LA(1)) { - case TOKENS: - { - tokensSpec(); - break; - } - case ACTION: - case DOC_COMMENT: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case ACTION: - { - a = LT(1); - match(ACTION); - if ( inputState.guessing==0 ) { - behavior.refMemberAction(a); - } - break; - } - case DOC_COMMENT: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - } - - public final void rules() throws RecognitionException, TokenStreamException { - - - { - int _cnt68=0; - _loop68: - do { - if ((_tokenSet_0.member(LA(1))) && (_tokenSet_1.member(LA(2)))) { - rule(); - } - else { - if ( _cnt68>=1 ) { break _loop68; } else {throw new NoViableAltException(LT(1), getFilename());} - } - - _cnt68++; - } while (true); - } - } - - public final Token optionValue() throws RecognitionException, TokenStreamException { - Token retval ; - - Token sl = null; - Token cl = null; - Token il = null; - retval = null; - - switch ( LA(1)) { - case TOKEN_REF: - case RULE_REF: - { - retval=qualifiedID(); - break; - } - case STRING_LITERAL: - { - sl = LT(1); - match(STRING_LITERAL); - if ( inputState.guessing==0 ) { - retval = sl; - } - break; - } - case CHAR_LITERAL: - { - cl = LT(1); - match(CHAR_LITERAL); - if ( inputState.guessing==0 ) { - retval = cl; - } - break; - } - case INT: - { - il = LT(1); - match(INT); - if ( inputState.guessing==0 ) { - retval = il; - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - return retval ; - } - - public final void parserOptionsSpec() throws RecognitionException, TokenStreamException { - - Token idTok; Token value; - - match(OPTIONS); - { - _loop21: - do { - if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF)) { - idTok=id(); - match(ASSIGN); - value=optionValue(); - if ( inputState.guessing==0 ) { - behavior.setGrammarOption(idTok, value); - } - match(SEMI); - } - else { - break _loop21; - } - - } while (true); - } - match(RCURLY); - } - - public final void treeParserOptionsSpec() throws RecognitionException, TokenStreamException { - - Token idTok; Token value; - - match(OPTIONS); - { - _loop24: - do { - if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF)) { - idTok=id(); - match(ASSIGN); - value=optionValue(); - if ( inputState.guessing==0 ) { - behavior.setGrammarOption(idTok, value); - } - match(SEMI); - } - else { - break _loop24; - } - - } while (true); - } - match(RCURLY); - } - - public final void lexerOptionsSpec() throws RecognitionException, TokenStreamException { - - Token idTok; Token value; BitSet b; - - match(OPTIONS); - { - _loop27: - do { - switch ( LA(1)) { - case LITERAL_charVocabulary: - { - match(LITERAL_charVocabulary); - match(ASSIGN); - b=charSet(); - match(SEMI); - if ( inputState.guessing==0 ) { - behavior.setCharVocabulary(b); - } - break; - } - case TOKEN_REF: - case RULE_REF: - { - idTok=id(); - match(ASSIGN); - value=optionValue(); - if ( inputState.guessing==0 ) { - behavior.setGrammarOption(idTok, value); - } - match(SEMI); - break; - } - default: - { - break _loop27; - } - } - } while (true); - } - match(RCURLY); - } - - public final BitSet charSet() throws RecognitionException, TokenStreamException { - BitSet b ; - - - b = null; - BitSet tmpSet = null; - - - b=setBlockElement(); - { - _loop34: - do { - if ((LA(1)==OR)) { - match(OR); - tmpSet=setBlockElement(); - if ( inputState.guessing==0 ) { - b.orInPlace(tmpSet); - } - } - else { - break _loop34; - } - - } while (true); - } - return b ; - } - - public final void subruleOptionsSpec() throws RecognitionException, TokenStreamException { - - Token idTok; Token value; - - match(OPTIONS); - { - _loop30: - do { - if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF)) { - idTok=id(); - match(ASSIGN); - value=optionValue(); - if ( inputState.guessing==0 ) { - behavior.setSubruleOption(idTok, value); - } - match(SEMI); - } - else { - break _loop30; - } - - } while (true); - } - match(RCURLY); - } - -/** Match a.b.c.d qualified ids; WILDCARD here is overloaded as - * id separator; that is, I need a reference to the '.' token. - */ - public final Token qualifiedID() throws RecognitionException, TokenStreamException { - Token qidTok=null; - - - StringBuffer buf = new StringBuffer(30); - Token a; - - - a=id(); - if ( inputState.guessing==0 ) { - buf.append(a.getText()); - } - { - _loop144: - do { - if ((LA(1)==WILDCARD)) { - match(WILDCARD); - a=id(); - if ( inputState.guessing==0 ) { - buf.append('.'); buf.append(a.getText()); - } - } - else { - break _loop144; - } - - } while (true); - } - if ( inputState.guessing==0 ) { - - // can use either TOKEN_REF or RULE_REF; should - // really create a QID or something instead. - qidTok = new CommonToken(TOKEN_REF, buf.toString()); - qidTok.setLine(a.getLine()); - - } - return qidTok; - } - - public final BitSet setBlockElement() throws RecognitionException, TokenStreamException { - BitSet b ; - - Token c1 = null; - Token c2 = null; - - b = null; - int rangeMin = 0; - - - c1 = LT(1); - match(CHAR_LITERAL); - if ( inputState.guessing==0 ) { - - rangeMin = ANTLRLexer.tokenTypeForCharLiteral(c1.getText()); - b = BitSet.of(rangeMin); - - } - { - switch ( LA(1)) { - case RANGE: - { - match(RANGE); - c2 = LT(1); - match(CHAR_LITERAL); - if ( inputState.guessing==0 ) { - - int rangeMax = ANTLRLexer.tokenTypeForCharLiteral(c2.getText()); - if (rangeMax < rangeMin) { - antlrTool.error("Malformed range line ", getFilename(), c1.getLine(), c1.getColumn()); - } - for (int i = rangeMin+1; i <= rangeMax; i++) { - b.add(i); - } - - } - break; - } - case SEMI: - case OR: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - return b ; - } - - public final void tokensSpec() throws RecognitionException, TokenStreamException { - - Token t1 = null; - Token s1 = null; - Token s3 = null; - - match(TOKENS); - { - int _cnt43=0; - _loop43: - do { - if ((LA(1)==STRING_LITERAL||LA(1)==TOKEN_REF)) { - { - switch ( LA(1)) { - case TOKEN_REF: - { - if ( inputState.guessing==0 ) { - s1=null; - } - t1 = LT(1); - match(TOKEN_REF); - { - switch ( LA(1)) { - case ASSIGN: - { - match(ASSIGN); - s1 = LT(1); - match(STRING_LITERAL); - break; - } - case SEMI: - case OPEN_ELEMENT_OPTION: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.defineToken(t1, s1); - } - { - switch ( LA(1)) { - case OPEN_ELEMENT_OPTION: - { - tokensSpecOptions(t1); - break; - } - case SEMI: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - break; - } - case STRING_LITERAL: - { - s3 = LT(1); - match(STRING_LITERAL); - if ( inputState.guessing==0 ) { - behavior.defineToken(null, s3); - } - { - switch ( LA(1)) { - case OPEN_ELEMENT_OPTION: - { - tokensSpecOptions(s3); - break; - } - case SEMI: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - match(SEMI); - } - else { - if ( _cnt43>=1 ) { break _loop43; } else {throw new NoViableAltException(LT(1), getFilename());} - } - - _cnt43++; - } while (true); - } - match(RCURLY); - } - - public final void tokensSpecOptions( - Token t - ) throws RecognitionException, TokenStreamException { - - - Token o=null, v=null; - - - match(OPEN_ELEMENT_OPTION); - o=id(); - match(ASSIGN); - v=optionValue(); - if ( inputState.guessing==0 ) { - behavior.refTokensSpecElementOption(t,o,v); - } - { - _loop46: - do { - if ((LA(1)==SEMI)) { - match(SEMI); - o=id(); - match(ASSIGN); - v=optionValue(); - if ( inputState.guessing==0 ) { - behavior.refTokensSpecElementOption(t,o,v); - } - } - else { - break _loop46; - } - - } while (true); - } - match(CLOSE_ELEMENT_OPTION); - } - - public final String superClass() throws RecognitionException, TokenStreamException { - String sup; - - sup=null; - - match(LPAREN); - if ( inputState.guessing==0 ) { - - sup = LT(1).getText(); - sup = StringUtils.stripFrontBack(sup, "\"", "\""); - - } - { - match(STRING_LITERAL); - } - match(RPAREN); - return sup; - } - - public final void rule() throws RecognitionException, TokenStreamException { - - Token d = null; - Token p1 = null; - Token p2 = null; - Token p3 = null; - Token aa = null; - Token rt = null; - Token a = null; - - String access="public"; - Token idTok; - String doc=null; - boolean ruleAutoGen = true; - blockNesting = -1; // block increments, so -1 to make rule at level 0 - - - { - switch ( LA(1)) { - case DOC_COMMENT: - { - d = LT(1); - match(DOC_COMMENT); - if ( inputState.guessing==0 ) { - doc=d.getText(); - } - break; - } - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case LITERAL_protected: - { - p1 = LT(1); - match(LITERAL_protected); - if ( inputState.guessing==0 ) { - access=p1.getText(); - } - break; - } - case LITERAL_public: - { - p2 = LT(1); - match(LITERAL_public); - if ( inputState.guessing==0 ) { - access=p2.getText(); - } - break; - } - case LITERAL_private: - { - p3 = LT(1); - match(LITERAL_private); - if ( inputState.guessing==0 ) { - access=p3.getText(); - } - break; - } - case TOKEN_REF: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - idTok=id(); - { - switch ( LA(1)) { - case BANG: - { - match(BANG); - if ( inputState.guessing==0 ) { - ruleAutoGen = false; - } - break; - } - case ACTION: - case OPTIONS: - case ARG_ACTION: - case LITERAL_returns: - case COLON: - case LITERAL_throws: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - - behavior.defineRuleName(idTok, access, ruleAutoGen, doc); - - } - { - switch ( LA(1)) { - case ARG_ACTION: - { - aa = LT(1); - match(ARG_ACTION); - if ( inputState.guessing==0 ) { - behavior.refArgAction(aa); - } - break; - } - case ACTION: - case OPTIONS: - case LITERAL_returns: - case COLON: - case LITERAL_throws: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case LITERAL_returns: - { - match(LITERAL_returns); - rt = LT(1); - match(ARG_ACTION); - if ( inputState.guessing==0 ) { - behavior.refReturnAction(rt); - } - break; - } - case ACTION: - case OPTIONS: - case COLON: - case LITERAL_throws: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case LITERAL_throws: - { - throwsSpec(); - break; - } - case ACTION: - case OPTIONS: - case COLON: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case OPTIONS: - { - ruleOptionsSpec(); - break; - } - case ACTION: - case COLON: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case ACTION: - { - a = LT(1); - match(ACTION); - if ( inputState.guessing==0 ) { - behavior.refInitAction(a); - } - break; - } - case COLON: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - match(COLON); - block(); - match(SEMI); - { - switch ( LA(1)) { - case LITERAL_exception: - { - exceptionGroup(); - break; - } - case EOF: - case ACTION: - case DOC_COMMENT: - case LITERAL_lexclass: - case LITERAL_class: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.endRule(idTok.getText()); - } - } - - public final void throwsSpec() throws RecognitionException, TokenStreamException { - - - String t=null; - Token a,b; - - - match(LITERAL_throws); - a=id(); - if ( inputState.guessing==0 ) { - t=a.getText(); - } - { - _loop84: - do { - if ((LA(1)==COMMA)) { - match(COMMA); - b=id(); - if ( inputState.guessing==0 ) { - t+=","+b.getText(); - } - } - else { - break _loop84; - } - - } while (true); - } - if ( inputState.guessing==0 ) { - behavior.setUserExceptions(t); - } - } - - public final void ruleOptionsSpec() throws RecognitionException, TokenStreamException { - - Token idTok; Token value; - - match(OPTIONS); - { - _loop81: - do { - if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF)) { - idTok=id(); - match(ASSIGN); - value=optionValue(); - if ( inputState.guessing==0 ) { - behavior.setRuleOption(idTok, value); - } - match(SEMI); - } - else { - break _loop81; - } - - } while (true); - } - match(RCURLY); - } - - public final void block() throws RecognitionException, TokenStreamException { - - - if ( inputState.guessing==0 ) { - blockNesting++; - } - alternative(); - { - _loop87: - do { - if ((LA(1)==OR)) { - match(OR); - alternative(); - } - else { - break _loop87; - } - - } while (true); - } - if ( inputState.guessing==0 ) { - blockNesting--; - } - } - - public final void exceptionGroup() throws RecognitionException, TokenStreamException { - - - if ( inputState.guessing==0 ) { - behavior.beginExceptionGroup(); - } - { - int _cnt95=0; - _loop95: - do { - if ((LA(1)==LITERAL_exception)) { - exceptionSpec(); - } - else { - if ( _cnt95>=1 ) { break _loop95; } else {throw new NoViableAltException(LT(1), getFilename());} - } - - _cnt95++; - } while (true); - } - if ( inputState.guessing==0 ) { - behavior.endExceptionGroup(); - } - } - - public final void alternative() throws RecognitionException, TokenStreamException { - - boolean altAutoGen = true; - - { - switch ( LA(1)) { - case BANG: - { - match(BANG); - if ( inputState.guessing==0 ) { - altAutoGen=false; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case LPAREN: - case RPAREN: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.beginAlt(altAutoGen); - } - { - _loop91: - do { - if ((_tokenSet_2.member(LA(1)))) { - element(); - } - else { - break _loop91; - } - - } while (true); - } - { - switch ( LA(1)) { - case LITERAL_exception: - { - exceptionSpecNoLabel(); - break; - } - case SEMI: - case OR: - case RPAREN: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.endAlt(); - } - } - - public final void element() throws RecognitionException, TokenStreamException { - - - elementNoOptionSpec(); - { - switch ( LA(1)) { - case OPEN_ELEMENT_OPTION: - { - elementOptionSpec(); - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case LPAREN: - case RPAREN: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - } - - public final void exceptionSpecNoLabel() throws RecognitionException, TokenStreamException { - - - match(LITERAL_exception); - if ( inputState.guessing==0 ) { - behavior.beginExceptionSpec(null); - } - { - _loop102: - do { - if ((LA(1)==LITERAL_catch)) { - exceptionHandler(); - } - else { - break _loop102; - } - - } while (true); - } - if ( inputState.guessing==0 ) { - behavior.endExceptionSpec(); - } - } - - public final void exceptionSpec() throws RecognitionException, TokenStreamException { - - Token aa = null; - Token labelAction = null; - - match(LITERAL_exception); - { - switch ( LA(1)) { - case ARG_ACTION: - { - aa = LT(1); - match(ARG_ACTION); - if ( inputState.guessing==0 ) { - labelAction = aa; - } - break; - } - case EOF: - case ACTION: - case DOC_COMMENT: - case LITERAL_lexclass: - case LITERAL_class: - case TOKEN_REF: - case LITERAL_protected: - case LITERAL_public: - case LITERAL_private: - case LITERAL_exception: - case LITERAL_catch: - case RULE_REF: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.beginExceptionSpec(labelAction); - } - { - _loop99: - do { - if ((LA(1)==LITERAL_catch)) { - exceptionHandler(); - } - else { - break _loop99; - } - - } while (true); - } - if ( inputState.guessing==0 ) { - behavior.endExceptionSpec(); - } - } - - public final void exceptionHandler() throws RecognitionException, TokenStreamException { - - Token a1 = null; - Token a2 = null; - Token exType; Token exName; - - match(LITERAL_catch); - a1 = LT(1); - match(ARG_ACTION); - a2 = LT(1); - match(ACTION); - if ( inputState.guessing==0 ) { - behavior.refExceptionHandler(a1, a2); - } - } - - public final void elementNoOptionSpec() throws RecognitionException, TokenStreamException { - - Token rr = null; - Token aa = null; - Token tr = null; - Token aa2 = null; - Token r2 = null; - Token aa3 = null; - Token a = null; - Token p = null; - - Token label = null; - Token assignId = null; - Token args = null; - int autoGen = GrammarElement.AUTO_GEN_NONE; - - - switch ( LA(1)) { - case ACTION: - { - a = LT(1); - match(ACTION); - if ( inputState.guessing==0 ) { - behavior.refAction(a); - } - break; - } - case SEMPRED: - { - p = LT(1); - match(SEMPRED); - if ( inputState.guessing==0 ) { - behavior.refSemPred(p); - } - break; - } - case TREE_BEGIN: - { - tree(); - break; - } - default: - if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF) && (LA(2)==ASSIGN)) { - assignId=id(); - match(ASSIGN); - { - if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF) && (LA(2)==COLON)) { - label=id(); - match(COLON); - if ( inputState.guessing==0 ) { - checkForMissingEndRule(label); - } - } - else if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF) && (_tokenSet_3.member(LA(2)))) { - } - else { - throw new NoViableAltException(LT(1), getFilename()); - } - - } - { - switch ( LA(1)) { - case RULE_REF: - { - rr = LT(1); - match(RULE_REF); - { - switch ( LA(1)) { - case ARG_ACTION: - { - aa = LT(1); - match(ARG_ACTION); - if ( inputState.guessing==0 ) { - args=aa; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case BANG: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case BANG: - { - match(BANG); - if ( inputState.guessing==0 ) { - autoGen = GrammarElement.AUTO_GEN_BANG; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.refRule(assignId, rr, label, args, autoGen); - } - break; - } - case TOKEN_REF: - { - tr = LT(1); - match(TOKEN_REF); - { - switch ( LA(1)) { - case ARG_ACTION: - { - aa2 = LT(1); - match(ARG_ACTION); - if ( inputState.guessing==0 ) { - args=aa2; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.refToken(assignId, tr, label, args, false, autoGen, lastInRule()); - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - } - else if ((_tokenSet_4.member(LA(1))) && (_tokenSet_5.member(LA(2)))) { - { - if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF) && (LA(2)==COLON)) { - label=id(); - match(COLON); - if ( inputState.guessing==0 ) { - checkForMissingEndRule(label); - } - } - else if ((_tokenSet_4.member(LA(1))) && (_tokenSet_6.member(LA(2)))) { - } - else { - throw new NoViableAltException(LT(1), getFilename()); - } - - } - { - switch ( LA(1)) { - case RULE_REF: - { - r2 = LT(1); - match(RULE_REF); - { - switch ( LA(1)) { - case ARG_ACTION: - { - aa3 = LT(1); - match(ARG_ACTION); - if ( inputState.guessing==0 ) { - args=aa3; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case BANG: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case BANG: - { - match(BANG); - if ( inputState.guessing==0 ) { - autoGen = GrammarElement.AUTO_GEN_BANG; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.refRule(assignId, r2, label, args, autoGen); - } - break; - } - case NOT_OP: - { - match(NOT_OP); - { - switch ( LA(1)) { - case CHAR_LITERAL: - case TOKEN_REF: - { - notTerminal(label); - break; - } - case LPAREN: - { - ebnf(label,true); - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - break; - } - case LPAREN: - { - ebnf(label,false); - break; - } - default: - if ((LA(1)==STRING_LITERAL||LA(1)==CHAR_LITERAL||LA(1)==TOKEN_REF) && (LA(2)==RANGE)) { - range(label); - } - else if ((_tokenSet_7.member(LA(1))) && (_tokenSet_8.member(LA(2)))) { - terminal(label); - } - else { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - } - else { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - - public final void elementOptionSpec() throws RecognitionException, TokenStreamException { - - - Token o=null, v=null; - - - match(OPEN_ELEMENT_OPTION); - o=id(); - match(ASSIGN); - v=optionValue(); - if ( inputState.guessing==0 ) { - behavior.refElementOption(o,v); - } - { - _loop108: - do { - if ((LA(1)==SEMI)) { - match(SEMI); - o=id(); - match(ASSIGN); - v=optionValue(); - if ( inputState.guessing==0 ) { - behavior.refElementOption(o,v); - } - } - else { - break _loop108; - } - - } while (true); - } - match(CLOSE_ELEMENT_OPTION); - } - - public final void range( - Token label - ) throws RecognitionException, TokenStreamException { - - Token crLeft = null; - Token crRight = null; - Token t = null; - Token u = null; - Token v = null; - Token w = null; - - Token trLeft=null; - Token trRight=null; - int autoGen=GrammarElement.AUTO_GEN_NONE; - - - switch ( LA(1)) { - case CHAR_LITERAL: - { - crLeft = LT(1); - match(CHAR_LITERAL); - match(RANGE); - crRight = LT(1); - match(CHAR_LITERAL); - { - switch ( LA(1)) { - case BANG: - { - match(BANG); - if ( inputState.guessing==0 ) { - autoGen = GrammarElement.AUTO_GEN_BANG; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.refCharRange(crLeft, crRight, label, autoGen, lastInRule()); - } - break; - } - case STRING_LITERAL: - case TOKEN_REF: - { - { - switch ( LA(1)) { - case TOKEN_REF: - { - t = LT(1); - match(TOKEN_REF); - if ( inputState.guessing==0 ) { - trLeft=t; - } - break; - } - case STRING_LITERAL: - { - u = LT(1); - match(STRING_LITERAL); - if ( inputState.guessing==0 ) { - trLeft=u; - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - match(RANGE); - { - switch ( LA(1)) { - case TOKEN_REF: - { - v = LT(1); - match(TOKEN_REF); - if ( inputState.guessing==0 ) { - trRight=v; - } - break; - } - case STRING_LITERAL: - { - w = LT(1); - match(STRING_LITERAL); - if ( inputState.guessing==0 ) { - trRight=w; - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - autoGen=ast_type_spec(); - if ( inputState.guessing==0 ) { - behavior.refTokenRange(trLeft, trRight, label, autoGen, lastInRule()); - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - - public final void terminal( - Token label - ) throws RecognitionException, TokenStreamException { - - Token cl = null; - Token tr = null; - Token aa = null; - Token sl = null; - Token wi = null; - - int autoGen=GrammarElement.AUTO_GEN_NONE; - Token args=null; - - - switch ( LA(1)) { - case CHAR_LITERAL: - { - cl = LT(1); - match(CHAR_LITERAL); - { - switch ( LA(1)) { - case BANG: - { - match(BANG); - if ( inputState.guessing==0 ) { - autoGen = GrammarElement.AUTO_GEN_BANG; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.refCharLiteral(cl, label, false, autoGen, lastInRule()); - } - break; - } - case TOKEN_REF: - { - tr = LT(1); - match(TOKEN_REF); - autoGen=ast_type_spec(); - { - switch ( LA(1)) { - case ARG_ACTION: - { - aa = LT(1); - match(ARG_ACTION); - if ( inputState.guessing==0 ) { - args=aa; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.refToken(null, tr, label, args, false, autoGen, lastInRule()); - } - break; - } - case STRING_LITERAL: - { - sl = LT(1); - match(STRING_LITERAL); - autoGen=ast_type_spec(); - if ( inputState.guessing==0 ) { - behavior.refStringLiteral(sl, label, autoGen, lastInRule()); - } - break; - } - case WILDCARD: - { - wi = LT(1); - match(WILDCARD); - autoGen=ast_type_spec(); - if ( inputState.guessing==0 ) { - behavior.refWildcard(wi, label, autoGen); - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - - public final void notTerminal( - Token label - ) throws RecognitionException, TokenStreamException { - - Token cl = null; - Token tr = null; - int autoGen=GrammarElement.AUTO_GEN_NONE; - - switch ( LA(1)) { - case CHAR_LITERAL: - { - cl = LT(1); - match(CHAR_LITERAL); - { - switch ( LA(1)) { - case BANG: - { - match(BANG); - if ( inputState.guessing==0 ) { - autoGen = GrammarElement.AUTO_GEN_BANG; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.refCharLiteral(cl, label, true, autoGen, lastInRule()); - } - break; - } - case TOKEN_REF: - { - tr = LT(1); - match(TOKEN_REF); - autoGen=ast_type_spec(); - if ( inputState.guessing==0 ) { - behavior.refToken(null, tr, label, null, true, autoGen, lastInRule()); - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - - public final void ebnf( - Token label, boolean not - ) throws RecognitionException, TokenStreamException { - - Token lp = null; - Token aa = null; - Token ab = null; - - lp = LT(1); - match(LPAREN); - if ( inputState.guessing==0 ) { - behavior.beginSubRule(label, lp, not); - } - { - if ((LA(1)==OPTIONS)) { - subruleOptionsSpec(); - { - switch ( LA(1)) { - case ACTION: - { - aa = LT(1); - match(ACTION); - if ( inputState.guessing==0 ) { - behavior.refInitAction(aa); - } - break; - } - case COLON: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - match(COLON); - } - else if ((LA(1)==ACTION) && (LA(2)==COLON)) { - ab = LT(1); - match(ACTION); - if ( inputState.guessing==0 ) { - behavior.refInitAction(ab); - } - match(COLON); - } - else if ((_tokenSet_9.member(LA(1))) && (_tokenSet_10.member(LA(2)))) { - } - else { - throw new NoViableAltException(LT(1), getFilename()); - } - - } - block(); - match(RPAREN); - { - switch ( LA(1)) { - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case BANG: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case QUESTION: - case STAR: - case PLUS: - case WILDCARD: - { - { - switch ( LA(1)) { - case QUESTION: - { - match(QUESTION); - if ( inputState.guessing==0 ) { - behavior.optionalSubRule(); - } - break; - } - case STAR: - { - match(STAR); - if ( inputState.guessing==0 ) { - behavior.zeroOrMoreSubRule(); - } - break; - } - case PLUS: - { - match(PLUS); - if ( inputState.guessing==0 ) { - behavior.oneOrMoreSubRule(); - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case BANG: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case BANG: - { - match(BANG); - if ( inputState.guessing==0 ) { - behavior.noASTSubRule(); - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - break; - } - case IMPLIES: - { - match(IMPLIES); - if ( inputState.guessing==0 ) { - behavior.synPred(); - } - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState.guessing==0 ) { - behavior.endSubRule(); - } - } - - public final void tree() throws RecognitionException, TokenStreamException { - - Token lp = null; - - lp = LT(1); - match(TREE_BEGIN); - if ( inputState.guessing==0 ) { - behavior.beginTree(lp); - } - rootNode(); - if ( inputState.guessing==0 ) { - behavior.beginChildList(); - } - { - int _cnt122=0; - _loop122: - do { - if ((_tokenSet_2.member(LA(1)))) { - element(); - } - else { - if ( _cnt122>=1 ) { break _loop122; } else {throw new NoViableAltException(LT(1), getFilename());} - } - - _cnt122++; - } while (true); - } - if ( inputState.guessing==0 ) { - behavior.endChildList(); - } - match(RPAREN); - if ( inputState.guessing==0 ) { - behavior.endTree(); - } - } - - public final void rootNode() throws RecognitionException, TokenStreamException { - - Token label = null; - - { - if ((LA(1)==TOKEN_REF||LA(1)==RULE_REF) && (LA(2)==COLON)) { - label=id(); - match(COLON); - if ( inputState.guessing==0 ) { - checkForMissingEndRule(label); - } - } - else if ((_tokenSet_7.member(LA(1))) && (_tokenSet_11.member(LA(2)))) { - } - else { - throw new NoViableAltException(LT(1), getFilename()); - } - - } - terminal(label); - } - - public final int ast_type_spec() throws RecognitionException, TokenStreamException { - int autoGen ; - - autoGen = GrammarElement.AUTO_GEN_NONE; - - { - switch ( LA(1)) { - case CARET: - { - match(CARET); - if ( inputState.guessing==0 ) { - autoGen = GrammarElement.AUTO_GEN_CARET; - } - break; - } - case BANG: - { - match(BANG); - if ( inputState.guessing==0 ) { - autoGen = GrammarElement.AUTO_GEN_BANG; - } - break; - } - case STRING_LITERAL: - case ACTION: - case SEMI: - case CHAR_LITERAL: - case OR: - case TOKEN_REF: - case OPEN_ELEMENT_OPTION: - case LPAREN: - case RPAREN: - case ARG_ACTION: - case LITERAL_exception: - case RULE_REF: - case NOT_OP: - case SEMPRED: - case TREE_BEGIN: - case WILDCARD: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - return autoGen ; - } - - - public static final String[] _tokenNames = { - "<0>", - "EOF", - "<2>", - "NULL_TREE_LOOKAHEAD", - "\"tokens\"", - "\"header\"", - "STRING_LITERAL", - "ACTION", - "DOC_COMMENT", - "\"lexclass\"", - "\"class\"", - "\"extends\"", - "\"Lexer\"", - "\"TreeParser\"", - "OPTIONS", - "ASSIGN", - "SEMI", - "RCURLY", - "\"charVocabulary\"", - "CHAR_LITERAL", - "INT", - "OR", - "RANGE", - "TOKENS", - "TOKEN_REF", - "OPEN_ELEMENT_OPTION", - "CLOSE_ELEMENT_OPTION", - "LPAREN", - "RPAREN", - "\"Parser\"", - "\"protected\"", - "\"public\"", - "\"private\"", - "BANG", - "ARG_ACTION", - "\"returns\"", - "COLON", - "\"throws\"", - "COMMA", - "\"exception\"", - "\"catch\"", - "RULE_REF", - "NOT_OP", - "SEMPRED", - "TREE_BEGIN", - "QUESTION", - "STAR", - "PLUS", - "IMPLIES", - "CARET", - "WILDCARD", - "\"options\"", - "WS", - "COMMENT", - "SL_COMMENT", - "ML_COMMENT", - "ESC", - "DIGIT", - "XDIGIT", - "NESTED_ARG_ACTION", - "NESTED_ACTION", - "WS_LOOP", - "INTERNAL_RULE_REF", - "WS_OPT" - }; - - private static final long[] mk_tokenSet_0() { - long[] data = { 2206556225792L, 0L}; - return data; - } - public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - private static final long[] mk_tokenSet_1() { - long[] data = { 2472844214400L, 0L}; - return data; - } - public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1()); - private static final long[] mk_tokenSet_2() { - long[] data = { 1158885407195328L, 0L}; - return data; - } - public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2()); - private static final long[] mk_tokenSet_3() { - long[] data = { 1159461236965568L, 0L}; - return data; - } - public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3()); - private static final long[] mk_tokenSet_4() { - long[] data = { 1132497128128576L, 0L}; - return data; - } - public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4()); - private static final long[] mk_tokenSet_5() { - long[] data = { 1722479914074304L, 0L}; - return data; - } - public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5()); - private static final long[] mk_tokenSet_6() { - long[] data = { 1722411194597568L, 0L}; - return data; - } - public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6()); - private static final long[] mk_tokenSet_7() { - long[] data = { 1125899924144192L, 0L}; - return data; - } - public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7()); - private static final long[] mk_tokenSet_8() { - long[] data = { 1722411190386880L, 0L}; - return data; - } - public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8()); - private static final long[] mk_tokenSet_9() { - long[] data = { 1159444023476416L, 0L}; - return data; - } - public static final BitSet _tokenSet_9 = new BitSet(mk_tokenSet_9()); - private static final long[] mk_tokenSet_10() { - long[] data = { 2251345007067328L, 0L}; - return data; - } - public static final BitSet _tokenSet_10 = new BitSet(mk_tokenSet_10()); - private static final long[] mk_tokenSet_11() { - long[] data = { 1721861130420416L, 0L}; - return data; - } - public static final BitSet _tokenSet_11 = new BitSet(mk_tokenSet_11()); - - } diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRStringBuffer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRStringBuffer.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRStringBuffer.java 2006-08-31 00:34:02.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRStringBuffer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,81 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -// Implementation of a StringBuffer-like object that does not have the -// unfortunate side-effect of creating Strings with very large buffers. - -public class ANTLRStringBuffer { - protected char[] buffer = null; - protected int length = 0; // length and also where to store next char - - - public ANTLRStringBuffer() { - buffer = new char[50]; - } - - public ANTLRStringBuffer(int n) { - buffer = new char[n]; - } - - public final void append(char c) { - // This would normally be an "ensureCapacity" method, but inlined - // here for speed. - if (length >= buffer.length) { - // Compute a new length that is at least double old length - int newSize = buffer.length; - while (length >= newSize) { - newSize *= 2; - } - // Allocate new array and copy buffer - char[] newBuffer = new char[newSize]; - for (int i = 0; i < length; i++) { - newBuffer[i] = buffer[i]; - } - buffer = newBuffer; - } - buffer[length] = c; - length++; - } - - public final void append(String s) { - for (int i = 0; i < s.length(); i++) { - append(s.charAt(i)); - } - } - - public final char charAt(int index) { - return buffer[index]; - } - - final public char[] getBuffer() { - return buffer; - } - - public final int length() { - return length; - } - - public final void setCharAt(int index, char ch) { - buffer[index] = ch; - } - - public final void setLength(int newLength) { - if (newLength < length) { - length = newLength; - } - else { - while (newLength > length) { - append('\0'); - } - } - } - - public final String toString() { - return new String(buffer, 0, length); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRTokdefLexer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRTokdefLexer.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRTokdefLexer.java 2006-02-08 22:30:33.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRTokdefLexer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,664 +0,0 @@ -// $ANTLR : "tokdef.g" -> "ANTLRTokdefLexer.java"$ - package persistence.antlr; -import java.io.InputStream; -import persistence.antlr.TokenStreamException; -import persistence.antlr.TokenStreamIOException; -import persistence.antlr.TokenStreamRecognitionException; -import persistence.antlr.CharStreamException; -import persistence.antlr.CharStreamIOException; -import persistence.antlr.ANTLRException; -import java.io.Reader; -import java.util.Hashtable; -import persistence.antlr.CharScanner; -import persistence.antlr.InputBuffer; -import persistence.antlr.ByteBuffer; -import persistence.antlr.CharBuffer; -import persistence.antlr.Token; -import persistence.antlr.CommonToken; -import persistence.antlr.RecognitionException; -import persistence.antlr.NoViableAltForCharException; -import persistence.antlr.MismatchedCharException; -import persistence.antlr.TokenStream; -import persistence.antlr.ANTLRHashString; -import persistence.antlr.LexerSharedInputState; -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.SemanticException; - -public class ANTLRTokdefLexer extends persistence.antlr.CharScanner implements ANTLRTokdefParserTokenTypes, TokenStream - { -public ANTLRTokdefLexer(InputStream in) { - this(new ByteBuffer(in)); -} -public ANTLRTokdefLexer(Reader in) { - this(new CharBuffer(in)); -} -public ANTLRTokdefLexer(InputBuffer ib) { - this(new LexerSharedInputState(ib)); -} -public ANTLRTokdefLexer(LexerSharedInputState state) { - super(state); - caseSensitiveLiterals = true; - setCaseSensitive(true); - literals = new Hashtable(); -} - -public Token nextToken() throws TokenStreamException { - Token theRetToken=null; -tryAgain: - for (;;) { - Token _token = null; - int _ttype = Token.INVALID_TYPE; - resetText(); - try { // for char stream error handling - try { // for lexical error handling - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(true); - theRetToken=_returnToken; - break; - } - case '(': - { - mLPAREN(true); - theRetToken=_returnToken; - break; - } - case ')': - { - mRPAREN(true); - theRetToken=_returnToken; - break; - } - case '=': - { - mASSIGN(true); - theRetToken=_returnToken; - break; - } - case '"': - { - mSTRING(true); - theRetToken=_returnToken; - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case 'a': case 'b': - case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': - case 'k': case 'l': case 'm': case 'n': - case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': - case 'w': case 'x': case 'y': case 'z': - { - mID(true); - theRetToken=_returnToken; - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - mINT(true); - theRetToken=_returnToken; - break; - } - default: - if ((LA(1)=='/') && (LA(2)=='/')) { - mSL_COMMENT(true); - theRetToken=_returnToken; - } - else if ((LA(1)=='/') && (LA(2)=='*')) { - mML_COMMENT(true); - theRetToken=_returnToken; - } - else { - if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);} - else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - } - if ( _returnToken==null ) continue tryAgain; // found SKIP token - _ttype = _returnToken.getType(); - _returnToken.setType(_ttype); - return _returnToken; - } - catch (RecognitionException e) { - throw new TokenStreamRecognitionException(e); - } - } - catch (CharStreamException cse) { - if ( cse instanceof CharStreamIOException ) { - throw new TokenStreamIOException(((CharStreamIOException)cse).io); - } - else { - throw new TokenStreamException(cse.getMessage()); - } - } - } -} - - public final void mWS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = WS; - int _saveIndex; - - { - switch ( LA(1)) { - case ' ': - { - match(' '); - break; - } - case '\t': - { - match('\t'); - break; - } - case '\r': - { - match('\r'); - { - if ((LA(1)=='\n')) { - match('\n'); - } - else { - } - - } - newline(); - break; - } - case '\n': - { - match('\n'); - newline(); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _ttype = Token.SKIP; - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mSL_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = SL_COMMENT; - int _saveIndex; - - match("//"); - { - _loop234: - do { - if ((_tokenSet_0.member(LA(1)))) { - { - match(_tokenSet_0); - } - } - else { - break _loop234; - } - - } while (true); - } - { - switch ( LA(1)) { - case '\n': - { - match('\n'); - break; - } - case '\r': - { - match('\r'); - { - if ((LA(1)=='\n')) { - match('\n'); - } - else { - } - - } - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - _ttype = Token.SKIP; newline(); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mML_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ML_COMMENT; - int _saveIndex; - - match("/*"); - { - _loop239: - do { - if ((LA(1)=='*') && (_tokenSet_1.member(LA(2)))) { - match('*'); - matchNot('/'); - } - else if ((LA(1)=='\n')) { - match('\n'); - newline(); - } - else if ((_tokenSet_2.member(LA(1)))) { - matchNot('*'); - } - else { - break _loop239; - } - - } while (true); - } - match("*/"); - _ttype = Token.SKIP; - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mLPAREN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = LPAREN; - int _saveIndex; - - match('('); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mRPAREN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = RPAREN; - int _saveIndex; - - match(')'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mASSIGN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ASSIGN; - int _saveIndex; - - match('='); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mSTRING(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = STRING; - int _saveIndex; - - match('"'); - { - _loop245: - do { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_3.member(LA(1)))) { - matchNot('"'); - } - else { - break _loop245; - } - - } while (true); - } - match('"'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mESC(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ESC; - int _saveIndex; - - match('\\'); - { - switch ( LA(1)) { - case 'n': - { - match('n'); - break; - } - case 'r': - { - match('r'); - break; - } - case 't': - { - match('t'); - break; - } - case 'b': - { - match('b'); - break; - } - case 'f': - { - match('f'); - break; - } - case '"': - { - match('"'); - break; - } - case '\'': - { - match('\''); - break; - } - case '\\': - { - match('\\'); - break; - } - case '0': case '1': case '2': case '3': - { - { - matchRange('0','3'); - } - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mDIGIT(false); - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mDIGIT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - case '4': case '5': case '6': case '7': - { - { - matchRange('4','7'); - } - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mDIGIT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - case 'u': - { - match('u'); - mXDIGIT(false); - mXDIGIT(false); - mXDIGIT(false); - mXDIGIT(false); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = DIGIT; - int _saveIndex; - - matchRange('0','9'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mXDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = XDIGIT; - int _saveIndex; - - switch ( LA(1)) { - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - matchRange('0','9'); - break; - } - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': - { - matchRange('a','f'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': - { - matchRange('A','F'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mID(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ID; - int _saveIndex; - - { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop258: - do { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '_': - { - match('_'); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - matchRange('0','9'); - break; - } - default: - { - break _loop258; - } - } - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mINT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = INT; - int _saveIndex; - - { - int _cnt261=0; - _loop261: - do { - if (((LA(1) >= '0' && LA(1) <= '9'))) { - mDIGIT(false); - } - else { - if ( _cnt261>=1 ) { break _loop261; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt261++; - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - - private static final long[] mk_tokenSet_0() { - long[] data = new long[8]; - data[0]=-9224L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - private static final long[] mk_tokenSet_1() { - long[] data = new long[8]; - data[0]=-140737488355336L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1()); - private static final long[] mk_tokenSet_2() { - long[] data = new long[8]; - data[0]=-4398046512136L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2()); - private static final long[] mk_tokenSet_3() { - long[] data = new long[8]; - data[0]=-17179869192L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3()); - - } diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRTokdefParser.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRTokdefParser.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRTokdefParser.java 2006-02-08 22:30:34.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRTokdefParser.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,252 +0,0 @@ -// $ANTLR : "tokdef.g" -> "ANTLRTokdefParser.java"$ - package persistence.antlr; -import persistence.antlr.TokenBuffer; -import persistence.antlr.TokenStreamException; -import persistence.antlr.TokenStreamIOException; -import persistence.antlr.ANTLRException; -import persistence.antlr.LLkParser; -import persistence.antlr.Token; -import persistence.antlr.TokenStream; -import persistence.antlr.RecognitionException; -import persistence.antlr.NoViableAltException; -import persistence.antlr.MismatchedTokenException; -import persistence.antlr.SemanticException; -import persistence.antlr.ParserSharedInputState; -import persistence.antlr.collections.impl.BitSet; - -/** Simple lexer/parser for reading token definition files - in support of the import/export vocab option for grammars. - */ -public class ANTLRTokdefParser extends persistence.antlr.LLkParser implements ANTLRTokdefParserTokenTypes - { - - // This chunk of error reporting code provided by Brian Smith - - private persistence.antlr.Tool antlrTool; - - /** In order to make it so existing subclasses don't break, we won't require - * that the persistence.antlr.Tool instance be passed as a constructor element. Instead, - * the persistence.antlr.Tool instance should register itself via {@link #initTool(antlr.Tool)} - * @throws IllegalStateException if a tool has already been registered - * @since 2.7.2 - */ - public void setTool(persistence.antlr.Tool tool) { - if (antlrTool == null) { - antlrTool = tool; - } - else { - throw new IllegalStateException("persistence.antlr.Tool already registered"); - } - } - - /** @since 2.7.2 */ - protected persistence.antlr.Tool getTool() { - return antlrTool; - } - - /** Delegates the error message to the tool if any was registered via - * {@link #initTool(persistence.antlr.Tool)} - * @since 2.7.2 - */ - public void reportError(String s) { - if (getTool() != null) { - getTool().error(s, getFilename(), -1, -1); - } - else { - super.reportError(s); - } - } - - /** Delegates the error message to the tool if any was registered via - * {@link #initTool(persistence.antlr.Tool)} - * @since 2.7.2 - */ - public void reportError(RecognitionException e) { - if (getTool() != null) { - getTool().error(e.getErrorMessage(), e.getFilename(), e.getLine(), e.getColumn()); - } - else { - super.reportError(e); - } - } - - /** Delegates the warning message to the tool if any was registered via - * {@link #initTool(persistence.antlr.Tool)} - * @since 2.7.2 - */ - public void reportWarning(String s) { - if (getTool() != null) { - getTool().warning(s, getFilename(), -1, -1); - } - else { - super.reportWarning(s); - } - } - -protected ANTLRTokdefParser(TokenBuffer tokenBuf, int k) { - super(tokenBuf,k); - tokenNames = _tokenNames; -} - -public ANTLRTokdefParser(TokenBuffer tokenBuf) { - this(tokenBuf,3); -} - -protected ANTLRTokdefParser(TokenStream lexer, int k) { - super(lexer,k); - tokenNames = _tokenNames; -} - -public ANTLRTokdefParser(TokenStream lexer) { - this(lexer,3); -} - -public ANTLRTokdefParser(ParserSharedInputState state) { - super(state,3); - tokenNames = _tokenNames; -} - - public final void file( - ImportVocabTokenManager tm - ) throws RecognitionException, TokenStreamException { - - Token name = null; - - try { // for error handling - name = LT(1); - match(ID); - { - _loop225: - do { - if ((LA(1)==ID||LA(1)==STRING)) { - line(tm); - } - else { - break _loop225; - } - - } while (true); - } - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_0); - } - } - - public final void line( - ImportVocabTokenManager tm - ) throws RecognitionException, TokenStreamException { - - Token s1 = null; - Token lab = null; - Token s2 = null; - Token id = null; - Token para = null; - Token id2 = null; - Token i = null; - Token t=null; Token s=null; - - try { // for error handling - { - if ((LA(1)==STRING)) { - s1 = LT(1); - match(STRING); - s = s1; - } - else if ((LA(1)==ID) && (LA(2)==ASSIGN) && (LA(3)==STRING)) { - lab = LT(1); - match(ID); - t = lab; - match(ASSIGN); - s2 = LT(1); - match(STRING); - s = s2; - } - else if ((LA(1)==ID) && (LA(2)==LPAREN)) { - id = LT(1); - match(ID); - t=id; - match(LPAREN); - para = LT(1); - match(STRING); - match(RPAREN); - } - else if ((LA(1)==ID) && (LA(2)==ASSIGN) && (LA(3)==INT)) { - id2 = LT(1); - match(ID); - t=id2; - } - else { - throw new NoViableAltException(LT(1), getFilename()); - } - - } - match(ASSIGN); - i = LT(1); - match(INT); - - Integer value = Integer.valueOf(i.getText()); - // if literal found, define as a string literal - if ( s!=null ) { - tm.define(s.getText(), value.intValue()); - // if label, then label the string and map label to token symbol also - if ( t!=null ) { - StringLiteralSymbol sl = - (StringLiteralSymbol) tm.getTokenSymbol(s.getText()); - sl.setLabel(t.getText()); - tm.mapToTokenSymbol(t.getText(), sl); - } - } - // define token (not a literal) - else if ( t!=null ) { - tm.define(t.getText(), value.intValue()); - if ( para!=null ) { - TokenSymbol ts = tm.getTokenSymbol(t.getText()); - ts.setParaphrase( - para.getText() - ); - } - } - - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_1); - } - } - - - public static final String[] _tokenNames = { - "<0>", - "EOF", - "<2>", - "NULL_TREE_LOOKAHEAD", - "ID", - "STRING", - "ASSIGN", - "LPAREN", - "RPAREN", - "INT", - "WS", - "SL_COMMENT", - "ML_COMMENT", - "ESC", - "DIGIT", - "XDIGIT" - }; - - private static final long[] mk_tokenSet_0() { - long[] data = { 2L, 0L}; - return data; - } - public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - private static final long[] mk_tokenSet_1() { - long[] data = { 50L, 0L}; - return data; - } - public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1()); - - } diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRTokdefParserTokenTypes.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRTokdefParserTokenTypes.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRTokdefParserTokenTypes.java 2006-02-08 22:30:34.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRTokdefParserTokenTypes.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,18 +0,0 @@ -// $ANTLR : "tokdef.g" -> "ANTLRTokdefParser.java"$ - package persistence.antlr; -public interface ANTLRTokdefParserTokenTypes { - int EOF = 1; - int NULL_TREE_LOOKAHEAD = 3; - int ID = 4; - int STRING = 5; - int ASSIGN = 6; - int LPAREN = 7; - int RPAREN = 8; - int INT = 9; - int WS = 10; - int SL_COMMENT = 11; - int ML_COMMENT = 12; - int ESC = 13; - int DIGIT = 14; - int XDIGIT = 15; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ANTLRTokenTypes.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRTokenTypes.java --- glassfish/entity-persistence/src/java/persistence/antlr/ANTLRTokenTypes.java 2006-02-08 22:30:34.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ANTLRTokenTypes.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,68 +0,0 @@ -// $ANTLR : "antlr.g" -> "ANTLRLexer.java"$ - -package persistence.antlr; - -public interface ANTLRTokenTypes { - int EOF = 1; - int NULL_TREE_LOOKAHEAD = 3; - int LITERAL_tokens = 4; - int LITERAL_header = 5; - int STRING_LITERAL = 6; - int ACTION = 7; - int DOC_COMMENT = 8; - int LITERAL_lexclass = 9; - int LITERAL_class = 10; - int LITERAL_extends = 11; - int LITERAL_Lexer = 12; - int LITERAL_TreeParser = 13; - int OPTIONS = 14; - int ASSIGN = 15; - int SEMI = 16; - int RCURLY = 17; - int LITERAL_charVocabulary = 18; - int CHAR_LITERAL = 19; - int INT = 20; - int OR = 21; - int RANGE = 22; - int TOKENS = 23; - int TOKEN_REF = 24; - int OPEN_ELEMENT_OPTION = 25; - int CLOSE_ELEMENT_OPTION = 26; - int LPAREN = 27; - int RPAREN = 28; - int LITERAL_Parser = 29; - int LITERAL_protected = 30; - int LITERAL_public = 31; - int LITERAL_private = 32; - int BANG = 33; - int ARG_ACTION = 34; - int LITERAL_returns = 35; - int COLON = 36; - int LITERAL_throws = 37; - int COMMA = 38; - int LITERAL_exception = 39; - int LITERAL_catch = 40; - int RULE_REF = 41; - int NOT_OP = 42; - int SEMPRED = 43; - int TREE_BEGIN = 44; - int QUESTION = 45; - int STAR = 46; - int PLUS = 47; - int IMPLIES = 48; - int CARET = 49; - int WILDCARD = 50; - int LITERAL_options = 51; - int WS = 52; - int COMMENT = 53; - int SL_COMMENT = 54; - int ML_COMMENT = 55; - int ESC = 56; - int DIGIT = 57; - int XDIGIT = 58; - int NESTED_ARG_ACTION = 59; - int NESTED_ACTION = 60; - int WS_LOOP = 61; - int INTERNAL_RULE_REF = 62; - int WS_OPT = 63; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ASTFactory.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ASTFactory.java --- glassfish/entity-persistence/src/java/persistence/antlr/ASTFactory.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ASTFactory.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,402 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.AST; -import persistence.antlr.collections.impl.ASTArray; - -import java.util.Hashtable; -import java.lang.reflect.Constructor; - -/** AST Support code shared by TreeParser and Parser. - * We use delegation to share code (and have only one - * bit of code to maintain) rather than subclassing - * or superclassing (forces AST support code to be - * loaded even when you don't want to do AST stuff). - * - * Typically, setASTNodeType is used to specify the - * homogeneous type of node to create, but you can override - * create to make heterogeneous nodes etc... - */ -public class ASTFactory { - /** Name of AST class to create during tree construction. - * Null implies that the create method should create - * a default AST type such as CommonAST. This is for - * homogeneous nodes. - */ - protected String theASTNodeType = null; - protected Class theASTNodeTypeClass = null; - - /** How to specify the classname to create for a particular - * token type. Note that ANTLR allows you to say, for example, - * - tokens { - PLUS<AST=PLUSNode>; - ... - } - * - * and it tracks everything statically. #[PLUS] will make you - * a PLUSNode w/o use of this table. - * - * For tokens that ANTLR cannot track statically like #[i], - * you can use this table to map PLUS (Integer) -> PLUSNode (Class) - * etc... ANTLR sets the class map from the tokens {...} section - * via the ASTFactory(Hashtable) ctor in persistence.antlr.Parser. - */ - protected Hashtable tokenTypeToASTClassMap = null; - - public ASTFactory() { - } - - /** Create factory with a specific mapping from token type - * to Java AST node type. Your subclasses of ASTFactory - * can override and reuse the map stuff. - */ - public ASTFactory(Hashtable tokenTypeToClassMap) { - setTokenTypeToASTClassMap(tokenTypeToClassMap); - } - - /** Specify an "override" for the Java AST object created for a - * specific token. It is provided as a convenience so - * you can specify node types dynamically. ANTLR sets - * the token type mapping automatically from the tokens{...} - * section, but you can change that mapping with this method. - * ANTLR does it's best to statically determine the node - * type for generating parsers, but it cannot deal with - * dynamic values like #[LT(1)]. In this case, it relies - * on the mapping. Beware differences in the tokens{...} - * section and what you set via this method. Make sure - * they are the same. - * - * Set className to null to remove the mapping. - * - * @since 2.7.2 - */ - public void setTokenTypeASTNodeType(int tokenType, String className) - throws IllegalArgumentException - { - if ( tokenTypeToASTClassMap==null ) { - tokenTypeToASTClassMap = new Hashtable(); - } - if ( className==null ) { - tokenTypeToASTClassMap.remove(new Integer(tokenType)); - return; - } - Class c = null; - try { - c = Class.forName(className); - tokenTypeToASTClassMap.put(new Integer(tokenType), c); - } - catch (Exception e) { - throw new IllegalArgumentException("Invalid class, "+className); - } - } - - /** For a given token type, what is the AST node object type to create - * for it? - * @since 2.7.2 - */ - public Class getASTNodeType(int tokenType) { - // try node specific class - if ( tokenTypeToASTClassMap!=null ) { - Class c = (Class)tokenTypeToASTClassMap.get(new Integer(tokenType)); - if ( c!=null ) { - return c; - } - } - - // try a global specified class - if (theASTNodeTypeClass != null) { - return theASTNodeTypeClass; - } - - // default to the common type - return CommonAST.class; - } - - /** Add a child to the current AST */ - public void addASTChild(ASTPair currentAST, AST child) { - if (child != null) { - if (currentAST.root == null) { - // Make new child the current root - currentAST.root = child; - } - else { - if (currentAST.child == null) { - // Add new child to current root - currentAST.root.setFirstChild(child); - } - else { - currentAST.child.setNextSibling(child); - } - } - // Make new child the current child - currentAST.child = child; - currentAST.advanceChildToEnd(); - } - } - - /** Create a new empty AST node; if the user did not specify - * an AST node type, then create a default one: CommonAST. - */ - public AST create() { - return create(Token.INVALID_TYPE); - } - - public AST create(int type) { - Class c = getASTNodeType(type); - AST t = create(c); - if ( t!=null ) { - t.initialize(type, ""); - } - return t; - } - - public AST create(int type, String txt) { - AST t = create(type); - if ( t!=null ) { - t.initialize(type, txt); - } - return t; - } - - /** Create an AST node with the token type and text passed in, but - * with a specific Java object type. Typically called when you - * say @[PLUS,"+",PLUSNode] in an antlr action. - * @since 2.7.2 - */ - public AST create(int type, String txt, String className) { - AST t = create(className); - if ( t!=null ) { - t.initialize(type, txt); - } - return t; - } - - /** Create a new empty AST node; if the user did not specify - * an AST node type, then create a default one: CommonAST. - */ - public AST create(AST tr) { - if (tr == null) return null; // create(null) == null - AST t = create(tr.getType()); - if ( t!=null ) { - t.initialize(tr); - } - return t; - } - - public AST create(Token tok) { - AST t = create(tok.getType()); - if ( t!=null ) { - t.initialize(tok); - } - return t; - } - - /** ANTLR generates reference to this when you reference a token - * that has a specified heterogeneous AST node type. This is - * also a special case node creation routine for backward - * compatibility. Before, ANTLR generated "new T(tokenObject)" - * and so I must call the appropriate constructor not T(). - * - * @since 2.7.2 - */ - public AST create(Token tok, String className) { - AST t = createUsingCtor(tok,className); - return t; - } - - /** - * @since 2.7.2 - */ - public AST create(String className) { - Class c = null; - try { - c = Class.forName(className); - } - catch (Exception e) { - throw new IllegalArgumentException("Invalid class, "+className); - } - return create(c); - } - - /** - * @since 2.7.2 - */ - protected AST createUsingCtor(Token token, String className) { - Class c = null; - AST t = null; - try { - c = Class.forName(className); - Class[] tokenArgType = new Class[] { persistence.antlr.Token.class }; - try { - Constructor ctor = c.getConstructor(tokenArgType); - t = (AST)ctor.newInstance(new Object[]{token}); // make a new one - } - catch (NoSuchMethodException e){ - // just do the regular thing if you can't find the ctor - // Your AST must have default ctor to use this. - t = create(c); - if ( t!=null ) { - t.initialize(token); - } - } - } - catch (Exception e) { - throw new IllegalArgumentException("Invalid class or can't make instance, "+className); - } - return t; - } - - /** - * @since 2.7.2 - */ - protected AST create(Class c) { - AST t = null; - try { - t = (AST)c.newInstance(); // make a new one - } - catch (Exception e) { - error("Can't create AST Node " + c.getName()); - return null; - } - return t; - } - - /** Copy a single node with same Java AST objec type. - * Ignore the tokenType->Class mapping since you know - * the type of the node, t.getClass(), and doing a dup. - * - * clone() is not used because we want all AST creation - * to go thru the factory so creation can be - * tracked. Returns null if t is null. - */ - public AST dup(AST t) { - if ( t==null ) { - return null; - } - AST dup_t = create(t.getClass()); - dup_t.initialize(t); - return dup_t; - } - - /** Duplicate tree including siblings of root. */ - public AST dupList(AST t) { - AST result = dupTree(t); // if t == null, then result==null - AST nt = result; - while (t != null) { // for each sibling of the root - t = t.getNextSibling(); - nt.setNextSibling(dupTree(t)); // dup each subtree, building new tree - nt = nt.getNextSibling(); - } - return result; - } - - /**Duplicate a tree, assuming this is a root node of a tree-- - * duplicate that node and what's below; ignore siblings of root node. - */ - public AST dupTree(AST t) { - AST result = dup(t); // make copy of root - // copy all children of root. - if (t != null) { - result.setFirstChild(dupList(t.getFirstChild())); - } - return result; - } - - /** Make a tree from a list of nodes. The first element in the - * array is the root. If the root is null, then the tree is - * a simple list not a tree. Handles null children nodes correctly. - * For example, build(a, b, null, c) yields tree (a b c). build(null,a,b) - * yields tree (nil a b). - */ - public AST make(AST[] nodes) { - if (nodes == null || nodes.length == 0) return null; - AST root = nodes[0]; - AST tail = null; - if (root != null) { - root.setFirstChild(null); // don't leave any old pointers set - } - // link in children; - for (int i = 1; i < nodes.length; i++) { - if (nodes[i] == null) continue; // ignore null nodes - if (root == null) { - // Set the root and set it up for a flat list - root = tail = nodes[i]; - } - else if (tail == null) { - root.setFirstChild(nodes[i]); - tail = root.getFirstChild(); - } - else { - tail.setNextSibling(nodes[i]); - tail = tail.getNextSibling(); - } - // Chase tail to last sibling - while (tail.getNextSibling() != null) { - tail = tail.getNextSibling(); - } - } - return root; - } - - /** Make a tree from a list of nodes, where the nodes are contained - * in an ASTArray object - */ - public AST make(ASTArray nodes) { - return make(nodes.array); - } - - /** Make an AST the root of current AST */ - public void makeASTRoot(ASTPair currentAST, AST root) { - if (root != null) { - // Add the current root as a child of new root - root.addChild(currentAST.root); - // The new current child is the last sibling of the old root - currentAST.child = currentAST.root; - currentAST.advanceChildToEnd(); - // Set the new root - currentAST.root = root; - } - } - - public void setASTNodeClass(String t) { - theASTNodeType = t; - try { - theASTNodeTypeClass = Class.forName(t); // get class def - } - catch (Exception e) { - // either class not found, - // class is interface/abstract, or - // class or initializer is not accessible. - error("Can't find/access AST Node type" + t); - } - } - - /** Specify the type of node to create during tree building. - * @deprecated since 2.7.1 - */ - public void setASTNodeType(String t) { - setASTNodeClass(t); - } - - public Hashtable getTokenTypeToASTClassMap() { - return tokenTypeToASTClassMap; - } - - public void setTokenTypeToASTClassMap(Hashtable tokenTypeToClassMap) { - this.tokenTypeToASTClassMap = tokenTypeToClassMap; - } - - /** To change where error messages go, can subclass/override this method - * and then setASTFactory in Parser and TreeParser. This method removes - * a prior dependency on class persistence.antlr.Tool. - */ - public void error(String e) { - System.err.println(e); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ASTIterator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ASTIterator.java --- glassfish/entity-persistence/src/java/persistence/antlr/ASTIterator.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ASTIterator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,74 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.AST; - -public class ASTIterator { - protected AST cursor = null; - protected AST original = null; - - - public ASTIterator(AST t) { - original = cursor = t; - } - - /** Is 'sub' a subtree of 't' beginning at the root? */ - public boolean isSubtree(AST t, AST sub) { - AST sibling; - - // the empty tree is always a subset of any tree. - if (sub == null) { - return true; - } - - // if the tree is empty, return true if the subtree template is too. - if (t == null) { - if (sub != null) return false; - return true; - } - - // Otherwise, start walking sibling lists. First mismatch, return false. - for (sibling = t; - sibling != null && sub != null; - sibling = sibling.getNextSibling(), sub = sub.getNextSibling()) { - // as a quick optimization, check roots first. - if (sibling.getType() != sub.getType()) return false; - // if roots match, do full match test on children. - if (sibling.getFirstChild() != null) { - if (!isSubtree(sibling.getFirstChild(), sub.getFirstChild())) return false; - } - } - return true; - } - - /** Find the next subtree with structure and token types equal to - * those of 'template'. - */ - public AST next(AST template) { - AST t = null; - AST sibling = null; - - if (cursor == null) { // do nothing if no tree to work on - return null; - } - - // Start walking sibling list looking for subtree matches. - for (; cursor != null; cursor = cursor.getNextSibling()) { - // as a quick optimization, check roots first. - if (cursor.getType() == template.getType()) { - // if roots match, do full match test on children. - if (cursor.getFirstChild() != null) { - if (isSubtree(cursor.getFirstChild(), template.getFirstChild())) { - return cursor; - } - } - } - } - return t; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ASTNULLType.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ASTNULLType.java --- glassfish/entity-persistence/src/java/persistence/antlr/ASTNULLType.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ASTNULLType.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,106 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.AST; -import persistence.antlr.collections.ASTEnumeration; -import persistence.antlr.Token; - -/** There is only one instance of this class **/ -public class ASTNULLType implements AST { - public void addChild(AST c) { - } - - public boolean equals(AST t) { - return false; - } - - public boolean equalsList(AST t) { - return false; - } - - public boolean equalsListPartial(AST t) { - return false; - } - - public boolean equalsTree(AST t) { - return false; - } - - public boolean equalsTreePartial(AST t) { - return false; - } - - public ASTEnumeration findAll(AST tree) { - return null; - } - - public ASTEnumeration findAllPartial(AST subtree) { - return null; - } - - public AST getFirstChild() { - return this; - } - - public AST getNextSibling() { - return this; - } - - public String getText() { - return "<ASTNULL>"; - } - - public int getType() { - return Token.NULL_TREE_LOOKAHEAD; - } - - public int getLine() { - return 0; - } - - public int getColumn() { - return 0; - } - - public int getNumberOfChildren() { - return 0; - } - - public void initialize(int t, String txt) { - } - - public void initialize(AST t) { - } - - public void initialize(Token t) { - } - - public void setFirstChild(AST c) { - } - - public void setNextSibling(AST n) { - } - - public void setText(String text) { - } - - public void setType(int ttype) { - } - - public String toString() { - return getText(); - } - - public String toStringList() { - return getText(); - } - - public String toStringTree() { - return getText(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ASTPair.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ASTPair.java --- glassfish/entity-persistence/src/java/persistence/antlr/ASTPair.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ASTPair.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,42 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.AST; - -/** ASTPair: utility class used for manipulating a pair of ASTs - * representing the current AST root and current AST sibling. - * This exists to compensate for the lack of pointers or 'var' - * arguments in Java. - */ -public class ASTPair { - public AST root; // current root of tree - public AST child; // current child to which siblings are added - - /** Make sure that child is the last sibling */ - public final void advanceChildToEnd() { - if (child != null) { - while (child.getNextSibling() != null) { - child = child.getNextSibling(); - } - } - } - - /** Copy an ASTPair. Don't call it clone() because we want type-safety */ - public ASTPair copy() { - ASTPair tmp = new ASTPair(); - tmp.root = root; - tmp.child = child; - return tmp; - } - - public String toString() { - String r = root == null ? "null" : root.getText(); - String c = child == null ? "null" : child.getText(); - return "[" + r + "," + c + "]"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ASTVisitor.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ASTVisitor.java --- glassfish/entity-persistence/src/java/persistence/antlr/ASTVisitor.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ASTVisitor.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.AST; - -public interface ASTVisitor { - public void visit(AST node); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/BaseAST.java glassfish-gil/entity-persistence/src/java/persistence/antlr/BaseAST.java --- glassfish/entity-persistence/src/java/persistence/antlr/BaseAST.java 2006-08-31 00:34:03.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/BaseAST.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,484 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.AST; -import persistence.antlr.collections.ASTEnumeration; -import persistence.antlr.collections.impl.ASTEnumerator; -import persistence.antlr.collections.impl.Vector; - -import java.io.Serializable; -import java.io.IOException; -import java.io.Writer; - -/** - * A Child-Sibling Tree. - * - * A tree with PLUS at the root and with two children 3 and 4 is - * structured as: - * - * PLUS - * | - * 3 -- 4 - * - * and can be specified easily in LISP notation as - * - * (PLUS 3 4) - * - * where every '(' starts a new subtree. - * - * These trees are particular useful for translators because of - * the flexibility of the children lists. They are also very easy - * to walk automatically, whereas trees with specific children - * reference fields can't easily be walked automatically. - * - * This class contains the basic support for an AST. - * Most people will create ASTs that are subclasses of - * BaseAST or of CommonAST. - */ -public abstract class BaseAST implements AST, Serializable { - protected BaseAST down; - protected BaseAST right; - - private static boolean verboseStringConversion = false; - private static String[] tokenNames = null; - - /**Add a node to the end of the child list for this node */ - public void addChild(AST node) { - if (node == null) return; - BaseAST t = this.down; - if (t != null) { - while (t.right != null) { - t = t.right; - } - t.right = (BaseAST)node; - } - else { - this.down = (BaseAST)node; - } - } - - /** How many children does this node have? */ - public int getNumberOfChildren() { - BaseAST t = this.down; - int n = 0; - if (t != null) { - n = 1; - while (t.right != null) { - t = t.right; - n++; - } - return n; - } - return n; - } - - private void doWorkForFindAll(Vector v, AST target, boolean partialMatch) { - AST sibling; - - // Start walking sibling lists, looking for matches. - siblingWalk: - for (sibling = this; - sibling != null; - sibling = sibling.getNextSibling()) { - if ((partialMatch && sibling.equalsTreePartial(target)) || - (!partialMatch && sibling.equalsTree(target))) { - v.appendElement(sibling); - } - // regardless of match or not, check any children for matches - if (sibling.getFirstChild() != null) { - ((BaseAST)sibling.getFirstChild()).doWorkForFindAll(v, target, partialMatch); - } - } - } - - /** Is node t equal to this in terms of token type and text? */ - public boolean equals(AST t) { - if (t == null) return false; - return this.getText().equals(t.getText()) && - this.getType() == t.getType(); - } - - /** Is t an exact structural and equals() match of this tree. The - * 'this' reference is considered the start of a sibling list. - */ - public boolean equalsList(AST t) { - AST sibling; - - // the empty tree is not a match of any non-null tree. - if (t == null) { - return false; - } - - // Otherwise, start walking sibling lists. First mismatch, return false. - for (sibling = this; - sibling != null && t != null; - sibling = sibling.getNextSibling(), t = t.getNextSibling()) - { - // as a quick optimization, check roots first. - if (!sibling.equals(t)) { - return false; - } - // if roots match, do full list match test on children. - if (sibling.getFirstChild() != null) { - if (!sibling.getFirstChild().equalsList(t.getFirstChild())) { - return false; - } - } - // sibling has no kids, make sure t doesn't either - else if (t.getFirstChild() != null) { - return false; - } - } - if (sibling == null && t == null) { - return true; - } - // one sibling list has more than the other - return false; - } - - /** Is 'sub' a subtree of this list? - * The siblings of the root are NOT ignored. - */ - public boolean equalsListPartial(AST sub) { - AST sibling; - - // the empty tree is always a subset of any tree. - if (sub == null) { - return true; - } - - // Otherwise, start walking sibling lists. First mismatch, return false. - for (sibling = this; - sibling != null && sub != null; - sibling = sibling.getNextSibling(), sub = sub.getNextSibling()) { - // as a quick optimization, check roots first. - if (!sibling.equals(sub)) return false; - // if roots match, do partial list match test on children. - if (sibling.getFirstChild() != null) { - if (!sibling.getFirstChild().equalsListPartial(sub.getFirstChild())) return false; - } - } - if (sibling == null && sub != null) { - // nothing left to match in this tree, but subtree has more - return false; - } - // either both are null or sibling has more, but subtree doesn't - return true; - } - - /** Is tree rooted at 'this' equal to 't'? The siblings - * of 'this' are ignored. - */ - public boolean equalsTree(AST t) { - // check roots first. - if (!this.equals(t)) return false; - // if roots match, do full list match test on children. - if (this.getFirstChild() != null) { - if (!this.getFirstChild().equalsList(t.getFirstChild())) return false; - } - // sibling has no kids, make sure t doesn't either - else if (t.getFirstChild() != null) { - return false; - } - return true; - } - - /** Is 't' a subtree of the tree rooted at 'this'? The siblings - * of 'this' are ignored. - */ - public boolean equalsTreePartial(AST sub) { - // the empty tree is always a subset of any tree. - if (sub == null) { - return true; - } - - // check roots first. - if (!this.equals(sub)) return false; - // if roots match, do full list partial match test on children. - if (this.getFirstChild() != null) { - if (!this.getFirstChild().equalsListPartial(sub.getFirstChild())) return false; - } - return true; - } - - /** Walk the tree looking for all exact subtree matches. Return - * an ASTEnumerator that lets the caller walk the list - * of subtree roots found herein. - */ - public ASTEnumeration findAll(AST target) { - Vector roots = new Vector(10); - AST sibling; - - // the empty tree cannot result in an enumeration - if (target == null) { - return null; - } - - doWorkForFindAll(roots, target, false); // find all matches recursively - - return new ASTEnumerator(roots); - } - - /** Walk the tree looking for all subtrees. Return - * an ASTEnumerator that lets the caller walk the list - * of subtree roots found herein. - */ - public ASTEnumeration findAllPartial(AST sub) { - Vector roots = new Vector(10); - AST sibling; - - // the empty tree cannot result in an enumeration - if (sub == null) { - return null; - } - - doWorkForFindAll(roots, sub, true); // find all matches recursively - - return new ASTEnumerator(roots); - } - - /** Get the first child of this node; null if not children */ - public AST getFirstChild() { - return down; - } - - /** Get the next sibling in line after this one */ - public AST getNextSibling() { - return right; - } - - /** Get the token text for this node */ - public String getText() { - return ""; - } - - /** Get the token type for this node */ - public int getType() { - return 0; - } - - public int getLine() { - return 0; - } - - public int getColumn() { - return 0; - } - - public abstract void initialize(int t, String txt); - - public abstract void initialize(AST t); - - public abstract void initialize(Token t); - - /** Remove all children */ - public void removeChildren() { - down = null; - } - - public void setFirstChild(AST c) { - down = (BaseAST)c; - } - - public void setNextSibling(AST n) { - right = (BaseAST)n; - } - - /** Set the token text for this node */ - public void setText(String text) { - } - - /** Set the token type for this node */ - public void setType(int ttype) { - } - - public static void setVerboseStringConversion(boolean verbose, String[] names) { - verboseStringConversion = verbose; - tokenNames = names; - } - - /** Return an array of strings that maps token ID to it's text. @since 2.7.3 */ - public static String[] getTokenNames() { - return tokenNames; - } - - public String toString() { - StringBuffer b = new StringBuffer(); - // if verbose and type name not same as text (keyword probably) - if (verboseStringConversion && - !getText().equalsIgnoreCase(tokenNames[getType()]) && - !getText().equalsIgnoreCase(StringUtils.stripFrontBack(tokenNames[getType()], "\"", "\""))) { - b.append('['); - b.append(getText()); - b.append(",<"); - b.append(tokenNames[getType()]); - b.append(">]"); - return b.toString(); - } - return getText(); - } - - /** Print out a child-sibling tree in LISP notation */ - public String toStringList() { - AST t = this; - String ts = ""; - if (t.getFirstChild() != null) ts += " ("; - ts += " " + this.toString(); - if (t.getFirstChild() != null) { - ts += ((BaseAST)t.getFirstChild()).toStringList(); - } - if (t.getFirstChild() != null) ts += " )"; - if (t.getNextSibling() != null) { - ts += ((BaseAST)t.getNextSibling()).toStringList(); - } - return ts; - } - - public String toStringTree() { - AST t = this; - String ts = ""; - if (t.getFirstChild() != null) ts += " ("; - ts += " " + this.toString(); - if (t.getFirstChild() != null) { - ts += ((BaseAST)t.getFirstChild()).toStringList(); - } - if (t.getFirstChild() != null) ts += " )"; - return ts; - } - - public static String decode(String text) { - char c, c1, c2, c3, c4, c5; - StringBuffer n = new StringBuffer(); - for (int i = 0; i < text.length(); i++) { - c = text.charAt(i); - if (c == '&') { - c1 = text.charAt(i + 1); - c2 = text.charAt(i + 2); - c3 = text.charAt(i + 3); - c4 = text.charAt(i + 4); - c5 = text.charAt(i + 5); - - if (c1 == 'a' && c2 == 'm' && c3 == 'p' && c4 == ';') { - n.append("&"); - i += 5; - } - else if (c1 == 'l' && c2 == 't' && c3 == ';') { - n.append("<"); - i += 4; - } - else if (c1 == 'g' && c2 == 't' && c3 == ';') { - n.append(">"); - i += 4; - } - else if (c1 == 'q' && c2 == 'u' && c3 == 'o' && - c4 == 't' && c5 == ';') { - n.append("\""); - i += 6; - } - else if (c1 == 'a' && c2 == 'p' && c3 == 'o' && - c4 == 's' && c5 == ';') { - n.append("'"); - i += 6; - } - else - n.append("&"); - } - else - n.append(c); - } - return new String(n); - } - - public static String encode(String text) { - char c; - StringBuffer n = new StringBuffer(); - for (int i = 0; i < text.length(); i++) { - c = text.charAt(i); - switch (c) { - case '&': - { - n.append("&"); - break; - } - case '<': - { - n.append("<"); - break; - } - case '>': - { - n.append(">"); - break; - } - case '"': - { - n.append("""); - break; - } - case '\'': - { - n.append("'"); - break; - } - default : - { - n.append(c); - break; - } - } - } - return new String(n); - } - - public void xmlSerializeNode(Writer out) - throws IOException { - StringBuffer buf = new StringBuffer(100); - buf.append("<"); - buf.append(getClass().getName() + " "); - buf.append("text=\"" + encode(getText()) + "\" type=\"" + - getType() + "\"/>"); - out.write(buf.toString()); - } - - public void xmlSerializeRootOpen(Writer out) - throws IOException { - StringBuffer buf = new StringBuffer(100); - buf.append("<"); - buf.append(getClass().getName() + " "); - buf.append("text=\"" + encode(getText()) + "\" type=\"" + - getType() + "\">\n"); - out.write(buf.toString()); - } - - public void xmlSerializeRootClose(Writer out) - throws IOException { - out.write("</" + getClass().getName() + ">\n"); - } - - public void xmlSerialize(Writer out) throws IOException { - // print out this node and all siblings - for (AST node = this; - node != null; - node = node.getNextSibling()) { - if (node.getFirstChild() == null) { - // print guts (class name, attributes) - ((BaseAST)node).xmlSerializeNode(out); - } - else { - ((BaseAST)node).xmlSerializeRootOpen(out); - - // print children - ((BaseAST)node.getFirstChild()).xmlSerialize(out); - - // print end tag - ((BaseAST)node).xmlSerializeRootClose(out); - } - } - } - -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/BlockContext.java glassfish-gil/entity-persistence/src/java/persistence/antlr/BlockContext.java --- glassfish/entity-persistence/src/java/persistence/antlr/BlockContext.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/BlockContext.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,31 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**BlockContext stores the information needed when creating an - * alternative (list of elements). Entering a subrule requires - * that we save this state as each block of alternatives - * requires state such as "tail of current alternative." - */ -class BlockContext { - AlternativeBlock block; // current block of alternatives - int altNum; // which alt are we accepting 0..n-1 - BlockEndElement blockEnd; // used if nested - - - public void addAlternativeElement(AlternativeElement e) { - currentAlt().addElement(e); - } - - public Alternative currentAlt() { - return (Alternative)block.alternatives.elementAt(altNum); - } - - public AlternativeElement currentElement() { - return currentAlt().tail; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/BlockEndElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/BlockEndElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/BlockEndElement.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/BlockEndElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,30 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**All alternative blocks are "terminated" by BlockEndElements unless - * they are rule blocks (in which case they use RuleEndElement). - */ -class BlockEndElement extends AlternativeElement { - protected boolean[] lock; // for analysis; used to avoid infinite loops - protected AlternativeBlock block;// ending blocks know what block they terminate - - - public BlockEndElement(Grammar g) { - super(g); - lock = new boolean[g.maxk + 1]; - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public String toString() { - //return " [BlkEnd]"; - return ""; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/BlockWithImpliedExitPath.java glassfish-gil/entity-persistence/src/java/persistence/antlr/BlockWithImpliedExitPath.java --- glassfish/entity-persistence/src/java/persistence/antlr/BlockWithImpliedExitPath.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/BlockWithImpliedExitPath.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,23 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -abstract class BlockWithImpliedExitPath extends AlternativeBlock { - protected int exitLookaheadDepth; // lookahead needed to handle optional path - /** lookahead to bypass block; set - * by deterministic(). 1..k of Lookahead - */ - protected Lookahead[] exitCache = new Lookahead[grammar.maxk + 1]; - - public BlockWithImpliedExitPath(Grammar g) { - super(g); - } - - public BlockWithImpliedExitPath(Grammar g, Token start) { - super(g, start, false); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ByteBuffer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ByteBuffer.java --- glassfish/entity-persistence/src/java/persistence/antlr/ByteBuffer.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ByteBuffer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,52 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**A Stream of characters fed to the lexer from a InputStream that can - * be rewound via mark()/rewind() methods. - * <p> - * A dynamic array is used to buffer up all the input characters. Normally, - * "k" characters are stored in the buffer. More characters may be stored during - * guess mode (testing syntactic predicate), or when LT(i>k) is referenced. - * Consumption of characters is deferred. In other words, reading the next - * character is not done by conume(), but deferred until needed by LA or LT. - * <p> - * - * @see persistence.antlr.CharQueue - */ -// SAS: added this class to handle Binary input w/ FileInputStream - -import java.io.InputStream; -import java.io.IOException; - -public class ByteBuffer extends InputBuffer { - - // char source - transient InputStream input; - - - /** Create a character buffer */ - public ByteBuffer(InputStream input_) { - super(); - input = input_; - } - - /** Ensure that the character buffer is sufficiently full */ - public void fill(int amount) throws CharStreamException { - try { - syncConsume(); - // Fill the buffer sufficiently to hold needed characters - while (queue.nbrEntries < amount + markerOffset) { - // Append the next character - queue.append((char)input.read()); - } - } - catch (IOException io) { - throw new CharStreamIOException(io); - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CharBuffer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CharBuffer.java --- glassfish/entity-persistence/src/java/persistence/antlr/CharBuffer.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CharBuffer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,52 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**A Stream of characters fed to the lexer from a InputStream that can - * be rewound via mark()/rewind() methods. - * <p> - * A dynamic array is used to buffer up all the input characters. Normally, - * "k" characters are stored in the buffer. More characters may be stored during - * guess mode (testing syntactic predicate), or when LT(i>k) is referenced. - * Consumption of characters is deferred. In other words, reading the next - * character is not done by conume(), but deferred until needed by LA or LT. - * <p> - * - * @see persistence.antlr.CharQueue - */ - -import java.io.Reader; // SAS: changed to properly read text files -import java.io.IOException; - -// SAS: Move most functionality into InputBuffer -- just the file-specific -// stuff is in here - -public class CharBuffer extends InputBuffer { - // char source - transient Reader input; - - /** Create a character buffer */ - public CharBuffer(Reader input_) { // SAS: for proper text i/o - super(); - input = input_; - } - - /** Ensure that the character buffer is sufficiently full */ - public void fill(int amount) throws CharStreamException { - try { - syncConsume(); - // Fill the buffer sufficiently to hold needed characters - while (queue.nbrEntries < amount + markerOffset) { - // Append the next character - queue.append((char)input.read()); - } - } - catch (IOException io) { - throw new CharStreamIOException(io); - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CharFormatter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CharFormatter.java --- glassfish/entity-persistence/src/java/persistence/antlr/CharFormatter.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CharFormatter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** Interface used by BitSet to format elements of the set when - * converting to string - */ -public interface CharFormatter { - - - public String escapeChar(int c, boolean forCharLiteral); - - public String escapeString(String s); - - public String literalChar(int c); - - public String literalString(String s); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CharLiteralElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CharLiteralElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/CharLiteralElement.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CharLiteralElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class CharLiteralElement extends GrammarAtom { - - - public CharLiteralElement(LexerGrammar g, Token t, boolean inverted, int autoGenType) { - super(g, t, AUTO_GEN_NONE); - tokenType = ANTLRLexer.tokenTypeForCharLiteral(t.getText()); - g.charVocabulary.add(tokenType); - line = t.getLine(); - not = inverted; - this.autoGenType = autoGenType; - } - - public void generate() { - grammar.generator.gen(this); - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CharQueue.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CharQueue.java --- glassfish/entity-persistence/src/java/persistence/antlr/CharQueue.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CharQueue.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,94 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** A circular buffer object used by CharBuffer */ -public class CharQueue { - /** Physical circular buffer of tokens */ - protected char[] buffer; - /** buffer.length-1 for quick modulos */ - private int sizeLessOne; - /** physical index of front token */ - private int offset; - /** number of tokens in the queue */ - protected int nbrEntries; - - public CharQueue(int minSize) { - // Find first power of 2 >= to requested size - int size; - if ( minSize<0 ) { - init(16); // pick some value for them - return; - } - // check for overflow - if ( minSize>=(Integer.MAX_VALUE/2) ) { - init(Integer.MAX_VALUE); // wow that's big. - return; - } - for (size = 2; size < minSize; size *= 2) { - } - init(size); - } - - /** Add token to end of the queue - * @param tok The token to add - */ - public final void append(char tok) { - if (nbrEntries == buffer.length) { - expand(); - } - buffer[(offset + nbrEntries) & sizeLessOne] = tok; - nbrEntries++; - } - - /** Fetch a token from the queue by index - * @param idx The index of the token to fetch, where zero is the token at the front of the queue - */ - public final char elementAt(int idx) { - return buffer[(offset + idx) & sizeLessOne]; - } - - /** Expand the token buffer by doubling its capacity */ - private final void expand() { - char[] newBuffer = new char[buffer.length * 2]; - // Copy the contents to the new buffer - // Note that this will store the first logical item in the - // first physical array element. - for (int i = 0; i < buffer.length; i++) { - newBuffer[i] = elementAt(i); - } - // Re-initialize with new contents, keep old nbrEntries - buffer = newBuffer; - sizeLessOne = buffer.length - 1; - offset = 0; - } - - /** Initialize the queue. - * @param size The initial size of the queue - */ - public void init(int size) { - // Allocate buffer - buffer = new char[size]; - // Other initialization - sizeLessOne = size - 1; - offset = 0; - nbrEntries = 0; - } - - /** Clear the queue. Leaving the previous buffer alone. - */ - public final void reset() { - offset = 0; - nbrEntries = 0; - } - - /** Remove char from front of queue */ - public final void removeFirst() { - offset = (offset + 1) & sizeLessOne; - nbrEntries--; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CharRangeElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CharRangeElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/CharRangeElement.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CharRangeElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,53 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class CharRangeElement extends AlternativeElement { - String label; - protected char begin = 0; - protected char end = 0; - protected String beginText; - protected String endText; - - - public CharRangeElement(LexerGrammar g, Token t1, Token t2, int autoGenType) { - super(g); - begin = (char)ANTLRLexer.tokenTypeForCharLiteral(t1.getText()); - beginText = t1.getText(); - end = (char)ANTLRLexer.tokenTypeForCharLiteral(t2.getText()); - endText = t2.getText(); - line = t1.getLine(); - // track which characters are referenced in the grammar - for (int i = begin; i <= end; i++) { - g.charVocabulary.add(i); - } - this.autoGenType = autoGenType; - } - - public void generate() { - grammar.generator.gen(this); - } - - public String getLabel() { - return label; - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public void setLabel(String label_) { - label = label_; - } - - public String toString() { - if (label != null) - return " " + label + ":" + beginText + ".." + endText; - else - return " " + beginText + ".." + endText; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CharScanner.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CharScanner.java --- glassfish/entity-persistence/src/java/persistence/antlr/CharScanner.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CharScanner.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,407 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Hashtable; - -import persistence.antlr.collections.impl.BitSet; - -import java.io.IOException; - -public abstract class CharScanner implements TokenStream { - static final char NO_CHAR = 0; - public static final char EOF_CHAR = (char)-1; - protected ANTLRStringBuffer text; // text of current token - - protected boolean saveConsumedInput = true; // does consume() save characters? - protected Class tokenObjectClass; // what kind of tokens to create? - protected boolean caseSensitive = true; - protected boolean caseSensitiveLiterals = true; - protected Hashtable literals; // set by subclass - - /** Tab chars are handled by tab() according to this value; override - * method to do anything weird with tabs. - */ - protected int tabsize = 8; - - protected Token _returnToken = null; // used to return tokens w/o using return val. - - // Hash string used so we don't new one every time to check literals table - protected ANTLRHashString hashString; - - protected LexerSharedInputState inputState; - - /** Used during filter mode to indicate that path is desired. - * A subsequent scan error will report an error as usual if - * acceptPath=true; - */ - protected boolean commitToPath = false; - - /** Used to keep track of indentdepth for traceIn/Out */ - protected int traceDepth = 0; - - public CharScanner() { - text = new ANTLRStringBuffer(); - hashString = new ANTLRHashString(this); - setTokenObjectClass("persistence.antlr.CommonToken"); - } - - public CharScanner(InputBuffer cb) { // SAS: use generic buffer - this(); - inputState = new LexerSharedInputState(cb); - } - - public CharScanner(LexerSharedInputState sharedState) { - this(); - inputState = sharedState; - } - - public void append(char c) { - if (saveConsumedInput) { - text.append(c); - } - } - - public void append(String s) { - if (saveConsumedInput) { - text.append(s); - } - } - - public void commit() { - inputState.input.commit(); - } - - public void consume() throws CharStreamException { - if (inputState.guessing == 0) { - char c = LA(1); - if (caseSensitive) { - append(c); - } - else { - // use input.LA(), not LA(), to get original case - // CharScanner.LA() would toLower it. - append(inputState.input.LA(1)); - } - if (c == '\t') { - tab(); - } - else { - inputState.column++; - } - } - inputState.input.consume(); - } - - /** Consume chars until one matches the given char */ - public void consumeUntil(int c) throws CharStreamException { - while (LA(1) != EOF_CHAR && LA(1) != c) { - consume(); - } - } - - /** Consume chars until one matches the given set */ - public void consumeUntil(BitSet set) throws CharStreamException { - while (LA(1) != EOF_CHAR && !set.member(LA(1))) { - consume(); - } - } - - public boolean getCaseSensitive() { - return caseSensitive; - } - - public final boolean getCaseSensitiveLiterals() { - return caseSensitiveLiterals; - } - - public int getColumn() { - return inputState.column; - } - - public void setColumn(int c) { - inputState.column = c; - } - - public boolean getCommitToPath() { - return commitToPath; - } - - public String getFilename() { - return inputState.filename; - } - - public InputBuffer getInputBuffer() { - return inputState.input; - } - - public LexerSharedInputState getInputState() { - return inputState; - } - - public void setInputState(LexerSharedInputState state) { - inputState = state; - } - - public int getLine() { - return inputState.line; - } - - /** return a copy of the current text buffer */ - public String getText() { - return text.toString(); - } - - public Token getTokenObject() { - return _returnToken; - } - - public char LA(int i) throws CharStreamException { - if (caseSensitive) { - return inputState.input.LA(i); - } - else { - return toLower(inputState.input.LA(i)); - } - } - - protected Token makeToken(int t) { - try { - Token tok = (Token)tokenObjectClass.newInstance(); - tok.setType(t); - tok.setColumn(inputState.tokenStartColumn); - tok.setLine(inputState.tokenStartLine); - // tracking real start line now: tok.setLine(inputState.line); - return tok; - } - catch (InstantiationException ie) { - panic("can't instantiate token: " + tokenObjectClass); - } - catch (IllegalAccessException iae) { - panic("Token class is not accessible" + tokenObjectClass); - } - return Token.badToken; - } - - public int mark() { - return inputState.input.mark(); - } - - public void match(char c) throws MismatchedCharException, CharStreamException { - if (LA(1) != c) { - throw new MismatchedCharException(LA(1), c, false, this); - } - consume(); - } - - public void match(BitSet b) throws MismatchedCharException, CharStreamException { - if (!b.member(LA(1))) { - throw new MismatchedCharException(LA(1), b, false, this); - } - else { - consume(); - } - } - - public void match(String s) throws MismatchedCharException, CharStreamException { - int len = s.length(); - for (int i = 0; i < len; i++) { - if (LA(1) != s.charAt(i)) { - throw new MismatchedCharException(LA(1), s.charAt(i), false, this); - } - consume(); - } - } - - public void matchNot(char c) throws MismatchedCharException, CharStreamException { - if (LA(1) == c) { - throw new MismatchedCharException(LA(1), c, true, this); - } - consume(); - } - - public void matchRange(char c1, char c2) throws MismatchedCharException, CharStreamException { - if (LA(1) < c1 || LA(1) > c2) throw new MismatchedCharException(LA(1), c1, c2, false, this); - consume(); - } - - public void newline() { - inputState.line++; - inputState.column = 1; - } - - /** advance the current column number by an appropriate amount - * according to tab size. This method is called from consume(). - */ - public void tab() { - int c = getColumn(); - int nc = ( ((c-1)/tabsize) + 1) * tabsize + 1; // calculate tab stop - setColumn( nc ); - } - - public void setTabSize( int size ) { - tabsize = size; - } - - public int getTabSize() { - return tabsize; - } - - /** @see #panic(String) - */ - public void panic() { - System.err.println("CharScanner: panic"); - System.exit(1); - } - - /** This method is executed by ANTLR internally when it detected an illegal - * state that cannot be recovered from. - * The default implementation of this method calls - * {@link java.lang.System.exit(int)} and writes directly to - * {@link java.lang.System.err)} , which is usually not appropriate when - * a translator is embedded into a larger application. <em>It is highly - * recommended that this method be overridden to handle the error in a - * way appropriate for your application (e.g. throw an unchecked - * exception)</em>. - */ - public void panic(String s) { - System.err.println("CharScanner; panic: " + s); - System.exit(1); - } - - /** Parser error-reporting function can be overridden in subclass */ - public void reportError(RecognitionException ex) { - System.err.println(ex); - } - - /** Parser error-reporting function can be overridden in subclass */ - public void reportError(String s) { - if (getFilename() == null) { - System.err.println("error: " + s); - } - else { - System.err.println(getFilename() + ": error: " + s); - } - } - - /** Parser warning-reporting function can be overridden in subclass */ - public void reportWarning(String s) { - if (getFilename() == null) { - System.err.println("warning: " + s); - } - else { - System.err.println(getFilename() + ": warning: " + s); - } - } - - public void resetText() { - text.setLength(0); - inputState.tokenStartColumn = inputState.column; - inputState.tokenStartLine = inputState.line; - } - - public void rewind(int pos) { - inputState.input.rewind(pos); - // RK: should not be here, it is messing up column calculation - // setColumn(inputState.tokenStartColumn); - } - - public void setCaseSensitive(boolean t) { - caseSensitive = t; - } - - public void setCommitToPath(boolean commit) { - commitToPath = commit; - } - - public void setFilename(String f) { - inputState.filename = f; - } - - public void setLine(int line) { - inputState.line = line; - } - - public void setText(String s) { - resetText(); - text.append(s); - } - - public void setTokenObjectClass(String cl) { - try { - tokenObjectClass = Class.forName(cl); - } - catch (ClassNotFoundException ce) { - panic("ClassNotFoundException: " + cl); - } - } - - // Test the token text against the literals table - // Override this method to perform a different literals test - public int testLiteralsTable(int ttype) { - hashString.setBuffer(text.getBuffer(), text.length()); - Integer literalsIndex = (Integer)literals.get(hashString); - if (literalsIndex != null) { - ttype = literalsIndex.intValue(); - } - return ttype; - } - - /** Test the text passed in against the literals table - * Override this method to perform a different literals test - * This is used primarily when you want to test a portion of - * a token. - */ - public int testLiteralsTable(String text, int ttype) { - ANTLRHashString s = new ANTLRHashString(text, this); - Integer literalsIndex = (Integer)literals.get(s); - if (literalsIndex != null) { - ttype = literalsIndex.intValue(); - } - return ttype; - } - - // Override this method to get more specific case handling - public char toLower(char c) { - return Character.toLowerCase(c); - } - - public void traceIndent() { - for (int i = 0; i < traceDepth; i++) - System.out.print(" "); - } - - public void traceIn(String rname) throws CharStreamException { - traceDepth += 1; - traceIndent(); - System.out.println("> lexer " + rname + "; c==" + LA(1)); - } - - public void traceOut(String rname) throws CharStreamException { - traceIndent(); - System.out.println("< lexer " + rname + "; c==" + LA(1)); - traceDepth -= 1; - } - - /** This method is called by YourLexer.nextToken() when the lexer has - * hit EOF condition. EOF is NOT a character. - * This method is not called if EOF is reached during - * syntactic predicate evaluation or during evaluation - * of normal lexical rules, which presumably would be - * an IOException. This traps the "normal" EOF condition. - * - * uponEOF() is called after the complete evaluation of - * the previous token and only if your parser asks - * for another token beyond that last non-EOF token. - * - * You might want to throw token or char stream exceptions - * like: "Heh, premature eof" or a retry stream exception - * ("I found the end of this file, go back to referencing file"). - */ - public void uponEOF() throws TokenStreamException, CharStreamException { - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CharStreamException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CharStreamException.java --- glassfish/entity-persistence/src/java/persistence/antlr/CharStreamException.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CharStreamException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,20 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** - * Anything that goes wrong while generating a stream of characters - */ -public class CharStreamException extends ANTLRException { - /** - * CharStreamException constructor comment. - * @param s java.lang.String - */ - public CharStreamException(String s) { - super(s); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CharStreamIOException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CharStreamIOException.java --- glassfish/entity-persistence/src/java/persistence/antlr/CharStreamIOException.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CharStreamIOException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,21 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.io.IOException; - -/** - * Wrap an IOException in a CharStreamException - */ -public class CharStreamIOException extends CharStreamException { - public IOException io; - - public CharStreamIOException(IOException io) { - super(io.getMessage()); - this.io = io; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CodeGenerator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CodeGenerator.java --- glassfish/entity-persistence/src/java/persistence/antlr/CodeGenerator.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CodeGenerator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,662 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.io.PrintWriter; -import java.io.IOException; -import java.io.FileWriter; - -import persistence.antlr.collections.impl.Vector; -import persistence.antlr.collections.impl.BitSet; - -/**A generic ANTLR code generator. All code generators - * Derive from this class. - * - * <p> - * A CodeGenerator knows about a Grammar data structure and - * a grammar analyzer. The Grammar is walked to generate the - * appropriate code for both a parser and lexer (if present). - * This interface may change slightly so that the lexer is - * itself living inside of a Grammar object (in which case, - * this class generates only one recognizer). The main method - * to call is <tt>gen()</tt>, which initiates all code gen. - * - * <p> - * The interaction of the code generator with the analyzer is - * simple: each subrule block calls deterministic() before generating - * code for the block. Method deterministic() sets lookahead caches - * in each Alternative object. Technically, a code generator - * doesn't need the grammar analyzer if all lookahead analysis - * is done at runtime, but this would result in a slower parser. - * - * <p> - * This class provides a set of support utilities to handle argument - * list parsing and so on. - * - * @author Terence Parr, John Lilley - * @version 2.00a - * @see persistence.antlr.JavaCodeGenerator - * @see persistence.antlr.DiagnosticCodeGenerator - * @see persistence.antlr.LLkAnalyzer - * @see persistence.antlr.Grammar - * @see persistence.antlr.AlternativeElement - * @see persistence.antlr.Lookahead - */ -public abstract class CodeGenerator { - protected persistence.antlr.Tool antlrTool; - - /** Current tab indentation for code output */ - protected int tabs = 0; - - /** Current output Stream */ - transient protected PrintWriter currentOutput; // SAS: for proper text i/o - - /** The grammar for which we generate code */ - protected Grammar grammar = null; - - /** List of all bitsets that must be dumped. These are Vectors of BitSet. */ - protected Vector bitsetsUsed; - - /** The grammar behavior */ - protected DefineGrammarSymbols behavior; - - /** The LLk analyzer */ - protected LLkGrammarAnalyzer analyzer; - - /** Object used to format characters in the target language. - * subclass must initialize this to the language-specific formatter - */ - protected CharFormatter charFormatter; - - /** Use option "codeGenDebug" to generate debugging output */ - protected boolean DEBUG_CODE_GENERATOR = false; - - /** Default values for code-generation thresholds */ - protected static final int DEFAULT_MAKE_SWITCH_THRESHOLD = 2; - protected static final int DEFAULT_BITSET_TEST_THRESHOLD = 4; - - /** If there are more than 8 long words to init in a bitset, - * try to optimize it; e.g., detect runs of -1L and 0L. - */ - protected static final int BITSET_OPTIMIZE_INIT_THRESHOLD = 8; - - /** This is a hint for the language-specific code generator. - * A switch() or language-specific equivalent will be generated instead - * of a series of if/else statements for blocks with number of alternates - * greater than or equal to this number of non-predicated LL(1) alternates. - * This is modified by the grammar option "codeGenMakeSwitchThreshold" - */ - protected int makeSwitchThreshold = DEFAULT_MAKE_SWITCH_THRESHOLD; - - /** This is a hint for the language-specific code generator. - * A bitset membership test will be generated instead of an - * ORed series of LA(k) comparisions for lookahead sets with - * degree greater than or equal to this value. - * This is modified by the grammar option "codeGenBitsetTestThreshold" - */ - protected int bitsetTestThreshold = DEFAULT_BITSET_TEST_THRESHOLD; - - private static boolean OLD_ACTION_TRANSLATOR = true; - - public static String TokenTypesFileSuffix = "TokenTypes"; - public static String TokenTypesFileExt = ".txt"; - - /** Construct code generator base class */ - public CodeGenerator() { - } - - /** Output a String to the currentOutput stream. - * Ignored if string is null. - * @param s The string to output - */ - protected void _print(String s) { - if (s != null) { - currentOutput.print(s); - } - } - - /** Print an action without leading tabs, attempting to - * preserve the current indentation level for multi-line actions - * Ignored if string is null. - * @param s The action string to output - */ - protected void _printAction(String s) { - if (s == null) { - return; - } - - // Skip leading newlines, tabs and spaces - int start = 0; - while (start < s.length() && Character.isSpaceChar(s.charAt(start))) { - start++; - } - - // Skip leading newlines, tabs and spaces - int end = s.length() - 1; - while (end > start && Character.isSpaceChar(s.charAt(end))) { - end--; - } - - char c = 0; - for (int i = start; i <= end;) { - c = s.charAt(i); - i++; - boolean newline = false; - switch (c) { - case '\n': - newline = true; - break; - case '\r': - if (i <= end && s.charAt(i) == '\n') { - i++; - } - newline = true; - break; - default: - currentOutput.print(c); - break; - } - if (newline) { - currentOutput.println(); - printTabs(); - // Absorb leading whitespace - while (i <= end && Character.isSpaceChar(s.charAt(i))) { - i++; - } - newline = false; - } - } - currentOutput.println(); - } - - /** Output a String followed by newline, to the currentOutput stream. - * Ignored if string is null. - * @param s The string to output - */ - protected void _println(String s) { - if (s != null) { - currentOutput.println(s); - } - } - - /** Test if a set element array represents a contiguous range. - * @param elems The array of elements representing the set, usually from BitSet.toArray(). - * @return true if the elements are a contiguous range (with two or more). - */ - public static boolean elementsAreRange(int[] elems) { - if (elems.length == 0) { - return false; - } - int begin = elems[0]; - int end = elems[elems.length - 1]; - if (elems.length <= 2) { - // Not enough elements for a range expression - return false; - } - if (end - begin + 1 > elems.length) { - // The set does not represent a contiguous range - return false; - } - int v = begin + 1; - for (int i = 1; i < elems.length - 1; i++) { - if (v != elems[i]) { - // The set does not represent a contiguous range - return false; - } - v++; - } - return true; - } - - /** Get the identifier portion of an argument-action token. - * The ID of an action is assumed to be a trailing identifier. - * Specific code-generators may want to override this - * if the language has unusual declaration syntax. - * @param t The action token - * @return A string containing the text of the identifier - */ - protected String extractIdOfAction(Token t) { - return extractIdOfAction(t.getText(), t.getLine(), t.getColumn()); - } - - /** Get the identifier portion of an argument-action. - * The ID of an action is assumed to be a trailing identifier. - * Specific code-generators may want to override this - * if the language has unusual declaration syntax. - * @param s The action text - * @param line Line used for error reporting. - * @param column Line used for error reporting. - * @return A string containing the text of the identifier - */ - protected String extractIdOfAction(String s, int line, int column) { - s = removeAssignmentFromDeclaration(s); - // Search back from the end for a non alphanumeric. That marks the - // beginning of the identifier - for (int i = s.length() - 2; i >= 0; i--) { - // TODO: make this work for language-independent identifiers? - if (!Character.isLetterOrDigit(s.charAt(i)) && s.charAt(i) != '_') { - // Found end of type part - return s.substring(i + 1); - } - } - // Something is bogus, but we cannot parse the language-specific - // actions any better. The compiler will have to catch the problem. - antlrTool.warning("Ill-formed action", grammar.getFilename(), line, column); - return ""; - } - - /** Get the type string out of an argument-action token. - * The type of an action is assumed to precede a trailing identifier - * Specific code-generators may want to override this - * if the language has unusual declaration syntax. - * @param t The action token - * @return A string containing the text of the type - */ - protected String extractTypeOfAction(Token t) { - return extractTypeOfAction(t.getText(), t.getLine(), t.getColumn()); - } - - /** Get the type portion of an argument-action. - * The type of an action is assumed to precede a trailing identifier - * Specific code-generators may want to override this - * if the language has unusual declaration syntax. - * @param s The action text - * @param line Line used for error reporting. - * @return A string containing the text of the type - */ - protected String extractTypeOfAction(String s, int line, int column) { - s = removeAssignmentFromDeclaration(s); - // Search back from the end for a non alphanumeric. That marks the - // beginning of the identifier - for (int i = s.length() - 2; i >= 0; i--) { - // TODO: make this work for language-independent identifiers? - if (!Character.isLetterOrDigit(s.charAt(i)) && s.charAt(i) != '_') { - // Found end of type part - return s.substring(0, i + 1); - } - } - // Something is bogus, but we cannot parse the language-specific - // actions any better. The compiler will have to catch the problem. - antlrTool.warning("Ill-formed action", grammar.getFilename(), line, column); - return ""; - } - - /** Generate the code for all grammars - */ - public abstract void gen(); - - /** Generate code for the given grammar element. - * @param action The {...} action to generate - */ - public abstract void gen(ActionElement action); - - /** Generate code for the given grammar element. - * @param blk The "x|y|z|..." block to generate - */ - public abstract void gen(AlternativeBlock blk); - - /** Generate code for the given grammar element. - * @param end The block-end element to generate. Block-end - * elements are synthesized by the grammar parser to represent - * the end of a block. - */ - public abstract void gen(BlockEndElement end); - - /** Generate code for the given grammar element. - * @param atom The character literal reference to generate - */ - public abstract void gen(CharLiteralElement atom); - - /** Generate code for the given grammar element. - * @param r The character-range reference to generate - */ - public abstract void gen(CharRangeElement r); - - /** Generate the code for a parser */ - public abstract void gen(LexerGrammar g) throws IOException; - - /** Generate code for the given grammar element. - * @param blk The (...)+ block to generate - */ - public abstract void gen(OneOrMoreBlock blk); - - /** Generate the code for a parser */ - public abstract void gen(ParserGrammar g) throws IOException; - - /** Generate code for the given grammar element. - * @param rr The rule-reference to generate - */ - public abstract void gen(RuleRefElement rr); - - /** Generate code for the given grammar element. - * @param atom The string-literal reference to generate - */ - public abstract void gen(StringLiteralElement atom); - - /** Generate code for the given grammar element. - * @param r The token-range reference to generate - */ - public abstract void gen(TokenRangeElement r); - - /** Generate code for the given grammar element. - * @param atom The token-reference to generate - */ - public abstract void gen(TokenRefElement atom); - - /** Generate code for the given grammar element. - * @param blk The tree to generate code for. - */ - public abstract void gen(TreeElement t); - - /** Generate the code for a parser */ - public abstract void gen(TreeWalkerGrammar g) throws IOException; - - /** Generate code for the given grammar element. - * @param wc The wildcard element to generate - */ - public abstract void gen(WildcardElement wc); - - /** Generate code for the given grammar element. - * @param blk The (...)* block to generate - */ - public abstract void gen(ZeroOrMoreBlock blk); - - /** Generate the token types as a text file for persistence across shared lexer/parser */ - protected void genTokenInterchange(TokenManager tm) throws IOException { - // Open the token output Java file and set the currentOutput stream - String fName = tm.getName() + TokenTypesFileSuffix + TokenTypesFileExt; - currentOutput = antlrTool.openOutputFile(fName); - - println("// $ANTLR " + antlrTool.version + ": " + - antlrTool.fileMinusPath(antlrTool.grammarFile) + - " -> " + - fName + - "$"); - - tabs = 0; - - // Header - println(tm.getName() + " // output token vocab name"); - - // Generate a definition for each token type - Vector v = tm.getVocabulary(); - for (int i = Token.MIN_USER_TYPE; i < v.size(); i++) { - String s = (String)v.elementAt(i); - if (DEBUG_CODE_GENERATOR) { - System.out.println("gen persistence file entry for: " + s); - } - if (s != null && !s.startsWith("<")) { - // if literal, find label - if (s.startsWith("\"")) { - StringLiteralSymbol sl = (StringLiteralSymbol)tm.getTokenSymbol(s); - if (sl != null && sl.label != null) { - print(sl.label + "="); - } - println(s + "=" + i); - } - else { - print(s); - // check for a paraphrase - TokenSymbol ts = (TokenSymbol)tm.getTokenSymbol(s); - if (ts == null) { - antlrTool.warning("undefined token symbol: " + s); - } - else { - if (ts.getParaphrase() != null) { - print("(" + ts.getParaphrase() + ")"); - } - } - println("=" + i); - } - } - } - - // Close the tokens output file - currentOutput.close(); - currentOutput = null; - } - - /** Process a string for an simple expression for use in xx/action.g - * it is used to cast simple tokens/references to the right type for - * the generated language. - * @param str A String. - */ - public String processStringForASTConstructor(String str) { - return str; - } - - /** Get a string for an expression to generate creation of an AST subtree. - * @param v A Vector of String, where each element is an expression in the target language yielding an AST node. - */ - public abstract String getASTCreateString(Vector v); - - /** Get a string for an expression to generate creating of an AST node - * @param str The text of the arguments to the AST construction - */ - public abstract String getASTCreateString(GrammarAtom atom, String str); - - /** Given the index of a bitset in the bitset list, generate a unique name. - * Specific code-generators may want to override this - * if the language does not allow '_' or numerals in identifiers. - * @param index The index of the bitset in the bitset list. - */ - protected String getBitsetName(int index) { - return "_tokenSet_" + index; - } - - public static String encodeLexerRuleName(String id) { - return "m" + id; - } - - public static String decodeLexerRuleName(String id) { - if ( id==null ) { - return null; - } - return id.substring(1,id.length()); - } - - /** Map an identifier to it's corresponding tree-node variable. - * This is context-sensitive, depending on the rule and alternative - * being generated - * @param id The identifier name to map - * @param forInput true if the input tree node variable is to be returned, otherwise the output variable is returned. - * @return The mapped id (which may be the same as the input), or null if the mapping is invalid due to duplicates - */ - public abstract String mapTreeId(String id, ActionTransInfo tInfo); - - /** Add a bitset to the list of bitsets to be generated. - * if the bitset is already in the list, ignore the request. - * Always adds the bitset to the end of the list, so the - * caller can rely on the position of bitsets in the list. - * The returned position can be used to format the bitset - * name, since it is invariant. - * @param p Bit set to mark for code generation - * @param forParser true if the bitset is used for the parser, false for the lexer - * @return The position of the bitset in the list. - */ - protected int markBitsetForGen(BitSet p) { - // Is the bitset (or an identical one) already marked for gen? - for (int i = 0; i < bitsetsUsed.size(); i++) { - BitSet set = (BitSet)bitsetsUsed.elementAt(i); - if (p.equals(set)) { - // Use the identical one already stored - return i; - } - } - - // Add the new bitset - bitsetsUsed.appendElement(p.clone()); - return bitsetsUsed.size() - 1; - } - - /** Output tab indent followed by a String, to the currentOutput stream. - * Ignored if string is null. - * @param s The string to output. - */ - protected void print(String s) { - if (s != null) { - printTabs(); - currentOutput.print(s); - } - } - - /** Print an action with leading tabs, attempting to - * preserve the current indentation level for multi-line actions - * Ignored if string is null. - * @param s The action string to output - */ - protected void printAction(String s) { - if (s != null) { - printTabs(); - _printAction(s); - } - } - - /** Output tab indent followed by a String followed by newline, - * to the currentOutput stream. Ignored if string is null. - * @param s The string to output - */ - protected void println(String s) { - if (s != null) { - printTabs(); - currentOutput.println(s); - } - } - - /** Output the current tab indentation. This outputs the number of tabs - * indicated by the "tabs" variable to the currentOutput stream. - */ - protected void printTabs() { - for (int i = 1; i <= tabs; i++) { - currentOutput.print("\t"); - } - } - - /** Lexically process $ and # references within the action. - * This will replace #id and #(...) with the appropriate - * function calls and/or variables etc... - */ - protected abstract String processActionForSpecialSymbols(String actionStr, - int line, - RuleBlock currentRule, - ActionTransInfo tInfo); - - public String getFOLLOWBitSet(String ruleName, int k) { - GrammarSymbol rs = grammar.getSymbol(ruleName); - if ( !(rs instanceof RuleSymbol) ) { - return null; - } - RuleBlock blk = ((RuleSymbol)rs).getBlock(); - Lookahead follow = grammar.theLLkAnalyzer.FOLLOW(k, blk.endNode); - String followSetName = getBitsetName(markBitsetForGen(follow.fset)); - return followSetName; - } - - public String getFIRSTBitSet(String ruleName, int k) { - GrammarSymbol rs = grammar.getSymbol(ruleName); - if ( !(rs instanceof RuleSymbol) ) { - return null; - } - RuleBlock blk = ((RuleSymbol)rs).getBlock(); - Lookahead first = grammar.theLLkAnalyzer.look(k, blk); - String firstSetName = getBitsetName(markBitsetForGen(first.fset)); - return firstSetName; - } - - /** - * Remove the assignment portion of a declaration, if any. - * @param d the declaration - * @return the declaration without any assignment portion - */ - protected String removeAssignmentFromDeclaration(String d) { - // If d contains an equal sign, then it's a declaration - // with an initialization. Strip off the initialization part. - if (d.indexOf('=') >= 0) d = d.substring(0, d.indexOf('=')).trim(); - return d; - } - - /** Set all fields back like one just created */ - private void reset() { - tabs = 0; - // Allocate list of bitsets tagged for code generation - bitsetsUsed = new Vector(); - currentOutput = null; - grammar = null; - DEBUG_CODE_GENERATOR = false; - makeSwitchThreshold = DEFAULT_MAKE_SWITCH_THRESHOLD; - bitsetTestThreshold = DEFAULT_BITSET_TEST_THRESHOLD; - } - - public static String reverseLexerRuleName(String id) { - return id.substring(1, id.length()); - } - - public void setAnalyzer(LLkGrammarAnalyzer analyzer_) { - analyzer = analyzer_; - } - - public void setBehavior(DefineGrammarSymbols behavior_) { - behavior = behavior_; - } - - /** Set a grammar for the code generator to use */ - protected void setGrammar(Grammar g) { - reset(); - grammar = g; - // Lookup make-switch threshold in the grammar generic options - if (grammar.hasOption("codeGenMakeSwitchThreshold")) { - try { - makeSwitchThreshold = grammar.getIntegerOption("codeGenMakeSwitchThreshold"); - //System.out.println("setting codeGenMakeSwitchThreshold to " + makeSwitchThreshold); - } - catch (NumberFormatException e) { - Token tok = grammar.getOption("codeGenMakeSwitchThreshold"); - antlrTool.error( - "option 'codeGenMakeSwitchThreshold' must be an integer", - grammar.getClassName(), - tok.getLine(), tok.getColumn() - ); - } - } - - // Lookup bitset-test threshold in the grammar generic options - if (grammar.hasOption("codeGenBitsetTestThreshold")) { - try { - bitsetTestThreshold = grammar.getIntegerOption("codeGenBitsetTestThreshold"); - //System.out.println("setting codeGenBitsetTestThreshold to " + bitsetTestThreshold); - } - catch (NumberFormatException e) { - Token tok = grammar.getOption("codeGenBitsetTestThreshold"); - antlrTool.error( - "option 'codeGenBitsetTestThreshold' must be an integer", - grammar.getClassName(), - tok.getLine(), tok.getColumn() - ); - } - } - - // Lookup debug code-gen in the grammar generic options - if (grammar.hasOption("codeGenDebug")) { - Token t = grammar.getOption("codeGenDebug"); - if (t.getText().equals("true")) { - //System.out.println("setting code-generation debug ON"); - DEBUG_CODE_GENERATOR = true; - } - else if (t.getText().equals("false")) { - //System.out.println("setting code-generation debug OFF"); - DEBUG_CODE_GENERATOR = false; - } - else { - antlrTool.error("option 'codeGenDebug' must be true or false", grammar.getClassName(), t.getLine(), t.getColumn()); - } - } - } - - public void setTool(Tool tool) { - antlrTool = tool; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/ASTEnumeration.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/ASTEnumeration.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/ASTEnumeration.java 2006-08-31 00:34:12.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/ASTEnumeration.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -package persistence.antlr.collections; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public interface ASTEnumeration { - public boolean hasMoreNodes(); - - public AST nextNode(); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/AST.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/AST.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/AST.java 2006-08-31 00:34:12.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/AST.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,76 +0,0 @@ -package persistence.antlr.collections; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.Token; - -/** Minimal AST node interface used by ANTLR AST generation - * and tree-walker. - */ -public interface AST { - /** Add a (rightmost) child to this node */ - public void addChild(AST c); - - public boolean equals(AST t); - - public boolean equalsList(AST t); - - public boolean equalsListPartial(AST t); - - public boolean equalsTree(AST t); - - public boolean equalsTreePartial(AST t); - - public ASTEnumeration findAll(AST tree); - - public ASTEnumeration findAllPartial(AST subtree); - - /** Get the first child of this node; null if no children */ - public AST getFirstChild(); - - /** Get the next sibling in line after this one */ - public AST getNextSibling(); - - /** Get the token text for this node */ - public String getText(); - - /** Get the token type for this node */ - public int getType(); - - /** @since 2.7.3 Need for error handling */ - public int getLine(); - - /** @since 2.7.3 Need for error handling */ - public int getColumn(); - - /** Get number of children of this node; if leaf, returns 0 */ - public int getNumberOfChildren(); - - public void initialize(int t, String txt); - - public void initialize(AST t); - - public void initialize(Token t); - - /** Set the first child of a node. */ - public void setFirstChild(AST c); - - /** Set the next sibling after this one. */ - public void setNextSibling(AST n); - - /** Set the token text for this node */ - public void setText(String text); - - /** Set the token type for this node */ - public void setType(int ttype); - - public String toString(); - - public String toStringList(); - - public String toStringTree(); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/Enumerator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/Enumerator.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/Enumerator.java 2006-08-31 00:34:12.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/Enumerator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -package persistence.antlr.collections; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public interface Enumerator { - /**Return the element under the cursor; return null if !valid() or - * if called before first next() call. - */ - public Object cursor(); - - /**Return the next element in the enumeration; first call to next() - * returns the first element. - */ - public Object next(); - - /**Any more elements in the enumeration? */ - public boolean valid(); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/ASTArray.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/ASTArray.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/ASTArray.java 2006-08-31 00:34:14.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/ASTArray.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,29 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.AST; - -/** ASTArray is a class that allows ANTLR to - * generate code that can create and initialize an array - * in one expression, like: - * (new ASTArray(3)).add(x).add(y).add(z) - */ -public class ASTArray { - public int size = 0; - public AST[] array; - - - public ASTArray(int capacity) { - array = new AST[capacity]; - } - - public ASTArray add(AST node) { - array[size++] = node; - return this; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/ASTEnumerator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/ASTEnumerator.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/ASTEnumerator.java 2006-08-31 00:34:14.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/ASTEnumerator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,39 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.Vector; -import persistence.antlr.collections.ASTEnumeration; -import persistence.antlr.collections.AST; - -import java.util.NoSuchElementException; - -public class ASTEnumerator implements persistence.antlr.collections.ASTEnumeration { - /** The list of root nodes for subtrees that match */ - VectorEnumerator nodes; - int i = 0; - - - public ASTEnumerator(Vector v) { - nodes = new VectorEnumerator(v); - } - - public boolean hasMoreNodes() { - synchronized (nodes) { - return i <= nodes.vector.lastElement; - } - } - - public persistence.antlr.collections.AST nextNode() { - synchronized (nodes) { - if (i <= nodes.vector.lastElement) { - return (AST)nodes.vector.data[i++]; - } - throw new NoSuchElementException("ASTEnumerator"); - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/BitSet.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/BitSet.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/BitSet.java 2006-08-31 00:34:14.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/BitSet.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,482 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.CharFormatter; - -/**A BitSet to replace java.util.BitSet. - * Primary differences are that most set operators return new sets - * as opposed to oring and anding "in place". Further, a number of - * operations were added. I cannot contain a BitSet because there - * is no way to access the internal bits (which I need for speed) - * and, because it is final, I cannot subclass to add functionality. - * Consider defining set degree. Without access to the bits, I must - * call a method n times to test the ith bit...ack! - * - * Also seems like or() from util is wrong when size of incoming set is bigger - * than this.bits.length. - * - * @author Terence Parr - * @author <br><a href="mailto:pete@yamuna.demon.co.uk">Pete Wells</a> - */ -public class BitSet implements Cloneable { - protected final static int BITS = 64; // number of bits / long - protected final static int NIBBLE = 4; - protected final static int LOG_BITS = 6; // 2^6 == 64 - - /* We will often need to do a mod operator (i mod nbits). Its - * turns out that, for powers of two, this mod operation is - * same as (i & (nbits-1)). Since mod is slow, we use a - * precomputed mod mask to do the mod instead. - */ - protected final static int MOD_MASK = BITS - 1; - - /** The actual data bits */ - protected long bits[]; - - /** Construct a bitset of size one word (64 bits) */ - public BitSet() { - this(BITS); - } - - /** Construction from a static array of longs */ - public BitSet(long[] bits_) { - bits = bits_; - } - - /** Construct a bitset given the size - * @param nbits The size of the bitset in bits - */ - public BitSet(int nbits) { - bits = new long[((nbits - 1) >> LOG_BITS) + 1]; - } - - /** or this element into this set (grow as necessary to accommodate) */ - public void add(int el) { - //System.out.println("add("+el+")"); - int n = wordNumber(el); - //System.out.println("word number is "+n); - //System.out.println("bits.length "+bits.length); - if (n >= bits.length) { - growToInclude(el); - } - bits[n] |= bitMask(el); - } - - public BitSet and(BitSet a) { - BitSet s = (BitSet)this.clone(); - s.andInPlace(a); - return s; - } - - public void andInPlace(BitSet a) { - int min = Math.min(bits.length, a.bits.length); - for (int i = min - 1; i >= 0; i--) { - bits[i] &= a.bits[i]; - } - // clear all bits in this not present in a (if this bigger than a). - for (int i = min; i < bits.length; i++) { - bits[i] = 0; - } - } - - private final static long bitMask(int bitNumber) { - int bitPosition = bitNumber & MOD_MASK; // bitNumber mod BITS - return 1L << bitPosition; - } - - public void clear() { - for (int i = bits.length - 1; i >= 0; i--) { - bits[i] = 0; - } - } - - public void clear(int el) { - int n = wordNumber(el); - if (n >= bits.length) { // grow as necessary to accommodate - growToInclude(el); - } - bits[n] &= ~bitMask(el); - } - - public Object clone() { - BitSet s; - try { - s = (BitSet)super.clone(); - s.bits = new long[bits.length]; - System.arraycopy(bits, 0, s.bits, 0, bits.length); - } - catch (CloneNotSupportedException e) { - throw new InternalError(); - } - return s; - } - - public int degree() { - int deg = 0; - for (int i = bits.length - 1; i >= 0; i--) { - long word = bits[i]; - if (word != 0L) { - for (int bit = BITS - 1; bit >= 0; bit--) { - if ((word & (1L << bit)) != 0) { - deg++; - } - } - } - } - return deg; - } - - /** code "inherited" from java.util.BitSet */ - public boolean equals(Object obj) { - if ((obj != null) && (obj instanceof BitSet)) { - BitSet set = (BitSet)obj; - - int n = Math.min(bits.length, set.bits.length); - for (int i = n; i-- > 0;) { - if (bits[i] != set.bits[i]) { - return false; - } - } - if (bits.length > n) { - for (int i = bits.length; i-- > n;) { - if (bits[i] != 0) { - return false; - } - } - } - else if (set.bits.length > n) { - for (int i = set.bits.length; i-- > n;) { - if (set.bits[i] != 0) { - return false; - } - } - } - return true; - } - return false; - } - - /** Find ranges in a set element array. @param elems The array of - * elements representing the set, usually from Bit Set.toArray(). - * @return Vector of ranges. - */ - public static Vector getRanges(int[] elems) { - if (elems.length == 0) { - return null; - } - int begin = elems[0]; - int end = elems[elems.length - 1]; - if (elems.length <= 2) { - // Not enough elements for a range expression - return null; - } - - Vector ranges = new Vector(5); - // look for ranges - for (int i = 0; i < elems.length - 2; i++) { - int lastInRange; - lastInRange = elems.length - 1; - for (int j = i + 1; j < elems.length; j++) { - if (elems[j] != elems[j - 1] + 1) { - lastInRange = j - 1; - break; - } - } - // found a range - if (lastInRange - i > 2) { - ranges.appendElement(new IntRange(elems[i], elems[lastInRange])); - } - } - return ranges; - } - - /** - * Grows the set to a larger number of bits. - * @param bit element that must fit in set - */ - public void growToInclude(int bit) { - int newSize = Math.max(bits.length << 1, numWordsToHold(bit)); - long newbits[] = new long[newSize]; - System.arraycopy(bits, 0, newbits, 0, bits.length); - bits = newbits; - } - - public boolean member(int el) { - int n = wordNumber(el); - if (n >= bits.length) return false; - return (bits[n] & bitMask(el)) != 0; - } - - public boolean nil() { - for (int i = bits.length - 1; i >= 0; i--) { - if (bits[i] != 0) return false; - } - return true; - } - - public BitSet not() { - BitSet s = (BitSet)this.clone(); - s.notInPlace(); - return s; - } - - public void notInPlace() { - for (int i = bits.length - 1; i >= 0; i--) { - bits[i] = ~bits[i]; - } - } - - /** complement bits in the range 0..maxBit. */ - public void notInPlace(int maxBit) { - notInPlace(0, maxBit); - } - - /** complement bits in the range minBit..maxBit.*/ - public void notInPlace(int minBit, int maxBit) { - // make sure that we have room for maxBit - growToInclude(maxBit); - for (int i = minBit; i <= maxBit; i++) { - int n = wordNumber(i); - bits[n] ^= bitMask(i); - } - } - - private final int numWordsToHold(int el) { - return (el >> LOG_BITS) + 1; - } - - public static BitSet of(int el) { - BitSet s = new BitSet(el + 1); - s.add(el); - return s; - } - - /** return this | a in a new set */ - public BitSet or(BitSet a) { - BitSet s = (BitSet)this.clone(); - s.orInPlace(a); - return s; - } - - public void orInPlace(BitSet a) { - // If this is smaller than a, grow this first - if (a.bits.length > bits.length) { - setSize(a.bits.length); - } - int min = Math.min(bits.length, a.bits.length); - for (int i = min - 1; i >= 0; i--) { - bits[i] |= a.bits[i]; - } - } - - // remove this element from this set - public void remove(int el) { - int n = wordNumber(el); - if (n >= bits.length) { - growToInclude(el); - } - bits[n] &= ~bitMask(el); - } - - /** - * Sets the size of a set. - * @param nwords how many words the new set should be - */ - private void setSize(int nwords) { - long newbits[] = new long[nwords]; - int n = Math.min(nwords, bits.length); - System.arraycopy(bits, 0, newbits, 0, n); - bits = newbits; - } - - public int size() { - return bits.length << LOG_BITS; // num words * bits per word - } - - /** return how much space is being used by the bits array not - * how many actually have member bits on. - */ - public int lengthInLongWords() { - return bits.length; - } - - /**Is this contained within a? */ - public boolean subset(BitSet a) { - if (a == null || !(a instanceof BitSet)) return false; - return this.and(a).equals(this); - } - - /**Subtract the elements of 'a' from 'this' in-place. - * Basically, just turn off all bits of 'this' that are in 'a'. - */ - public void subtractInPlace(BitSet a) { - if (a == null) return; - // for all words of 'a', turn off corresponding bits of 'this' - for (int i = 0; i < bits.length && i < a.bits.length; i++) { - bits[i] &= ~a.bits[i]; - } - } - - public int[] toArray() { - int[] elems = new int[degree()]; - int en = 0; - for (int i = 0; i < (bits.length << LOG_BITS); i++) { - if (member(i)) { - elems[en++] = i; - } - } - return elems; - } - - public long[] toPackedArray() { - return bits; - } - - public String toString() { - return toString(","); - } - - /** Transform a bit set into a string by formatting each element as an integer - * @separator The string to put in between elements - * @return A commma-separated list of values - */ - public String toString(String separator) { - String str = ""; - for (int i = 0; i < (bits.length << LOG_BITS); i++) { - if (member(i)) { - if (str.length() > 0) { - str += separator; - } - str = str + i; - } - } - return str; - } - - /** Transform a bit set into a string of characters. - * @separator The string to put in between elements - * @param formatter An object implementing the CharFormatter interface. - * @return A commma-separated list of character constants. - */ - public String toString(String separator, CharFormatter formatter) { - String str = ""; - - for (int i = 0; i < (bits.length << LOG_BITS); i++) { - if (member(i)) { - if (str.length() > 0) { - str += separator; - } - str = str + formatter.literalChar(i); - } - } - return str; - } - - /**Create a string representation where instead of integer elements, the - * ith element of vocabulary is displayed instead. Vocabulary is a Vector - * of Strings. - * @separator The string to put in between elements - * @return A commma-separated list of character constants. - */ - public String toString(String separator, Vector vocabulary) { - if (vocabulary == null) { - return toString(separator); - } - String str = ""; - for (int i = 0; i < (bits.length << LOG_BITS); i++) { - if (member(i)) { - if (str.length() > 0) { - str += separator; - } - if (i >= vocabulary.size()) { - str += "<bad element " + i + ">"; - } - else if (vocabulary.elementAt(i) == null) { - str += "<" + i + ">"; - } - else { - str += (String)vocabulary.elementAt(i); - } - } - } - return str; - } - - /** - * Dump a comma-separated list of the words making up the bit set. - * Split each 64 bit number into two more manageable 32 bit numbers. - * This generates a comma-separated list of C++-like unsigned long constants. - */ - public String toStringOfHalfWords() { - String s = new String(); - for (int i = 0; i < bits.length; i++) { - if (i != 0) s += ", "; - long tmp = bits[i]; - tmp &= 0xFFFFFFFFL; - s += (tmp + "UL"); - s += ", "; - tmp = bits[i] >>> 32; - tmp &= 0xFFFFFFFFL; - s += (tmp + "UL"); - } - return s; - } - - /** - * Dump a comma-separated list of the words making up the bit set. - * This generates a comma-separated list of Java-like long int constants. - */ - public String toStringOfWords() { - String s = new String(); - for (int i = 0; i < bits.length; i++) { - if (i != 0) s += ", "; - s += (bits[i] + "L"); - } - return s; - } - - /** Print out the bit set but collapse char ranges. */ - public String toStringWithRanges(String separator, CharFormatter formatter) { - String str = ""; - int[] elems = this.toArray(); - if (elems.length == 0) { - return ""; - } - // look for ranges - int i = 0; - while (i < elems.length) { - int lastInRange; - lastInRange = 0; - for (int j = i + 1; j < elems.length; j++) { - if (elems[j] != elems[j - 1] + 1) { - break; - } - lastInRange = j; - } - // found a range - if (str.length() > 0) { - str += separator; - } - if (lastInRange - i >= 2) { - str += formatter.literalChar(elems[i]); - str += ".."; - str += formatter.literalChar(elems[lastInRange]); - i = lastInRange; // skip past end of range for next range - } - else { // no range, just print current char and move on - str += formatter.literalChar(elems[i]); - } - i++; - } - return str; - } - - private final static int wordNumber(int bit) { - return bit >> LOG_BITS; // bit / BITS - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/IndexedVector.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/IndexedVector.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/IndexedVector.java 2006-08-31 00:34:14.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/IndexedVector.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,79 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Hashtable; -import java.util.Enumeration; - -import persistence.antlr.collections.impl.Vector; - -/** - * A simple indexed vector: a normal vector except that you must - * specify a key when adding an element. This allows fast lookup - * and allows the order of specification to be preserved. - */ -public class IndexedVector { - protected Vector elements; - protected Hashtable index; - - - /** - * IndexedVector constructor comment. - */ - public IndexedVector() { - elements = new Vector(10); - index = new Hashtable(10); - } - - /** - * IndexedVector constructor comment. - * @param size int - */ - public IndexedVector(int size) { - elements = new Vector(size); - index = new Hashtable(size); - } - - public synchronized void appendElement(Object key, Object value) { - elements.appendElement(value); - index.put(key, value); - } - - /** - * Returns the element at the specified index. - * @param index the index of the desired element - * @exception ArrayIndexOutOfBoundsException If an invalid - * index was given. - */ - public Object elementAt(int i) { - return elements.elementAt(i); - } - - public Enumeration elements() { - return elements.elements(); - } - - public Object getElement(Object key) { - Object o = index.get(key); - return o; - } - - /** remove element referred to by key NOT value; return false if not found. */ - public synchronized boolean removeElement(Object key) { - Object value = index.get(key); - if (value == null) { - return false; - } - index.remove(key); - elements.removeElement(value); - return false; - } - - public int size() { - return elements.size(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/IntRange.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/IntRange.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/IntRange.java 2006-08-31 00:34:15.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/IntRange.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,21 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public class IntRange { - int begin, end; - - - public IntRange(int begin, int end) { - this.begin = begin; - this.end = end; - } - - public String toString() { - return begin + ".." + end; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/LLCell.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/LLCell.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/LLCell.java 2006-08-31 00:34:15.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/LLCell.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**A linked list cell, which contains a ref to the object and next cell. - * The data,next members are public to this class, but not outside the - * collections.impl package. - * - * @author Terence Parr - * <a href=http://www.MageLang.com>MageLang Institute</a> - */ -class LLCell { - Object data; - LLCell next; - - - public LLCell(Object o) { - data = o; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/LLEnumeration.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/LLEnumeration.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/LLEnumeration.java 2006-08-31 00:34:15.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/LLEnumeration.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,53 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.List; -import persistence.antlr.collections.Stack; - -import java.util.Enumeration; -import java.util.NoSuchElementException; - -import persistence.antlr.collections.impl.LLCell; - -/**An enumeration of a LList. Maintains a cursor through the list. - * bad things would happen if the list changed via another thread - * while we were walking this list. - */ -final class LLEnumeration implements Enumeration { - LLCell cursor; - LList list; - - - /**Create an enumeration attached to a LList*/ - public LLEnumeration(LList l) { - list = l; - cursor = list.head; - } - - /** Return true/false depending on whether there are more - * elements to enumerate. - */ - public boolean hasMoreElements() { - if (cursor != null) - return true; - else - return false; - } - - /**Get the next element in the enumeration. Destructive in that - * the returned element is removed from the enumeration. This - * does not affect the list itself. - * @return the next object in the enumeration. - */ - public Object nextElement() { - if (!hasMoreElements()) throw new NoSuchElementException(); - LLCell p = cursor; - cursor = cursor.next; - return p.data; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/LList.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/LList.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/LList.java 2006-08-31 00:34:15.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/LList.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,133 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.List; -import persistence.antlr.collections.Stack; - -import java.util.Enumeration; -import java.util.NoSuchElementException; - -import persistence.antlr.collections.impl.LLCell; - -/**A Linked List Implementation (not thread-safe for simplicity) - * (adds to the tail) (has an enumeration) - */ -public class LList implements List, Stack { - protected LLCell head = null, tail = null; - protected int length = 0; - - - /** Add an object to the end of the list. - * @param o the object to add - */ - public void add(Object o) { - append(o); - } - - /** Append an object to the end of the list. - * @param o the object to append - */ - public void append(Object o) { - LLCell n = new LLCell(o); - if (length == 0) { - head = tail = n; - length = 1; - } - else { - tail.next = n; - tail = n; - length++; - } - } - - /**Delete the object at the head of the list. - * @return the object found at the head of the list. - * @exception NoSuchElementException if the list is empty. - */ - protected Object deleteHead() throws NoSuchElementException { - if (head == null) throw new NoSuchElementException(); - Object o = head.data; - head = head.next; - length--; - return o; - } - - /**Get the ith element in the list. - * @param i the index (from 0) of the requested element. - * @return the object at index i - * NoSuchElementException is thrown if i out of range - */ - public Object elementAt(int i) throws NoSuchElementException { - int j = 0; - for (LLCell p = head; p != null; p = p.next) { - if (i == j) return p.data; - j++; - } - throw new NoSuchElementException(); - } - - /**Return an enumeration of the list elements */ - public Enumeration elements() { - return new LLEnumeration(this); - } - - /** How high is the stack? */ - public int height() { - return length; - } - - /** Answers whether or not an object is contained in the list - * @param o the object to test for inclusion. - * @return true if object is contained else false. - */ - public boolean includes(Object o) { - for (LLCell p = head; p != null; p = p.next) { - if (p.data.equals(o)) return true; - } - return false; - } - // The next two methods make LLQueues and LLStacks easier. - - /** Insert an object at the head of the list. - * @param o the object to add - */ - protected void insertHead(Object o) { - LLCell c = head; - head = new LLCell(o); - head.next = c; - length++; - if (tail == null) tail = head; - } - - /**Return the length of the list.*/ - public int length() { - return length; - } - - /** Pop the top element of the stack off. - * @return the top of stack that was popped off. - * @exception NoSuchElementException if the stack is empty. - */ - public Object pop() throws NoSuchElementException { - Object o = deleteHead(); - return o; - } - // Satisfy the Stack interface now. - - /** Push an object onto the stack. - * @param o the object to push - */ - public void push(Object o) { - insertHead(o); - } - - public Object top() throws NoSuchElementException { - if (head == null) throw new NoSuchElementException(); - return head.data; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/VectorEnumeration.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/VectorEnumeration.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/VectorEnumeration.java 2006-08-31 00:34:15.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/VectorEnumeration.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,40 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Enumeration; -import java.util.NoSuchElementException; - -import persistence.antlr.collections.Enumerator; - -// based on java.lang.Vector; returns any null indices between non-null ones. - -class VectorEnumeration implements Enumeration { - Vector vector; - int i; - - - VectorEnumeration(Vector v) { - vector = v; - i = 0; - } - - public boolean hasMoreElements() { - synchronized (vector) { - return i <= vector.lastElement; - } - } - - public Object nextElement() { - synchronized (vector) { - if (i <= vector.lastElement) { - return vector.data[i++]; - } - throw new NoSuchElementException("VectorEnumerator"); - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/VectorEnumerator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/VectorEnumerator.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/VectorEnumerator.java 2006-08-31 00:34:15.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/VectorEnumerator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,40 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Enumeration; -import java.util.NoSuchElementException; - -import persistence.antlr.collections.Enumerator; - -// based on java.lang.Vector; returns any null indices between non-null ones. - -class VectorEnumerator implements Enumeration { - Vector vector; - int i; - - - VectorEnumerator(Vector v) { - vector = v; - i = 0; - } - - public boolean hasMoreElements() { - synchronized (vector) { - return i <= vector.lastElement; - } - } - - public Object nextElement() { - synchronized (vector) { - if (i <= vector.lastElement) { - return vector.data[i++]; - } - throw new NoSuchElementException("VectorEnumerator"); - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/Vector.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/Vector.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/impl/Vector.java 2006-08-31 00:34:15.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/impl/Vector.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,120 +0,0 @@ -package persistence.antlr.collections.impl; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Enumeration; -import java.util.NoSuchElementException; - -import persistence.antlr.collections.Enumerator; - -public class Vector implements Cloneable { - protected Object[] data; - protected int lastElement = -1; - - public Vector() { - this(10); - } - - public Vector(int size) { - data = new Object[size]; - } - - public synchronized void appendElement(Object o) { - ensureCapacity(lastElement + 2); - data[++lastElement] = o; - } - - /** - * Returns the current capacity of the vector. - */ - public int capacity() { - return data.length; - } - - public Object clone() { - Vector v = null; - try { - v = (Vector)super.clone(); - } - catch (CloneNotSupportedException e) { - System.err.println("cannot clone Vector.super"); - return null; - } - v.data = new Object[size()]; - System.arraycopy(data, 0, v.data, 0, size()); - return v; - } - - /** - * Returns the element at the specified index. - * @param index the index of the desired element - * @exception ArrayIndexOutOfBoundsException If an invalid - * index was given. - */ - public synchronized Object elementAt(int i) { - if (i >= data.length) { - throw new ArrayIndexOutOfBoundsException(i + " >= " + data.length); - } - if (i < 0) { - throw new ArrayIndexOutOfBoundsException(i + " < 0 "); - } - return data[i]; - } - - public synchronized Enumeration elements() { - return new VectorEnumerator(this); - } - - public synchronized void ensureCapacity(int minIndex) { - if (minIndex + 1 > data.length) { - Object oldData[] = data; - int n = data.length * 2; - if (minIndex + 1 > n) { - n = minIndex + 1; - } - data = new Object[n]; - System.arraycopy(oldData, 0, data, 0, oldData.length); - } - } - - public synchronized boolean removeElement(Object o) { - // find element - int i; - for (i = 0; i <= lastElement && data[i] != o; i++) { - ; - } - if (i <= lastElement) { // if found it - data[i] = null; // kill ref for GC - int above = lastElement - i; - if (above > 0) { - System.arraycopy(data, i + 1, data, i, above); - } - lastElement--; - return true; - } - else { - return false; - } - } - - public synchronized void setElementAt(Object obj, int i) { - if (i >= data.length) { - throw new ArrayIndexOutOfBoundsException(i + " >= " + data.length); - } - data[i] = obj; - // track last element in the vector so we can append things - if (i > lastElement) { - lastElement = i; - } - } - - // return number of slots in the vector; e.g., you can set - // the 30th element and size() will return 31. - public int size() { - return lastElement + 1; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/List.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/List.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/List.java 2006-08-31 00:34:13.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/List.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -package persistence.antlr.collections; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Enumeration; -import java.util.NoSuchElementException; - -/**A simple List interface that describes operations - * on a list. - */ -public interface List { - public void add(Object o); // can insert at head or append. - - public void append(Object o); - - public Object elementAt(int index) throws NoSuchElementException; - - public Enumeration elements(); - - public boolean includes(Object o); - - public int length(); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/collections/Stack.java glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/Stack.java --- glassfish/entity-persistence/src/java/persistence/antlr/collections/Stack.java 2006-08-31 00:34:13.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/collections/Stack.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,25 +0,0 @@ -package persistence.antlr.collections; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.NoSuchElementException; - -/** A simple stack definition; restrictive in that you cannot - * access arbitrary stack elements. - * - * @author Terence Parr - * <a href=http://www.MageLang.com>MageLang Institute</a> - */ -public interface Stack { - public int height(); - - public Object pop() throws NoSuchElementException; - - public void push(Object o); - - public Object top() throws NoSuchElementException; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CommonAST.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CommonAST.java --- glassfish/entity-persistence/src/java/persistence/antlr/CommonAST.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CommonAST.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,58 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.AST; - -/** Common AST node implementation */ -public class CommonAST extends BaseAST { - int ttype = Token.INVALID_TYPE; - String text; - - - /** Get the token text for this node */ - public String getText() { - return text; - } - - /** Get the token type for this node */ - public int getType() { - return ttype; - } - - public void initialize(int t, String txt) { - setType(t); - setText(txt); - } - - public void initialize(AST t) { - setText(t.getText()); - setType(t.getType()); - } - - public CommonAST() { - } - - public CommonAST(Token tok) { - initialize(tok); - } - - public void initialize(Token tok) { - setText(tok.getText()); - setType(tok.getType()); - } - - /** Set the token text for this node */ - public void setText(String text_) { - text = text_; - } - - /** Set the token type for this node */ - public void setType(int ttype_) { - ttype = ttype_; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CommonASTWithHiddenTokens.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CommonASTWithHiddenTokens.java --- glassfish/entity-persistence/src/java/persistence/antlr/CommonASTWithHiddenTokens.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CommonASTWithHiddenTokens.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,37 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** A CommonAST whose initialization copies hidden token - * information from the Token used to create a node. - */ -public class CommonASTWithHiddenTokens extends CommonAST { - protected CommonHiddenStreamToken hiddenBefore, hiddenAfter; // references to hidden tokens - - public CommonASTWithHiddenTokens() { - super(); - } - - public CommonASTWithHiddenTokens(Token tok) { - super(tok); - } - - public CommonHiddenStreamToken getHiddenAfter() { - return hiddenAfter; - } - - public CommonHiddenStreamToken getHiddenBefore() { - return hiddenBefore; - } - - public void initialize(Token tok) { - CommonHiddenStreamToken t = (CommonHiddenStreamToken)tok; - super.initialize(t); - hiddenBefore = t.getHiddenBefore(); - hiddenAfter = t.getHiddenAfter(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CommonHiddenStreamToken.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CommonHiddenStreamToken.java --- glassfish/entity-persistence/src/java/persistence/antlr/CommonHiddenStreamToken.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CommonHiddenStreamToken.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,40 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public class CommonHiddenStreamToken extends CommonToken { - protected CommonHiddenStreamToken hiddenBefore; - protected CommonHiddenStreamToken hiddenAfter; - - public CommonHiddenStreamToken() { - super(); - } - - public CommonHiddenStreamToken(int t, String txt) { - super(t, txt); - } - - public CommonHiddenStreamToken(String s) { - super(s); - } - - public CommonHiddenStreamToken getHiddenAfter() { - return hiddenAfter; - } - - public CommonHiddenStreamToken getHiddenBefore() { - return hiddenBefore; - } - - protected void setHiddenAfter(CommonHiddenStreamToken t) { - hiddenAfter = t; - } - - protected void setHiddenBefore(CommonHiddenStreamToken t) { - hiddenBefore = t; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CommonToken.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CommonToken.java --- glassfish/entity-persistence/src/java/persistence/antlr/CommonToken.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CommonToken.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,55 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public class CommonToken extends Token { - // most tokens will want line and text information - protected int line; - protected String text = null; - protected int col; - - public CommonToken() { - } - - public CommonToken(int t, String txt) { - type = t; - setText(txt); - } - - public CommonToken(String s) { - text = s; - } - - public int getLine() { - return line; - } - - public String getText() { - return text; - } - - public void setLine(int l) { - line = l; - } - - public void setText(String s) { - text = s; - } - - public String toString() { - return "[\"" + getText() + "\",<" + type + ">,line=" + line + ",col=" + col + "]"; - } - - /** Return token's start column */ - public int getColumn() { - return col; - } - - public void setColumn(int c) { - col = c; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CppBlockFinishingInfo.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CppBlockFinishingInfo.java --- glassfish/entity-persistence/src/java/persistence/antlr/CppBlockFinishingInfo.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CppBlockFinishingInfo.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,34 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -// C++ code generator by Pete Wells: pete@yamuna.demon.co.uk - -class CppBlockFinishingInfo { - String postscript; // what to generate to terminate block - boolean generatedSwitch;// did block finish with "default:" of switch? - boolean generatedAnIf; - - /** When generating an if or switch, end-of-token lookahead sets - * will become the else or default clause, don't generate an - * error clause in this case. - */ - boolean needAnErrorClause; - - - public CppBlockFinishingInfo() { - postscript=null; - generatedSwitch=false; - needAnErrorClause = true; - } - public CppBlockFinishingInfo(String ps, boolean genS, boolean generatedAnIf, boolean n) { - postscript = ps; - generatedSwitch = genS; - this.generatedAnIf = generatedAnIf; - needAnErrorClause = n; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CppCharFormatter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CppCharFormatter.java --- glassfish/entity-persistence/src/java/persistence/antlr/CppCharFormatter.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CppCharFormatter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,95 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -// C++ code generator by Pete Wells: pete@yamuna.demon.co.uk - -class CppCharFormatter implements CharFormatter { - - /** Given a character value, return a string representing the character - * that can be embedded inside a string literal or character literal - * This works for Java/C/C++ code-generation and languages with compatible - * special-character-escapment. - * - * Used internally in CppCharFormatter and in - * CppCodeGenerator.converJavaToCppString. - * - * @param c The character of interest. - * @param forCharLiteral true to escape for char literal, false for string literal - */ - public String escapeChar(int c, boolean forCharLiteral) { - // System.out.println("CppCharFormatter.escapeChar("+c+")"); - switch (c) { - case '\n' : return "\\n"; - case '\t' : return "\\t"; - case '\r' : return "\\r"; - case '\\' : return "\\\\"; - case '\'' : return forCharLiteral ? "\\'" : "'"; - case '"' : return forCharLiteral ? "\"" : "\\\""; - default : - if ( c < ' ' || c > 126 ) - { - if (c > 255) - { - String s = Integer.toString(c,16); - // put leading zeroes in front of the thing.. - while( s.length() < 4 ) - s = '0' + s; - return "\\u" + s; - } - else { - return "\\" + Integer.toString(c,8); - } - } - else { - return String.valueOf((char)c); - } - } - } - - /** Converts a String into a representation that can be use as a literal - * when surrounded by double-quotes. - * - * Used for escaping semantic predicate strings for exceptions. - * - * @param s The String to be changed into a literal - */ - public String escapeString(String s) - { - String retval = new String(); - for (int i = 0; i < s.length(); i++) - retval += escapeChar(s.charAt(i), false); - - return retval; - } - - /** Given a character value, return a string representing the character - * literal that can be recognized by the target language compiler. - * This works for languages that use single-quotes for character literals. - * @param c The character of interest. - */ - public String literalChar(int c) { - String ret = "0x"+Integer.toString(c,16); - if( c >= 0 && c <= 126 ) - ret += " /* '"+escapeChar(c,true)+"' */ "; - return ret; - } - - /** Converts a String into a string literal - * This works for languages that use double-quotes for string literals. - * Code-generators for languages should override this method. - * - * Used for the generation of the tables with token names - * - * @param s The String to be changed into a literal - */ - public String literalString(String s) - { - return "\"" + escapeString(s) + "\""; - } - -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CppCodeGenerator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CppCodeGenerator.java --- glassfish/entity-persistence/src/java/persistence/antlr/CppCodeGenerator.java 2006-08-31 00:34:05.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CppCodeGenerator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,4673 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -// C++ code generator by Pete Wells: pete@yamuna.demon.co.uk -// #line generation contributed by: Ric Klaren <klaren@cs.utwente.nl> - -import java.util.Enumeration; -import java.util.Hashtable; -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; -import java.io.PrintWriter; //SAS: changed for proper text file io -import java.io.IOException; -import java.io.FileWriter; - -/** Generate MyParser.cpp, MyParser.hpp, MyLexer.cpp, MyLexer.hpp - * and MyParserTokenTypes.hpp - */ -public class CppCodeGenerator extends CodeGenerator { - boolean DEBUG_CPP_CODE_GENERATOR = false; - // non-zero if inside syntactic predicate generation - protected int syntacticPredLevel = 0; - - // Are we generating ASTs (for parsers and tree parsers) right now? - protected boolean genAST = false; - - // Are we saving the text consumed (for lexers) right now? - protected boolean saveText = false; - - // Generate #line's - protected boolean genHashLines = true; - // Generate constructors or not - protected boolean noConstructors = false; - - // Used to keep track of lineno in output - protected int outputLine; - protected String outputFile; - - // Grammar parameters set up to handle different grammar classes. - // These are used to get instanceof tests out of code generation - boolean usingCustomAST = false; - String labeledElementType; - String labeledElementASTType; // mostly the same as labeledElementType except in parsers - String labeledElementASTInit; - String labeledElementInit; - String commonExtraArgs; - String commonExtraParams; - String commonLocalVars; - String lt1Value; - String exceptionThrown; - String throwNoViable; - - // Tracks the rule being generated. Used for mapTreeId - RuleBlock currentRule; - // Tracks the rule or labeled subrule being generated. Used for AST generation. - String currentASTResult; - // Mapping between the ids used in the current alt, and the - // names of variables used to represent their AST values. - Hashtable treeVariableMap = new Hashtable(); - - /** Used to keep track of which AST variables have been defined in a rule - * (except for the #rule_name and #rule_name_in var's - */ - Hashtable declaredASTVariables = new Hashtable(); - - // Count of unnamed generated variables - int astVarNumber = 1; - // Special value used to mark duplicate in treeVariableMap - protected static final String NONUNIQUE = new String(); - - public static final int caseSizeThreshold = 127; // ascii is max - - private Vector semPreds; - - // Used to keep track of which (heterogeneous AST types are used) - // which need to be set in the ASTFactory of the generated parser - private Vector astTypes; - - private static String namespaceStd = "ANTLR_USE_NAMESPACE(std)"; - private static String namespaceAntlr = "ANTLR_USE_NAMESPACE(antlr)"; - private static NameSpace nameSpace = null; - - private static final String preIncludeCpp = "pre_include_cpp"; - private static final String preIncludeHpp = "pre_include_hpp"; - private static final String postIncludeCpp = "post_include_cpp"; - private static final String postIncludeHpp = "post_include_hpp"; - - /** Create a C++ code-generator using the given Grammar. - * The caller must still call setTool, setBehavior, and setAnalyzer - * before generating code. - */ - public CppCodeGenerator() { - super(); - charFormatter = new CppCharFormatter(); - } - /** Adds a semantic predicate string to the sem pred vector - These strings will be used to build an array of sem pred names - when building a debugging parser. This method should only be - called when the debug option is specified - */ - protected int addSemPred(String predicate) { - semPreds.appendElement(predicate); - return semPreds.size()-1; - } - public void exitIfError() - { - if (antlrTool.hasError()) - { - antlrTool.fatalError("Exiting due to errors."); - } - } - protected int countLines( String s ) - { - int lines = 0; - for( int i = 0; i < s.length(); i++ ) - { - if( s.charAt(i) == '\n' ) - lines++; - } - return lines; - } - /** Output a String to the currentOutput stream. - * Ignored if string is null. - * @param s The string to output - */ - protected void _print(String s) - { - if (s != null) - { - outputLine += countLines(s); - currentOutput.print(s); - } - } - /** Print an action without leading tabs, attempting to - * preserve the current indentation level for multi-line actions - * Ignored if string is null. - * @param s The action string to output - */ - protected void _printAction(String s) - { - if (s != null) - { - outputLine += countLines(s)+1; - super._printAction(s); - } - } - /** Print an action stored in a token surrounded by #line stuff */ - public void printAction(Token t) - { - if (t != null) - { - genLineNo(t.getLine()); - printTabs(); - _printAction(processActionForSpecialSymbols(t.getText(), t.getLine(), - null, null) ); - genLineNo2(); - } - } - /** Print a header action by #line stuff also process any tree construction - * @param name The name of the header part - */ - public void printHeaderAction(String name) - { - Token a = (persistence.antlr.Token)behavior.headerActions.get(name); - if (a != null) - { - genLineNo(a.getLine()); - println(processActionForSpecialSymbols(a.getText(), a.getLine(), - null, null) ); - genLineNo2(); - } - } - /** Output a String followed by newline, to the currentOutput stream. - * Ignored if string is null. - * @param s The string to output - */ - protected void _println(String s) { - if (s != null) { - outputLine += countLines(s)+1; - currentOutput.println(s); - } - } - /** Output tab indent followed by a String followed by newline, - * to the currentOutput stream. Ignored if string is null. - * @param s The string to output - */ - protected void println(String s) { - if (s != null) { - printTabs(); - outputLine += countLines(s)+1; - currentOutput.println(s); - } - } - - /** Generate a #line or // line depending on options */ - public void genLineNo(int line) { - if ( line == 0 ) { - line++; - } - if( genHashLines ) - _println("#line "+line+" \""+antlrTool.fileMinusPath(antlrTool.grammarFile)+"\""); - } - - /** Generate a #line or // line depending on options */ - public void genLineNo(GrammarElement el) - { - if( el != null ) - genLineNo(el.getLine()); - } - /** Generate a #line or // line depending on options */ - public void genLineNo(Token t) - { - if (t != null) - genLineNo(t.getLine()); - } - /** Generate a #line or // line depending on options */ - public void genLineNo2() - { - if( genHashLines ) - { - _println("#line "+(outputLine+1)+" \""+outputFile+"\""); - } - } - /** Sanitize a string coming from antlr's lexer to something that's ok - * Also bomb out on multibyte char attempts. - * The bombing out on mb char's is a bit crude but alas. - */ - private String convertJavaToCppString( String s ) - { - String ret = new String(); - - int i = 0; - int val; - while ( i < s.length() ) - { - if( s.charAt(i) == '\\' ) - { - // deal with escaped junk - switch ( s.charAt(i+1) ) { - case 'b' : - case 'r' : - case 't' : - case 'n' : - case 'f' : - case '"' : - case '\'' : - case '\\' : - ret += "\\"+s.charAt(i+1); - i+=2; - continue; - - case 'u' : - // Unicode char \u1234 - val = Character.digit(s.charAt(i+2), 16) * 16 * 16 * 16 + - Character.digit(s.charAt(i+3), 16) * 16 * 16 + - Character.digit(s.charAt(i+4), 16) * 16 + - Character.digit(s.charAt(i+5), 16); - i += 6; - break; - - case '0' : // \123 - case '1' : - case '2' : - case '3' : - if( Character.isDigit(s.charAt(i+2)) ) - { - if( Character.isDigit(s.charAt(i+3)) ) - { - val = (s.charAt(i+1)-'0')*8*8 + (s.charAt(i+2)-'0')*8 + - (s.charAt(i+3)-'0'); - i += 4; - } - else - { - val = (s.charAt(i+1)-'0')*8 + (s.charAt(i+2)-'0'); - i += 3; - } - } - else - { - val = s.charAt(i+1)-'0'; - i += 2; - } - break; - - case '4' : - case '5' : - case '6' : - case '7' : - if ( Character.isDigit(s.charAt(i+2)) ) - { - val = (s.charAt(i+1)-'0')*8 + (s.charAt(i+2)-'0'); - i += 3; - } - else - { - val = s.charAt(i+1)-'0'; - i += 2; - } - default: - antlrTool.error("Unhandled escape in string constant: '"+s+"'"); - val = 0; - } - if( val >= ' ' && val <= 126 ) // just concat if printable - ret += (char)val; - else if( val > 255 ) // abort if multibyte - antlrTool.error("Multibyte character found in string constant: '"+s+"'"); - else - ret += charFormatter.escapeChar(val,true); - } - else if( s.charAt(i) >= ' ' && s.charAt(i) <= 126 ) - ret += s.charAt(i++); - else - ret += charFormatter.escapeChar(s.charAt(i++),true); - } - // System.out.println("convertJavaToCppString: "+s+" -> "+ret); - return ret; - } - /** Generate the parser, lexer, treeparser, and token types in C++ - */ - public void gen() { - // Do the code generation - try { - // Loop over all grammars - Enumeration grammarIter = behavior.grammars.elements(); - while (grammarIter.hasMoreElements()) { - Grammar g = (Grammar)grammarIter.nextElement(); - if ( g.debuggingOutput ) { - antlrTool.error(g.getFilename()+": C++ mode does not support -debug"); - } - // Connect all the components to each other - g.setGrammarAnalyzer(analyzer); - g.setCodeGenerator(this); - analyzer.setGrammar(g); - // To get right overloading behavior across hetrogeneous grammars - setupGrammarParameters(g); - g.generate(); - exitIfError(); - } - - // Loop over all token managers (some of which are lexers) - Enumeration tmIter = behavior.tokenManagers.elements(); - while (tmIter.hasMoreElements()) { - TokenManager tm = (TokenManager)tmIter.nextElement(); - if (!tm.isReadOnly()) { - // Write the token manager tokens as C++ - // this must appear before genTokenInterchange so that - // labels are set on string literals - genTokenTypes(tm); - // Write the token manager tokens as plain text - genTokenInterchange(tm); - } - exitIfError(); - } - } - catch (IOException e) { - antlrTool.reportException(e, null); - } - } - /** Generate code for the given grammar element. - * @param blk The {...} action to generate - */ - public void gen(ActionElement action) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("genAction("+action+")"); - if ( action.isSemPred ) { - genSemPred(action.actionText, action.line); - } - else { - if ( grammar.hasSyntacticPredicate ) { - println("if ( inputState->guessing==0 ) {"); - tabs++; - } - - ActionTransInfo tInfo = new ActionTransInfo(); - String actionStr = processActionForSpecialSymbols(action.actionText, - action.getLine(), - currentRule, tInfo); - - if ( tInfo.refRuleRoot!=null ) { - // Somebody referenced "#rule", make sure translated var is valid - // assignment to #rule is left as a ref also, meaning that assignments - // with no other refs like "#rule = foo();" still forces this code to be - // generated (unnecessarily). - println(tInfo.refRuleRoot + " = "+labeledElementASTType+"(currentAST.root);"); - } - - // dump the translated action - genLineNo(action); - printAction(actionStr); - genLineNo2(); - - if ( tInfo.assignToRoot ) { - // Somebody did a "#rule=", reset internal currentAST.root - println("currentAST.root = "+tInfo.refRuleRoot+";"); - // reset the child pointer too to be last sibling in sibling list - // now use if else in stead of x ? y : z to shut CC 4.2 up. - println("if ( "+tInfo.refRuleRoot+"!="+labeledElementASTInit+" &&"); - tabs++; - println(tInfo.refRuleRoot+"->getFirstChild() != "+labeledElementASTInit+" )"); - println(" currentAST.child = "+tInfo.refRuleRoot+"->getFirstChild();"); - tabs--; - println("else"); - tabs++; - println("currentAST.child = "+tInfo.refRuleRoot+";"); - tabs--; - println("currentAST.advanceChildToEnd();"); - } - - if ( grammar.hasSyntacticPredicate ) { - tabs--; - println("}"); - } - } - } - - /** Generate code for the given grammar element. - * @param blk The "x|y|z|..." block to generate - */ - public void gen(AlternativeBlock blk) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("gen("+blk+")"); - println("{"); - genBlockPreamble(blk); - genBlockInitAction(blk); - - // Tell AST generation to build subrule result - String saveCurrentASTResult = currentASTResult; - if (blk.getLabel() != null) { - currentASTResult = blk.getLabel(); - } - - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - - CppBlockFinishingInfo howToFinish = genCommonBlock(blk, true); - genBlockFinish(howToFinish, throwNoViable); - - println("}"); - - // Restore previous AST generation - currentASTResult = saveCurrentASTResult; - } - /** Generate code for the given grammar element. - * @param blk The block-end element to generate. Block-end - * elements are synthesized by the grammar parser to represent - * the end of a block. - */ - public void gen(BlockEndElement end) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("genRuleEnd("+end+")"); - } - /** Generate code for the given grammar element. - * @param blk The character literal reference to generate - */ - public void gen(CharLiteralElement atom) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) - System.out.println("genChar("+atom+")"); - - if ( atom.getLabel()!=null ) { - println(atom.getLabel() + " = " + lt1Value + ";"); - } - - boolean oldsaveText = saveText; - saveText = saveText && atom.getAutoGenType()==GrammarElement.AUTO_GEN_NONE; - genMatch(atom); - saveText = oldsaveText; - } - /** Generate code for the given grammar element. - * @param blk The character-range reference to generate - */ - public void gen(CharRangeElement r) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) - System.out.println("genCharRangeElement("+r.beginText+".."+r.endText+")"); - - if ( r.getLabel()!=null && syntacticPredLevel == 0) { - println(r.getLabel() + " = " + lt1Value + ";"); - } - // Correctly take care of saveIndex stuff... - boolean save = ( grammar instanceof LexerGrammar && - ( !saveText || - r.getAutoGenType() == GrammarElement.AUTO_GEN_BANG ) - ); - if (save) - println("_saveIndex=text.length();"); - - if( grammar instanceof LexerGrammar ) - println("matchRange("+convertJavaToCppString(r.beginText)+","+convertJavaToCppString(r.endText)+");"); - else - println("matchRange("+r.beginText+","+r.endText+");"); - - if (save) - println("text.setLength(_saveIndex);"); - } - /** Generate the lexer C++ files */ - public void gen(LexerGrammar g) throws IOException { - // If debugging, create a new sempred vector for this grammar - if (g.debuggingOutput) - semPreds = new Vector(); - - if( g.charVocabulary.size() > 256 ) - antlrTool.warning(g.getFilename()+": C++ mode does not support more than 8 bit characters (vocabulary size now: "+g.charVocabulary.size()+")"); - - setGrammar(g); - if (!(grammar instanceof LexerGrammar)) { - antlrTool.panic("Internal error generating lexer"); - } - - genBody(g); - genInclude(g); - } - /** Generate code for the given grammar element. - * @param blk The (...)+ block to generate - */ - public void gen(OneOrMoreBlock blk) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("gen+("+blk+")"); - String label; - String cnt; - println("{ // ( ... )+"); - genBlockPreamble(blk); - if ( blk.getLabel() != null ) { - cnt = "_cnt_"+blk.getLabel(); - } - else { - cnt = "_cnt" + blk.ID; - } - println("int "+cnt+"=0;"); - if ( blk.getLabel() != null ) { - label = blk.getLabel(); - } - else { - label = "_loop" + blk.ID; - } - - println("for (;;) {"); - tabs++; - // generate the init action for ()+ ()* inside the loop - // this allows us to do usefull EOF checking... - genBlockInitAction(blk); - - // Tell AST generation to build subrule result - String saveCurrentASTResult = currentASTResult; - if (blk.getLabel() != null) { - currentASTResult = blk.getLabel(); - } - - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - - // generate exit test if greedy set to false - // and an alt is ambiguous with exit branch - // or when lookahead derived purely from end-of-file - // Lookahead analysis stops when end-of-file is hit, - // returning set {epsilon}. Since {epsilon} is not - // ambig with any real tokens, no error is reported - // by deterministic() routines and we have to check - // for the case where the lookahead depth didn't get - // set to NONDETERMINISTIC (this only happens when the - // FOLLOW contains real atoms + epsilon). - boolean generateNonGreedyExitPath = false; - int nonGreedyExitDepth = grammar.maxk; - - if ( !blk.greedy && - blk.exitLookaheadDepth<=grammar.maxk && - blk.exitCache[blk.exitLookaheadDepth].containsEpsilon() ) - { - generateNonGreedyExitPath = true; - nonGreedyExitDepth = blk.exitLookaheadDepth; - } - else if ( !blk.greedy && - blk.exitLookaheadDepth==LLkGrammarAnalyzer.NONDETERMINISTIC ) - { - generateNonGreedyExitPath = true; - } - - // generate exit test if greedy set to false - // and an alt is ambiguous with exit branch - if ( generateNonGreedyExitPath ) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) { - System.out.println("nongreedy (...)+ loop; exit depth is "+ - blk.exitLookaheadDepth); - } - String predictExit = - getLookaheadTestExpression(blk.exitCache, - nonGreedyExitDepth); - println("// nongreedy exit test"); - println("if ( "+cnt+">=1 && "+predictExit+") goto "+label+";"); - } - - CppBlockFinishingInfo howToFinish = genCommonBlock(blk, false); - genBlockFinish( - howToFinish, - "if ( "+cnt+">=1 ) { goto "+label+"; } else {" + throwNoViable + "}" - ); - - println(cnt+"++;"); - tabs--; - println("}"); - println(label+":;"); - println("} // ( ... )+"); - - // Restore previous AST generation - currentASTResult = saveCurrentASTResult; - } - /** Generate the parser C++ file */ - public void gen(ParserGrammar g) throws IOException { - - // if debugging, set up a new vector to keep track of sempred - // strings for this grammar - if (g.debuggingOutput) - semPreds = new Vector(); - - setGrammar(g); - if (!(grammar instanceof ParserGrammar)) { - antlrTool.panic("Internal error generating parser"); - } - - genBody(g); - genInclude(g); - } - /** Generate code for the given grammar element. - * @param blk The rule-reference to generate - */ - public void gen(RuleRefElement rr) - { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("genRR("+rr+")"); - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rr.targetRule); - if (rs == null || !rs.isDefined()) - { - // Is this redundant??? - antlrTool.error("Rule '" + rr.targetRule + "' is not defined", grammar.getFilename(), rr.getLine(), rr.getColumn()); - return; - } - if (!(rs instanceof RuleSymbol)) - { - // Is this redundant??? - antlrTool.error("'" + rr.targetRule + "' does not name a grammar rule", grammar.getFilename(), rr.getLine(), rr.getColumn()); - return; - } - - genErrorTryForElement(rr); - - // AST value for labeled rule refs in tree walker. - // This is not AST construction; it is just the input tree node value. - if ( grammar instanceof TreeWalkerGrammar && - rr.getLabel() != null && - syntacticPredLevel == 0 ) - { - println(rr.getLabel() + " = (_t == ASTNULL) ? "+labeledElementASTInit+" : "+lt1Value+";"); - } - - // if in lexer and ! on rule ref or alt or rule, save buffer index to - // kill later - if ( grammar instanceof LexerGrammar && (!saveText||rr.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) - { - println("_saveIndex = text.length();"); - } - - // Process return value assignment if any - printTabs(); - if (rr.idAssign != null) - { - // Warn if the rule has no return type - if (rs.block.returnAction == null) - { - antlrTool.warning("Rule '" + rr.targetRule + "' has no return type", grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - _print(rr.idAssign + "="); - } else { - // Warn about return value if any, but not inside syntactic predicate - if ( !(grammar instanceof LexerGrammar) && syntacticPredLevel == 0 && rs.block.returnAction != null) - { - antlrTool.warning("Rule '" + rr.targetRule + "' returns a value", grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - } - - // Call the rule - GenRuleInvocation(rr); - - // if in lexer and ! on element or alt or rule, save buffer index to kill later - if ( grammar instanceof LexerGrammar && (!saveText||rr.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) { - println("text.erase(_saveIndex);"); - } - - // if not in a syntactic predicate - if (syntacticPredLevel == 0) - { - boolean doNoGuessTest = ( - grammar.hasSyntacticPredicate && - ( - grammar.buildAST && rr.getLabel() != null || - (genAST && rr.getAutoGenType() == GrammarElement.AUTO_GEN_NONE) - ) - ); - - if (doNoGuessTest) { - println("if (inputState->guessing==0) {"); - tabs++; - } - - if (grammar.buildAST && rr.getLabel() != null) - { - // always gen variable for rule return on labeled rules - // RK: hmm do I know here if the returnAST needs a cast ? - println(rr.getLabel() + "_AST = returnAST;"); - } - - if (genAST) - { - switch (rr.getAutoGenType()) - { - case GrammarElement.AUTO_GEN_NONE: - if( usingCustomAST ) - println("astFactory->addASTChild(currentAST, "+namespaceAntlr+"RefAST(returnAST));"); - else - println("astFactory->addASTChild( currentAST, returnAST );"); - break; - case GrammarElement.AUTO_GEN_CARET: - // FIXME: RK: I'm not so sure this should be an error.. - // I think it might actually work and be usefull at times. - antlrTool.error("Internal: encountered ^ after rule reference"); - break; - default: - break; - } - } - - // if a lexer and labeled, Token label defined at rule level, just set it here - if ( grammar instanceof LexerGrammar && rr.getLabel() != null ) - { - println(rr.getLabel()+"=_returnToken;"); - } - - if (doNoGuessTest) - { - tabs--; - println("}"); - } - } - genErrorCatchForElement(rr); - } - /** Generate code for the given grammar element. - * @param blk The string-literal reference to generate - */ - public void gen(StringLiteralElement atom) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("genString("+atom+")"); - - // Variable declarations for labeled elements - if (atom.getLabel()!=null && syntacticPredLevel == 0) { - println(atom.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(atom); - - // is there a bang on the literal? - boolean oldsaveText = saveText; - saveText = saveText && atom.getAutoGenType()==GrammarElement.AUTO_GEN_NONE; - - // matching - genMatch(atom); - - saveText = oldsaveText; - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _t->getNextSibling();"); - } - } - /** Generate code for the given grammar element. - * @param blk The token-range reference to generate - */ - public void gen(TokenRangeElement r) { - genErrorTryForElement(r); - if ( r.getLabel()!=null && syntacticPredLevel == 0) { - println(r.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(r); - - // match - println("matchRange("+r.beginText+","+r.endText+");"); - genErrorCatchForElement(r); - } - /** Generate code for the given grammar element. - * @param blk The token-reference to generate - */ - public void gen(TokenRefElement atom) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("genTokenRef("+atom+")"); - if ( grammar instanceof LexerGrammar ) { - antlrTool.panic("Token reference found in lexer"); - } - genErrorTryForElement(atom); - // Assign Token value to token label variable - if ( atom.getLabel()!=null && syntacticPredLevel == 0) { - println(atom.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(atom); - // matching - genMatch(atom); - genErrorCatchForElement(atom); - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _t->getNextSibling();"); - } - } - public void gen(TreeElement t) { - // save AST cursor - println(labeledElementType+" __t" + t.ID + " = _t;"); - - // If there is a label on the root, then assign that to the variable - if (t.root.getLabel() != null) { - println(t.root.getLabel() + " = (_t == ASTNULL) ? "+labeledElementASTInit+" : _t;"); - } - - // check for invalid modifiers ! and ^ on tree element roots - if ( t.root.getAutoGenType() == GrammarElement.AUTO_GEN_BANG ) { - antlrTool.error("Suffixing a root node with '!' is not implemented", - grammar.getFilename(), t.getLine(), t.getColumn()); - t.root.setAutoGenType(GrammarElement.AUTO_GEN_NONE); - } - if ( t.root.getAutoGenType() == GrammarElement.AUTO_GEN_CARET ) { - antlrTool.warning("Suffixing a root node with '^' is redundant; already a root", - grammar.getFilename(), t.getLine(), t.getColumn()); - t.root.setAutoGenType(GrammarElement.AUTO_GEN_NONE); - } - - // Generate AST variables - genElementAST(t.root); - if (grammar.buildAST) { - // Save the AST construction state - println(namespaceAntlr+"ASTPair __currentAST" + t.ID + " = currentAST;"); - // Make the next item added a child of the TreeElement root - println("currentAST.root = currentAST.child;"); - println("currentAST.child = "+labeledElementASTInit+";"); - } - - // match root - if ( t.root instanceof WildcardElement ) { - println("if ( _t == ASTNULL ) throw "+namespaceAntlr+"MismatchedTokenException();"); - } - else { - genMatch(t.root); - } - // move to list of children - println("_t = _t->getFirstChild();"); - - // walk list of children, generating code for each - for (int i=0; i<t.getAlternatives().size(); i++) { - Alternative a = t.getAlternativeAt(i); - AlternativeElement e = a.head; - while ( e != null ) { - e.generate(); - e = e.next; - } - } - - if (grammar.buildAST) { - // restore the AST construction state to that just after the - // tree root was added - println("currentAST = __currentAST" + t.ID + ";"); - } - // restore AST cursor - println("_t = __t" + t.ID + ";"); - // move cursor to sibling of tree just parsed - println("_t = _t->getNextSibling();"); - } - /** Generate the tree-parser C++ files */ - public void gen(TreeWalkerGrammar g) throws IOException { - setGrammar(g); - if (!(grammar instanceof TreeWalkerGrammar)) { - antlrTool.panic("Internal error generating tree-walker"); - } - - genBody(g); - genInclude(g); - } - /** Generate code for the given grammar element. - * @param wc The wildcard element to generate - */ - public void gen(WildcardElement wc) { - // Variable assignment for labeled elements - if (wc.getLabel()!=null && syntacticPredLevel == 0) { - println(wc.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(wc); - // Match anything but EOF - if (grammar instanceof TreeWalkerGrammar) { - println("if ( _t == "+labeledElementASTInit+" ) throw "+namespaceAntlr+"MismatchedTokenException();"); - } - else if (grammar instanceof LexerGrammar) { - if ( grammar instanceof LexerGrammar && - (!saveText||wc.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) { - println("_saveIndex = text.length();"); - } - println("matchNot(EOF/*_CHAR*/);"); - if ( grammar instanceof LexerGrammar && - (!saveText||wc.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) { - println("text.erase(_saveIndex);"); // kill text atom put in buffer - } - } - else { - println("matchNot(" + getValueString(Token.EOF_TYPE) + ");"); - } - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _t->getNextSibling();"); - } - } - /** Generate code for the given grammar element. - * @param blk The (...)* block to generate - */ - public void gen(ZeroOrMoreBlock blk) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("gen*("+blk+")"); - println("{ // ( ... )*"); - genBlockPreamble(blk); - String label; - if ( blk.getLabel() != null ) { - label = blk.getLabel(); - } - else { - label = "_loop" + blk.ID; - } - println("for (;;) {"); - tabs++; - // generate the init action for ()+ ()* inside the loop - // this allows us to do usefull EOF checking... - genBlockInitAction(blk); - - // Tell AST generation to build subrule result - String saveCurrentASTResult = currentASTResult; - if (blk.getLabel() != null) { - currentASTResult = blk.getLabel(); - } - - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - - // generate exit test if greedy set to false - // and an alt is ambiguous with exit branch - // or when lookahead derived purely from end-of-file - // Lookahead analysis stops when end-of-file is hit, - // returning set {epsilon}. Since {epsilon} is not - // ambig with any real tokens, no error is reported - // by deterministic() routines and we have to check - // for the case where the lookahead depth didn't get - // set to NONDETERMINISTIC (this only happens when the - // FOLLOW contains real atoms + epsilon). - boolean generateNonGreedyExitPath = false; - int nonGreedyExitDepth = grammar.maxk; - - if ( !blk.greedy && - blk.exitLookaheadDepth<=grammar.maxk && - blk.exitCache[blk.exitLookaheadDepth].containsEpsilon() ) - { - generateNonGreedyExitPath = true; - nonGreedyExitDepth = blk.exitLookaheadDepth; - } - else if ( !blk.greedy && - blk.exitLookaheadDepth==LLkGrammarAnalyzer.NONDETERMINISTIC ) - { - generateNonGreedyExitPath = true; - } - if ( generateNonGreedyExitPath ) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) { - System.out.println("nongreedy (...)* loop; exit depth is "+ - blk.exitLookaheadDepth); - } - String predictExit = - getLookaheadTestExpression(blk.exitCache, - nonGreedyExitDepth); - println("// nongreedy exit test"); - println("if ("+predictExit+") goto "+label+";"); - } - - CppBlockFinishingInfo howToFinish = genCommonBlock(blk, false); - genBlockFinish(howToFinish, "goto " + label + ";"); - - tabs--; - println("}"); - println(label+":;"); - println("} // ( ... )*"); - - // Restore previous AST generation - currentASTResult = saveCurrentASTResult; - } - /** Generate an alternative. - * @param alt The alternative to generate - * @param blk The block to which the alternative belongs - */ - protected void genAlt(Alternative alt, AlternativeBlock blk) - { - // Save the AST generation state, and set it to that of the alt - boolean savegenAST = genAST; - genAST = genAST && alt.getAutoGen(); - - boolean oldsaveTest = saveText; - saveText = saveText && alt.getAutoGen(); - - // Reset the variable name map for the alternative - Hashtable saveMap = treeVariableMap; - treeVariableMap = new Hashtable(); - - // Generate try block around the alt for error handling - if (alt.exceptionSpec != null) { - println("try { // for error handling"); - tabs++; - } - - AlternativeElement elem = alt.head; - while ( !(elem instanceof BlockEndElement) ) { - elem.generate(); // alt can begin with anything. Ask target to gen. - elem = elem.next; - } - - if ( genAST) - { - if (blk instanceof RuleBlock) - { - // Set the AST return value for the rule - RuleBlock rblk = (RuleBlock)blk; - if( usingCustomAST ) - println(rblk.getRuleName() + "_AST = "+labeledElementASTType+"(currentAST.root);"); - else - println(rblk.getRuleName() + "_AST = currentAST.root;"); - } - else if (blk.getLabel() != null) { - // ### future: also set AST value for labeled subrules. - // println(blk.getLabel() + "_AST = "+labeledElementASTType+"(currentAST.root);"); - antlrTool.warning("Labeled subrules are not implemented", grammar.getFilename(), blk.getLine(), blk.getColumn()); - } - } - - if (alt.exceptionSpec != null) - { - // close try block - tabs--; - println("}"); - genErrorHandler(alt.exceptionSpec); - } - - genAST = savegenAST; - saveText = oldsaveTest; - - treeVariableMap = saveMap; - } - /** Generate all the bitsets to be used in the parser or lexer - * Generate the raw bitset data like "long _tokenSet1_data[] = {...};" - * and the BitSet object declarations like - * "BitSet _tokenSet1 = new BitSet(_tokenSet1_data);" - * Note that most languages do not support object initialization inside a - * class definition, so other code-generators may have to separate the - * bitset declarations from the initializations (e.g., put the - * initializations in the generated constructor instead). - * @param bitsetList The list of bitsets to generate. - * @param maxVocabulary Ensure that each generated bitset can contain at - * least this value. - * @param prefix string glued in from of bitset names used for namespace - * qualifications. - */ - protected void genBitsets( - Vector bitsetList, - int maxVocabulary, - String prefix - ) - { - TokenManager tm = grammar.tokenManager; - - println(""); - - for (int i = 0; i < bitsetList.size(); i++) - { - BitSet p = (BitSet)bitsetList.elementAt(i); - // Ensure that generated BitSet is large enough for vocabulary - p.growToInclude(maxVocabulary); - - // initialization data - println( - "const unsigned long " + prefix + getBitsetName(i) + "_data_" + "[] = { " + - p.toStringOfHalfWords() + - " };" - ); - - // Dump the contents of the bitset in readable format... - String t = "// "; - for( int j = 0; j < tm.getVocabulary().size(); j++ ) - { - if ( p.member( j ) ) - { - if ( (grammar instanceof LexerGrammar) ) - t += tm.getVocabulary().elementAt(j)+" "; - else - t += tm.getTokenStringAt(j)+" "; - - if( t.length() > 70 ) - { - println(t); - t = "// "; - } - } - } - if ( t != "// " ) - println(t); - - // BitSet object - println( - "const "+namespaceAntlr+"BitSet " + prefix + getBitsetName(i) + "(" + - getBitsetName(i) + "_data_," + p.size()/32 + - ");" - ); - } - } - protected void genBitsetsHeader( - Vector bitsetList, - int maxVocabulary - ) { - println(""); - for (int i = 0; i < bitsetList.size(); i++) - { - BitSet p = (BitSet)bitsetList.elementAt(i); - // Ensure that generated BitSet is large enough for vocabulary - p.growToInclude(maxVocabulary); - // initialization data - println("static const unsigned long " + getBitsetName(i) + "_data_" + "[];"); - // BitSet object - println("static const "+namespaceAntlr+"BitSet " + getBitsetName(i) + ";"); - } - } - /** Generate the finish of a block, using a combination of the info - * returned from genCommonBlock() and the action to perform when - * no alts were taken - * @param howToFinish The return of genCommonBlock() - * @param noViableAction What to generate when no alt is taken - */ - private void genBlockFinish(CppBlockFinishingInfo howToFinish, String noViableAction) - { - if (howToFinish.needAnErrorClause && - (howToFinish.generatedAnIf || howToFinish.generatedSwitch)) { - if ( howToFinish.generatedAnIf ) { - println("else {"); - } - else { - println("{"); - } - tabs++; - println(noViableAction); - tabs--; - println("}"); - } - - if ( howToFinish.postscript!=null ) { - println(howToFinish.postscript); - } - } - /** Generate the initaction for a block, which may be a RuleBlock or a - * plain AlternativeBLock. - * @blk The block for which the preamble is to be generated. - */ - protected void genBlockInitAction( AlternativeBlock blk ) - { - // dump out init action - if ( blk.initAction!=null ) { - genLineNo(blk); - printAction(processActionForSpecialSymbols(blk.initAction, blk.line, - currentRule, null) ); - genLineNo2(); - } - } - /** Generate the header for a block, which may be a RuleBlock or a - * plain AlternativeBlock. This generates any variable declarations - * and syntactic-predicate-testing variables. - * @blk The block for which the preamble is to be generated. - */ - protected void genBlockPreamble(AlternativeBlock blk) { - // define labels for rule blocks. - if ( blk instanceof RuleBlock ) { - RuleBlock rblk = (RuleBlock)blk; - if ( rblk.labeledElements!=null ) { - for (int i=0; i<rblk.labeledElements.size(); i++) { - - AlternativeElement a = (AlternativeElement)rblk.labeledElements.elementAt(i); - //System.out.println("looking at labeled element: "+a); - // Variables for labeled rule refs and subrules are different than - // variables for grammar atoms. This test is a little tricky because - // we want to get all rule refs and ebnf, but not rule blocks or - // syntactic predicates - if ( - a instanceof RuleRefElement || - a instanceof AlternativeBlock && - !(a instanceof RuleBlock) && - !(a instanceof SynPredBlock) ) - { - if ( !(a instanceof RuleRefElement) && - ((AlternativeBlock)a).not && - analyzer.subruleCanBeInverted(((AlternativeBlock)a), grammar instanceof LexerGrammar) - ) { - // Special case for inverted subrules that will be - // inlined. Treat these like token or char literal - // references - println(labeledElementType + " " + a.getLabel() + " = " + labeledElementInit + ";"); - if (grammar.buildAST) { - genASTDeclaration( a ); - } - } - else - { - if (grammar.buildAST) - { - // Always gen AST variables for labeled elements, - // even if the element itself is marked with ! - genASTDeclaration( a ); - } - if ( grammar instanceof LexerGrammar ) - println(namespaceAntlr+"RefToken "+a.getLabel()+";"); - - if (grammar instanceof TreeWalkerGrammar) { - // always generate rule-ref variables for tree walker - println(labeledElementType + " " + a.getLabel() + " = " + labeledElementInit + ";"); - } - } - } - else - { - // It is a token or literal reference. Generate the - // correct variable type for this grammar - println(labeledElementType + " " + a.getLabel() + " = " + labeledElementInit + ";"); - // In addition, generate *_AST variables if building ASTs - if (grammar.buildAST) - { - if (a instanceof GrammarAtom && - ((GrammarAtom)a).getASTNodeType() != null ) - { - GrammarAtom ga = (GrammarAtom)a; - genASTDeclaration( a, "Ref"+ga.getASTNodeType() ); - } - else - { - genASTDeclaration( a ); - } - } - } - } - } - } - } - public void genBody(LexerGrammar g) throws IOException - { - outputFile = grammar.getClassName() + ".cpp"; - outputLine = 1; - currentOutput = antlrTool.openOutputFile(outputFile); - //SAS: changed for proper text file io - - genAST = false; // no way to gen trees. - saveText = true; // save consumed characters. - - tabs=0; - - // Generate header common to all C++ output files - genHeader(outputFile); - - printHeaderAction(preIncludeCpp); - // Generate header specific to lexer C++ file - println("#include \"" + grammar.getClassName() + ".hpp\""); - println("#include <antlr/CharBuffer.hpp>"); - println("#include <antlr/TokenStreamException.hpp>"); - println("#include <antlr/TokenStreamIOException.hpp>"); - println("#include <antlr/TokenStreamRecognitionException.hpp>"); - println("#include <antlr/CharStreamException.hpp>"); - println("#include <antlr/CharStreamIOException.hpp>"); - println("#include <antlr/NoViableAltForCharException.hpp>"); - if (grammar.debuggingOutput) - println("#include <antlr/DebuggingInputBuffer.hpp>"); - println(""); - printHeaderAction(postIncludeCpp); - - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - - // Generate user-defined lexer file preamble - printAction(grammar.preambleAction); - - // Generate lexer class definition - String sup=null; - if ( grammar.superClass!=null ) { - sup = grammar.superClass; - } - else { - sup = grammar.getSuperClass(); - if (sup.lastIndexOf('.') != -1) - sup = sup.substring(sup.lastIndexOf('.')+1); - sup = namespaceAntlr + sup; - } - - if( noConstructors ) - { - println("#if 0"); - println("// constructor creation turned of with 'noConstructor' option"); - } - // - // Generate the constructor from InputStream - // - println(grammar.getClassName() + "::" + grammar.getClassName() + "(" + namespaceStd + "istream& in)"); - tabs++; - // if debugging, wrap the input buffer in a debugger - if (grammar.debuggingOutput) - println(": " + sup + "(new "+namespaceAntlr+"DebuggingInputBuffer(new "+namespaceAntlr+"CharBuffer(in)),"+g.caseSensitive+")"); - else - println(": " + sup + "(new "+namespaceAntlr+"CharBuffer(in),"+g.caseSensitive+")"); - tabs--; - println("{"); - tabs++; - - // if debugging, set up array variables and call user-overridable - // debugging setup method - if ( grammar.debuggingOutput ) { - println("setRuleNames(_ruleNames);"); - println("setSemPredNames(_semPredNames);"); - println("setupDebugging();"); - } - -// println("setCaseSensitive("+g.caseSensitive+");"); - println("initLiterals();"); - tabs--; - println("}"); - println(""); - - // Generate the constructor from InputBuffer - println(grammar.getClassName() + "::" + grammar.getClassName() + "("+namespaceAntlr+"InputBuffer& ib)"); - tabs++; - // if debugging, wrap the input buffer in a debugger - if (grammar.debuggingOutput) - println(": " + sup + "(new "+namespaceAntlr+"DebuggingInputBuffer(ib),"+g.caseSensitive+")"); - else - println(": " + sup + "(ib,"+g.caseSensitive+")"); - tabs--; - println("{"); - tabs++; - - // if debugging, set up array variables and call user-overridable - // debugging setup method - if ( grammar.debuggingOutput ) { - println("setRuleNames(_ruleNames);"); - println("setSemPredNames(_semPredNames);"); - println("setupDebugging();"); - } - -// println("setCaseSensitive("+g.caseSensitive+");"); - println("initLiterals();"); - tabs--; - println("}"); - println(""); - - // Generate the constructor from LexerSharedInputState - println(grammar.getClassName() + "::" + grammar.getClassName() + "(const "+namespaceAntlr+"LexerSharedInputState& state)"); - tabs++; - println(": " + sup + "(state,"+g.caseSensitive+")"); - tabs--; - println("{"); - tabs++; - - // if debugging, set up array variables and call user-overridable - // debugging setup method - if ( grammar.debuggingOutput ) { - println("setRuleNames(_ruleNames);"); - println("setSemPredNames(_semPredNames);"); - println("setupDebugging();"); - } - -// println("setCaseSensitive("+g.caseSensitive+");"); - println("initLiterals();"); - tabs--; - println("}"); - println(""); - - if( noConstructors ) - { - println("// constructor creation turned of with 'noConstructor' option"); - println("#endif"); - } - - println("void " + grammar.getClassName() + "::initLiterals()"); - println("{"); - tabs++; - // Generate the initialization of the map - // containing the string literals used in the lexer - // The literals variable itself is in CharScanner - Enumeration keys = grammar.tokenManager.getTokenSymbolKeys(); - while ( keys.hasMoreElements() ) { - String key = (String)keys.nextElement(); - if ( key.charAt(0) != '"' ) { - continue; - } - TokenSymbol sym = grammar.tokenManager.getTokenSymbol(key); - if ( sym instanceof StringLiteralSymbol ) { - StringLiteralSymbol s = (StringLiteralSymbol)sym; - println("literals["+s.getId()+"] = "+s.getTokenType()+";"); - } - } - - // Generate the setting of various generated options. - tabs--; - println("}"); - - Enumeration ids; - // generate the rule name array for debugging - if (grammar.debuggingOutput) { - println("const char* "+grammar.getClassName()+"::_ruleNames[] = {"); - tabs++; - - ids = grammar.rules.elements(); - int ruleNum=0; - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol) ids.nextElement(); - if ( sym instanceof RuleSymbol) - println("\""+((RuleSymbol)sym).getId()+"\","); - } - println("0"); - tabs--; - println("};"); - } - - // Generate nextToken() rule. - // nextToken() is a synthetic lexer rule that is the implicit OR of all - // user-defined lexer rules. - genNextToken(); - - // Generate code for each rule in the lexer - ids = grammar.rules.elements(); - int ruleNum=0; - while ( ids.hasMoreElements() ) { - RuleSymbol sym = (RuleSymbol) ids.nextElement(); - // Don't generate the synthetic rules - if (!sym.getId().equals("mnextToken")) { - genRule(sym, false, ruleNum++, grammar.getClassName() + "::"); - } - exitIfError(); - } - - // Generate the semantic predicate map for debugging - if (grammar.debuggingOutput) - genSemPredMap(grammar.getClassName() + "::"); - - // Generate the bitsets used throughout the lexer - genBitsets(bitsetsUsed, ((LexerGrammar)grammar).charVocabulary.size(), grammar.getClassName() + "::" ); - - println(""); - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Close the lexer output stream - currentOutput.close(); - currentOutput = null; - } - public void genInitFactory( Grammar g ) - { - // Generate the method to initialize an ASTFactory when we're - // building AST's - String param_name = "factory "; - if( ! g.buildAST ) - param_name = ""; - - println("void "+ g.getClassName() + "::initializeASTFactory( "+namespaceAntlr+"ASTFactory& "+param_name+")"); - println("{"); - tabs++; - - if( g.buildAST ) - { - // print out elements collected... - Enumeration e = astTypes.elements(); - while( e.hasMoreElements() ) - println((String)e.nextElement()); - - println("factory.setMaxNodeType("+grammar.tokenManager.maxTokenType()+");"); - } - tabs--; - println("}"); - } - // FIXME: and so why are we passing here a g param while inside - // we merrily use the global grammar. - public void genBody(ParserGrammar g) throws IOException - { - // Open the output stream for the parser and set the currentOutput - outputFile = grammar.getClassName() + ".cpp"; - outputLine = 1; - currentOutput = antlrTool.openOutputFile(outputFile); - - genAST = grammar.buildAST; - - tabs = 0; - - // Generate the header common to all output files. - genHeader(outputFile); - - printHeaderAction(preIncludeCpp); - - // Generate header for the parser - println("#include \"" + grammar.getClassName() + ".hpp\""); - println("#include <antlr/NoViableAltException.hpp>"); - println("#include <antlr/SemanticException.hpp>"); - println("#include <antlr/ASTFactory.hpp>"); - - printHeaderAction(postIncludeCpp); - - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - - // Output the user-defined parser preamble - printAction(grammar.preambleAction); - - String sup=null; - if ( grammar.superClass!=null ) - sup = grammar.superClass; - else { - sup = grammar.getSuperClass(); - if (sup.lastIndexOf('.') != -1) - sup = sup.substring(sup.lastIndexOf('.')+1); - sup = namespaceAntlr + sup; - } - - // set up an array of all the rule names so the debugger can - // keep track of them only by number -- less to store in tree... - if (grammar.debuggingOutput) { - println("const char* "+grammar.getClassName()+"::_ruleNames[] = {"); - tabs++; - - Enumeration ids = grammar.rules.elements(); - int ruleNum=0; - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol) ids.nextElement(); - if ( sym instanceof RuleSymbol) - println("\""+((RuleSymbol)sym).getId()+"\","); - } - println("0"); - tabs--; - println("};"); - } - - // Generate _initialize function - // disabled since it isn't used anymore.. - -// println("void " + grammar.getClassName() + "::_initialize(void)"); -// println("{"); -// tabs++; - - // if debugging, set up arrays and call the user-overridable - // debugging setup method -// if ( grammar.debuggingOutput ) { -// println("setRuleNames(_ruleNames);"); -// println("setSemPredNames(_semPredNames);"); -// println("setupDebugging();"); -// } -// tabs--; -// println("}"); - if( noConstructors ) - { - println("#if 0"); - println("// constructor creation turned of with 'noConstructor' option"); - } - - // Generate parser class constructor from TokenBuffer - print(grammar.getClassName() + "::" + grammar.getClassName()); - println("("+namespaceAntlr+"TokenBuffer& tokenBuf, int k)"); - println(": " + sup + "(tokenBuf,k)"); - println("{"); -// tabs++; -// println("_initialize();"); -// tabs--; - println("}"); - println(""); - - print(grammar.getClassName() + "::" + grammar.getClassName()); - println("("+namespaceAntlr+"TokenBuffer& tokenBuf)"); - println(": " + sup + "(tokenBuf," + grammar.maxk + ")"); - println("{"); -// tabs++; -// println("_initialize();"); -// tabs--; - println("}"); - println(""); - - // Generate parser class constructor from TokenStream - print(grammar.getClassName() + "::" + grammar.getClassName()); - println("("+namespaceAntlr+"TokenStream& lexer, int k)"); - println(": " + sup + "(lexer,k)"); - println("{"); -// tabs++; -// println("_initialize();"); -// tabs--; - println("}"); - println(""); - - print(grammar.getClassName() + "::" + grammar.getClassName()); - println("("+namespaceAntlr+"TokenStream& lexer)"); - println(": " + sup + "(lexer," + grammar.maxk + ")"); - println("{"); -// tabs++; -// println("_initialize();"); -// tabs--; - println("}"); - println(""); - - print(grammar.getClassName() + "::" + grammar.getClassName()); - println("(const "+namespaceAntlr+"ParserSharedInputState& state)"); - println(": " + sup + "(state," + grammar.maxk + ")"); - println("{"); -// tabs++; -// println("_initialize();"); -// tabs--; - println("}"); - println(""); - - if( noConstructors ) - { - println("// constructor creation turned of with 'noConstructor' option"); - println("#endif"); - } - - astTypes = new Vector(); - - // Generate code for each rule in the grammar - Enumeration ids = grammar.rules.elements(); - int ruleNum=0; - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol) ids.nextElement(); - if ( sym instanceof RuleSymbol) { - RuleSymbol rs = (RuleSymbol)sym; - genRule(rs, rs.references.size()==0, ruleNum++, grammar.getClassName() + "::"); - } - exitIfError(); - } - - genInitFactory( g ); - - // Generate the token names - genTokenStrings(grammar.getClassName() + "::"); - - // Generate the bitsets used throughout the grammar - genBitsets(bitsetsUsed, grammar.tokenManager.maxTokenType(), grammar.getClassName() + "::" ); - - // Generate the semantic predicate map for debugging - if (grammar.debuggingOutput) - genSemPredMap(grammar.getClassName() + "::"); - - // Close class definition - println(""); - println(""); - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - public void genBody(TreeWalkerGrammar g) throws IOException - { - // Open the output stream for the parser and set the currentOutput - outputFile = grammar.getClassName() + ".cpp"; - outputLine = 1; - currentOutput = antlrTool.openOutputFile(outputFile); - //SAS: changed for proper text file io - - genAST = grammar.buildAST; - tabs = 0; - - // Generate the header common to all output files. - genHeader(outputFile); - - printHeaderAction(preIncludeCpp); - - // Generate header for the parser - println("#include \"" + grammar.getClassName() + ".hpp\""); - println("#include <antlr/Token.hpp>"); - println("#include <antlr/AST.hpp>"); - println("#include <antlr/NoViableAltException.hpp>"); - println("#include <antlr/MismatchedTokenException.hpp>"); - println("#include <antlr/SemanticException.hpp>"); - println("#include <antlr/BitSet.hpp>"); - - printHeaderAction(postIncludeCpp); - - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - - // Output the user-defined parser premamble - printAction(grammar.preambleAction); - - // Generate parser class definition - String sup = null; - if ( grammar.superClass!=null ) { - sup = grammar.superClass; - } - else { - sup = grammar.getSuperClass(); - if (sup.lastIndexOf('.') != -1) - sup = sup.substring(sup.lastIndexOf('.')+1); - sup = namespaceAntlr + sup; - } - if( noConstructors ) - { - println("#if 0"); - println("// constructor creation turned of with 'noConstructor' option"); - } - - // Generate default parser class constructor - println(grammar.getClassName() + "::" + grammar.getClassName() + "()"); - println("\t: "+namespaceAntlr+"TreeParser() {"); - tabs++; -// println("setTokenNames(_tokenNames);"); - tabs--; - println("}"); - - if( noConstructors ) - { - println("// constructor creation turned of with 'noConstructor' option"); - println("#endif"); - } - println(""); - - astTypes = new Vector(); - - // Generate code for each rule in the grammar - Enumeration ids = grammar.rules.elements(); - int ruleNum=0; - String ruleNameInits = ""; - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol) ids.nextElement(); - if ( sym instanceof RuleSymbol) { - RuleSymbol rs = (RuleSymbol)sym; - genRule(rs, rs.references.size()==0, ruleNum++, grammar.getClassName() + "::"); - } - exitIfError(); - } - - // Generate the ASTFactory initialization function - genInitFactory( grammar ); - // Generate the token names - genTokenStrings(grammar.getClassName() + "::"); - - // Generate the bitsets used throughout the grammar - genBitsets(bitsetsUsed, grammar.tokenManager.maxTokenType(), grammar.getClassName() + "::" ); - - // Close class definition - println(""); - println(""); - - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - /** Generate a series of case statements that implement a BitSet test. - * @param p The Bitset for which cases are to be generated - */ - protected void genCases(BitSet p) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("genCases("+p+")"); - int[] elems; - - elems = p.toArray(); - // Wrap cases four-per-line for lexer, one-per-line for parser - int wrap = 1; //(grammar instanceof LexerGrammar) ? 4 : 1; - int j=1; - boolean startOfLine = true; - for (int i = 0; i < elems.length; i++) { - if (j==1) { - print(""); - } else { - _print(" "); - } - _print("case " + getValueString(elems[i]) + ":"); - - if (j==wrap) { - _println(""); - startOfLine = true; - j=1; - } - else { - j++; - startOfLine = false; - } - } - if (!startOfLine) { - _println(""); - } - } - /** Generate common code for a block of alternatives; return a postscript - * that needs to be generated at the end of the block. Other routines - * may append else-clauses and such for error checking before the postfix - * is generated. - * If the grammar is a lexer, then generate alternatives in an order where - * alternatives requiring deeper lookahead are generated first, and - * EOF in the lookahead set reduces the depth of the lookahead. - * @param blk The block to generate - * @param noTestForSingle If true, then it does not generate a test for a single alternative. - */ - public CppBlockFinishingInfo genCommonBlock( - AlternativeBlock blk, - boolean noTestForSingle ) - { - int nIF=0; - boolean createdLL1Switch = false; - int closingBracesOfIFSequence = 0; - CppBlockFinishingInfo finishingInfo = new CppBlockFinishingInfo(); - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("genCommonBlk("+blk+")"); - - // Save the AST generation state, and set it to that of the block - boolean savegenAST = genAST; - genAST = genAST && blk.getAutoGen(); - - boolean oldsaveTest = saveText; - saveText = saveText && blk.getAutoGen(); - - // Is this block inverted? If so, generate special-case code - if ( blk.not && - analyzer.subruleCanBeInverted(blk, grammar instanceof LexerGrammar) ) - { - Lookahead p = analyzer.look(1, blk); - // Variable assignment for labeled elements - if (blk.getLabel() != null && syntacticPredLevel == 0) { - println(blk.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(blk); - - String astArgs=""; - if (grammar instanceof TreeWalkerGrammar) { - if( usingCustomAST ) - astArgs=namespaceAntlr+"RefAST"+"(_t),"; - else - astArgs="_t,"; - } - - // match the bitset for the alternative - println("match(" + astArgs + getBitsetName(markBitsetForGen(p.fset)) + ");"); - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) - { - println("_t = _t->getNextSibling();"); - } - return finishingInfo; - } - - // Special handling for single alt - if (blk.getAlternatives().size() == 1) - { - Alternative alt = blk.getAlternativeAt(0); - // Generate a warning if there is a synPred for single alt. - if (alt.synPred != null) - { - antlrTool.warning( - "Syntactic predicate superfluous for single alternative", - grammar.getFilename(), - blk.getAlternativeAt(0).synPred.getLine(), - blk.getAlternativeAt(0).synPred.getColumn() - ); - } - if (noTestForSingle) - { - if (alt.semPred != null) - { - // Generate validating predicate - genSemPred(alt.semPred, blk.line); - } - genAlt(alt, blk); - return finishingInfo; - } - } - - // count number of simple LL(1) cases; only do switch for - // many LL(1) cases (no preds, no end of token refs) - // We don't care about exit paths for (...)*, (...)+ - // because we don't explicitly have a test for them - // as an alt in the loop. - // - // Also, we now count how many unicode lookahead sets - // there are--they must be moved to DEFAULT or ELSE - // clause. - - int nLL1 = 0; - for (int i=0; i<blk.getAlternatives().size(); i++) - { - Alternative a = blk.getAlternativeAt(i); - if ( suitableForCaseExpression(a) ) - nLL1++; - } - - // do LL(1) cases - if ( nLL1 >= makeSwitchThreshold ) - { - // Determine the name of the item to be compared - String testExpr = lookaheadString(1); - createdLL1Switch = true; - // when parsing trees, convert null to valid tree node with NULL lookahead - if ( grammar instanceof TreeWalkerGrammar ) - { - println("if (_t == "+labeledElementASTInit+" )"); - tabs++; - println("_t = ASTNULL;"); - tabs--; - } - println("switch ( "+testExpr+") {"); - for (int i=0; i<blk.alternatives.size(); i++) - { - Alternative alt = blk.getAlternativeAt(i); - // ignore any non-LL(1) alts, predicated alts or end-of-token alts - // or end-of-token alts for case expressions - if ( !suitableForCaseExpression(alt) ) - { - continue; - } - Lookahead p = alt.cache[1]; - if (p.fset.degree() == 0 && !p.containsEpsilon()) - { - antlrTool.warning("Alternate omitted due to empty prediction set", - grammar.getFilename(), - alt.head.getLine(), alt.head.getColumn()); - } - else - { - genCases(p.fset); - println("{"); - tabs++; - genAlt(alt, blk); - println("break;"); - tabs--; - println("}"); - } - } - println("default:"); - tabs++; - } - - // do non-LL(1) and nondeterministic cases - // This is tricky in the lexer, because of cases like: - // STAR : '*' ; - // ASSIGN_STAR : "*="; - // Since nextToken is generated without a loop, then the STAR will - // have end-of-token as it's lookahead set for LA(2). So, we must generate the - // alternatives containing trailing end-of-token in their lookahead sets *after* - // the alternatives without end-of-token. This implements the usual - // lexer convention that longer matches come before shorter ones, e.g. - // "*=" matches ASSIGN_STAR not STAR - // - // For non-lexer grammars, this does not sort the alternates by depth - // Note that alts whose lookahead is purely end-of-token at k=1 end up - // as default or else clauses. - int startDepth = (grammar instanceof LexerGrammar) ? grammar.maxk : 0; - for (int altDepth = startDepth; altDepth >= 0; altDepth--) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("checking depth "+altDepth); - for (int i=0; i<blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("genAlt: "+i); - // if we made a switch above, ignore what we already took care - // of. Specifically, LL(1) alts with no preds - // that do not have end-of-token in their prediction set - if ( createdLL1Switch && - suitableForCaseExpression(alt) ) - { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) - System.out.println("ignoring alt because it was in the switch"); - continue; - } - String e; - - boolean unpredicted = false; - - if (grammar instanceof LexerGrammar) { - // Calculate the "effective depth" of the alt, which is the max - // depth at which cache[depth]!=end-of-token - int effectiveDepth = alt.lookaheadDepth; - if (effectiveDepth == GrammarAnalyzer.NONDETERMINISTIC) - { - // use maximum lookahead - effectiveDepth = grammar.maxk; - } - while ( effectiveDepth >= 1 && - alt.cache[effectiveDepth].containsEpsilon() ) - { - effectiveDepth--; - } - // Ignore alts whose effective depth is other than the ones we - // are generating for this iteration. - if (effectiveDepth != altDepth) - { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) - System.out.println("ignoring alt because effectiveDepth!=altDepth;"+effectiveDepth+"!="+altDepth); - continue; - } - unpredicted = lookaheadIsEmpty(alt, effectiveDepth); - e = getLookaheadTestExpression(alt, effectiveDepth); - } - else - { - unpredicted = lookaheadIsEmpty(alt, grammar.maxk); - e = getLookaheadTestExpression(alt, grammar.maxk); - } - - // Was it a big unicode range that forced unsuitability - // for a case expression? - if ( alt.cache[1].fset.degree() > caseSizeThreshold && - suitableForCaseExpression(alt)) - { - if ( nIF==0 ) - { - // generate this only for the first if the elseif's - // are covered by this one - if ( grammar instanceof TreeWalkerGrammar ) { - println("if (_t == "+labeledElementASTInit+" )"); - tabs++; - println("_t = ASTNULL;"); - tabs--; - } - println("if " + e + " {"); - } - else - println("else if " + e + " {"); - } - else if (unpredicted && - alt.semPred==null && - alt.synPred==null) - { - // The alt has empty prediction set and no - // predicate to help out. if we have not - // generated a previous if, just put {...} around - // the end-of-token clause - if ( nIF==0 ) { - println("{"); - } - else { - println("else {"); - } - finishingInfo.needAnErrorClause = false; - } - else - { - // check for sem and syn preds - // Add any semantic predicate expression to the lookahead test - if ( alt.semPred != null ) { - // if debugging, wrap the evaluation of the predicate in a method - // - // translate $ and # references - ActionTransInfo tInfo = new ActionTransInfo(); - String actionStr = processActionForSpecialSymbols(alt.semPred, - blk.line, - currentRule, - tInfo); - // ignore translation info...we don't need to do anything with it. - - // call that will inform SemanticPredicateListeners of the - // result - if ( grammar.debuggingOutput && - ((grammar instanceof ParserGrammar) || (grammar instanceof LexerGrammar)) - ) - e = "("+e+"&& fireSemanticPredicateEvaluated(persistence.antlr.debug.SemanticPredicateEvent.PREDICTING,"+ //FIXME - addSemPred(charFormatter.escapeString(actionStr))+","+actionStr+"))"; - else - e = "("+e+"&&("+actionStr +"))"; - } - - // Generate any syntactic predicates - if ( nIF>0 ) { - if ( alt.synPred != null ) { - println("else {"); - tabs++; - genSynPred( alt.synPred, e ); - closingBracesOfIFSequence++; - } - else { - println("else if " + e + " {"); - } - } - else { - if ( alt.synPred != null ) { - genSynPred( alt.synPred, e ); - } - else { - // when parsing trees, convert null to valid tree node - // with NULL lookahead. - if ( grammar instanceof TreeWalkerGrammar ) { - println("if (_t == "+labeledElementASTInit+" )"); - tabs++; - println("_t = ASTNULL;"); - tabs--; - } - println("if " + e + " {"); - } - } - - } - - nIF++; - tabs++; - genAlt(alt, blk); - tabs--; - println("}"); - } - } - String ps = ""; - for (int i=1; i<=closingBracesOfIFSequence; i++) { - tabs--; // does JavaCodeGenerator need this? - ps+="}"; - } - - // Restore the AST generation state - genAST = savegenAST; - - // restore save text state - saveText=oldsaveTest; - - // Return the finishing info. - if ( createdLL1Switch ) { - tabs--; - finishingInfo.postscript = ps+"}"; - finishingInfo.generatedSwitch = true; - finishingInfo.generatedAnIf = nIF>0; - //return new CppBlockFinishingInfo(ps+"}",true,nIF>0); // close up switch statement - - } - else { - finishingInfo.postscript = ps; - finishingInfo.generatedSwitch = false; - finishingInfo.generatedAnIf = nIF>0; - //return new CppBlockFinishingInfo(ps, false,nIF>0); - } - return finishingInfo; - } - - private static boolean suitableForCaseExpression(Alternative a) { - return a.lookaheadDepth == 1 && - a.semPred == null && - !a.cache[1].containsEpsilon() && - a.cache[1].fset.degree()<=caseSizeThreshold; - } - - /** Generate code to link an element reference into the AST - */ - private void genElementAST(AlternativeElement el) { - - // handle case where you're not building trees, but are in tree walker. - // Just need to get labels set up. - if ( grammar instanceof TreeWalkerGrammar && !grammar.buildAST ) - { - String elementRef; - String astName; - - // Generate names and declarations of the AST variable(s) - if (el.getLabel() == null) - { - elementRef = lt1Value; - // Generate AST variables for unlabeled stuff - astName = "tmp" + astVarNumber + "_AST"; - astVarNumber++; - // Map the generated AST variable in the alternate - mapTreeVariable(el, astName); - // Generate an "input" AST variable also - println(labeledElementASTType+" "+astName+"_in = "+elementRef+";"); - } - return; - } - - if (grammar.buildAST && syntacticPredLevel == 0) - { - boolean needASTDecl = - ( genAST && (el.getLabel() != null || - el.getAutoGenType() != GrammarElement.AUTO_GEN_BANG )); - - // RK: if we have a grammar element always generate the decl - // since some guy can access it from an action and we can't - // peek ahead (well not without making a mess). - // I'd prefer taking this out. - if( el.getAutoGenType() != GrammarElement.AUTO_GEN_BANG && - (el instanceof TokenRefElement) ) - needASTDecl = true; - - boolean doNoGuessTest = - ( grammar.hasSyntacticPredicate && needASTDecl ); - - String elementRef; - String astNameBase; - - // Generate names and declarations of the AST variable(s) - if (el.getLabel() != null) - { - // if the element is labeled use that name... - elementRef = el.getLabel(); - astNameBase = el.getLabel(); - } - else - { - // else generate a temporary name... - elementRef = lt1Value; - // Generate AST variables for unlabeled stuff - astNameBase = "tmp" + astVarNumber; - astVarNumber++; - } - - // Generate the declaration if required. - if ( needASTDecl ) - { - if ( el instanceof GrammarAtom ) - { - GrammarAtom ga = (GrammarAtom)el; - if ( ga.getASTNodeType()!=null ) - { - genASTDeclaration( el, astNameBase, "Ref"+ga.getASTNodeType() ); -// println("Ref"+ga.getASTNodeType()+" " + astName + ";"); - } - else - { - genASTDeclaration( el, astNameBase, labeledElementASTType ); -// println(labeledElementASTType+" " + astName + " = "+labeledElementASTInit+";"); - } - } - else - { - genASTDeclaration( el, astNameBase, labeledElementASTType ); -// println(labeledElementASTType+" " + astName + " = "+labeledElementASTInit+";"); - } - } - - // for convenience.. - String astName = astNameBase + "_AST"; - - // Map the generated AST variable in the alternate - mapTreeVariable(el, astName); - if (grammar instanceof TreeWalkerGrammar) - { - // Generate an "input" AST variable also - println(labeledElementASTType+" " + astName + "_in = "+labeledElementASTInit+";"); - } - - // Enclose actions with !guessing - if (doNoGuessTest) { - println("if ( inputState->guessing == 0 ) {"); - tabs++; - } - - // if something has a label assume it will be used - // so we must initialize the RefAST - if (el.getLabel() != null) - { - if ( el instanceof GrammarAtom ) - { - println(astName + " = "+ - getASTCreateString((GrammarAtom)el,elementRef) + ";"); - } - else - { - println(astName + " = "+ - getASTCreateString(elementRef) + ";"); - } - } - - // if it has no label but a declaration exists initialize it. - if( el.getLabel() == null && needASTDecl ) - { - elementRef = lt1Value; - if ( el instanceof GrammarAtom ) - { - println(astName + " = "+ - getASTCreateString((GrammarAtom)el,elementRef) + ";"); - } - else - { - println(astName + " = "+ - getASTCreateString(elementRef) + ";"); - } - // Map the generated AST variable in the alternate - if (grammar instanceof TreeWalkerGrammar) - { - // set "input" AST variable also - println(astName + "_in = " + elementRef + ";"); - } - } - - if (genAST) - { - switch (el.getAutoGenType()) - { - case GrammarElement.AUTO_GEN_NONE: - if( usingCustomAST || - (el instanceof GrammarAtom && - ((GrammarAtom)el).getASTNodeType() != null) ) - println("astFactory->addASTChild(currentAST, "+namespaceAntlr+"RefAST("+ astName + "));"); - else - println("astFactory->addASTChild(currentAST, "+ astName + ");"); - // println("astFactory.addASTChild(currentAST, "+namespaceAntlr+"RefAST(" + astName + "));"); - break; - case GrammarElement.AUTO_GEN_CARET: - if( usingCustomAST || - (el instanceof GrammarAtom && - ((GrammarAtom)el).getASTNodeType() != null) ) - println("astFactory->makeASTRoot(currentAST, "+namespaceAntlr+"RefAST(" + astName + "));"); - else - println("astFactory->makeASTRoot(currentAST, " + astName + ");"); - break; - default: - break; - } - } - if (doNoGuessTest) - { - tabs--; - println("}"); - } - } - } - /** Close the try block and generate catch phrases - * if the element has a labeled handler in the rule - */ - private void genErrorCatchForElement(AlternativeElement el) { - if (el.getLabel() == null) return; - String r = el.enclosingRuleName; - if ( grammar instanceof LexerGrammar ) { - r = CodeGenerator.encodeLexerRuleName(el.enclosingRuleName); - } - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(r); - if (rs == null) { - antlrTool.panic("Enclosing rule not found!"); - } - ExceptionSpec ex = rs.block.findExceptionSpec(el.getLabel()); - if (ex != null) { - tabs--; - println("}"); - genErrorHandler(ex); - } - } - /** Generate the catch phrases for a user-specified error handler */ - private void genErrorHandler(ExceptionSpec ex) - { - // Each ExceptionHandler in the ExceptionSpec is a separate catch - for (int i = 0; i < ex.handlers.size(); i++) - { - ExceptionHandler handler = (ExceptionHandler)ex.handlers.elementAt(i); - // Generate catch phrase - println("catch (" + handler.exceptionTypeAndName.getText() + ") {"); - tabs++; - if (grammar.hasSyntacticPredicate) { - println("if (inputState->guessing==0) {"); - tabs++; - } - - // When not guessing, execute user handler action - ActionTransInfo tInfo = new ActionTransInfo(); - genLineNo(handler.action); - printAction( - processActionForSpecialSymbols( handler.action.getText(), - handler.action.getLine(), - currentRule, tInfo ) - ); - genLineNo2(); - - if (grammar.hasSyntacticPredicate) - { - tabs--; - println("} else {"); - tabs++; - // When guessing, rethrow exception - println("throw;"); - tabs--; - println("}"); - } - // Close catch phrase - tabs--; - println("}"); - } - } - /** Generate a try { opening if the element has a labeled handler in the rule */ - private void genErrorTryForElement(AlternativeElement el) { - if (el.getLabel() == null) return; - String r = el.enclosingRuleName; - if ( grammar instanceof LexerGrammar ) { - r = CodeGenerator.encodeLexerRuleName(el.enclosingRuleName); - } - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(r); - if (rs == null) { - antlrTool.panic("Enclosing rule not found!"); - } - ExceptionSpec ex = rs.block.findExceptionSpec(el.getLabel()); - if (ex != null) { - println("try { // for error handling"); - tabs++; - } - } - /** Generate a header that is common to all C++ files */ - protected void genHeader(String fileName) - { - println("/* $ANTLR "+antlrTool.version+": "+ - "\""+antlrTool.fileMinusPath(antlrTool.grammarFile)+"\""+ - " -> "+ - "\""+fileName+"\"$ */"); - } - - // these are unique to C++ mode - public void genInclude(LexerGrammar g) throws IOException - { - outputFile = grammar.getClassName() + ".hpp"; - outputLine = 1; - currentOutput = antlrTool.openOutputFile(outputFile); - //SAS: changed for proper text file io - - genAST = false; // no way to gen trees. - saveText = true; // save consumed characters. - - tabs=0; - - // Generate a guard wrapper - println("#ifndef INC_"+grammar.getClassName()+"_hpp_"); - println("#define INC_"+grammar.getClassName()+"_hpp_"); - println(""); - - printHeaderAction(preIncludeHpp); - - println("#include <antlr/config.hpp>"); - - // Generate header common to all C++ output files - genHeader(outputFile); - - // Generate header specific to lexer header file - println("#include <antlr/CommonToken.hpp>"); - println("#include <antlr/InputBuffer.hpp>"); - println("#include <antlr/BitSet.hpp>"); - println("#include \"" + grammar.tokenManager.getName() + TokenTypesFileSuffix+".hpp\""); - - // Find the name of the super class - String sup=null; - if ( grammar.superClass!=null ) { - sup = grammar.superClass; - - println("\n// Include correct superclass header with a header statement for example:"); - println("// header \"post_include_hpp\" {"); - println("// #include \""+sup+".hpp\""); - println("// }"); - println("// Or...."); - println("// header {"); - println("// #include \""+sup+".hpp\""); - println("// }\n"); - } - else { - sup = grammar.getSuperClass(); - if (sup.lastIndexOf('.') != -1) - sup = sup.substring(sup.lastIndexOf('.')+1); - println("#include <antlr/"+sup+".hpp>"); - sup = namespaceAntlr + sup; - } - - // Do not use printAction because we assume tabs==0 - printHeaderAction(postIncludeHpp); - - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - - printHeaderAction(""); - - // print javadoc comment if any - if ( grammar.comment!=null ) { - _println(grammar.comment); - } - - // Generate lexer class definition - print("class CUSTOM_API " + grammar.getClassName() + " : public " + sup); - println(", public " + grammar.tokenManager.getName() + TokenTypesFileSuffix); - - Token tsuffix = (Token)grammar.options.get("classHeaderSuffix"); - if ( tsuffix != null ) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(),"\"","\""); - if ( suffix != null ) { - print(", "+suffix); // must be an interface name for Java - } - } - println("{"); - - // Generate user-defined lexer class members - if (grammar.classMemberAction != null) { - genLineNo(grammar.classMemberAction); - print( - processActionForSpecialSymbols(grammar.classMemberAction.getText(), - grammar.classMemberAction.getLine(), - currentRule, null) - ); - genLineNo2(); - } - - // Generate initLiterals() method - tabs=0; - println("private:"); - tabs=1; - println("void initLiterals();"); - - // Generate getCaseSensitiveLiterals() method - tabs=0; - println("public:"); - tabs=1; - println("bool getCaseSensitiveLiterals() const"); - println("{"); - tabs++; - println("return "+g.caseSensitiveLiterals + ";"); - tabs--; - println("}"); - - // Make constructors public - tabs=0; - println("public:"); - tabs=1; - - if( noConstructors ) - { - tabs = 0; - println("#if 0"); - println("// constructor creation turned of with 'noConstructor' option"); - tabs = 1; - } - - // Generate the constructor from std::istream - println(grammar.getClassName() + "(" + namespaceStd + "istream& in);"); - - // Generate the constructor from InputBuffer - println(grammar.getClassName() + "("+namespaceAntlr+"InputBuffer& ib);"); - - println(grammar.getClassName() + "(const "+namespaceAntlr+"LexerSharedInputState& state);"); - if( noConstructors ) - { - tabs = 0; - println("// constructor creation turned of with 'noConstructor' option"); - println("#endif"); - tabs = 1; - } - - // Generate nextToken() rule. - // nextToken() is a synthetic lexer rule that is the implicit OR of all - // user-defined lexer rules. - println(namespaceAntlr+"RefToken nextToken();"); - - // Generate code for each rule in the lexer - Enumeration ids = grammar.rules.elements(); - while ( ids.hasMoreElements() ) { - RuleSymbol sym = (RuleSymbol) ids.nextElement(); - // Don't generate the synthetic rules - if (!sym.getId().equals("mnextToken")) { - genRuleHeader(sym, false); - } - exitIfError(); - } - - // Make the rest private - tabs=0; - println("private:"); - tabs=1; - - // generate the rule name array for debugging - if ( grammar.debuggingOutput ) { - println("static const char* _ruleNames[];"); - } - - // Generate the semantic predicate map for debugging - if (grammar.debuggingOutput) - println("static const char* _semPredNames[];"); - - // Generate the bitsets used throughout the lexer - genBitsetsHeader(bitsetsUsed, ((LexerGrammar)grammar).charVocabulary.size()); - - tabs=0; - println("};"); - println(""); - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Generate a guard wrapper - println("#endif /*INC_"+grammar.getClassName()+"_hpp_*/"); - - // Close the lexer output stream - currentOutput.close(); - currentOutput = null; - } - public void genInclude(ParserGrammar g) throws IOException - { - // Open the output stream for the parser and set the currentOutput - outputFile = grammar.getClassName() + ".hpp"; - outputLine = 1; - currentOutput = antlrTool.openOutputFile(outputFile); - //SAS: changed for proper text file io - - genAST = grammar.buildAST; - - tabs = 0; - - // Generate a guard wrapper - println("#ifndef INC_"+grammar.getClassName()+"_hpp_"); - println("#define INC_"+grammar.getClassName()+"_hpp_"); - println(""); - printHeaderAction(preIncludeHpp); - println("#include <antlr/config.hpp>"); - - // Generate the header common to all output files. - genHeader(outputFile); - - // Generate header for the parser - println("#include <antlr/TokenStream.hpp>"); - println("#include <antlr/TokenBuffer.hpp>"); - println("#include \"" + grammar.tokenManager.getName() + TokenTypesFileSuffix+".hpp\""); - - // Generate parser class definition - String sup=null; - if ( grammar.superClass!=null ) { - sup = grammar.superClass; - println("\n// Include correct superclass header with a header statement for example:"); - println("// header \"post_include_hpp\" {"); - println("// #include \""+sup+".hpp\""); - println("// }"); - println("// Or...."); - println("// header {"); - println("// #include \""+sup+".hpp\""); - println("// }\n"); - } - else { - sup = grammar.getSuperClass(); - if (sup.lastIndexOf('.') != -1) - sup = sup.substring(sup.lastIndexOf('.')+1); - println("#include <antlr/"+sup+".hpp>"); - sup = namespaceAntlr + sup; - } - println(""); - - // Do not use printAction because we assume tabs==0 - printHeaderAction(postIncludeHpp); - - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - - printHeaderAction(""); - - // print javadoc comment if any - if ( grammar.comment!=null ) { - _println(grammar.comment); - } - - // generate the actual class definition - print("class CUSTOM_API " + grammar.getClassName() + " : public " + sup); - println(", public " + grammar.tokenManager.getName() + TokenTypesFileSuffix); - - Token tsuffix = (Token)grammar.options.get("classHeaderSuffix"); - if ( tsuffix != null ) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(),"\"","\""); - if ( suffix != null ) - print(", "+suffix); // must be an interface name for Java - } - println("{"); - - // set up an array of all the rule names so the debugger can - // keep track of them only by number -- less to store in tree... - if (grammar.debuggingOutput) { - println("public: static const char* _ruleNames[];"); - } - // Generate user-defined parser class members - if (grammar.classMemberAction != null) { - genLineNo(grammar.classMemberAction.getLine()); - print( - processActionForSpecialSymbols(grammar.classMemberAction.getText(), - grammar.classMemberAction.getLine(), - currentRule, null) - ); - genLineNo2(); - } - println("public:"); - tabs = 1; - println("void initializeASTFactory( "+namespaceAntlr+"ASTFactory& factory );"); -// println("// called from constructors"); -// println("void _initialize( void );"); - - // Generate parser class constructor from TokenBuffer - tabs=0; - if( noConstructors ) - { - println("#if 0"); - println("// constructor creation turned of with 'noConstructor' option"); - } - println("protected:"); - tabs=1; - println(grammar.getClassName() + "("+namespaceAntlr+"TokenBuffer& tokenBuf, int k);"); - tabs=0; - println("public:"); - tabs=1; - println(grammar.getClassName() + "("+namespaceAntlr+"TokenBuffer& tokenBuf);"); - - // Generate parser class constructor from TokenStream - tabs=0; - println("protected:"); - tabs=1; - println(grammar.getClassName()+"("+namespaceAntlr+"TokenStream& lexer, int k);"); - tabs=0; - println("public:"); - tabs=1; - println(grammar.getClassName()+"("+namespaceAntlr+"TokenStream& lexer);"); - - println(grammar.getClassName()+"(const "+namespaceAntlr+"ParserSharedInputState& state);"); - if( noConstructors ) - { - tabs = 0; - println("// constructor creation turned of with 'noConstructor' option"); - println("#endif"); - tabs = 1; - } - - println("int getNumTokens() const"); - println("{"); tabs++; - println("return "+grammar.getClassName()+"::NUM_TOKENS;"); - tabs--; println("}"); - println("const char* getTokenName( int type ) const"); - println("{"); tabs++; - println("if( type > getNumTokens() ) return 0;"); - println("return "+grammar.getClassName()+"::tokenNames[type];"); - tabs--; println("}"); - println("const char* const* getTokenNames() const"); - println("{"); tabs++; - println("return "+grammar.getClassName()+"::tokenNames;"); - tabs--; println("}"); - - // Generate code for each rule in the grammar - Enumeration ids = grammar.rules.elements(); - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol) ids.nextElement(); - if ( sym instanceof RuleSymbol) { - RuleSymbol rs = (RuleSymbol)sym; - genRuleHeader(rs, rs.references.size()==0); - } - exitIfError(); - } - - // RK: when we are using a custom ast override Parser::getAST to return - // the custom AST type. Ok, this does not work anymore with newer - // compilers gcc 3.2.x and up. The reference counter is probably - // getting in the way. - // So now we just patch the return type back to RefAST - tabs = 0; println("public:"); tabs = 1; - println(namespaceAntlr+"RefAST getAST()"); - println("{"); - if( usingCustomAST ) - { - tabs++; - println("return "+namespaceAntlr+"RefAST(returnAST);"); - tabs--; - } - else - { - tabs++; - println("return returnAST;"); - tabs--; - } - println("}"); - println(""); - - tabs=0; println("protected:"); tabs=1; - println(labeledElementASTType+" returnAST;"); - - // Make the rest private - tabs=0; - println("private:"); - tabs=1; - - // Generate the token names - println("static const char* tokenNames[];"); - // and how many there are of them - _println("#ifndef NO_STATIC_CONSTS"); - println("static const int NUM_TOKENS = "+grammar.tokenManager.getVocabulary().size()+";"); - _println("#else"); - println("enum {"); - println("\tNUM_TOKENS = "+grammar.tokenManager.getVocabulary().size()); - println("};"); - _println("#endif"); - - // Generate the bitsets used throughout the grammar - genBitsetsHeader(bitsetsUsed, grammar.tokenManager.maxTokenType()); - - // Generate the semantic predicate map for debugging - if (grammar.debuggingOutput) - println("static const char* _semPredNames[];"); - - // Close class definition - tabs=0; - println("};"); - println(""); - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Generate a guard wrapper - println("#endif /*INC_"+grammar.getClassName()+"_hpp_*/"); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - public void genInclude(TreeWalkerGrammar g) throws IOException - { - // Open the output stream for the parser and set the currentOutput - outputFile = grammar.getClassName() + ".hpp"; - outputLine = 1; - currentOutput = antlrTool.openOutputFile(outputFile); - //SAS: changed for proper text file io - - genAST = grammar.buildAST; - tabs = 0; - - // Generate a guard wrapper - println("#ifndef INC_"+grammar.getClassName()+"_hpp_"); - println("#define INC_"+grammar.getClassName()+"_hpp_"); - println(""); - printHeaderAction(preIncludeHpp); - println("#include <antlr/config.hpp>"); - println("#include \"" + grammar.tokenManager.getName() + TokenTypesFileSuffix+".hpp\""); - - // Generate the header common to all output files. - genHeader(outputFile); - - // Find the name of the super class - String sup=null; - if ( grammar.superClass!=null ) { - sup = grammar.superClass; - println("\n// Include correct superclass header with a header statement for example:"); - println("// header \"post_include_hpp\" {"); - println("// #include \""+sup+".hpp\""); - println("// }"); - println("// Or...."); - println("// header {"); - println("// #include \""+sup+".hpp\""); - println("// }\n"); - } - else { - sup = grammar.getSuperClass(); - if (sup.lastIndexOf('.') != -1) - sup = sup.substring(sup.lastIndexOf('.')+1); - println("#include <antlr/"+sup+".hpp>"); - sup = namespaceAntlr + sup; - } - println(""); - - // Generate header for the parser - // - // Do not use printAction because we assume tabs==0 - printHeaderAction(postIncludeHpp); - - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - - printHeaderAction(""); - - // print javadoc comment if any - if ( grammar.comment!=null ) { - _println(grammar.comment); - } - - // Generate parser class definition - print("class CUSTOM_API " + grammar.getClassName() + " : public "+sup); - println(", public " + grammar.tokenManager.getName() + TokenTypesFileSuffix); - - Token tsuffix = (Token)grammar.options.get("classHeaderSuffix"); - if ( tsuffix != null ) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(),"\"","\""); - if ( suffix != null ) { - print(", "+suffix); // must be an interface name for Java - } - } - println("{"); - - // Generate user-defined parser class members - if (grammar.classMemberAction != null) { - genLineNo(grammar.classMemberAction.getLine()); - print( - processActionForSpecialSymbols(grammar.classMemberAction.getText(), - grammar.classMemberAction.getLine(), - currentRule, null) - ); - genLineNo2(); - } - - // Generate default parser class constructor - tabs=0; - println("public:"); - - if( noConstructors ) - { - println("#if 0"); - println("// constructor creation turned of with 'noConstructor' option"); - } - tabs=1; - println(grammar.getClassName() + "();"); - if( noConstructors ) - { - tabs = 0; - println("#endif"); - tabs = 1; - } - - // Generate declaration for the initializeFactory method - println("static void initializeASTFactory( "+namespaceAntlr+"ASTFactory& factory );"); - - println("int getNumTokens() const"); - println("{"); tabs++; - println("return "+grammar.getClassName()+"::NUM_TOKENS;"); - tabs--; println("}"); - println("const char* getTokenName( int type ) const"); - println("{"); tabs++; - println("if( type > getNumTokens() ) return 0;"); - println("return "+grammar.getClassName()+"::tokenNames[type];"); - tabs--; println("}"); - println("const char* const* getTokenNames() const"); - println("{"); tabs++; - println("return "+grammar.getClassName()+"::tokenNames;"); - tabs--; println("}"); - - // Generate code for each rule in the grammar - Enumeration ids = grammar.rules.elements(); - String ruleNameInits = ""; - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol) ids.nextElement(); - if ( sym instanceof RuleSymbol) { - RuleSymbol rs = (RuleSymbol)sym; - genRuleHeader(rs, rs.references.size()==0); - } - exitIfError(); - } - tabs = 0; println("public:"); tabs = 1; - println(namespaceAntlr+"RefAST getAST()"); - println("{"); - if( usingCustomAST ) - { - tabs++; - println("return "+namespaceAntlr+"RefAST(returnAST);"); - tabs--; - } - else - { - tabs++; - println("return returnAST;"); - tabs--; - } - println("}"); - println(""); - - tabs=0; println("protected:"); tabs=1; - println(labeledElementASTType+" returnAST;"); - println(labeledElementASTType+" _retTree;"); - - // Make the rest private - tabs=0; - println("private:"); - tabs=1; - - // Generate the token names - println("static const char* tokenNames[];"); - // and how many there are of them - _println("#ifndef NO_STATIC_CONSTS"); - println("static const int NUM_TOKENS = "+grammar.tokenManager.getVocabulary().size()+";"); - _println("#else"); - println("enum {"); - println("\tNUM_TOKENS = "+grammar.tokenManager.getVocabulary().size()); - println("};"); - _println("#endif"); - - // Generate the bitsets used throughout the grammar - genBitsetsHeader(bitsetsUsed, grammar.tokenManager.maxTokenType()); - - // Close class definition - tabs=0; - println("};"); - println(""); - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Generate a guard wrapper - println("#endif /*INC_"+grammar.getClassName()+"_hpp_*/"); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - /// for convenience - protected void genASTDeclaration( AlternativeElement el ) { - genASTDeclaration( el, labeledElementASTType ); - } - /// for convenience - protected void genASTDeclaration( AlternativeElement el, String node_type ) { - genASTDeclaration( el, el.getLabel(), node_type ); - } - /// Generate (if not already done) a declaration for the AST for el. - protected void genASTDeclaration( AlternativeElement el, String var_name, String node_type ) { - // already declared? - if( declaredASTVariables.contains(el) ) - return; - - String init = labeledElementASTInit; - - if (el instanceof GrammarAtom && - ((GrammarAtom)el).getASTNodeType() != null ) - init = "Ref"+((GrammarAtom)el).getASTNodeType()+"("+labeledElementASTInit+")"; - - // emit code - println(node_type+" " + var_name + "_AST = "+init+";"); - - // mark as declared - declaredASTVariables.put(el, el); - } - private void genLiteralsTest() { - println("_ttype = testLiteralsTable(_ttype);"); - } - private void genLiteralsTestForPartialToken() { - println("_ttype = testLiteralsTable(text.substr(_begin, text.length()-_begin),_ttype);"); - } - protected void genMatch(BitSet b) { - } - protected void genMatch(GrammarAtom atom) { - if ( atom instanceof StringLiteralElement ) { - if ( grammar instanceof LexerGrammar ) { - genMatchUsingAtomText(atom); - } - else { - genMatchUsingAtomTokenType(atom); - } - } - else if ( atom instanceof CharLiteralElement ) { - if ( grammar instanceof LexerGrammar ) { - genMatchUsingAtomText(atom); - } - else { - antlrTool.error("cannot ref character literals in grammar: "+atom); - } - } - else if ( atom instanceof TokenRefElement ) { - genMatchUsingAtomTokenType(atom); - } else if (atom instanceof WildcardElement) { - gen((WildcardElement)atom); - } - } - protected void genMatchUsingAtomText(GrammarAtom atom) { - // match() for trees needs the _t cursor - String astArgs=""; - if (grammar instanceof TreeWalkerGrammar) { - if( usingCustomAST ) - astArgs=namespaceAntlr+"RefAST"+"(_t),"; - else - astArgs="_t,"; - } - - // if in lexer and ! on element, save buffer index to kill later - if ( grammar instanceof LexerGrammar && (!saveText||atom.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) { - println("_saveIndex = text.length();"); - } - - print(atom.not ? "matchNot(" : "match("); - _print(astArgs); - - // print out what to match - if (atom.atomText.equals("EOF")) { - // horrible hack to handle EOF case - _print(namespaceAntlr+"Token::EOF_TYPE"); - } - else - { - if( grammar instanceof LexerGrammar ) // lexer needs special handling - { - String cppstring = convertJavaToCppString( atom.atomText ); - _print(cppstring); - } - else - _print(atom.atomText); - } - - _println(");"); - - if ( grammar instanceof LexerGrammar && (!saveText||atom.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) { - println("text.erase(_saveIndex);"); // kill text atom put in buffer - } - } - protected void genMatchUsingAtomTokenType(GrammarAtom atom) { - // match() for trees needs the _t cursor - String astArgs=""; - if (grammar instanceof TreeWalkerGrammar) { - if( usingCustomAST ) - astArgs=namespaceAntlr+"RefAST"+"(_t),"; - else - astArgs="_t,"; - } - - // If the literal can be mangled, generate the symbolic constant instead - String s = astArgs + getValueString(atom.getType()); - - // matching - println( (atom.not ? "matchNot(" : "match(") + s + ");"); - } - /** Generate the nextToken() rule. - * nextToken() is a synthetic lexer rule that is the implicit OR of all - * user-defined lexer rules. - * @param RuleBlock - */ - public void genNextToken() { - // Are there any public rules? If not, then just generate a - // fake nextToken(). - boolean hasPublicRules = false; - for (int i = 0; i < grammar.rules.size(); i++) { - RuleSymbol rs = (RuleSymbol)grammar.rules.elementAt(i); - if ( rs.isDefined() && rs.access.equals("public") ) { - hasPublicRules = true; - break; - } - } - if (!hasPublicRules) { - println(""); - println(namespaceAntlr+"RefToken "+grammar.getClassName()+"::nextToken() { return "+namespaceAntlr+"RefToken(new "+namespaceAntlr+"CommonToken("+namespaceAntlr+"Token::EOF_TYPE, \"\")); }"); - println(""); - return; - } - - // Create the synthesized nextToken() rule - RuleBlock nextTokenBlk = MakeGrammar.createNextTokenRule(grammar, grammar.rules, "nextToken"); - // Define the nextToken rule symbol - RuleSymbol nextTokenRs = new RuleSymbol("mnextToken"); - nextTokenRs.setDefined(); - nextTokenRs.setBlock(nextTokenBlk); - nextTokenRs.access = "private"; - grammar.define(nextTokenRs); - // Analyze the nextToken rule - boolean ok = grammar.theLLkAnalyzer.deterministic(nextTokenBlk); - - // Generate the next token rule - String filterRule=null; - if ( ((LexerGrammar)grammar).filterMode ) { - filterRule = ((LexerGrammar)grammar).filterRule; - } - - println(""); - println(namespaceAntlr+"RefToken "+grammar.getClassName()+"::nextToken()"); - println("{"); - tabs++; - println(namespaceAntlr+"RefToken theRetToken;"); - println("for (;;) {"); - tabs++; - println(namespaceAntlr+"RefToken theRetToken;"); - println("int _ttype = "+namespaceAntlr+"Token::INVALID_TYPE;"); - if ( ((LexerGrammar)grammar).filterMode ) { - println("setCommitToPath(false);"); - if ( filterRule!=null ) { - // Here's a good place to ensure that the filter rule actually exists - if ( !grammar.isDefined(CodeGenerator.encodeLexerRuleName(filterRule)) ) { - grammar.antlrTool.error("Filter rule "+filterRule+" does not exist in this lexer"); - } - else { - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(CodeGenerator.encodeLexerRuleName(filterRule)); - if ( !rs.isDefined() ) { - grammar.antlrTool.error("Filter rule "+filterRule+" does not exist in this lexer"); - } - else if ( rs.access.equals("public") ) { - grammar.antlrTool.error("Filter rule "+filterRule+" must be protected"); - } - } - println("int _m;"); - println("_m = mark();"); - } - } - println("resetText();"); - - // Generate try around whole thing to trap scanner errors - println("try { // for lexical and char stream error handling"); - tabs++; - - // Test for public lexical rules with empty paths - for (int i=0; i<nextTokenBlk.getAlternatives().size(); i++) { - Alternative a = nextTokenBlk.getAlternativeAt(i); - if ( a.cache[1].containsEpsilon() ) { - antlrTool.warning("found optional path in nextToken()"); - } - } - - // Generate the block - String newline = System.getProperty("line.separator"); - CppBlockFinishingInfo howToFinish = genCommonBlock(nextTokenBlk, false); - String errFinish = "if (LA(1)==EOF_CHAR)"+newline+ - "\t\t\t\t{"+newline+"\t\t\t\t\tuponEOF();"+newline+ - "\t\t\t\t\t_returnToken = makeToken("+namespaceAntlr+"Token::EOF_TYPE);"+ - newline+"\t\t\t\t}"; - errFinish += newline+"\t\t\t\t"; - if ( ((LexerGrammar)grammar).filterMode ) { - if ( filterRule==null ) { - errFinish += "else {consume(); goto tryAgain;}"; - } - else { - errFinish += "else {"+newline+ - "\t\t\t\t\tcommit();"+newline+ - "\t\t\t\t\ttry {m"+filterRule+"(false);}"+newline+ - "\t\t\t\t\tcatch("+namespaceAntlr+"RecognitionException& e) {"+newline+ - "\t\t\t\t\t // catastrophic failure"+newline+ - "\t\t\t\t\t reportError(e);"+newline+ - "\t\t\t\t\t consume();"+newline+ - "\t\t\t\t\t}"+newline+ - "\t\t\t\t\tgoto tryAgain;"+newline+ - "\t\t\t\t}"; - } - } - else { - errFinish += "else {"+throwNoViable+"}"; - } - genBlockFinish(howToFinish, errFinish); - - // at this point a valid token has been matched, undo "mark" that was done - if ( ((LexerGrammar)grammar).filterMode && filterRule!=null ) { - println("commit();"); - } - - // Generate literals test if desired - // make sure _ttype is set first; note _returnToken must be - // non-null as the rule was required to create it. - println("if ( !_returnToken )"+newline+ - "\t\t\t\tgoto tryAgain; // found SKIP token"+newline); - println("_ttype = _returnToken->getType();"); - if ( ((LexerGrammar)grammar).getTestLiterals()) { - genLiteralsTest(); - } - - // return token created by rule reference in switch - println("_returnToken->setType(_ttype);"); - println("return _returnToken;"); - - // Close try block - tabs--; - println("}"); - println("catch ("+namespaceAntlr+"RecognitionException& e) {"); - tabs++; - if ( ((LexerGrammar)grammar).filterMode ) { - if ( filterRule==null ) { - println("if ( !getCommitToPath() ) {"); - tabs++; - println("consume();"); - println("goto tryAgain;"); - tabs--; - println("}"); - } - else { - println("if ( !getCommitToPath() ) {"); - tabs++; - println("rewind(_m);"); - println("resetText();"); - println("try {m"+filterRule+"(false);}"); - println("catch("+namespaceAntlr+"RecognitionException& ee) {"); - println(" // horrendous failure: error in filter rule"); - println(" reportError(ee);"); - println(" consume();"); - println("}"); - // println("goto tryAgain;"); - tabs--; - println("}"); - println("else"); - } - } - if ( nextTokenBlk.getDefaultErrorHandler() ) { - println("{"); - tabs++; - println("reportError(e);"); - println("consume();"); - tabs--; - println("}"); - } - else { - // pass on to invoking routine - tabs++; - println("throw "+namespaceAntlr+"TokenStreamRecognitionException(e);"); - tabs--; - } - - // close CharStreamException try - tabs--; - println("}"); - println("catch ("+namespaceAntlr+"CharStreamIOException& csie) {"); - println("\tthrow "+namespaceAntlr+"TokenStreamIOException(csie.io);"); - println("}"); - println("catch ("+namespaceAntlr+"CharStreamException& cse) {"); - println("\tthrow "+namespaceAntlr+"TokenStreamException(cse.getMessage());"); - println("}"); - - // close for-loop - _println("tryAgain:;"); - tabs--; - println("}"); - - // close method nextToken - tabs--; - println("}"); - println(""); - } - /** Gen a named rule block. - * ASTs are generated for each element of an alternative unless - * the rule or the alternative have a '!' modifier. - * - * If an alternative defeats the default tree construction, it - * must set <rule>_AST to the root of the returned AST. - * - * Each alternative that does automatic tree construction, builds - * up root and child list pointers in an ASTPair structure. - * - * A rule finishes by setting the returnAST variable from the - * ASTPair. - * - * @param rule The name of the rule to generate - * @param startSymbol true if the rule is a start symbol (i.e., not referenced elsewhere) - */ - public void genRule(RuleSymbol s, boolean startSymbol, int ruleNum, String prefix) { -// tabs=1; // JavaCodeGenerator needs this - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("genRule("+ s.getId() +")"); - if ( !s.isDefined() ) { - antlrTool.error("undefined rule: "+ s.getId()); - return; - } - - // Generate rule return type, name, arguments - RuleBlock rblk = s.getBlock(); - - currentRule = rblk; - currentASTResult = s.getId(); - - // clear list of declared ast variables.. - declaredASTVariables.clear(); - - // Save the AST generation state, and set it to that of the rule - boolean savegenAST = genAST; - genAST = genAST && rblk.getAutoGen(); - - // boolean oldsaveTest = saveText; - saveText = rblk.getAutoGen(); - - // print javadoc comment if any - if ( s.comment!=null ) { - _println(s.comment); - } - - // Gen method return type (note lexer return action set at rule creation) - if (rblk.returnAction != null) - { - // Has specified return value - _print(extractTypeOfAction(rblk.returnAction, rblk.getLine(), rblk.getColumn()) + " "); - } else { - // No specified return value - _print("void "); - } - - // Gen method name - _print(prefix + s.getId() + "("); - - // Additional rule parameters common to all rules for this grammar - _print(commonExtraParams); - if (commonExtraParams.length() != 0 && rblk.argAction != null ) { - _print(","); - } - - // Gen arguments - if (rblk.argAction != null) - { - // Has specified arguments - _println(""); -// FIXME: make argAction also a token? Hmmmmm -// genLineNo(rblk); - tabs++; - - // Process arguments for default arguments - // newer gcc's don't accept these in two places (header/cpp) - // - // Old appraoch with StringBuffer gave trouble with gcj. - // - // RK: Actually this breaks with string default arguments containing - // a comma's or equal signs. Then again the old StringBuffer method - // suffered from the same. - String oldarg = rblk.argAction; - String newarg = ""; - - String comma = ""; - int eqpos = oldarg.indexOf( '=' ); - if( eqpos != -1 ) - { - int cmpos = 0; - while( cmpos != -1 ) - { - newarg = newarg + comma + oldarg.substring( 0, eqpos ).trim(); - comma = ", "; - cmpos = oldarg.indexOf( ',', eqpos ); - if( cmpos != -1 ) - { - // cut off part we just handled - oldarg = oldarg.substring( cmpos+1 ).trim(); - eqpos = oldarg.indexOf( '=' ); - } - } - } - else - newarg = oldarg; - - println( newarg ); - -// println(rblk.argAction); - tabs--; - print(") "); -// genLineNo2(); // gcc gives error on the brace... hope it works for the others too - } else { - // No specified arguments - _print(") "); - } - _println("{"); - tabs++; - - if (grammar.traceRules) { - if ( grammar instanceof TreeWalkerGrammar ) { - if ( usingCustomAST ) - println("Tracer traceInOut(this,\""+ s.getId() +"\","+namespaceAntlr+"RefAST"+"(_t));"); - else - println("Tracer traceInOut(this,\""+ s.getId() +"\",_t);"); - } - else { - println("Tracer traceInOut(this, \""+ s.getId() +"\");"); - } - } - - // Convert return action to variable declaration - if (rblk.returnAction != null) - { - genLineNo(rblk); - println(rblk.returnAction + ";"); - genLineNo2(); - } - - // print out definitions needed by rules for various grammar types - if (!commonLocalVars.equals("")) - println(commonLocalVars); - - if ( grammar instanceof LexerGrammar ) { - // RK: why is this here? It seems not supported in the rest of the - // tool. - // lexer rule default return value is the rule's token name - // This is a horrible hack to support the built-in EOF lexer rule. - if (s.getId().equals("mEOF")) - println("_ttype = "+namespaceAntlr+"Token::EOF_TYPE;"); - else - println("_ttype = "+ s.getId().substring(1)+";"); - println("int _saveIndex;"); // used for element! (so we can kill text matched for element) -/* - println("boolean old_saveConsumedInput=saveConsumedInput;"); - if ( !rblk.getAutoGen() ) { // turn off "save input" if ! on rule - println("saveConsumedInput=false;"); - } -*/ - } - - // if debugging, write code to mark entry to the rule - if ( grammar.debuggingOutput) - if (grammar instanceof ParserGrammar) - println("fireEnterRule(" + ruleNum + ",0);"); - else if (grammar instanceof LexerGrammar) - println("fireEnterRule(" + ruleNum + ",_ttype);"); - - // Generate trace code if desired -// if ( grammar.debuggingOutput || grammar.traceRules) { -// println("try { // debugging"); -// tabs++; -// } - - // Initialize AST variables - if (grammar instanceof TreeWalkerGrammar) { - // "Input" value for rule -// println(labeledElementASTType+" " + s.getId() + "_AST_in = "+labeledElementASTType+"(_t);"); - println(labeledElementASTType+" " + s.getId() + "_AST_in = (_t == ASTNULL) ? "+labeledElementASTInit+" : _t;"); - } - if (grammar.buildAST) { - // Parser member used to pass AST returns from rule invocations - println("returnAST = "+labeledElementASTInit+";"); - // Tracks AST construction - println(namespaceAntlr+"ASTPair currentAST;"); // = new ASTPair();"); - // User-settable return value for rule. - println(labeledElementASTType+" " + s.getId() + "_AST = "+labeledElementASTInit+";"); - } - - genBlockPreamble(rblk); - genBlockInitAction(rblk); - println(""); - - // Search for an unlabeled exception specification attached to the rule - ExceptionSpec unlabeledUserSpec = rblk.findExceptionSpec(""); - - // Generate try block around the entire rule for error handling - if (unlabeledUserSpec != null || rblk.getDefaultErrorHandler() ) { - println("try { // for error handling"); - tabs++; - } - - // Generate the alternatives - if ( rblk.alternatives.size()==1 ) - { - // One alternative -- use simple form - Alternative alt = rblk.getAlternativeAt(0); - String pred = alt.semPred; - if ( pred!=null ) - genSemPred(pred, currentRule.line); - if (alt.synPred != null) { - antlrTool.warning( - "Syntactic predicate ignored for single alternative", - grammar.getFilename(), - alt.synPred.getLine(), - alt.synPred.getColumn() - ); - } - genAlt(alt, rblk); - } - else - { - // Multiple alternatives -- generate complex form - boolean ok = grammar.theLLkAnalyzer.deterministic(rblk); - - CppBlockFinishingInfo howToFinish = genCommonBlock(rblk, false); - genBlockFinish(howToFinish, throwNoViable); - } - - // Generate catch phrase for error handling - if (unlabeledUserSpec != null || rblk.getDefaultErrorHandler() ) { - // Close the try block - tabs--; - println("}"); - } - - // Generate user-defined or default catch phrases - if (unlabeledUserSpec != null) - { - genErrorHandler(unlabeledUserSpec); - } - else if (rblk.getDefaultErrorHandler()) - { - // Generate default catch phrase - println("catch (" + exceptionThrown + "& ex) {"); - tabs++; - // Generate code to handle error if not guessing - if (grammar.hasSyntacticPredicate) { - println("if( inputState->guessing == 0 ) {"); - tabs++; - } - println("reportError(ex);"); - if ( !(grammar instanceof TreeWalkerGrammar) ) - { - // Generate code to consume until token in k==1 follow set - Lookahead follow = grammar.theLLkAnalyzer.FOLLOW(1, rblk.endNode); - String followSetName = getBitsetName(markBitsetForGen(follow.fset)); - println("consume();"); - println("consumeUntil(" + followSetName + ");"); - } - else - { - // Just consume one token - println("if ( _t != "+labeledElementASTInit+" )"); - tabs++; - println("_t = _t->getNextSibling();"); - tabs--; - } - if (grammar.hasSyntacticPredicate) - { - tabs--; - // When guessing, rethrow exception - println("} else {"); - tabs++; - println("throw;"); - tabs--; - println("}"); - } - // Close catch phrase - tabs--; - println("}"); - } - - // Squirrel away the AST "return" value - if (grammar.buildAST) { - println("returnAST = " + s.getId() + "_AST;"); - } - - // Set return tree value for tree walkers - if ( grammar instanceof TreeWalkerGrammar ) { - println("_retTree = _t;"); - } - - // Generate literals test for lexer rules so marked - if (rblk.getTestLiterals()) { - if ( s.access.equals("protected") ) { - genLiteralsTestForPartialToken(); - } - else { - genLiteralsTest(); - } - } - - // if doing a lexer rule, dump code to create token if necessary - if ( grammar instanceof LexerGrammar ) { - println("if ( _createToken && _token=="+namespaceAntlr+"nullToken && _ttype!="+namespaceAntlr+"Token::SKIP ) {"); - println(" _token = makeToken(_ttype);"); - println(" _token->setText(text.substr(_begin, text.length()-_begin));"); - println("}"); - println("_returnToken = _token;"); - // It should be easy for an optimizing compiler to realize this does nothing - // but it avoids the warning about the variable being unused. - println("_saveIndex=0;"); - } - - // Gen the return statement if there is one (lexer has hard-wired return action) - if (rblk.returnAction != null) { - println("return " + extractIdOfAction(rblk.returnAction, rblk.getLine(), rblk.getColumn()) + ";"); - } - -// if ( grammar.debuggingOutput || grammar.traceRules) { -//// tabs--; -//// println("} finally { // debugging"); -//// tabs++; -// -// // Generate trace code if desired -// if ( grammar.debuggingOutput) -// if (grammar instanceof ParserGrammar) -// println("fireExitRule(" + ruleNum + ",0);"); -// else if (grammar instanceof LexerGrammar) -// println("fireExitRule(" + ruleNum + ",_ttype);"); -// -//// if (grammar.traceRules) { -//// if ( grammar instanceof TreeWalkerGrammar ) { -//// println("traceOut(\""+ s.getId() +"\",_t);"); -//// } -//// else { -//// println("traceOut(\""+ s.getId() +"\");"); -//// } -//// } -//// -//// tabs--; -//// println("}"); -// } - - tabs--; - println("}"); - println(""); - - // Restore the AST generation state - genAST = savegenAST; - - // restore char save state - // saveText = oldsaveTest; - } - public void genRuleHeader(RuleSymbol s, boolean startSymbol) { - tabs=1; - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("genRuleHeader("+ s.getId() +")"); - if ( !s.isDefined() ) { - antlrTool.error("undefined rule: "+ s.getId()); - return; - } - - // Generate rule return type, name, arguments - RuleBlock rblk = s.getBlock(); - currentRule = rblk; - currentASTResult = s.getId(); - - // Save the AST generation state, and set it to that of the rule - boolean savegenAST = genAST; - genAST = genAST && rblk.getAutoGen(); - - // boolean oldsaveTest = saveText; - saveText = rblk.getAutoGen(); - - // Gen method access - print(s.access + ": "); - - // Gen method return type (note lexer return action set at rule creation) - if (rblk.returnAction != null) - { - // Has specified return value - _print(extractTypeOfAction(rblk.returnAction, rblk.getLine(), rblk.getColumn()) + " "); - } else { - // No specified return value - _print("void "); - } - - // Gen method name - _print(s.getId() + "("); - - // Additional rule parameters common to all rules for this grammar - _print(commonExtraParams); - if (commonExtraParams.length() != 0 && rblk.argAction != null ) { - _print(","); - } - - // Gen arguments - if (rblk.argAction != null) - { - // Has specified arguments - _println(""); - tabs++; - println(rblk.argAction); - tabs--; - print(")"); - } else { - // No specified arguments - _print(")"); - } - _println(";"); - - tabs--; - - // Restore the AST generation state - genAST = savegenAST; - - // restore char save state - // saveText = oldsaveTest; - } - private void GenRuleInvocation(RuleRefElement rr) { - // dump rule name - _print(rr.targetRule + "("); - - // lexers must tell rule if it should set _returnToken - if ( grammar instanceof LexerGrammar ) { - // if labeled, could access Token, so tell rule to create - if ( rr.getLabel() != null ) { - _print("true"); - } - else { - _print("false"); - } - if (commonExtraArgs.length() != 0 || rr.args!=null ) { - _print(","); - } - } - - // Extra arguments common to all rules for this grammar - _print(commonExtraArgs); - if (commonExtraArgs.length() != 0 && rr.args!=null ) { - _print(","); - } - - // Process arguments to method, if any - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rr.targetRule); - if (rr.args != null) - { - // When not guessing, execute user arg action - ActionTransInfo tInfo = new ActionTransInfo(); - // FIXME: fix line number passed to processActionForTreeSpecifiers here.. - // this one might be a bit off.. - String args = processActionForSpecialSymbols(rr.args, rr.line, - currentRule, tInfo); - if ( tInfo.assignToRoot || tInfo.refRuleRoot!=null ) - { - antlrTool.error("Arguments of rule reference '" + rr.targetRule + "' cannot set or ref #"+ - currentRule.getRuleName()+" on line "+rr.getLine()); - } - _print(args); - - // Warn if the rule accepts no arguments - if (rs.block.argAction == null) - { - antlrTool.warning("Rule '" + rr.targetRule + "' accepts no arguments", - grammar.getFilename(), - rr.getLine(), rr.getColumn()); - } - } - else - { - // For C++, no warning if rule has parameters, because there may be default - // values for all of the parameters - //if (rs.block.argAction != null) { - // tool.warning("Missing parameters on reference to rule "+rr.targetRule, rr.getLine()); - //} - } - _println(");"); - - // move down to the first child while parsing - if ( grammar instanceof TreeWalkerGrammar ) { - println("_t = _retTree;"); - } - } - protected void genSemPred(String pred, int line) { - // translate $ and # references - ActionTransInfo tInfo = new ActionTransInfo(); - pred = processActionForSpecialSymbols(pred, line, currentRule, tInfo); - // ignore translation info...we don't need to do anything with it. - String escapedPred = charFormatter.escapeString(pred); - - // if debugging, wrap the semantic predicate evaluation in a method - // that can tell SemanticPredicateListeners the result - if (grammar.debuggingOutput && ((grammar instanceof ParserGrammar) || - (grammar instanceof LexerGrammar))) - pred = "fireSemanticPredicateEvaluated(persistence.antlr.debug.SemanticPredicateEvent.VALIDATING," //FIXME - + addSemPred(escapedPred) + "," + pred + ")"; - println("if (!(" + pred + "))"); - tabs++; - println("throw "+namespaceAntlr+"SemanticException(\"" + escapedPred + "\");"); - tabs--; - } - /** Write an array of Strings which are the semantic predicate - * expressions. The debugger will reference them by number only - */ - protected void genSemPredMap(String prefix) { - Enumeration e = semPreds.elements(); - println("const char* " + prefix + "_semPredNames[] = {"); - tabs++; - while(e.hasMoreElements()) - println("\""+e.nextElement()+"\","); - println("0"); - tabs--; - println("};"); - } - protected void genSynPred(SynPredBlock blk, String lookaheadExpr) { - if ( DEBUG_CODE_GENERATOR || DEBUG_CPP_CODE_GENERATOR ) System.out.println("gen=>("+blk+")"); - - // Dump synpred result variable - println("bool synPredMatched" + blk.ID + " = false;"); - // Gen normal lookahead test - println("if (" + lookaheadExpr + ") {"); - tabs++; - - // Save input state - if ( grammar instanceof TreeWalkerGrammar ) { - println(labeledElementType + " __t" + blk.ID + " = _t;"); - } - else { - println("int _m" + blk.ID + " = mark();"); - } - - // Once inside the try, assume synpred works unless exception caught - println("synPredMatched" + blk.ID + " = true;"); - println("inputState->guessing++;"); - - // if debugging, tell listeners that a synpred has started - if (grammar.debuggingOutput && ((grammar instanceof ParserGrammar) || - (grammar instanceof LexerGrammar))) { - println("fireSyntacticPredicateStarted();"); - } - - syntacticPredLevel++; - println("try {"); - tabs++; - gen((AlternativeBlock)blk); // gen code to test predicate - tabs--; - //println("System.out.println(\"pred "+blk+" succeeded\");"); - println("}"); - println("catch (" + exceptionThrown + "& pe) {"); - tabs++; - println("synPredMatched"+blk.ID+" = false;"); - //println("System.out.println(\"pred "+blk+" failed\");"); - tabs--; - println("}"); - - // Restore input state - if ( grammar instanceof TreeWalkerGrammar ) { - println("_t = __t"+blk.ID+";"); - } - else { - println("rewind(_m"+blk.ID+");"); - } - - println("inputState->guessing--;"); - - // if debugging, tell listeners how the synpred turned out - if (grammar.debuggingOutput && ((grammar instanceof ParserGrammar) || - (grammar instanceof LexerGrammar))) { - println("if (synPredMatched" + blk.ID +")"); - println(" fireSyntacticPredicateSucceeded();"); - println("else"); - println(" fireSyntacticPredicateFailed();"); - } - - syntacticPredLevel--; - tabs--; - - // Close lookahead test - println("}"); - - // Test synpred result - println("if ( synPredMatched"+blk.ID+" ) {"); - } - /** Generate a static array containing the names of the tokens, - * indexed by the token type values. This static array is used - * to format error messages so that the token identifers or literal - * strings are displayed instead of the token numbers. - * - * If a lexical rule has a paraphrase, use it rather than the - * token label. - */ - public void genTokenStrings(String prefix) { - // Generate a string for each token. This creates a static - // array of Strings indexed by token type. -// println(""); - println("const char* " + prefix + "tokenNames[] = {"); - tabs++; - - // Walk the token vocabulary and generate a Vector of strings - // from the tokens. - Vector v = grammar.tokenManager.getVocabulary(); - for (int i = 0; i < v.size(); i++) - { - String s = (String)v.elementAt(i); - if (s == null) - { - s = "<"+String.valueOf(i)+">"; - } - if ( !s.startsWith("\"") && !s.startsWith("<") ) { - TokenSymbol ts = (TokenSymbol)grammar.tokenManager.getTokenSymbol(s); - if ( ts!=null && ts.getParaphrase()!=null ) { - s = StringUtils.stripFrontBack(ts.getParaphrase(), "\"", "\""); - } - } - print(charFormatter.literalString(s)); - _println(","); - } - println("0"); - - // Close the string array initailizer - tabs--; - println("};"); - } - /** Generate the token types C++ file */ - protected void genTokenTypes(TokenManager tm) throws IOException { - // Open the token output header file and set the currentOutput stream - outputFile = tm.getName() + TokenTypesFileSuffix+".hpp"; - outputLine = 1; - currentOutput = antlrTool.openOutputFile(outputFile); - //SAS: changed for proper text file io - - tabs = 0; - - // Generate a guard wrapper - println("#ifndef INC_"+tm.getName()+TokenTypesFileSuffix+"_hpp_"); - println("#define INC_"+tm.getName()+TokenTypesFileSuffix+"_hpp_"); - println(""); - - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - - // Generate the header common to all C++ files - genHeader(outputFile); - - // Encapsulate the definitions in an interface. This can be done - // because they are all constants. - println(""); - println("#ifndef CUSTOM_API"); - println("# define CUSTOM_API"); - println("#endif"); - println(""); - // In the case that the .hpp is included from C source (flexLexer!) - // we just turn things into a plain enum - println("#ifdef __cplusplus"); - println("struct CUSTOM_API " + tm.getName() + TokenTypesFileSuffix+" {"); - println("#endif"); - tabs++; - println("enum {"); - tabs++; - - // Generate a definition for each token type - Vector v = tm.getVocabulary(); - - // Do special tokens manually - println("EOF_ = " + Token.EOF_TYPE + ","); - - // Move the other special token to the end, so we can solve - // the superfluous comma problem easily - - for (int i = Token.MIN_USER_TYPE; i < v.size(); i++) { - String s = (String)v.elementAt(i); - if (s != null) { - if ( s.startsWith("\"") ) { - // a string literal - StringLiteralSymbol sl = (StringLiteralSymbol)tm.getTokenSymbol(s); - if ( sl==null ) { - antlrTool.panic("String literal "+s+" not in symbol table"); - } - else if ( sl.label != null ) { - println(sl.label + " = " + i + ","); - } - else { - String mangledName = mangleLiteral(s); - if (mangledName != null) { - // We were able to create a meaningful mangled token name - println(mangledName + " = " + i + ","); - // if no label specified, make the label equal to the mangled name - sl.label = mangledName; - } - else { - println("// " + s + " = " + i); - } - } - } - else if ( !s.startsWith("<") ) { - println(s + " = " + i + ","); - } - } - } - - // Moved from above - println("NULL_TREE_LOOKAHEAD = " + Token.NULL_TREE_LOOKAHEAD); - - // Close the enum - tabs--; - println("};"); - - // Close the interface - tabs--; - println("#ifdef __cplusplus"); - println("};"); - println("#endif"); - - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Generate a guard wrapper - println("#endif /*INC_"+tm.getName()+TokenTypesFileSuffix+"_hpp_*/"); - - // Close the tokens output file - currentOutput.close(); - currentOutput = null; - exitIfError(); - } - /** Process a string for an simple expression for use in xx/action.g - * it is used to cast simple tokens/references to the right type for - * the generated language. Basically called for every element in - * the vector to getASTCreateString(vector V) - * @param str A String. - */ - public String processStringForASTConstructor( String str ) - { - if( usingCustomAST && - ((grammar instanceof TreeWalkerGrammar) || - (grammar instanceof ParserGrammar)) && - !(grammar.tokenManager.tokenDefined(str) ) ) - { -// System.out.println("processStringForASTConstructor: "+str+" with cast"); - return namespaceAntlr+"RefAST("+str+")"; - } - else - { -// System.out.println("processStringForASTConstructor: "+str); - return str; - } - } - /** Get a string for an expression to generate creation of an AST subtree. - * @param v A Vector of String, where each element is an expression - * in the target language yielding an AST node. - */ - public String getASTCreateString(Vector v) { - if (v.size() == 0) { - return ""; - } - StringBuffer buf = new StringBuffer(); - // the labeledElementASTType here can probably be a cast or nothing - // in the case of ! usingCustomAST - buf.append(labeledElementASTType+ - "(astFactory->make((new "+namespaceAntlr+ - "ASTArray("+v.size()+"))"); - for (int i = 0; i < v.size(); i++) { - buf.append("->add("+ v.elementAt(i) + ")"); - } - buf.append("))"); - return buf.toString(); - } - /** Get a string for an expression to generate creating of an AST node - * @param str The arguments to the AST constructor - */ - public String getASTCreateString(GrammarAtom atom, String str) { - if ( atom!=null && atom.getASTNodeType() != null ) { - - // this atom is using a heterogeneous AST type. - // make note of the factory needed to generate it.. - // later this is inserted into the initializeFactory method. - astTypes.appendElement("factory.registerFactory("+ - atom.getType() + ", \""+atom.getASTNodeType()+ - "\", "+atom.getASTNodeType()+"::factory);"); - - // after above init the factory knows what to generate... - return "astFactory->create("+str+")"; - } - else - { - // FIXME: This is *SO* ugly! but it will have to do for now... - // 2.7.2 will have better I hope - // this is due to the usage of getASTCreateString from inside - // actions/cpp/action.g - boolean is_constructor = false; - if( str.indexOf(',') != -1 ) - is_constructor = grammar.tokenManager.tokenDefined(str.substring(0,str.indexOf(','))); - -// System.out.println("getAstCreateString(as): "+str+" "+grammar.tokenManager.tokenDefined(str)); - if( usingCustomAST && - (grammar instanceof TreeWalkerGrammar) && - !(grammar.tokenManager.tokenDefined(str) ) && - ! is_constructor ) - return "astFactory->create("+namespaceAntlr+"RefAST("+str+"))"; - else - return "astFactory->create("+str+")"; - } - } - - /** Get a string for an expression to generate creating of an AST node - * @param str The arguments to the AST constructor - */ - public String getASTCreateString(String str) { -// System.out.println("getAstCreateString(str): "+str+" "+grammar.tokenManager.tokenDefined(str)); - if( usingCustomAST ) - return labeledElementASTType+"(astFactory->create("+namespaceAntlr+"RefAST("+str+")))"; - else - return "astFactory->create("+str+")"; - } - - protected String getLookaheadTestExpression(Lookahead[] look, int k) { - StringBuffer e = new StringBuffer(100); - boolean first = true; - - e.append("("); - for (int i = 1; i <= k; i++) { - BitSet p = look[i].fset; - if (!first) { - e.append(") && ("); - } - first = false; - - // Syn preds can yield <end-of-syn-pred> (epsilon) lookahead. - // There is no way to predict what that token would be. Just - // allow anything instead. - if (look[i].containsEpsilon()) { - e.append("true"); - } else { - e.append(getLookaheadTestTerm(i, p)); - } - } - e.append(")"); - - return e.toString(); - } - /** Generate a lookahead test expression for an alternate. This - * will be a series of tests joined by '&&' and enclosed by '()', - * the number of such tests being determined by the depth of the lookahead. - */ - protected String getLookaheadTestExpression(Alternative alt, int maxDepth) { - int depth = alt.lookaheadDepth; - if ( depth == GrammarAnalyzer.NONDETERMINISTIC ) { - // if the decision is nondeterministic, do the best we can: LL(k) - // any predicates that are around will be generated later. - depth = grammar.maxk; - } - - if ( maxDepth==0 ) { - // empty lookahead can result from alt with sem pred - // that can see end of token. E.g., A : {pred}? ('a')? ; - return "true"; - } - -/* -boolean first = true; - for (int i=1; i<=depth && i<=maxDepth; i++) { - BitSet p = alt.cache[i].fset; - if (!first) { - e.append(") && ("); - } - first = false; - - // Syn preds can yield <end-of-syn-pred> (epsilon) lookahead. - // There is no way to predict what that token would be. Just - // allow anything instead. - if ( alt.cache[i].containsEpsilon() ) { - e.append("true"); - } - else { - e.append(getLookaheadTestTerm(i, p)); - } - } - - e.append(")"); -*/ - - return "(" + getLookaheadTestExpression(alt.cache,depth) + ")"; - } - /**Generate a depth==1 lookahead test expression given the BitSet. - * This may be one of: - * 1) a series of 'x==X||' tests - * 2) a range test using >= && <= where possible, - * 3) a bitset membership test for complex comparisons - * @param k The lookahead level - * @param p The lookahead set for level k - */ - protected String getLookaheadTestTerm(int k, BitSet p) { - // Determine the name of the item to be compared - String ts = lookaheadString(k); - - // Generate a range expression if possible - int[] elems = p.toArray(); - if (elementsAreRange(elems)) { - return getRangeExpression(k, elems); - } - - // Generate a bitset membership test if possible - StringBuffer e; - int degree = p.degree(); - if ( degree == 0 ) { - return "true"; - } - - if (degree >= bitsetTestThreshold) { - int bitsetIdx = markBitsetForGen(p); - return getBitsetName(bitsetIdx) + ".member(" + ts + ")"; - } - - // Otherwise, generate the long-winded series of "x==X||" tests - e = new StringBuffer(); - for (int i = 0; i < elems.length; i++) { - // Get the compared-to item (token or character value) - String cs = getValueString(elems[i]); - - // Generate the element comparison - if( i > 0 ) e.append(" || "); - e.append(ts); - e.append(" == "); - e.append(cs); - } - return e.toString(); - } - /** Return an expression for testing a contiguous renage of elements - * @param k The lookahead level - * @param elems The elements representing the set, usually from BitSet.toArray(). - * @return String containing test expression. - */ - public String getRangeExpression(int k, int[] elems) { - if (!elementsAreRange(elems)) { - antlrTool.panic("getRangeExpression called with non-range"); - } - int begin = elems[0]; - int end = elems[elems.length-1]; - return - "(" + lookaheadString(k) + " >= " + getValueString(begin) + " && " + - lookaheadString(k) + " <= " + getValueString(end) + ")"; - } - /** getValueString: get a string representation of a token or char value - * @param value The token or char value - */ - private String getValueString(int value) { - String cs; - if ( grammar instanceof LexerGrammar ) { - cs = charFormatter.literalChar(value); - } - else - { - TokenSymbol ts = grammar.tokenManager.getTokenSymbolAt(value); - if ( ts == null ) { - return ""+value; // return token type as string - // tool.panic("vocabulary for token type " + value + " is null"); - } - String tId = ts.getId(); - if ( ts instanceof StringLiteralSymbol ) { - // if string literal, use predefined label if any - // if no predefined, try to mangle into LITERAL_xxx. - // if can't mangle, use int value as last resort - StringLiteralSymbol sl = (StringLiteralSymbol)ts; - String label = sl.getLabel(); - if ( label!=null ) { - cs = label; - } - else { - cs = mangleLiteral(tId); - if (cs == null) { - cs = String.valueOf(value); - } - } - } - else { - if ( tId.equals("EOF") ) - cs = namespaceAntlr+"Token::EOF_TYPE"; - else - cs = tId; - } - } - return cs; - } - /**Is the lookahead for this alt empty? */ - protected boolean lookaheadIsEmpty(Alternative alt, int maxDepth) { - int depth = alt.lookaheadDepth; - if ( depth == GrammarAnalyzer.NONDETERMINISTIC ) { - depth = grammar.maxk; - } - for (int i=1; i<=depth && i<=maxDepth; i++) { - BitSet p = alt.cache[i].fset; - if (p.degree() != 0) { - return false; - } - } - return true; - } - private String lookaheadString(int k) { - if (grammar instanceof TreeWalkerGrammar) { - return "_t->getType()"; - } - return "LA(" + k + ")"; - } - /** Mangle a string literal into a meaningful token name. This is - * only possible for literals that are all characters. The resulting - * mangled literal name is literalsPrefix with the text of the literal - * appended. - * @return A string representing the mangled literal, or null if not possible. - */ - private String mangleLiteral(String s) { - String mangled = antlrTool.literalsPrefix; - for (int i = 1; i < s.length()-1; i++) { - if (!Character.isLetter(s.charAt(i)) && - s.charAt(i) != '_') { - return null; - } - mangled += s.charAt(i); - } - if ( antlrTool.upperCaseMangledLiterals ) { - mangled = mangled.toUpperCase(); - } - return mangled; - } - /** Map an identifier to it's corresponding tree-node variable. - * This is context-sensitive, depending on the rule and alternative - * being generated - * @param idParam The identifier name to map - * @return The mapped id (which may be the same as the input), or null if the mapping is invalid due to duplicates - */ - public String mapTreeId(String idParam, ActionTransInfo transInfo) { - // if not in an action of a rule, nothing to map. - if ( currentRule==null ) return idParam; -// System.out.print("mapTreeId: "+idParam+" "+currentRule.getRuleName()+" "); - - boolean in_var = false; - String id = idParam; - if (grammar instanceof TreeWalkerGrammar) - { -// RK: hmmm this seems odd. If buildAST is false it translates -// #rulename_in to 'rulename_in' else to 'rulename_AST_in' which indeed -// exists. disabling for now.. and hope it doesn't blow up somewhere. - if ( !grammar.buildAST ) - { - in_var = true; -// System.out.println("in_var1"); - } - // If the id ends with "_in", then map it to the input variable -// else - if (id.length() > 3 && id.lastIndexOf("_in") == id.length()-3) - { - // Strip off the "_in" - id = id.substring(0, id.length()-3); - in_var = true; -// System.out.println("in_var2"); - } - } -// System.out.print(in_var+"\t"); - - // Check the rule labels. If id is a label, then the output - // variable is label_AST, and the input variable is plain label. - for (int i = 0; i < currentRule.labeledElements.size(); i++) - { - AlternativeElement elt = (AlternativeElement)currentRule.labeledElements.elementAt(i); - if (elt.getLabel().equals(id)) - { -// if( in_var ) -// System.out.println("returning (vec) "+(in_var ? id : id + "_AST")); - return in_var ? id : id + "_AST"; - } - } - - // Failing that, check the id-to-variable map for the alternative. - // If the id is in the map, then output variable is the name in the - // map, and input variable is name_in - String s = (String)treeVariableMap.get(id); - if (s != null) - { - if (s == NONUNIQUE) - { -// if( in_var ) -// System.out.println("returning null (nonunique)"); - // There is more than one element with this id - antlrTool.error("Ambiguous reference to AST element "+id+ - " in rule "+currentRule.getRuleName()); - return null; - } - else if (s.equals(currentRule.getRuleName())) - { - // a recursive call to the enclosing rule is - // ambiguous with the rule itself. -// if( in_var ) -// System.out.println("returning null (rulename)"); - antlrTool.error("Ambiguous reference to AST element "+id+ - " in rule "+currentRule.getRuleName()); - return null; - } - else - { -// if( in_var ) -// System.out.println("returning "+(in_var?s+"_in":s)); - return in_var ? s + "_in" : s; - } - } - -// System.out.println("Last check: "+id+" == "+currentRule.getRuleName()); - // Failing that, check the rule name itself. Output variable - // is rule_AST; input variable is rule_AST_in (treeparsers). - if( id.equals(currentRule.getRuleName()) ) - { - String r = in_var ? id + "_AST_in" : id + "_AST"; - if ( transInfo!=null ) { - if ( !in_var ) { - transInfo.refRuleRoot = r; - } - } -// if( in_var ) -// System.out.println("returning (r) "+r); - return r; - } - else - { -// if( in_var ) -// System.out.println("returning (last) "+id); - // id does not map to anything -- return itself. - return id; - } - } - /** Given an element and the name of an associated AST variable, - * create a mapping between the element "name" and the variable name. - */ - private void mapTreeVariable(AlternativeElement e, String name) - { - // For tree elements, defer to the root - if (e instanceof TreeElement) { - mapTreeVariable( ((TreeElement)e).root, name); - return; - } - - // Determine the name of the element, if any, for mapping purposes - String elName = null; - - // Don't map labeled items - if (e.getLabel() == null) { - if (e instanceof TokenRefElement) { - // use the token id - elName = ((TokenRefElement)e).atomText; - } - else if (e instanceof RuleRefElement) { - // use the rule name - elName = ((RuleRefElement)e).targetRule; - } - } - // Add the element to the tree variable map if it has a name - if (elName != null) { - if (treeVariableMap.get(elName) != null) { - // Name is already in the map -- mark it as duplicate - treeVariableMap.remove(elName); - treeVariableMap.put(elName, NONUNIQUE); - } - else { - treeVariableMap.put(elName, name); - } - } - } - - /** Lexically process tree-specifiers in the action. - * This will replace #id and #(...) with the appropriate - * function calls and/or variables. - */ - protected String processActionForSpecialSymbols(String actionStr, - int line, - RuleBlock currentRule, - ActionTransInfo tInfo) - { - if ( actionStr==null || actionStr.length()==0 ) - return null; - - // The action trans info tells us (at the moment) whether an - // assignment was done to the rule's tree root. - if (grammar==null) - return actionStr; - - if ((grammar.buildAST && actionStr.indexOf('#') != -1) || - grammar instanceof TreeWalkerGrammar || - ((grammar instanceof LexerGrammar || - grammar instanceof ParserGrammar) - && actionStr.indexOf('$') != -1) ) - { - // Create a lexer to read an action and return the translated version - persistence.antlr.actions.cpp.ActionLexer lexer = - new persistence.antlr.actions.cpp.ActionLexer(actionStr, currentRule, this, tInfo); - lexer.setLineOffset(line); - lexer.setFilename(grammar.getFilename()); - lexer.setTool(antlrTool); - - try { - lexer.mACTION(true); - actionStr = lexer.getTokenObject().getText(); - // System.out.println("action translated: "+actionStr); - // System.out.println("trans info is "+tInfo); - } - catch (RecognitionException ex) { - lexer.reportError(ex); - return actionStr; - } - catch (TokenStreamException tex) { - antlrTool.panic("Error reading action:"+actionStr); - return actionStr; - } - catch (CharStreamException io) { - antlrTool.panic("Error reading action:"+actionStr); - return actionStr; - } - } - return actionStr; - } - - private String fixNameSpaceOption( String ns ) - { - ns = StringUtils.stripFrontBack(ns,"\"","\""); - if( ns.length() > 2 && - !ns.substring(ns.length()-2, ns.length()).equals("::") ) - ns += "::"; - return ns; - } - - private void setupGrammarParameters(Grammar g) { - if (g instanceof ParserGrammar || - g instanceof LexerGrammar || - g instanceof TreeWalkerGrammar - ) - { - /* RK: options also have to be added to Grammar.java and for options - * on the file level entries have to be defined in - * DefineGrammarSymbols.java and passed around via 'globals' in - * antlrTool.java - */ - if( antlrTool.nameSpace != null ) - nameSpace = antlrTool.nameSpace; - - if( antlrTool.namespaceStd != null ) - namespaceStd = fixNameSpaceOption(antlrTool.namespaceStd); - - if( antlrTool.namespaceAntlr != null ) - namespaceAntlr = fixNameSpaceOption(antlrTool.namespaceAntlr); - - genHashLines = antlrTool.genHashLines; - - /* let grammar level options override filelevel ones... - */ - if( g.hasOption("namespace") ) { - Token t = g.getOption("namespace"); - if( t != null ) { - nameSpace = new NameSpace(t.getText()); - } - } - if( g.hasOption("namespaceAntlr") ) { - Token t = g.getOption("namespaceAntlr"); - if( t != null ) { - String ns = StringUtils.stripFrontBack(t.getText(),"\"","\""); - if ( ns != null ) { - if( ns.length() > 2 && - !ns.substring(ns.length()-2, ns.length()).equals("::") ) - ns += "::"; - namespaceAntlr = ns; - } - } - } - if( g.hasOption("namespaceStd") ) { - Token t = g.getOption("namespaceStd"); - if( t != null ) { - String ns = StringUtils.stripFrontBack(t.getText(),"\"","\""); - if ( ns != null ) { - if( ns.length() > 2 && - !ns.substring(ns.length()-2, ns.length()).equals("::") ) - ns += "::"; - namespaceStd = ns; - } - } - } - if( g.hasOption("genHashLines") ) { - Token t = g.getOption("genHashLines"); - if( t != null ) { - String val = StringUtils.stripFrontBack(t.getText(),"\"","\""); - genHashLines = val.equals("true"); - } - } - noConstructors = antlrTool.noConstructors; // get the default - if( g.hasOption("noConstructors") ) { - Token t = g.getOption("noConstructors"); - if( (t != null) && !(t.getText().equals("true") || t.getText().equals("false"))) - antlrTool.error("noConstructors option must be true or false", antlrTool.getGrammarFile(), t.getLine(), t.getColumn()); - noConstructors = t.getText().equals("true"); - } - } - if (g instanceof ParserGrammar) { - labeledElementASTType = namespaceAntlr+"RefAST"; - labeledElementASTInit = namespaceAntlr+"nullAST"; - if ( g.hasOption("ASTLabelType") ) { - Token tsuffix = g.getOption("ASTLabelType"); - if ( tsuffix != null ) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(),"\"","\""); - if ( suffix != null ) { - usingCustomAST = true; - labeledElementASTType = suffix; - labeledElementASTInit = suffix+"("+namespaceAntlr+"nullAST)"; - } - } - } - labeledElementType = namespaceAntlr+"RefToken "; - labeledElementInit = namespaceAntlr+"nullToken"; - commonExtraArgs = ""; - commonExtraParams = ""; - commonLocalVars = ""; - lt1Value = "LT(1)"; - exceptionThrown = namespaceAntlr+"RecognitionException"; - throwNoViable = "throw "+namespaceAntlr+"NoViableAltException(LT(1), getFilename());"; - } - else if (g instanceof LexerGrammar) { - labeledElementType = "char "; - labeledElementInit = "'\\0'"; - commonExtraArgs = ""; - commonExtraParams = "bool _createToken"; - commonLocalVars = "int _ttype; "+namespaceAntlr+"RefToken _token; int _begin=text.length();"; - lt1Value = "LA(1)"; - exceptionThrown = namespaceAntlr+"RecognitionException"; - throwNoViable = "throw "+namespaceAntlr+"NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());"; - } - else if (g instanceof TreeWalkerGrammar) { - labeledElementInit = namespaceAntlr+"nullAST"; - labeledElementASTInit = namespaceAntlr+"nullAST"; - labeledElementASTType = namespaceAntlr+"RefAST"; - labeledElementType = namespaceAntlr+"RefAST"; - commonExtraParams = namespaceAntlr+"RefAST _t"; - throwNoViable = "throw "+namespaceAntlr+"NoViableAltException(_t);"; - lt1Value = "_t"; - if ( g.hasOption("ASTLabelType") ) { - Token tsuffix = g.getOption("ASTLabelType"); - if ( tsuffix != null ) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(),"\"","\""); - if ( suffix != null ) { - usingCustomAST = true; - labeledElementASTType = suffix; - labeledElementType = suffix; - labeledElementInit = suffix+"("+namespaceAntlr+"nullAST)"; - labeledElementASTInit = labeledElementInit; - commonExtraParams = suffix+" _t"; - throwNoViable = "throw "+namespaceAntlr+"NoViableAltException("+namespaceAntlr+"RefAST(_t));"; - lt1Value = "_t"; - } - } - } - if ( !g.hasOption("ASTLabelType") ) { - g.setOption("ASTLabelType", new Token(ANTLRTokenTypes.STRING_LITERAL,namespaceAntlr+"RefAST")); - } - commonExtraArgs = "_t"; - commonLocalVars = ""; - exceptionThrown = namespaceAntlr+"RecognitionException"; - } - else { - antlrTool.panic("Unknown grammar type"); - } - } - // Convert a char or string constant to something C++ likes and - // check wether it's in range for the current charvocab size. - private String normalizeStringOrChar(String text) { - // check to see if the text is a single character - if (text.startsWith("'")) { - // assume it also ends with ' - - return charFormatter.literalChar(ANTLRLexer.tokenTypeForCharLiteral(text)); - } - else - { - // must be string literal strip of the quotes so - // they won't get quoted - return "\""+charFormatter.escapeString(StringUtils.stripFrontBack(text,"\"","\""))+"\""; - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CSharpBlockFinishingInfo.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CSharpBlockFinishingInfo.java --- glassfish/entity-persistence/src/java/persistence/antlr/CSharpBlockFinishingInfo.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CSharpBlockFinishingInfo.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,40 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -// -// ANTLR C# Code Generator by Kunle Odutola : kunle UNDERSCORE odutola AT hotmail DOT com -// - -class CSharpBlockFinishingInfo -{ - String postscript; // what to generate to terminate block - boolean generatedSwitch;// did block finish with "default:" of switch? - boolean generatedAnIf; - - /** When generating an if or switch, end-of-token lookahead sets - * will become the else or default clause, don't generate an - * error clause in this case. - */ - boolean needAnErrorClause; - - - public CSharpBlockFinishingInfo() - { - postscript=null; - generatedSwitch=generatedSwitch = false; - needAnErrorClause = true; - } - - public CSharpBlockFinishingInfo(String ps, boolean genS, boolean generatedAnIf, boolean n) - { - postscript = ps; - generatedSwitch = genS; - this.generatedAnIf = generatedAnIf; - needAnErrorClause = n; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CSharpCharFormatter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CSharpCharFormatter.java --- glassfish/entity-persistence/src/java/persistence/antlr/CSharpCharFormatter.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CSharpCharFormatter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,99 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -// -// ANTLR C# Code Generator by Kunle Odutola : kunle UNDERSCORE odutola AT hotmail DOT com -// - -class CSharpCharFormatter implements CharFormatter { - - - /** Given a character value, return a string representing the character - * that can be embedded inside a string literal or character literal - * This works for Java/C/C++ code-generation and languages with compatible - * special-character-escapment. - * Code-generators for languages should override this method. - * @param c The character of interest. - * @param forCharLiteral true to escape for char literal, false for string literal - */ - public String escapeChar(int c, boolean forCharLiteral) { - switch (c) - { - // case GrammarAnalyzer.EPSILON_TYPE : return "<end-of-token>"; - case '\n' : return "\\n"; - case '\t' : return "\\t"; - case '\r' : return "\\r"; - case '\\' : return "\\\\"; - case '\'' : return forCharLiteral ? "\\'" : "'"; - case '"' : return forCharLiteral ? "\"" : "\\\""; - default : - if ( c<' '||c>126 ) - { - if ( ( 0x0000 <= c ) && ( c <= 0x000F ) ) - { - return "\\u000" + Integer.toString(c,16); - } - else if ( ( 0x0010 <= c ) && ( c <= 0x00FF ) ) - { - return "\\u00" + Integer.toString(c,16); - } - else if ( ( 0x0100 <= c ) && ( c <= 0x0FFF )) - { - return "\\u0" + Integer.toString(c,16); - } - else - { - return "\\u" + Integer.toString(c,16); - } - } - else - { - return String.valueOf((char)c); - } - } - } - - - /** Converts a String into a representation that can be use as a literal - * when surrounded by double-quotes. - * @param s The String to be changed into a literal - */ - public String escapeString(String s) - { - String retval = new String(); - for (int i = 0; i < s.length(); i++) - { - retval += escapeChar(s.charAt(i), false); - } - return retval; - } - - - /** Given a character value, return a string representing the character - * literal that can be recognized by the target language compiler. - * This works for languages that use single-quotes for character literals. - * Code-generators for languages should override this method. - * @param c The character of interest. - */ - public String literalChar(int c) - { - return "'" + escapeChar(c, true) + "'"; - } - - - /** Converts a String into a string literal - * This works for languages that use double-quotes for string literals. - * Code-generators for languages should override this method. - * @param s The String to be changed into a literal - */ - public String literalString(String s) - { - //return "\"" + escapeString(s) + "\""; - return "@\"\"\"" + escapeString(s) + "\"\"\""; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CSharpCodeGenerator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CSharpCodeGenerator.java --- glassfish/entity-persistence/src/java/persistence/antlr/CSharpCodeGenerator.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CSharpCodeGenerator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,4023 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -// -// ANTLR C# Code Generator by Micheal Jordan -// Kunle Odutola : kunle UNDERSCORE odutola AT hotmail DOT com -// Anthony Oguntimehin -// -// With many thanks to Eric V. Smith from the ANTLR list. -// - -// HISTORY: -// -// 17-May-2002 kunle Fixed bug in OctalToUnicode() - was processing non-Octal escape sequences -// Also added namespace support based on Cpp version. -// 07-Jun-2002 kunle Added Scott Ellis's _saveIndex creation optimizations -// 09-Sep-2002 richardN Richard Ney's bug-fix for literals table construction. -// [ Hashtable ctor needed instance of hash code provider not it's class name. ] -// 17-Sep-2002 kunle & Added all Token ID definitions as data member of every Lexer/Parser/TreeParser -// AOg [ A by-product of problem-solving phase of the hetero-AST changes below -// but, it breaks nothing and restores "normal" ANTLR codegen behaviour. ] -// 19-Oct-2002 kunle & Completed the work required to support heterogenous ASTs (many changes) -// AOg & -// michealj -// 14-Nov-2002 michealj Added "initializeASTFactory()" to support flexible ASTFactory initialization. -// [ Thanks to Ric Klaren - for suggesting it and implementing it for Cpp. ] -// 18-Nov-2002 kunle Added fix to make xx_tokenSet_xx names CLS compliant. -// 01-Dec-2002 richardN Patch to reduce "unreachable code" warnings -// 01-Dec-2002 richardN Fix to generate correct TreeParser token-type classnames. -// 12-Jan-2002 kunle & Generated Lexers, Parsers and TreeParsers now support ANTLR's tracing option. -// michealj -// 12-Jan-2003 kunle Fixed issue where initializeASTFactory() was generated when "buildAST=false" -// 14-Jan-2003 AOg initializeASTFactory(AST factory) method was modifying the Parser's "astFactory" -// member rather than it's own "factory" parameter. Fixed. -// 18-Jan-2003 kunle & Fixed reported issues with ASTFactory create() calls for hetero ASTs -// michealj - code generated for LEXER token with hetero-AST option specified does not compile -// - code generated for imaginary tokens with hetero-AST option specified uses default AST type -// - code generated for per-TokenRef hetero-AST option specified does not compile -// 18-Jan-2003 kunle initializeASTFactory(AST) method is now a static public member -// 18-May-2003 kunle Changes to address outstanding reported issues:: -// - Fixed reported issues with support for case-sensitive literals -// - persistence.antlr.SemanticException now imported for all Lexers. -// [ This exception is thrown on predicate failure. ] -// 12-Jan-2004 kunle Added fix for reported issue with un-compileable generated lexers -// -// - -import java.util.Enumeration; -import java.util.Hashtable; -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; -import java.io.PrintWriter; //SAS: changed for proper text file io -import java.io.IOException; -import java.io.FileWriter; - -/** Generates MyParser.cs, MyLexer.cs and MyParserTokenTypes.cs */ -public class CSharpCodeGenerator extends CodeGenerator { - // non-zero if inside syntactic predicate generation - protected int syntacticPredLevel = 0; - - // Are we generating ASTs (for parsers and tree parsers) right now? - protected boolean genAST = false; - - // Are we saving the text consumed (for lexers) right now? - protected boolean saveText = false; - - // Grammar parameters set up to handle different grammar classes. - // These are used to get instanceof tests out of code generation - boolean usingCustomAST = false; - String labeledElementType; - String labeledElementASTType; - String labeledElementInit; - String commonExtraArgs; - String commonExtraParams; - String commonLocalVars; - String lt1Value; - String exceptionThrown; - String throwNoViable; - - // Tracks the rule being generated. Used for mapTreeId - RuleBlock currentRule; - // Tracks the rule or labeled subrule being generated. Used for AST generation. - String currentASTResult; - - /** Mapping between the ids used in the current alt, and the - * names of variables used to represent their AST values. - */ - Hashtable treeVariableMap = new Hashtable(); - - /** Used to keep track of which AST variables have been defined in a rule - * (except for the #rule_name and #rule_name_in var's - */ - Hashtable declaredASTVariables = new Hashtable(); - - /* Count of unnamed generated variables */ - int astVarNumber = 1; - - /** Special value used to mark duplicate in treeVariableMap */ - protected static final String NONUNIQUE = new String(); - - public static final int caseSizeThreshold = 127; // ascii is max - - private Vector semPreds; - // Used to keep track of which (heterogeneous AST types are used) - // which need to be set in the ASTFactory of the generated parser - private java.util.Vector astTypes; - - private static CSharpNameSpace nameSpace = null; - - // _saveIndex creation optimization -- don't create it unless we need to use it - boolean bSaveIndexCreated = false; - - - /** Create a CSharp code-generator using the given Grammar. - * The caller must still call setTool, setBehavior, and setAnalyzer - * before generating code. - */ - public CSharpCodeGenerator() { - super(); - charFormatter = new CSharpCharFormatter(); - } - - /** Adds a semantic predicate string to the sem pred vector - These strings will be used to build an array of sem pred names - when building a debugging parser. This method should only be - called when the debug option is specified - */ - protected int addSemPred(String predicate) { - semPreds.appendElement(predicate); - return semPreds.size()-1; - } - - public void exitIfError() - { - if (antlrTool.hasError()) - { - antlrTool.fatalError("Exiting due to errors."); - } - } - - /**Generate the parser, lexer, treeparser, and token types in CSharp */ - public void gen() { - // Do the code generation - try { - // Loop over all grammars - Enumeration grammarIter = behavior.grammars.elements(); - while (grammarIter.hasMoreElements()) { - Grammar g = (Grammar)grammarIter.nextElement(); - // Connect all the components to each other - g.setGrammarAnalyzer(analyzer); - g.setCodeGenerator(this); - analyzer.setGrammar(g); - // To get right overloading behavior across heterogeneous grammars - setupGrammarParameters(g); - g.generate(); - exitIfError(); - } - - // Loop over all token managers (some of which are lexers) - Enumeration tmIter = behavior.tokenManagers.elements(); - while (tmIter.hasMoreElements()) { - TokenManager tm = (TokenManager)tmIter.nextElement(); - if (!tm.isReadOnly()) { - // Write the token manager tokens as CSharp - // this must appear before genTokenInterchange so that - // labels are set on string literals - genTokenTypes(tm); - // Write the token manager tokens as plain text - genTokenInterchange(tm); - } - exitIfError(); - } - } - catch (IOException e) { - antlrTool.reportException(e, null); - } - } - - /** Generate code for the given grammar element. - * @param blk The {...} action to generate - */ - public void gen(ActionElement action) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("genAction("+action+")"); - if ( action.isSemPred ) { - genSemPred(action.actionText, action.line); - } - else { - if ( grammar.hasSyntacticPredicate ) { - println("if (0==inputState.guessing)"); - println("{"); - tabs++; - } - - ActionTransInfo tInfo = new ActionTransInfo(); - String actionStr = processActionForSpecialSymbols(action.actionText, - action.getLine(), - currentRule, tInfo); - - if ( tInfo.refRuleRoot!=null ) { - // Somebody referenced "#rule", make sure translated var is valid - // assignment to #rule is left as a ref also, meaning that assignments - // with no other refs like "#rule = foo();" still forces this code to be - // generated (unnecessarily). - println(tInfo.refRuleRoot + " = ("+labeledElementASTType+")currentAST.root;"); - } - - // dump the translated action - printAction(actionStr); - - if ( tInfo.assignToRoot ) { - // Somebody did a "#rule=", reset internal currentAST.root - println("currentAST.root = "+tInfo.refRuleRoot+";"); - // reset the child pointer too to be last sibling in sibling list - println("if ( (null != "+tInfo.refRuleRoot+") && (null != "+tInfo.refRuleRoot+".getFirstChild()) )"); - tabs++; - println("currentAST.child = "+tInfo.refRuleRoot+".getFirstChild();"); - tabs--; - println("else"); - tabs++; - println("currentAST.child = "+tInfo.refRuleRoot+";"); - tabs--; - println("currentAST.advanceChildToEnd();"); - } - - if ( grammar.hasSyntacticPredicate ) { - tabs--; - println("}"); - } - } - } - - /** Generate code for the given grammar element. - * @param blk The "x|y|z|..." block to generate - */ - public void gen(AlternativeBlock blk) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("gen("+blk+")"); - println("{"); - tabs++; - - genBlockPreamble(blk); - genBlockInitAction(blk); - - // Tell AST generation to build subrule result - String saveCurrentASTResult = currentASTResult; - if (blk.getLabel() != null) { - currentASTResult = blk.getLabel(); - } - - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - - CSharpBlockFinishingInfo howToFinish = genCommonBlock(blk, true); - genBlockFinish(howToFinish, throwNoViable); - - tabs--; - println("}"); - - // Restore previous AST generation - currentASTResult = saveCurrentASTResult; - } - /** Generate code for the given grammar element. - * @param blk The block-end element to generate. Block-end - * elements are synthesized by the grammar parser to represent - * the end of a block. - */ - public void gen(BlockEndElement end) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("genRuleEnd("+end+")"); - } - /** Generate code for the given grammar element. - * @param blk The character literal reference to generate - */ - public void gen(CharLiteralElement atom) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("genChar("+atom+")"); - - if ( atom.getLabel()!=null ) { - println(atom.getLabel() + " = " + lt1Value + ";"); - } - - boolean oldsaveText = saveText; - saveText = saveText && atom.getAutoGenType()==GrammarElement.AUTO_GEN_NONE; - genMatch(atom); - saveText = oldsaveText; - } - /** Generate code for the given grammar element. - * @param blk The character-range reference to generate - */ - public void gen(CharRangeElement r) { - if ( r.getLabel()!=null && syntacticPredLevel == 0) { - println(r.getLabel() + " = " + lt1Value + ";"); - } - boolean flag = ( grammar instanceof LexerGrammar && - (!saveText || (r.getAutoGenType() == GrammarElement.AUTO_GEN_BANG)) ); - if (flag) - println("_saveIndex = text.Length;"); - - println("matchRange("+OctalToUnicode(r.beginText)+","+OctalToUnicode(r.endText)+");"); - - if (flag) - println("text.Length = _saveIndex;"); - } - /** Generate the lexer CSharp file */ - public void gen(LexerGrammar g) throws IOException { - // If debugging, create a new sempred vector for this grammar - if (g.debuggingOutput) - semPreds = new Vector(); - - setGrammar(g); - if (!(grammar instanceof LexerGrammar)) { - antlrTool.panic("Internal error generating lexer"); - } - genBody(g); - } - /** Generate code for the given grammar element. - * @param blk The (...)+ block to generate - */ - public void gen(OneOrMoreBlock blk) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("gen+("+blk+")"); - String label; - String cnt; - println("{ // ( ... )+"); - genBlockPreamble(blk); - if ( blk.getLabel() != null ) { - cnt = "_cnt_"+blk.getLabel(); - } - else { - cnt = "_cnt" + blk.ID; - } - println("int "+cnt+"=0;"); - if ( blk.getLabel() != null ) { - label = blk.getLabel(); - } - else { - label = "_loop" + blk.ID; - } - - println("for (;;)"); - println("{"); - tabs++; - // generate the init action for ()+ ()* inside the loop - // this allows us to do usefull EOF checking... - genBlockInitAction(blk); - - // Tell AST generation to build subrule result - String saveCurrentASTResult = currentASTResult; - if (blk.getLabel() != null) { - currentASTResult = blk.getLabel(); - } - - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - - // generate exit test if greedy set to false - // and an alt is ambiguous with exit branch - // or when lookahead derived purely from end-of-file - // Lookahead analysis stops when end-of-file is hit, - // returning set {epsilon}. Since {epsilon} is not - // ambig with any real tokens, no error is reported - // by deterministic() routines and we have to check - // for the case where the lookahead depth didn't get - // set to NONDETERMINISTIC (this only happens when the - // FOLLOW contains real atoms + epsilon). - boolean generateNonGreedyExitPath = false; - int nonGreedyExitDepth = grammar.maxk; - - if ( !blk.greedy && - blk.exitLookaheadDepth<=grammar.maxk && - blk.exitCache[blk.exitLookaheadDepth].containsEpsilon() ) - { - generateNonGreedyExitPath = true; - nonGreedyExitDepth = blk.exitLookaheadDepth; - } - else if ( !blk.greedy && - blk.exitLookaheadDepth==LLkGrammarAnalyzer.NONDETERMINISTIC ) - { - generateNonGreedyExitPath = true; - } - - // generate exit test if greedy set to false - // and an alt is ambiguous with exit branch - if ( generateNonGreedyExitPath ) { - if ( DEBUG_CODE_GENERATOR ) { - System.out.println("nongreedy (...)+ loop; exit depth is "+ - blk.exitLookaheadDepth); - } - String predictExit = - getLookaheadTestExpression(blk.exitCache, - nonGreedyExitDepth); - println("// nongreedy exit test"); - println("if (("+cnt+" >= 1) && "+predictExit+") goto "+label+"_breakloop;"); - } - - CSharpBlockFinishingInfo howToFinish = genCommonBlock(blk, false); - genBlockFinish( - howToFinish, - "if ("+cnt+" >= 1) { goto "+label+"_breakloop; } else { " + throwNoViable + "; }" - ); - - println(cnt+"++;"); - tabs--; - println("}"); - _print(label + "_breakloop:"); - println(";"); - println("} // ( ... )+"); - - // Restore previous AST generation - currentASTResult = saveCurrentASTResult; - } - /** Generate the parser CSharp file */ - public void gen(ParserGrammar g) throws IOException { - - // if debugging, set up a new vector to keep track of sempred - // strings for this grammar - if (g.debuggingOutput) - semPreds = new Vector(); - - setGrammar(g); - if (!(grammar instanceof ParserGrammar)) { - antlrTool.panic("Internal error generating parser"); - } - genBody(g); - } - /** Generate code for the given grammar element. - * @param blk The rule-reference to generate - */ - public void gen(RuleRefElement rr) - { - if ( DEBUG_CODE_GENERATOR ) System.out.println("genRR("+rr+")"); - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rr.targetRule); - if (rs == null || !rs.isDefined()) - { - // Is this redundant??? - antlrTool.error("Rule '" + rr.targetRule + "' is not defined", grammar.getFilename(), rr.getLine(), rr.getColumn()); - return; - } - if (!(rs instanceof RuleSymbol)) - { - // Is this redundant??? - antlrTool.error("'" + rr.targetRule + "' does not name a grammar rule", grammar.getFilename(), rr.getLine(), rr.getColumn()); - return; - } - - genErrorTryForElement(rr); - - // AST value for labeled rule refs in tree walker. - // This is not AST construction; it is just the input tree node value. - if ( grammar instanceof TreeWalkerGrammar && - rr.getLabel() != null && - syntacticPredLevel == 0 ) - { - println(rr.getLabel() + " = _t==ASTNULL ? null : "+lt1Value+";"); - } - - // if in lexer and ! on rule ref or alt or rule, save buffer index to kill later - if (grammar instanceof LexerGrammar && (!saveText || rr.getAutoGenType() == GrammarElement.AUTO_GEN_BANG)) - { - declareSaveIndexVariableIfNeeded(); - println("_saveIndex = text.Length;"); - } - - // Process return value assignment if any - printTabs(); - if (rr.idAssign != null) - { - // Warn if the rule has no return type - if (rs.block.returnAction == null) - { - antlrTool.warning("Rule '" + rr.targetRule + "' has no return type", grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - _print(rr.idAssign + "="); - } else { - // Warn about return value if any, but not inside syntactic predicate - if ( !(grammar instanceof LexerGrammar) && syntacticPredLevel == 0 && rs.block.returnAction != null) - { - antlrTool.warning("Rule '" + rr.targetRule + "' returns a value", grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - } - - // Call the rule - GenRuleInvocation(rr); - - // if in lexer and ! on element or alt or rule, save buffer index to kill later - if ( grammar instanceof LexerGrammar && (!saveText||rr.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) { - declareSaveIndexVariableIfNeeded(); - println("text.Length = _saveIndex;"); - } - - // if not in a syntactic predicate - if (syntacticPredLevel == 0) - { - boolean doNoGuessTest = ( - grammar.hasSyntacticPredicate && - ( - grammar.buildAST && rr.getLabel() != null || - (genAST && rr.getAutoGenType() == GrammarElement.AUTO_GEN_NONE) - ) - ); - if (doNoGuessTest) { - println("if (0 == inputState.guessing)"); - println("{"); - tabs++; - } - - if (grammar.buildAST && rr.getLabel() != null) - { - // always gen variable for rule return on labeled rules - println(rr.getLabel() + "_AST = ("+labeledElementASTType+")returnAST;"); - } - if (genAST) - { - switch (rr.getAutoGenType()) - { - case GrammarElement.AUTO_GEN_NONE: - if( usingCustomAST ) - println("astFactory.addASTChild(currentAST, (AST)returnAST);"); - else - println("astFactory.addASTChild(currentAST, returnAST);"); - break; - case GrammarElement.AUTO_GEN_CARET: - antlrTool.error("Internal: encountered ^ after rule reference"); - break; - default: - break; - } - } - - // if a lexer and labeled, Token label defined at rule level, just set it here - if ( grammar instanceof LexerGrammar && rr.getLabel() != null ) - { - println(rr.getLabel()+" = returnToken_;"); - } - - if (doNoGuessTest) - { - tabs--; - println("}"); - } - } - genErrorCatchForElement(rr); - } - /** Generate code for the given grammar element. - * @param blk The string-literal reference to generate - */ - public void gen(StringLiteralElement atom) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("genString("+atom+")"); - - // Variable declarations for labeled elements - if (atom.getLabel()!=null && syntacticPredLevel == 0) { - println(atom.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(atom); - - // is there a bang on the literal? - boolean oldsaveText = saveText; - saveText = saveText && atom.getAutoGenType()==GrammarElement.AUTO_GEN_NONE; - - // matching - genMatch(atom); - - saveText = oldsaveText; - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _t.getNextSibling();"); - } - } - - /** Generate code for the given grammar element. - * @param blk The token-range reference to generate - */ - public void gen(TokenRangeElement r) { - genErrorTryForElement(r); - if ( r.getLabel()!=null && syntacticPredLevel == 0) { - println(r.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(r); - - // match - println("matchRange("+OctalToUnicode(r.beginText)+","+OctalToUnicode(r.endText)+");"); - genErrorCatchForElement(r); - } - - /** Generate code for the given grammar element. - * @param blk The token-reference to generate - */ - public void gen(TokenRefElement atom) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("genTokenRef("+atom+")"); - if ( grammar instanceof LexerGrammar ) { - antlrTool.panic("Token reference found in lexer"); - } - genErrorTryForElement(atom); - // Assign Token value to token label variable - if ( atom.getLabel()!=null && syntacticPredLevel == 0) { - println(atom.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(atom); - // matching - genMatch(atom); - genErrorCatchForElement(atom); - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _t.getNextSibling();"); - } - } - - public void gen(TreeElement t) { - // save AST cursor - println("AST __t" + t.ID + " = _t;"); - - // If there is a label on the root, then assign that to the variable - if (t.root.getLabel() != null) { - println(t.root.getLabel() + " = (ASTNULL == _t) ? null : ("+labeledElementASTType +")_t;"); - } - - // check for invalid modifiers ! and ^ on tree element roots - if ( t.root.getAutoGenType() == GrammarElement.AUTO_GEN_BANG ) { - antlrTool.error("Suffixing a root node with '!' is not implemented", - grammar.getFilename(), t.getLine(), t.getColumn()); - t.root.setAutoGenType(GrammarElement.AUTO_GEN_NONE); - } - if ( t.root.getAutoGenType() == GrammarElement.AUTO_GEN_CARET ) { - antlrTool.warning("Suffixing a root node with '^' is redundant; already a root", - grammar.getFilename(), t.getLine(), t.getColumn()); - t.root.setAutoGenType(GrammarElement.AUTO_GEN_NONE); - } - - // Generate AST variables - genElementAST(t.root); - if (grammar.buildAST) { - // Save the AST construction state - println("ASTPair __currentAST" + t.ID + " = currentAST.copy();"); - // Make the next item added a child of the TreeElement root - println("currentAST.root = currentAST.child;"); - println("currentAST.child = null;"); - } - - // match root - if ( t.root instanceof WildcardElement ) { - println("if (null == _t) throw new MismatchedTokenException();"); - } - else { - genMatch(t.root); - } - // move to list of children - println("_t = _t.getFirstChild();"); - - // walk list of children, generating code for each - for (int i=0; i<t.getAlternatives().size(); i++) { - Alternative a = t.getAlternativeAt(i); - AlternativeElement e = a.head; - while ( e != null ) { - e.generate(); - e = e.next; - } - } - - if (grammar.buildAST) { - // restore the AST construction state to that just after the - // tree root was added - println("currentAST = __currentAST" + t.ID + ";"); - } - // restore AST cursor - println("_t = __t" + t.ID + ";"); - // move cursor to sibling of tree just parsed - println("_t = _t.getNextSibling();"); - } - /** Generate the tree-parser CSharp file */ - public void gen(TreeWalkerGrammar g) throws IOException { - // SAS: debugging stuff removed for now... - setGrammar(g); - if (!(grammar instanceof TreeWalkerGrammar)) { - antlrTool.panic("Internal error generating tree-walker"); - } - genBody(g); - } - - /** Generate code for the given grammar element. - * @param wc The wildcard element to generate - */ - public void gen(WildcardElement wc) { - // Variable assignment for labeled elements - if (wc.getLabel()!=null && syntacticPredLevel == 0) { - println(wc.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(wc); - // Match anything but EOF - if (grammar instanceof TreeWalkerGrammar) { - println("if (null == _t) throw new MismatchedTokenException();"); - } - else if (grammar instanceof LexerGrammar) { - if ( grammar instanceof LexerGrammar && - (!saveText||wc.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) { - declareSaveIndexVariableIfNeeded(); - println("_saveIndex = text.Length;"); - } - println("matchNot(EOF/*_CHAR*/);"); - if ( grammar instanceof LexerGrammar && - (!saveText||wc.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) { - declareSaveIndexVariableIfNeeded(); - println("text.Length = _saveIndex;"); // kill text atom put in buffer - } - } - else { - println("matchNot(" + getValueString(Token.EOF_TYPE) + ");"); - } - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _t.getNextSibling();"); - } - } - - /** Generate code for the given grammar element. - * @param blk The (...)* block to generate - */ - public void gen(ZeroOrMoreBlock blk) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("gen*("+blk+")"); - println("{ // ( ... )*"); - tabs++; - genBlockPreamble(blk); - String label; - if ( blk.getLabel() != null ) { - label = blk.getLabel(); - } - else { - label = "_loop" + blk.ID; - } - println("for (;;)"); - println("{"); - tabs++; - // generate the init action for ()+ ()* inside the loop - // this allows us to do usefull EOF checking... - genBlockInitAction(blk); - - // Tell AST generation to build subrule result - String saveCurrentASTResult = currentASTResult; - if (blk.getLabel() != null) { - currentASTResult = blk.getLabel(); - } - - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - - // generate exit test if greedy set to false - // and an alt is ambiguous with exit branch - // or when lookahead derived purely from end-of-file - // Lookahead analysis stops when end-of-file is hit, - // returning set {epsilon}. Since {epsilon} is not - // ambig with any real tokens, no error is reported - // by deterministic() routines and we have to check - // for the case where the lookahead depth didn't get - // set to NONDETERMINISTIC (this only happens when the - // FOLLOW contains real atoms + epsilon). - boolean generateNonGreedyExitPath = false; - int nonGreedyExitDepth = grammar.maxk; - - if ( !blk.greedy && - blk.exitLookaheadDepth<=grammar.maxk && - blk.exitCache[blk.exitLookaheadDepth].containsEpsilon() ) - { - generateNonGreedyExitPath = true; - nonGreedyExitDepth = blk.exitLookaheadDepth; - } - else if ( !blk.greedy && - blk.exitLookaheadDepth==LLkGrammarAnalyzer.NONDETERMINISTIC ) - { - generateNonGreedyExitPath = true; - } - if ( generateNonGreedyExitPath ) { - if ( DEBUG_CODE_GENERATOR ) { - System.out.println("nongreedy (...)* loop; exit depth is "+ - blk.exitLookaheadDepth); - } - String predictExit = - getLookaheadTestExpression(blk.exitCache, - nonGreedyExitDepth); - println("// nongreedy exit test"); - println("if ("+predictExit+") goto "+label+"_breakloop;"); - } - - CSharpBlockFinishingInfo howToFinish = genCommonBlock(blk, false); - genBlockFinish(howToFinish, "goto " + label + "_breakloop;"); - - tabs--; - println("}"); - _print(label+"_breakloop:"); - println(";"); - tabs--; - println("} // ( ... )*"); - - // Restore previous AST generation - currentASTResult = saveCurrentASTResult; - } - - /** Generate an alternative. - * @param alt The alternative to generate - * @param blk The block to which the alternative belongs - */ - protected void genAlt(Alternative alt, AlternativeBlock blk) - { - // Save the AST generation state, and set it to that of the alt - boolean savegenAST = genAST; - genAST = genAST && alt.getAutoGen(); - - boolean oldsaveTest = saveText; - saveText = saveText && alt.getAutoGen(); - - // Reset the variable name map for the alternative - Hashtable saveMap = treeVariableMap; - treeVariableMap = new Hashtable(); - - // Generate try block around the alt for error handling - if (alt.exceptionSpec != null) { - println("try // for error handling"); - println("{"); - tabs++; - } - - AlternativeElement elem = alt.head; - while ( !(elem instanceof BlockEndElement) ) { - elem.generate(); // alt can begin with anything. Ask target to gen. - elem = elem.next; - } - - if ( genAST) - { - if (blk instanceof RuleBlock) - { - // Set the AST return value for the rule - RuleBlock rblk = (RuleBlock)blk; - if( usingCustomAST ) - { - println(rblk.getRuleName() + "_AST = ("+labeledElementASTType+")currentAST.root;"); - } - else - { - println(rblk.getRuleName() + "_AST = currentAST.root;"); - } - } - else if (blk.getLabel() != null) { - // ### future: also set AST value for labeled subrules. - // println(blk.getLabel() + "_AST = ("+labeledElementASTType+")currentAST.root;"); - antlrTool.warning("Labeled subrules not yet supported", grammar.getFilename(), blk.getLine(), blk.getColumn()); - } - } - - if (alt.exceptionSpec != null) - { - // close try block - tabs--; - println("}"); - genErrorHandler(alt.exceptionSpec); - } - - genAST = savegenAST; - saveText = oldsaveTest; - - treeVariableMap = saveMap; - } - - /** Generate all the bitsets to be used in the parser or lexer - * Generate the raw bitset data like "long _tokenSet1_data[] = {...};" - * and the BitSet object declarations like "BitSet _tokenSet1 = new BitSet(_tokenSet1_data);" - * Note that most languages do not support object initialization inside a - * class definition, so other code-generators may have to separate the - * bitset declarations from the initializations (e.g., put the initializations - * in the generated constructor instead). - * @param bitsetList The list of bitsets to generate. - * @param maxVocabulary Ensure that each generated bitset can contain at least this value. - */ - protected void genBitsets( Vector bitsetList, int maxVocabulary ) { - println(""); - for (int i = 0; i < bitsetList.size(); i++) - { - BitSet p = (BitSet)bitsetList.elementAt(i); - // Ensure that generated BitSet is large enough for vocabulary - p.growToInclude(maxVocabulary); - genBitSet(p, i); - } - } - - /** Do something simple like: - * private static final long[] mk_tokenSet_0() { - * long[] data = { -2305839160922996736L, 63L, 16777216L, 0L, 0L, 0L }; - * return data; - * } - * public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - * - * Or, for large bitsets, optimize init so ranges are collapsed into loops. - * This is most useful for lexers using unicode. - */ - private void genBitSet(BitSet p, int id) { - // initialization data - println("private static long[] mk_" + getBitsetName(id) + "()"); - println("{"); - tabs++; - int n = p.lengthInLongWords(); - if ( n<BITSET_OPTIMIZE_INIT_THRESHOLD ) { - println("long[] data = { " + p.toStringOfWords() + "};"); - } - else { - // will init manually, allocate space then set values - println("long[] data = new long["+n+"];"); - long[] elems = p.toPackedArray(); - for (int i = 0; i < elems.length;) { - if ( (i+1)==elems.length || elems[i]!=elems[i+1] ) { - // last number or no run of numbers, just dump assignment - println("data["+i+"]="+elems[i]+"L;"); - i++; - } - else - { - // scan to find end of run - int j; - for (j = i + 1; j < elems.length && elems[j]==elems[i]; j++) - { - ; - } - // j-1 is last member of run - println("for (int i = "+i+"; i<="+(j-1)+"; i++) { data[i]="+ - elems[i]+"L; }"); - i = j; - } - } - } - - println("return data;"); - tabs--; - println("}"); - // BitSet object - println("public static readonly BitSet " + getBitsetName(id) + " = new BitSet(" + - "mk_" + getBitsetName(id) + "()" + ");"); - } - - /** Given the index of a bitset in the bitset list, generate a unique name. - * Specific code-generators may want to override this - * if the language does not allow '_' or numerals in identifiers. - * @param index The index of the bitset in the bitset list. - */ - protected String getBitsetName(int index) { - return "tokenSet_" + index + "_"; - } - - /** Generate the finish of a block, using a combination of the info - * returned from genCommonBlock() and the action to perform when - * no alts were taken - * @param howToFinish The return of genCommonBlock() - * @param noViableAction What to generate when no alt is taken - */ - private void genBlockFinish(CSharpBlockFinishingInfo howToFinish, String noViableAction) - { - - if (howToFinish.needAnErrorClause && - (howToFinish.generatedAnIf || howToFinish.generatedSwitch)) - { - if ( howToFinish.generatedAnIf ) { - println("else"); - println("{"); - } - else { - println("{"); - } - tabs++; - println(noViableAction); - tabs--; - println("}"); - } - - if ( howToFinish.postscript!=null ) { - if (howToFinish.needAnErrorClause && howToFinish.generatedSwitch && - !howToFinish.generatedAnIf && noViableAction != null) - { - // Check to make sure that noViableAction is only a throw statement - if (noViableAction.indexOf("throw") == 0 || noViableAction.indexOf("goto") == 0) { - // Remove the break statement since it isn't reachable with a throw exception - int endOfBreak = howToFinish.postscript.indexOf("break;") + 6; - String newPostScript = howToFinish.postscript.substring(endOfBreak); - println(newPostScript); - } - else { - println(howToFinish.postscript); - } - } - else { - println(howToFinish.postscript); - } - } - } - - /** Generate the init action for a block, which may be a RuleBlock or a - * plain AlternativeBLock. - * @blk The block for which the preamble is to be generated. - */ - protected void genBlockInitAction(AlternativeBlock blk) - { - // dump out init action - if (blk.initAction != null) { - printAction(processActionForSpecialSymbols(blk.initAction, blk.getLine(), currentRule, null)); - } - } - - /** Generate the header for a block, which may be a RuleBlock or a - * plain AlternativeBLock. This generates any variable declarations - * and syntactic-predicate-testing variables. - * @blk The block for which the preamble is to be generated. - */ - protected void genBlockPreamble(AlternativeBlock blk) { - // define labels for rule blocks. - if ( blk instanceof RuleBlock ) { - RuleBlock rblk = (RuleBlock)blk; - if ( rblk.labeledElements!=null ) { - for (int i=0; i<rblk.labeledElements.size(); i++) { - - AlternativeElement a = (AlternativeElement)rblk.labeledElements.elementAt(i); - //System.out.println("looking at labeled element: "+a); - //Variables for labeled rule refs and - //subrules are different than variables for - //grammar atoms. This test is a little tricky - //because we want to get all rule refs and ebnf, - //but not rule blocks or syntactic predicates - if ( - a instanceof RuleRefElement || - a instanceof AlternativeBlock && - !(a instanceof RuleBlock) && - !(a instanceof SynPredBlock) - ) { - - if ( - !(a instanceof RuleRefElement) && - ((AlternativeBlock)a).not && - analyzer.subruleCanBeInverted(((AlternativeBlock)a), grammar instanceof LexerGrammar) - ) { - // Special case for inverted subrules that - // will be inlined. Treat these like - // token or char literal references - println(labeledElementType + " " + a.getLabel() + " = " + labeledElementInit + ";"); - if (grammar.buildAST) { - genASTDeclaration(a); - } - } - else { - if (grammar.buildAST) { - // Always gen AST variables for - // labeled elements, even if the - // element itself is marked with ! - genASTDeclaration(a); - } - if ( grammar instanceof LexerGrammar ) { - println("Token "+a.getLabel()+" = null;"); - } - if (grammar instanceof TreeWalkerGrammar) { - // always generate rule-ref variables - // for tree walker - println(labeledElementType + " " + a.getLabel() + " = " + labeledElementInit + ";"); - } - } - } - else { - // It is a token or literal reference. Generate the - // correct variable type for this grammar - println(labeledElementType + " " + a.getLabel() + " = " + labeledElementInit + ";"); - // In addition, generate *_AST variables if building ASTs - if (grammar.buildAST) { - //println(labeledElementASTType+" " + a.getLabel() + "_AST = null;"); - if (a instanceof GrammarAtom && - ((GrammarAtom)a).getASTNodeType()!=null ) { - GrammarAtom ga = (GrammarAtom)a; - genASTDeclaration(a, ga.getASTNodeType()); - } - else { - genASTDeclaration(a); - } - } - } - } - } - } - } - - public void genBody(LexerGrammar g) throws IOException - { - // SAS: moved output creation to method so a subclass can change - // how the output is generated (for VAJ interface) - setupOutput(grammar.getClassName()); - - genAST = false; // no way to gen trees. - saveText = true; // save consumed characters. - - tabs=0; - - // Generate header common to all CSharp output files - genHeader(); - // Do not use printAction because we assume tabs==0 - println(behavior.getHeaderAction("")); - - // Generate the CSharp namespace declaration (if specified) - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - tabs++; - - // Generate header specific to lexer CSharp file - // println("import java.io.FileInputStream;"); - println("// Generate header specific to lexer CSharp file"); - println("using System;"); - println("using Stream = System.IO.Stream;"); - println("using TextReader = System.IO.TextReader;"); - println("using Hashtable = System.Collections.Hashtable;"); - println("using Comparer = System.Collections.Comparer;"); - if ( !(g.caseSensitiveLiterals) ) - { - println("using CaseInsensitiveHashCodeProvider = System.Collections.CaseInsensitiveHashCodeProvider;"); - println("using CaseInsensitiveComparer = System.Collections.CaseInsensitiveComparer;"); - } - println(""); - println("using TokenStreamException = persistence.antlr.TokenStreamException;"); - println("using TokenStreamIOException = persistence.antlr.TokenStreamIOException;"); - println("using TokenStreamRecognitionException = persistence.antlr.TokenStreamRecognitionException;"); - println("using CharStreamException = persistence.antlr.CharStreamException;"); - println("using CharStreamIOException = persistence.antlr.CharStreamIOException;"); - println("using ANTLRException = persistence.antlr.ANTLRException;"); - println("using CharScanner = persistence.antlr.CharScanner;"); - println("using InputBuffer = persistence.antlr.InputBuffer;"); - println("using ByteBuffer = persistence.antlr.ByteBuffer;"); - println("using CharBuffer = persistence.antlr.CharBuffer;"); - println("using Token = persistence.antlr.Token;"); - println("using CommonToken = persistence.antlr.CommonToken;"); - println("using SemanticException = persistence.antlr.SemanticException;"); - println("using RecognitionException = persistence.antlr.RecognitionException;"); - println("using NoViableAltForCharException = persistence.antlr.NoViableAltForCharException;"); - println("using MismatchedCharException = persistence.antlr.MismatchedCharException;"); - println("using TokenStream = persistence.antlr.TokenStream;"); - println("using LexerSharedInputState = persistence.antlr.LexerSharedInputState;"); - println("using BitSet = persistence.antlr.collections.impl.BitSet;"); - - // Generate user-defined lexer file preamble - println(grammar.preambleAction.getText()); - - // Generate lexer class definition - String sup=null; - if ( grammar.superClass!=null ) { - sup = grammar.superClass; - } - else { - sup = "persistence.antlr." + grammar.getSuperClass(); - } - - // print javadoc comment if any - if ( grammar.comment!=null ) - { - _println(grammar.comment); - } - - Token tprefix = (Token)grammar.options.get("classHeaderPrefix"); - if (tprefix == null) { - print("public "); - } - else { - String p = StringUtils.stripFrontBack(tprefix.getText(), "\"", "\""); - if (p == null) { - print("public "); - } - else { - print(p+" "); - } - } - - print("class " + grammar.getClassName() + " : "+sup); - println(", TokenStream"); - Token tsuffix = (Token)grammar.options.get("classHeaderSuffix"); - if ( tsuffix != null ) - { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(),"\"","\""); - if ( suffix != null ) - { - print(", "+suffix); // must be an interface name for CSharp - } - } - println(" {"); - tabs++; - - // Generate 'const' definitions for Token IDs - genTokenDefinitions(grammar.tokenManager); - - // Generate user-defined lexer class members - print( - processActionForSpecialSymbols(grammar.classMemberAction.getText(), grammar.classMemberAction.getLine(), currentRule, null) - ); - - // - // Generate the constructor from InputStream, which in turn - // calls the ByteBuffer constructor - // - println("public " + grammar.getClassName() + "(Stream ins) : this(new ByteBuffer(ins))"); - println("{"); - println("}"); - println(""); - - // - // Generate the constructor from Reader, which in turn - // calls the CharBuffer constructor - // - println("public " + grammar.getClassName() + "(TextReader r) : this(new CharBuffer(r))"); - println("{"); - println("}"); - println(""); - - print("public " + grammar.getClassName() + "(InputBuffer ib)"); - // if debugging, wrap the input buffer in a debugger - if (grammar.debuggingOutput) - println(" : this(new LexerSharedInputState(new persistence.antlr.debug.DebuggingInputBuffer(ib)))"); - else - println(" : this(new LexerSharedInputState(ib))"); - println("{"); - println("}"); - println(""); - - // - // Generate the constructor from InputBuffer (char or byte) - // - println("public " + grammar.getClassName() + "(LexerSharedInputState state) : base(state)"); - println("{"); - tabs++; - println("initialize();"); - tabs--; - println("}"); - - // Generate the initialize function - println("private void initialize()"); - println("{"); - tabs++; - - // if debugging, set up array variables and call user-overridable - // debugging setup method - if ( grammar.debuggingOutput ) { - println("ruleNames = _ruleNames;"); - println("semPredNames = _semPredNames;"); - println("setupDebugging();"); - } - - // Generate the setting of various generated options. - // These need to be before the literals since ANTLRHashString depends on - // the casesensitive stuff. - println("caseSensitiveLiterals = " + g.caseSensitiveLiterals + ";"); - println("setCaseSensitive(" + g.caseSensitive + ");"); - - // Generate the initialization of a hashtable - // containing the string literals used in the lexer - // The literals variable itself is in CharScanner - if (g.caseSensitiveLiterals) - println("literals = new Hashtable(null, Comparer.Default);"); - else - println("literals = new Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default);"); - Enumeration keys = grammar.tokenManager.getTokenSymbolKeys(); - while ( keys.hasMoreElements() ) { - String key = (String)keys.nextElement(); - if ( key.charAt(0) != '"' ) { - continue; - } - TokenSymbol sym = grammar.tokenManager.getTokenSymbol(key); - if ( sym instanceof StringLiteralSymbol ) { - StringLiteralSymbol s = (StringLiteralSymbol)sym; - println("literals.Add(" + s.getId() + ", " + s.getTokenType() + ");"); - } - } - - Enumeration ids; - tabs--; - println("}"); - - // generate the rule name array for debugging - if (grammar.debuggingOutput) { - println("private const string[] _ruleNames = {"); - - ids = grammar.rules.elements(); - int ruleNum=0; - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol) ids.nextElement(); - if ( sym instanceof RuleSymbol) - println(" \""+((RuleSymbol)sym).getId()+"\","); - } - println("};"); - } - - // Generate nextToken() rule. - // nextToken() is a synthetic lexer rule that is the implicit OR of all - // user-defined lexer rules. - genNextToken(); - - // Generate code for each rule in the lexer - ids = grammar.rules.elements(); - int ruleNum=0; - while ( ids.hasMoreElements() ) { - RuleSymbol sym = (RuleSymbol) ids.nextElement(); - // Don't generate the synthetic rules - if (!sym.getId().equals("mnextToken")) { - genRule(sym, false, ruleNum++, grammar.tokenManager); - } - exitIfError(); - } - - // Generate the semantic predicate map for debugging - if (grammar.debuggingOutput) - genSemPredMap(); - - // Generate the bitsets used throughout the lexer - genBitsets(bitsetsUsed, ((LexerGrammar)grammar).charVocabulary.size()); - - println(""); - tabs--; - println("}"); - - tabs--; - // Generate the CSharp namespace closures (if required) - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Close the lexer output stream - currentOutput.close(); - currentOutput = null; - } - - public void genInitFactory( Grammar g ) { - if( g.buildAST ) - { - // Generate the method to initialize an ASTFactory when we're - // building AST's - println("static public void initializeASTFactory( ASTFactory factory )"); - println("{"); - tabs++; - - println("factory.setMaxNodeType("+g.tokenManager.maxTokenType()+");"); - - // Walk the token vocabulary and generate code to register every TokenID->ASTNodeType - // mapping specified in the tokens {...} section with the ASTFactory. - Vector v = g.tokenManager.getVocabulary(); - for (int i = 0; i < v.size(); i++) { - String s = (String)v.elementAt(i); - if (s != null) { - TokenSymbol ts = g.tokenManager.getTokenSymbol(s); - if (ts != null && ts.getASTNodeType() != null) { - println("factory.setTokenTypeASTNodeType(" + s + ", \"" + ts.getASTNodeType() + "\");"); - } - } - } - - tabs--; - println("}"); - } - } - - public void genBody(ParserGrammar g) throws IOException - { - // Open the output stream for the parser and set the currentOutput - // SAS: moved file setup so subclass could do it (for VAJ interface) - setupOutput(grammar.getClassName()); - - genAST = grammar.buildAST; - - tabs = 0; - - // Generate the header common to all output files. - genHeader(); - // Do not use printAction because we assume tabs==0 - println(behavior.getHeaderAction("")); - - // Generate the CSharp namespace declaration (if specified) - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - tabs++; - - // Generate header for the parser - println("// Generate the header common to all output files."); - println("using System;"); - println(""); - println("using TokenBuffer = persistence.antlr.TokenBuffer;"); - println("using TokenStreamException = persistence.antlr.TokenStreamException;"); - println("using TokenStreamIOException = persistence.antlr.TokenStreamIOException;"); - println("using ANTLRException = persistence.antlr.ANTLRException;"); - println("using " + grammar.getSuperClass() + " = persistence.antlr." + grammar.getSuperClass() + ";"); - println("using Token = persistence.antlr.Token;"); - println("using TokenStream = persistence.antlr.TokenStream;"); - println("using RecognitionException = persistence.antlr.RecognitionException;"); - println("using NoViableAltException = persistence.antlr.NoViableAltException;"); - println("using MismatchedTokenException = persistence.antlr.MismatchedTokenException;"); - println("using SemanticException = persistence.antlr.SemanticException;"); - println("using ParserSharedInputState = persistence.antlr.ParserSharedInputState;"); - println("using BitSet = persistence.antlr.collections.impl.BitSet;"); - if ( genAST ) { - println("using AST = persistence.antlr.collections.AST;"); - println("using ASTPair = persistence.antlr.ASTPair;"); - println("using ASTFactory = persistence.antlr.ASTFactory;"); - println("using ASTArray = persistence.antlr.collections.impl.ASTArray;"); - } - - // Output the user-defined parser preamble - println(grammar.preambleAction.getText()); - - // Generate parser class definition - String sup=null; - if ( grammar.superClass != null ) - sup = grammar.superClass; - else - sup = "persistence.antlr." + grammar.getSuperClass(); - - // print javadoc comment if any - if ( grammar.comment!=null ) { - _println(grammar.comment); - } - - Token tprefix = (Token)grammar.options.get("classHeaderPrefix"); - if (tprefix == null) { - print("public "); - } - else { - String p = StringUtils.stripFrontBack(tprefix.getText(), "\"", "\""); - if (p == null) { - print("public "); - } - else { - print(p+" "); - } - } - - println("class " + grammar.getClassName() + " : "+sup); - - Token tsuffix = (Token)grammar.options.get("classHeaderSuffix"); - if ( tsuffix != null ) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(),"\"","\""); - if ( suffix != null ) - print(" , "+suffix); // must be an interface name for CSharp - } - println("{"); - tabs++; - - // Generate 'const' definitions for Token IDs - genTokenDefinitions(grammar.tokenManager); - - // set up an array of all the rule names so the debugger can - // keep track of them only by number -- less to store in tree... - if (grammar.debuggingOutput) { - println("private const string[] _ruleNames = {"); - tabs++; - - Enumeration ids = grammar.rules.elements(); - int ruleNum=0; - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol) ids.nextElement(); - if ( sym instanceof RuleSymbol) - println(" \""+((RuleSymbol)sym).getId()+"\","); - } - tabs--; - println("};"); - } - - // Generate user-defined parser class members - print( - processActionForSpecialSymbols(grammar.classMemberAction.getText(), grammar.classMemberAction.getLine(), currentRule, null) - ); - - // Generate parser class constructor from TokenBuffer - println(""); - println("protected void initialize()"); - println("{"); - tabs++; - println("tokenNames = tokenNames_;"); - - if( grammar.buildAST ) - println("initializeFactory();"); - - // if debugging, set up arrays and call the user-overridable - // debugging setup method - if ( grammar.debuggingOutput ) { - println("ruleNames = _ruleNames;"); - println("semPredNames = _semPredNames;"); - println("setupDebugging(tokenBuf);"); - } - tabs--; - println("}"); - println(""); - - println(""); - println("protected " + grammar.getClassName() + "(TokenBuffer tokenBuf, int k) : base(tokenBuf, k)"); - println("{"); - tabs++; - println("initialize();"); - tabs--; - println("}"); - println(""); - - println("public " + grammar.getClassName() + "(TokenBuffer tokenBuf) : this(tokenBuf," + grammar.maxk + ")"); - println("{"); - println("}"); - println(""); - - // Generate parser class constructor from TokenStream - println("protected " + grammar.getClassName()+"(TokenStream lexer, int k) : base(lexer,k)"); - println("{"); - tabs++; - println("initialize();"); - tabs--; - println("}"); - println(""); - - println("public " + grammar.getClassName()+"(TokenStream lexer) : this(lexer," + grammar.maxk + ")"); - println("{"); - println("}"); - println(""); - - println("public " + grammar.getClassName()+"(ParserSharedInputState state) : base(state," + grammar.maxk + ")"); - println("{"); - tabs++; - println("initialize();"); - tabs--; - println("}"); - println(""); - - astTypes = new java.util.Vector(100); - - // Generate code for each rule in the grammar - Enumeration ids = grammar.rules.elements(); - int ruleNum=0; - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol) ids.nextElement(); - if ( sym instanceof RuleSymbol) { - RuleSymbol rs = (RuleSymbol)sym; - genRule(rs, rs.references.size()==0, ruleNum++, grammar.tokenManager); - } - exitIfError(); - } - if ( usingCustomAST ) - { - // when we are using a custom AST, overload Parser.getAST() to return the - // custom AST type - println("public new " + labeledElementASTType + " getAST()"); - println("{"); - tabs++; - println("return (" + labeledElementASTType + ") returnAST;"); - tabs--; - println("}"); - println(""); - } - - // Generate the method that initializes the ASTFactory when we're - // building AST's - println("private void initializeFactory()"); - println("{"); - tabs++; - if( grammar.buildAST ) { - println("if (astFactory == null)"); - println("{"); - tabs++; - if( usingCustomAST ) - { - println("astFactory = new ASTFactory(\"" + labeledElementASTType + "\");"); - } - else - println("astFactory = new ASTFactory();"); - tabs--; - println("}"); - println("initializeASTFactory( astFactory );"); - } - tabs--; - println("}"); - genInitFactory( g ); - - // Generate the token names - genTokenStrings(); - - // Generate the bitsets used throughout the grammar - genBitsets(bitsetsUsed, grammar.tokenManager.maxTokenType()); - - // Generate the semantic predicate map for debugging - if (grammar.debuggingOutput) - genSemPredMap(); - - // Close class definition - println(""); - tabs--; - println("}"); - - tabs--; - // Generate the CSharp namespace closures (if required) - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - public void genBody(TreeWalkerGrammar g) throws IOException - { - // Open the output stream for the parser and set the currentOutput - // SAS: move file open to method so subclass can override it - // (mainly for VAJ interface) - setupOutput(grammar.getClassName()); - - genAST = grammar.buildAST; - tabs = 0; - - // Generate the header common to all output files. - genHeader(); - // Do not use printAction because we assume tabs==0 - println(behavior.getHeaderAction("")); - - // Generate the CSharp namespace declaration (if specified) - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - tabs++; - - // Generate header specific to the tree-parser CSharp file - println("// Generate header specific to the tree-parser CSharp file"); - println("using System;"); - println(""); - println("using " + grammar.getSuperClass() + " = persistence.antlr." + grammar.getSuperClass() + ";"); - println("using Token = persistence.antlr.Token;"); - println("using AST = persistence.antlr.collections.AST;"); - println("using RecognitionException = persistence.antlr.RecognitionException;"); - println("using ANTLRException = persistence.antlr.ANTLRException;"); - println("using NoViableAltException = persistence.antlr.NoViableAltException;"); - println("using MismatchedTokenException = persistence.antlr.MismatchedTokenException;"); - println("using SemanticException = persistence.antlr.SemanticException;"); - println("using BitSet = persistence.antlr.collections.impl.BitSet;"); - println("using ASTPair = persistence.antlr.ASTPair;"); - println("using ASTFactory = persistence.antlr.ASTFactory;"); - println("using ASTArray = persistence.antlr.collections.impl.ASTArray;"); - - // Output the user-defined parser premamble - println(grammar.preambleAction.getText()); - - // Generate parser class definition - String sup=null; - if ( grammar.superClass!=null ) { - sup = grammar.superClass; - } - else { - sup = "persistence.antlr." + grammar.getSuperClass(); - } - println(""); - - // print javadoc comment if any - if ( grammar.comment!=null ) { - _println(grammar.comment); - } - - Token tprefix = (Token)grammar.options.get("classHeaderPrefix"); - if (tprefix == null) { - print("public "); - } - else { - String p = StringUtils.stripFrontBack(tprefix.getText(), "\"", "\""); - if (p == null) { - print("public "); - } - else { - print(p+" "); - } - } - - println("class " + grammar.getClassName() + " : "+sup); - Token tsuffix = (Token)grammar.options.get("classHeaderSuffix"); - if ( tsuffix != null ) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(),"\"","\""); - if ( suffix != null ) { - print(" , "+suffix); // must be an interface name for CSharp - } - } - println("{"); - tabs++; - - // Generate 'const' definitions for Token IDs - genTokenDefinitions(grammar.tokenManager); - - // Generate user-defined parser class members - print( - processActionForSpecialSymbols(grammar.classMemberAction.getText(), grammar.classMemberAction.getLine(), currentRule, null) - ); - - // Generate default parser class constructor - println("public " + grammar.getClassName() + "()"); - println("{"); - tabs++; - println("tokenNames = tokenNames_;"); - tabs--; - println("}"); - println(""); - - astTypes = new java.util.Vector(); - // Generate code for each rule in the grammar - Enumeration ids = grammar.rules.elements(); - int ruleNum=0; - String ruleNameInits = ""; - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol) ids.nextElement(); - if ( sym instanceof RuleSymbol) { - RuleSymbol rs = (RuleSymbol)sym; - genRule(rs, rs.references.size()==0, ruleNum++, grammar.tokenManager); - } - exitIfError(); - } - - if ( usingCustomAST ) - { - // when we are using a custom ast override Parser.getAST to return the - // custom AST type - println("public new " + labeledElementASTType + " getAST()"); - println("{"); - tabs++; - println("return (" + labeledElementASTType + ") returnAST;"); - tabs--; - println("}"); - println(""); - } - - // Generate the ASTFactory initialization function - genInitFactory( grammar ); - - // Generate the token names - genTokenStrings(); - - // Generate the bitsets used throughout the grammar - genBitsets(bitsetsUsed, grammar.tokenManager.maxTokenType()); - - // Close class definition - tabs--; - println("}"); - println(""); - - tabs--; - // Generate the CSharp namespace closures (if required) - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - - /** Generate a series of case statements that implement a BitSet test. - * @param p The Bitset for which cases are to be generated - */ - protected void genCases(BitSet p) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("genCases("+p+")"); - int[] elems; - - elems = p.toArray(); - // Wrap cases four-per-line for lexer, one-per-line for parser - int wrap = (grammar instanceof LexerGrammar) ? 4 : 1; - int j=1; - boolean startOfLine = true; - for (int i = 0; i < elems.length; i++) { - if (j==1) { - print(""); - } else { - _print(" "); - } - _print("case " + getValueString(elems[i]) + ":"); - if (j==wrap) { - _println(""); - startOfLine = true; - j=1; - } - else { - j++; - startOfLine = false; - } - } - if (!startOfLine) { - _println(""); - } - } - - /**Generate common code for a block of alternatives; return a - * postscript that needs to be generated at the end of the - * block. Other routines may append else-clauses and such for - * error checking before the postfix is generated. If the - * grammar is a lexer, then generate alternatives in an order - * where alternatives requiring deeper lookahead are generated - * first, and EOF in the lookahead set reduces the depth of - * the lookahead. @param blk The block to generate @param - * noTestForSingle If true, then it does not generate a test - * for a single alternative. - */ - public CSharpBlockFinishingInfo genCommonBlock(AlternativeBlock blk, - boolean noTestForSingle) - { - int nIF=0; - boolean createdLL1Switch = false; - int closingBracesOfIFSequence = 0; - CSharpBlockFinishingInfo finishingInfo = new CSharpBlockFinishingInfo(); - if ( DEBUG_CODE_GENERATOR ) System.out.println("genCommonBlock("+blk+")"); - - // Save the AST generation state, and set it to that of the block - boolean savegenAST = genAST; - genAST = genAST && blk.getAutoGen(); - - boolean oldsaveTest = saveText; - saveText = saveText && blk.getAutoGen(); - - // Is this block inverted? If so, generate special-case code - if ( blk.not && - analyzer.subruleCanBeInverted(blk, grammar instanceof LexerGrammar) ) - { - if ( DEBUG_CODE_GENERATOR ) System.out.println("special case: ~(subrule)"); - Lookahead p = analyzer.look(1, blk); - // Variable assignment for labeled elements - if (blk.getLabel() != null && syntacticPredLevel == 0) { - println(blk.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(blk); - - String astArgs=""; - if (grammar instanceof TreeWalkerGrammar) { - if ( usingCustomAST ) - astArgs = "(AST)_t,"; - else - astArgs = "_t,"; - } - - // match the bitset for the alternative - println("match(" + astArgs + getBitsetName(markBitsetForGen(p.fset)) + ");"); - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) - { - println("_t = _t.getNextSibling();"); - } - return finishingInfo; - } - - // Special handling for single alt - if (blk.getAlternatives().size() == 1) - { - Alternative alt = blk.getAlternativeAt(0); - // Generate a warning if there is a synPred for single alt. - if (alt.synPred != null) - { - antlrTool.warning( - "Syntactic predicate superfluous for single alternative", - grammar.getFilename(), - blk.getAlternativeAt(0).synPred.getLine(), - blk.getAlternativeAt(0).synPred.getColumn() - ); - } - if (noTestForSingle) - { - if (alt.semPred != null) - { - // Generate validating predicate - genSemPred(alt.semPred, blk.line); - } - genAlt(alt, blk); - return finishingInfo; - } - } - - // count number of simple LL(1) cases; only do switch for - // many LL(1) cases (no preds, no end of token refs) - // We don't care about exit paths for (...)*, (...)+ - // because we don't explicitly have a test for them - // as an alt in the loop. - // - // Also, we now count how many unicode lookahead sets - // there are--they must be moved to DEFAULT or ELSE - // clause. - int nLL1 = 0; - for (int i=0; i<blk.getAlternatives().size(); i++) - { - Alternative a = blk.getAlternativeAt(i); - if ( suitableForCaseExpression(a) ) { - nLL1++; - } - } - - // do LL(1) cases - if ( nLL1 >= makeSwitchThreshold) - { - // Determine the name of the item to be compared - String testExpr = lookaheadString(1); - createdLL1Switch = true; - // when parsing trees, convert null to valid tree node with NULL lookahead - if ( grammar instanceof TreeWalkerGrammar ) - { - println("if (null == _t)"); - tabs++; - println("_t = ASTNULL;"); - tabs--; - } - println("switch ( " + testExpr+" )"); - println("{"); - //tabs++; - for (int i=0; i<blk.alternatives.size(); i++) - { - Alternative alt = blk.getAlternativeAt(i); - // ignore any non-LL(1) alts, predicated alts, - // or end-of-token alts for case expressions - bSaveIndexCreated = false; - if ( !suitableForCaseExpression(alt) ) - { - continue; - } - Lookahead p = alt.cache[1]; - if (p.fset.degree() == 0 && !p.containsEpsilon()) - { - antlrTool.warning("Alternate omitted due to empty prediction set", - grammar.getFilename(), - alt.head.getLine(), alt.head.getColumn()); - } - else - { - genCases(p.fset); - println("{"); - tabs++; - genAlt(alt, blk); - println("break;"); - tabs--; - println("}"); - } - } - println("default:"); - tabs++; - } - - // do non-LL(1) and nondeterministic cases This is tricky in - // the lexer, because of cases like: STAR : '*' ; ASSIGN_STAR - // : "*="; Since nextToken is generated without a loop, then - // the STAR will have end-of-token as it's lookahead set for - // LA(2). So, we must generate the alternatives containing - // trailing end-of-token in their lookahead sets *after* the - // alternatives without end-of-token. This implements the - // usual lexer convention that longer matches come before - // shorter ones, e.g. "*=" matches ASSIGN_STAR not STAR - // - // For non-lexer grammars, this does not sort the alternates - // by depth Note that alts whose lookahead is purely - // end-of-token at k=1 end up as default or else clauses. - int startDepth = (grammar instanceof LexerGrammar) ? grammar.maxk : 0; - for (int altDepth = startDepth; altDepth >= 0; altDepth--) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("checking depth "+altDepth); - for (int i=0; i<blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - if ( DEBUG_CODE_GENERATOR ) System.out.println("genAlt: "+i); - // if we made a switch above, ignore what we already took care - // of. Specifically, LL(1) alts with no preds - // that do not have end-of-token in their prediction set - // and that are not giant unicode sets. - if ( createdLL1Switch && suitableForCaseExpression(alt) ) - { - if ( DEBUG_CODE_GENERATOR ) System.out.println("ignoring alt because it was in the switch"); - continue; - } - String e; - - boolean unpredicted = false; - - if (grammar instanceof LexerGrammar) { - // Calculate the "effective depth" of the alt, - // which is the max depth at which - // cache[depth]!=end-of-token - int effectiveDepth = alt.lookaheadDepth; - if (effectiveDepth == GrammarAnalyzer.NONDETERMINISTIC) - { - // use maximum lookahead - effectiveDepth = grammar.maxk; - } - while ( effectiveDepth >= 1 && - alt.cache[effectiveDepth].containsEpsilon() ) - { - effectiveDepth--; - } - // Ignore alts whose effective depth is other than - // the ones we are generating for this iteration. - if (effectiveDepth != altDepth) - { - if ( DEBUG_CODE_GENERATOR ) - System.out.println("ignoring alt because effectiveDepth!=altDepth;"+effectiveDepth+"!="+altDepth); - continue; - } - unpredicted = lookaheadIsEmpty(alt, effectiveDepth); - e = getLookaheadTestExpression(alt, effectiveDepth); - } - else - { - unpredicted = lookaheadIsEmpty(alt, grammar.maxk); - e = getLookaheadTestExpression(alt, grammar.maxk); - } - - // Was it a big unicode range that forced unsuitability - // for a case expression? - if (alt.cache[1].fset.degree() > caseSizeThreshold && - suitableForCaseExpression(alt)) - { - if ( nIF==0 ) - { - println("if " + e); - println("{"); - } - else { - println("else if " + e); - println("{"); - } - } - else if (unpredicted && - alt.semPred==null && - alt.synPred==null) - { - // The alt has empty prediction set and no - // predicate to help out. if we have not - // generated a previous if, just put {...} around - // the end-of-token clause - if ( nIF==0 ) { - println("{"); - } - else { - println("else {"); - } - finishingInfo.needAnErrorClause = false; - } - else - { - // check for sem and syn preds - // Add any semantic predicate expression to the lookahead test - if ( alt.semPred != null ) { - // if debugging, wrap the evaluation of the predicate in a method - // - // translate $ and # references - ActionTransInfo tInfo = new ActionTransInfo(); - String actionStr = processActionForSpecialSymbols(alt.semPred, - blk.line, - currentRule, - tInfo); - // ignore translation info...we don't need to - // do anything with it. call that will inform - // SemanticPredicateListeners of the result - if (((grammar instanceof ParserGrammar) || (grammar instanceof LexerGrammar)) && - grammar.debuggingOutput) { - e = "("+e+"&& fireSemanticPredicateEvaluated(persistence.antlr.debug.SemanticPredicateEvent.PREDICTING,"+ //FIXME - addSemPred(charFormatter.escapeString(actionStr))+","+actionStr+"))"; - } - else { - e = "("+e+"&&("+actionStr +"))"; - } - } - - // Generate any syntactic predicates - if ( nIF>0 ) { - if ( alt.synPred != null ) { - println("else {"); - tabs++; - genSynPred( alt.synPred, e ); - closingBracesOfIFSequence++; - } - else { - println("else if " + e + " {"); - } - } - else { - if ( alt.synPred != null ) { - genSynPred( alt.synPred, e ); - } - else { - // when parsing trees, convert null to valid tree node - // with NULL lookahead. - if ( grammar instanceof TreeWalkerGrammar ) { - println("if (_t == null)"); - tabs++; - println("_t = ASTNULL;"); - tabs--; - } - println("if " + e); - println("{"); - } - } - - } - - nIF++; - tabs++; - genAlt(alt, blk); - tabs--; - println("}"); - } - } - - String ps = ""; - for (int i=1; i<=closingBracesOfIFSequence; i++) { - ps+="}"; - } - - // Restore the AST generation state - genAST = savegenAST; - - // restore save text state - saveText=oldsaveTest; - - // Return the finishing info. - if ( createdLL1Switch ) { - tabs--; - finishingInfo.postscript = ps+"break; }"; - finishingInfo.generatedSwitch = true; - finishingInfo.generatedAnIf = nIF>0; - //return new CSharpBlockFinishingInfo(ps+"}",true,nIF>0); // close up switch statement - - } - else { - finishingInfo.postscript = ps; - finishingInfo.generatedSwitch = false; - finishingInfo.generatedAnIf = nIF>0; - // return new CSharpBlockFinishingInfo(ps, false,nIF>0); - } - return finishingInfo; - } - - private static boolean suitableForCaseExpression(Alternative a) { - return a.lookaheadDepth == 1 && - a.semPred == null && - !a.cache[1].containsEpsilon() && - a.cache[1].fset.degree()<=caseSizeThreshold; - } - - /** Generate code to link an element reference into the AST */ - private void genElementAST(AlternativeElement el) { - // handle case where you're not building trees, but are in tree walker. - // Just need to get labels set up. - if ( grammar instanceof TreeWalkerGrammar && !grammar.buildAST ) - { - String elementRef; - String astName; - - // Generate names and declarations of the AST variable(s) - if (el.getLabel() == null) - { - elementRef = lt1Value; - // Generate AST variables for unlabeled stuff - astName = "tmp" + astVarNumber + "_AST"; - astVarNumber++; - // Map the generated AST variable in the alternate - mapTreeVariable(el, astName); - // Generate an "input" AST variable also - println(labeledElementASTType+" "+astName+"_in = "+elementRef+";"); - } - return; - } - - if (grammar.buildAST && syntacticPredLevel == 0) - { - boolean needASTDecl = - (genAST && - (el.getLabel() != null || (el.getAutoGenType() != GrammarElement.AUTO_GEN_BANG))); - - // RK: if we have a grammar element always generate the decl - // since some guy can access it from an action and we can't - // peek ahead (well not without making a mess). - // I'd prefer taking this out. - if (el.getAutoGenType() != GrammarElement.AUTO_GEN_BANG && - (el instanceof TokenRefElement)) - needASTDecl = true; - - boolean doNoGuessTest = (grammar.hasSyntacticPredicate && needASTDecl); - - String elementRef; - String astNameBase; - - // Generate names and declarations of the AST variable(s) - if (el.getLabel() != null) - { - // if the element is labeled use that name... - elementRef = el.getLabel(); - astNameBase = el.getLabel(); - } - else - { - // else generate a temporary name... - elementRef = lt1Value; - // Generate AST variables for unlabeled stuff - astNameBase = "tmp" + astVarNumber; - astVarNumber++; - } - - // Generate the declaration if required. - if (needASTDecl) - { - // Generate the declaration - if ( el instanceof GrammarAtom ) - { - GrammarAtom ga = (GrammarAtom)el; - if ( ga.getASTNodeType()!=null ) - { - genASTDeclaration(el, astNameBase, ga.getASTNodeType()); - //println(ga.getASTNodeType()+" " + astName+" = null;"); - } - else - { - genASTDeclaration(el, astNameBase, labeledElementASTType); - //println(labeledElementASTType+" " + astName + " = null;"); - } - } - else - { - genASTDeclaration(el, astNameBase, labeledElementASTType); - //println(labeledElementASTType+" " + astName + " = null;"); - } - } - - // for convenience.. - String astName = astNameBase + "_AST"; - - // Map the generated AST variable in the alternate - mapTreeVariable(el, astName); - if (grammar instanceof TreeWalkerGrammar) - { - // Generate an "input" AST variable also - println(labeledElementASTType+" " + astName + "_in = null;"); - } - - - // Enclose actions with !guessing - if (doNoGuessTest) { - //println("if (0 == inputState.guessing)"); - //println("{"); - //tabs++; - } - - // if something has a label assume it will be used - // so we must initialize the RefAST - if (el.getLabel() != null) - { - if ( el instanceof GrammarAtom ) - { - println(astName + " = "+ getASTCreateString((GrammarAtom)el, elementRef) + ";"); - } - else - { - println(astName + " = "+ getASTCreateString(elementRef) + ";"); - } - } - - // if it has no label but a declaration exists initialize it. - if (el.getLabel() == null && needASTDecl) - { - elementRef = lt1Value; - if ( el instanceof GrammarAtom ) - { - println(astName + " = "+ getASTCreateString((GrammarAtom)el, elementRef) + ";"); - } - else - { - println(astName + " = "+ getASTCreateString(elementRef) + ";"); - } - // Map the generated AST variable in the alternate - if (grammar instanceof TreeWalkerGrammar) - { - // set "input" AST variable also - println(astName + "_in = " + elementRef + ";"); - } - } - - if (genAST) - { - switch (el.getAutoGenType()) - { - case GrammarElement.AUTO_GEN_NONE: - if ( usingCustomAST || - ( (el instanceof GrammarAtom) && - (((GrammarAtom)el).getASTNodeType() != null) ) ) - println("astFactory.addASTChild(currentAST, (AST)" + astName + ");"); - else - println("astFactory.addASTChild(currentAST, " + astName + ");"); - break; - case GrammarElement.AUTO_GEN_CARET: - if ( usingCustomAST || - ( (el instanceof GrammarAtom) && - (((GrammarAtom)el).getASTNodeType() != null) ) ) - println("astFactory.makeASTRoot(currentAST, (AST)" + astName + ");"); - else - println("astFactory.makeASTRoot(currentAST, " + astName + ");"); - break; - default: - break; - } - } - if (doNoGuessTest) - { - //tabs--; - //println("}"); - } - } - } - - - /** Close the try block and generate catch phrases - * if the element has a labeled handler in the rule - */ - private void genErrorCatchForElement(AlternativeElement el) { - if (el.getLabel() == null) return; - String r = el.enclosingRuleName; - if ( grammar instanceof LexerGrammar ) { - r = CodeGenerator.encodeLexerRuleName(el.enclosingRuleName); - } - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(r); - if (rs == null) { - antlrTool.panic("Enclosing rule not found!"); - } - ExceptionSpec ex = rs.block.findExceptionSpec(el.getLabel()); - if (ex != null) { - tabs--; - println("}"); - genErrorHandler(ex); - } - } - - /** Generate the catch phrases for a user-specified error handler */ - private void genErrorHandler(ExceptionSpec ex) - { - // Each ExceptionHandler in the ExceptionSpec is a separate catch - for (int i = 0; i < ex.handlers.size(); i++) - { - ExceptionHandler handler = (ExceptionHandler)ex.handlers.elementAt(i); - // Generate catch phrase - println("catch (" + handler.exceptionTypeAndName.getText() + ")"); - println("{"); - tabs++; - if (grammar.hasSyntacticPredicate) { - println("if (0 == inputState.guessing)"); - println("{"); - tabs++; - } - - // When not guessing, execute user handler action - ActionTransInfo tInfo = new ActionTransInfo(); - printAction(processActionForSpecialSymbols(handler.action.getText(), - handler.action.getLine(), currentRule, tInfo)); - - if (grammar.hasSyntacticPredicate) - { - tabs--; - println("}"); - println("else"); - println("{"); - tabs++; - // When guessing, rethrow exception - //println("throw " + extractIdOfAction(handler.exceptionTypeAndName) + ";"); - println("throw;"); - tabs--; - println("}"); - } - // Close catch phrase - tabs--; - println("}"); - } - } - /** Generate a try { opening if the element has a labeled handler in the rule */ - private void genErrorTryForElement(AlternativeElement el) { - if (el.getLabel() == null) return; - String r = el.enclosingRuleName; - if ( grammar instanceof LexerGrammar ) { - r = CodeGenerator.encodeLexerRuleName(el.enclosingRuleName); - } - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(r); - if (rs == null) { - antlrTool.panic("Enclosing rule not found!"); - } - ExceptionSpec ex = rs.block.findExceptionSpec(el.getLabel()); - if (ex != null) { - println("try // for error handling"); - println("{"); - tabs++; - } - } - - protected void genASTDeclaration(AlternativeElement el) - { - genASTDeclaration(el, labeledElementASTType); - } - - protected void genASTDeclaration(AlternativeElement el, String node_type) - { - genASTDeclaration(el, el.getLabel(), node_type); - } - - protected void genASTDeclaration(AlternativeElement el, String var_name, String node_type) - { - // already declared? - if (declaredASTVariables.contains(el)) - return; - - // emit code - //String s = StringUtils.stripFrontBack(node_type, "\"", "\""); - //println(s + " " + var_name + "_AST = null;"); - println(node_type + " " + var_name + "_AST = null;"); - - // mark as declared - declaredASTVariables.put(el,el); - } - - /** Generate a header that is common to all CSharp files */ - protected void genHeader() - { - println("// $ANTLR "+Tool.version+": "+ - "\"" + antlrTool.fileMinusPath(antlrTool.grammarFile) + "\"" + - " -> "+ - "\""+grammar.getClassName()+".cs\"$"); - } - - private void genLiteralsTest() { - println("_ttype = testLiteralsTable(_ttype);"); - } - - private void genLiteralsTestForPartialToken() { - println("_ttype = testLiteralsTable(text.ToString(_begin, text.Length-_begin), _ttype);"); - } - - protected void genMatch(BitSet b) { - } - - protected void genMatch(GrammarAtom atom) { - if ( atom instanceof StringLiteralElement ) { - if ( grammar instanceof LexerGrammar ) { - genMatchUsingAtomText(atom); - } - else { - genMatchUsingAtomTokenType(atom); - } - } - else if ( atom instanceof CharLiteralElement ) { - if ( grammar instanceof LexerGrammar ) { - genMatchUsingAtomText(atom); - } - else { - antlrTool.error("cannot ref character literals in grammar: "+atom); - } - } - else if ( atom instanceof TokenRefElement ) { - genMatchUsingAtomText(atom); - } else if (atom instanceof WildcardElement) { - gen((WildcardElement)atom); - } - } - protected void genMatchUsingAtomText(GrammarAtom atom) { - // match() for trees needs the _t cursor - String astArgs=""; - if (grammar instanceof TreeWalkerGrammar) { - if ( usingCustomAST ) - astArgs="(AST)_t,"; - else - astArgs="_t,"; - } - - // if in lexer and ! on element, save buffer index to kill later - if ( grammar instanceof LexerGrammar && (!saveText||atom.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) { - declareSaveIndexVariableIfNeeded(); - println("_saveIndex = text.Length;"); - } - - print(atom.not ? "matchNot(" : "match("); - _print(astArgs); - - // print out what to match - if (atom.atomText.equals("EOF")) { - // horrible hack to handle EOF case - _print("Token.EOF_TYPE"); - } - else { - _print(atom.atomText); - } - _println(");"); - - if ( grammar instanceof LexerGrammar && (!saveText||atom.getAutoGenType()==GrammarElement.AUTO_GEN_BANG) ) { - declareSaveIndexVariableIfNeeded(); - println("text.Length = _saveIndex;"); // kill text atom put in buffer - } - } - - protected void genMatchUsingAtomTokenType(GrammarAtom atom) { - // match() for trees needs the _t cursor - String astArgs=""; - if (grammar instanceof TreeWalkerGrammar) { - if( usingCustomAST ) - astArgs="(AST)_t,"; - else - astArgs="_t,"; - } - - // If the literal can be mangled, generate the symbolic constant instead - String mangledName = null; - String s = astArgs + getValueString(atom.getType()); - - // matching - println( (atom.not ? "matchNot(" : "match(") + s + ");"); - } - - /** Generate the nextToken() rule. nextToken() is a synthetic - * lexer rule that is the implicit OR of all user-defined - * lexer rules. - */ - public void genNextToken() { - // Are there any public rules? If not, then just generate a - // fake nextToken(). - boolean hasPublicRules = false; - for (int i = 0; i < grammar.rules.size(); i++) { - RuleSymbol rs = (RuleSymbol)grammar.rules.elementAt(i); - if ( rs.isDefined() && rs.access.equals("public") ) { - hasPublicRules = true; - break; - } - } - if (!hasPublicRules) { - println(""); - println("override public Token nextToken()\t\t\t//throws TokenStreamException"); - println("{"); - tabs++; - println("try"); - println("{"); - tabs++; - println("uponEOF();"); - tabs--; - println("}"); - println("catch(CharStreamIOException csioe)"); - println("{"); - tabs++; - println("throw new TokenStreamIOException(csioe.io);"); - tabs--; - println("}"); - println("catch(CharStreamException cse)"); - println("{"); - tabs++; - println("throw new TokenStreamException(cse.Message);"); - tabs--; - println("}"); - println("return new CommonToken(Token.EOF_TYPE, \"\");"); - tabs--; - println("}"); - println(""); - return; - } - - // Create the synthesized nextToken() rule - RuleBlock nextTokenBlk = MakeGrammar.createNextTokenRule(grammar, grammar.rules, "nextToken"); - // Define the nextToken rule symbol - RuleSymbol nextTokenRs = new RuleSymbol("mnextToken"); - nextTokenRs.setDefined(); - nextTokenRs.setBlock(nextTokenBlk); - nextTokenRs.access = "private"; - grammar.define(nextTokenRs); - // Analyze the nextToken rule - boolean ok = grammar.theLLkAnalyzer.deterministic(nextTokenBlk); - - // Generate the next token rule - String filterRule=null; - if ( ((LexerGrammar)grammar).filterMode ) { - filterRule = ((LexerGrammar)grammar).filterRule; - } - - println(""); - println("override public Token nextToken()\t\t\t//throws TokenStreamException"); - println("{"); - tabs++; - println("Token theRetToken = null;"); - _println("tryAgain:"); - println("for (;;)"); - println("{"); - tabs++; - println("Token _token = null;"); - println("int _ttype = Token.INVALID_TYPE;"); - if ( ((LexerGrammar)grammar).filterMode ) { - println("setCommitToPath(false);"); - if ( filterRule!=null ) { - // Here's a good place to ensure that the filter rule actually exists - if (!grammar.isDefined(CodeGenerator.encodeLexerRuleName(filterRule))) { - grammar.antlrTool.error("Filter rule " + filterRule + " does not exist in this lexer"); - } - else { - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(CodeGenerator.encodeLexerRuleName(filterRule)); - if ( !rs.isDefined() ) { - grammar.antlrTool.error("Filter rule " + filterRule + " does not exist in this lexer"); - } - else if ( rs.access.equals("public") ) { - grammar.antlrTool.error("Filter rule " + filterRule + " must be protected"); - } - } - println("int _m;"); - println("_m = mark();"); - } - } - println("resetText();"); - - println("try // for char stream error handling"); - println("{"); - tabs++; - - // Generate try around whole thing to trap scanner errors - println("try // for lexical error handling"); - println("{"); - tabs++; - - // Test for public lexical rules with empty paths - for (int i=0; i<nextTokenBlk.getAlternatives().size(); i++) { - Alternative a = nextTokenBlk.getAlternativeAt(i); - if ( a.cache[1].containsEpsilon() ) { - //String r = a.head.toString(); - RuleRefElement rr = (RuleRefElement)a.head; - String r = CodeGenerator.decodeLexerRuleName(rr.targetRule); - antlrTool.warning("public lexical rule "+r+" is optional (can match \"nothing\")"); - } - } - - // Generate the block - String newline = System.getProperty("line.separator"); - CSharpBlockFinishingInfo howToFinish = genCommonBlock(nextTokenBlk, false); - String errFinish = "if (LA(1)==EOF_CHAR) { uponEOF(); returnToken_ = makeToken(Token.EOF_TYPE); }"; - errFinish += newline+"\t\t\t\t"; - if ( ((LexerGrammar)grammar).filterMode ) { - if ( filterRule==null ) { - //kunle: errFinish += "else { consume(); continue tryAgain; }"; - errFinish += "\t\t\t\telse"; - errFinish += "\t\t\t\t{"; - errFinish += "\t\t\t\t\tconsume();"; - errFinish += "\t\t\t\t\tgoto tryAgain;"; - errFinish += "\t\t\t\t}"; - } - else { - errFinish += "\t\t\t\t\telse"+newline+ - "\t\t\t\t\t{"+newline+ - "\t\t\t\t\tcommit();"+newline+ - "\t\t\t\t\ttry {m"+filterRule+"(false);}"+newline+ - "\t\t\t\t\tcatch(RecognitionException e)"+newline+ - "\t\t\t\t\t{"+newline+ - "\t\t\t\t\t // catastrophic failure"+newline+ - "\t\t\t\t\t reportError(e);"+newline+ - "\t\t\t\t\t consume();"+newline+ - "\t\t\t\t\t}"+newline+ - "\t\t\t\t\tgoto tryAgain;"+newline+ - "\t\t\t\t}"; - } - } - else { - errFinish += "else {"+throwNoViable+"}"; - } - genBlockFinish(howToFinish, errFinish); - - // at this point a valid token has been matched, undo "mark" that was done - if ( ((LexerGrammar)grammar).filterMode && filterRule!=null ) { - println("commit();"); - } - - // Generate literals test if desired - // make sure _ttype is set first; note returnToken_ must be - // non-null as the rule was required to create it. - println("if ( null==returnToken_ ) goto tryAgain; // found SKIP token"); - println("_ttype = returnToken_.Type;"); - if ( ((LexerGrammar)grammar).getTestLiterals()) { - genLiteralsTest(); - } - - // return token created by rule reference in switch - println("returnToken_.Type = _ttype;"); - println("return returnToken_;"); - - // Close try block - tabs--; - println("}"); - println("catch (RecognitionException e) {"); - tabs++; - if ( ((LexerGrammar)grammar).filterMode ) { - if ( filterRule==null ) { - println("if (!getCommitToPath())"); - println("{"); - tabs++; - println("consume();"); - println("goto tryAgain;"); - tabs--; - println("}"); - } - else { - println("if (!getCommitToPath())"); - println("{"); - tabs++; - println("rewind(_m);"); - println("resetText();"); - println("try {m"+filterRule+"(false);}"); - println("catch(RecognitionException ee) {"); - println(" // horrendous failure: error in filter rule"); - println(" reportError(ee);"); - println(" consume();"); - println("}"); - //println("goto tryAgain;"); - tabs--; - println("}"); - println("else"); - } - } - if ( nextTokenBlk.getDefaultErrorHandler() ) { - println("{"); - tabs++; - println("reportError(e);"); - println("consume();"); - tabs--; - println("}"); - } - else { - // pass on to invoking routine - tabs++; - println("throw new TokenStreamRecognitionException(e);"); - tabs--; - } - tabs--; - println("}"); - - // close CharStreamException try - tabs--; - println("}"); - println("catch (CharStreamException cse) {"); - println(" if ( cse is CharStreamIOException ) {"); - println(" throw new TokenStreamIOException(((CharStreamIOException)cse).io);"); - println(" }"); - println(" else {"); - println(" throw new TokenStreamException(cse.Message);"); - println(" }"); - println("}"); - - // close for-loop - tabs--; - println("}"); - - // close method nextToken - tabs--; - println("}"); - println(""); - } - /** Gen a named rule block. - * ASTs are generated for each element of an alternative unless - * the rule or the alternative have a '!' modifier. - * - * If an alternative defeats the default tree construction, it - * must set <rule>_AST to the root of the returned AST. - * - * Each alternative that does automatic tree construction, builds - * up root and child list pointers in an ASTPair structure. - * - * A rule finishes by setting the returnAST variable from the - * ASTPair. - * - * @param rule The name of the rule to generate - * @param startSymbol true if the rule is a start symbol (i.e., not referenced elsewhere) - */ - public void genRule(RuleSymbol s, boolean startSymbol, int ruleNum, TokenManager tm) { - tabs=1; - if ( DEBUG_CODE_GENERATOR ) System.out.println("genRule("+ s.getId() +")"); - if ( !s.isDefined() ) { - antlrTool.error("undefined rule: "+ s.getId()); - return; - } - - // Generate rule return type, name, arguments - RuleBlock rblk = s.getBlock(); - currentRule = rblk; - currentASTResult = s.getId(); - - // clear list of declared ast variables.. - declaredASTVariables.clear(); - - // Save the AST generation state, and set it to that of the rule - boolean savegenAST = genAST; - genAST = genAST && rblk.getAutoGen(); - - // boolean oldsaveTest = saveText; - saveText = rblk.getAutoGen(); - - // print javadoc comment if any - if ( s.comment!=null ) { - _println(s.comment); - } - - // Gen method access and final qualifier - //print(s.access + " final "); - print(s.access + " "); - - // Gen method return type (note lexer return action set at rule creation) - if (rblk.returnAction != null) - { - // Has specified return value - _print(extractTypeOfAction(rblk.returnAction, rblk.getLine(), rblk.getColumn()) + " "); - } else { - // No specified return value - _print("void "); - } - - // Gen method name - _print(s.getId() + "("); - - // Additional rule parameters common to all rules for this grammar - _print(commonExtraParams); - if (commonExtraParams.length() != 0 && rblk.argAction != null ) { - _print(","); - } - - // Gen arguments - if (rblk.argAction != null) - { - // Has specified arguments - _println(""); - tabs++; - println(rblk.argAction); - tabs--; - print(")"); - } - else { - // No specified arguments - _print(")"); - } - - // Gen throws clause and open curly - _print(" //throws " + exceptionThrown); - if ( grammar instanceof ParserGrammar ) { - _print(", TokenStreamException"); - } - else if ( grammar instanceof LexerGrammar ) { - _print(", CharStreamException, TokenStreamException"); - } - // Add user-defined exceptions unless lexer (for now) - if ( rblk.throwsSpec!=null ) { - if ( grammar instanceof LexerGrammar ) { - antlrTool.error("user-defined throws spec not allowed (yet) for lexer rule "+rblk.ruleName); - } - else { - _print(", "+rblk.throwsSpec); - } - } - - _println(""); - _println("{"); - tabs++; - - // Convert return action to variable declaration - if (rblk.returnAction != null) - println(rblk.returnAction + ";"); - - // print out definitions needed by rules for various grammar types - println(commonLocalVars); - - if (grammar.traceRules) { - if ( grammar instanceof TreeWalkerGrammar ) { - if ( usingCustomAST ) - println("traceIn(\""+ s.getId() +"\",(AST)_t);"); - else - println("traceIn(\""+ s.getId() +"\",_t);"); - } - else { - println("traceIn(\""+ s.getId() +"\");"); - } - } - - if ( grammar instanceof LexerGrammar ) { - // lexer rule default return value is the rule's token name - // This is a horrible hack to support the built-in EOF lexer rule. - if (s.getId().equals("mEOF")) - println("_ttype = Token.EOF_TYPE;"); - else - println("_ttype = " + s.getId().substring(1)+";"); - - // delay creation of _saveIndex until we need it OK? - bSaveIndexCreated = false; - - /* - println("boolean old_saveConsumedInput=saveConsumedInput;"); - if ( !rblk.getAutoGen() ) { // turn off "save input" if ! on rule - println("saveConsumedInput=false;"); - } - */ - } - - // if debugging, write code to mark entry to the rule - if ( grammar.debuggingOutput) - if (grammar instanceof ParserGrammar) - println("fireEnterRule(" + ruleNum + ",0);"); - else if (grammar instanceof LexerGrammar) - println("fireEnterRule(" + ruleNum + ",_ttype);"); - - - // Generate trace code if desired - if ( grammar.debuggingOutput || grammar.traceRules) { - println("try { // debugging"); - tabs++; - } - - // Initialize AST variables - if (grammar instanceof TreeWalkerGrammar) { - // "Input" value for rule - println(labeledElementASTType+" " + s.getId() + "_AST_in = ("+labeledElementASTType+")_t;"); - } - if (grammar.buildAST) { - // Parser member used to pass AST returns from rule invocations - println("returnAST = null;"); - // Tracks AST construction - // println("ASTPair currentAST = (inputState.guessing==0) ? new ASTPair() : null;"); - println("ASTPair currentAST = new ASTPair();"); - // User-settable return value for rule. - println(labeledElementASTType+" " + s.getId() + "_AST = null;"); - } - - genBlockPreamble(rblk); - genBlockInitAction(rblk); - println(""); - - // Search for an unlabeled exception specification attached to the rule - ExceptionSpec unlabeledUserSpec = rblk.findExceptionSpec(""); - - // Generate try block around the entire rule for error handling - if (unlabeledUserSpec != null || rblk.getDefaultErrorHandler() ) { - println("try { // for error handling"); - tabs++; - } - - // Generate the alternatives - if ( rblk.alternatives.size()==1 ) - { - // One alternative -- use simple form - Alternative alt = rblk.getAlternativeAt(0); - String pred = alt.semPred; - if ( pred!=null ) - genSemPred(pred, currentRule.line); - if (alt.synPred != null) { - antlrTool.warning( - "Syntactic predicate ignored for single alternative", - grammar.getFilename(), alt.synPred.getLine(), alt.synPred.getColumn() - ); - } - genAlt(alt, rblk); - } - else - { - // Multiple alternatives -- generate complex form - boolean ok = grammar.theLLkAnalyzer.deterministic(rblk); - - CSharpBlockFinishingInfo howToFinish = genCommonBlock(rblk, false); - genBlockFinish(howToFinish, throwNoViable); - } - - // Generate catch phrase for error handling - if (unlabeledUserSpec != null || rblk.getDefaultErrorHandler() ) { - // Close the try block - tabs--; - println("}"); - } - - // Generate user-defined or default catch phrases - if (unlabeledUserSpec != null) - { - genErrorHandler(unlabeledUserSpec); - } - else if (rblk.getDefaultErrorHandler()) - { - // Generate default catch phrase - println("catch (" + exceptionThrown + " ex)"); - println("{"); - tabs++; - // Generate code to handle error if not guessing - if (grammar.hasSyntacticPredicate) { - println("if (0 == inputState.guessing)"); - println("{"); - tabs++; - } - println("reportError(ex);"); - if ( !(grammar instanceof TreeWalkerGrammar) ) - { - // Generate code to consume until token in k==1 follow set - Lookahead follow = grammar.theLLkAnalyzer.FOLLOW(1, rblk.endNode); - String followSetName = getBitsetName(markBitsetForGen(follow.fset)); - println("consume();"); - println("consumeUntil(" + followSetName + ");"); - } - else - { - // Just consume one token - println("if (null != _t)"); - println("{"); - tabs++; - println("_t = _t.getNextSibling();"); - tabs--; - println("}"); - } - if (grammar.hasSyntacticPredicate) - { - tabs--; - // When guessing, rethrow exception - println("}"); - println("else"); - println("{"); - tabs++; - //println("throw ex;"); - println("throw;"); - tabs--; - println("}"); - } - // Close catch phrase - tabs--; - println("}"); - } - - // Squirrel away the AST "return" value - if (grammar.buildAST) { - println("returnAST = " + s.getId() + "_AST;"); - } - - // Set return tree value for tree walkers - if ( grammar instanceof TreeWalkerGrammar ) { - println("retTree_ = _t;"); - } - - // Generate literals test for lexer rules so marked - if (rblk.getTestLiterals()) { - if ( s.access.equals("protected") ) { - genLiteralsTestForPartialToken(); - } - else { - genLiteralsTest(); - } - } - - // if doing a lexer rule, dump code to create token if necessary - if ( grammar instanceof LexerGrammar ) { - println("if (_createToken && (null == _token) && (_ttype != Token.SKIP))"); - println("{"); - tabs++; - println("_token = makeToken(_ttype);"); - println("_token.setText(text.ToString(_begin, text.Length-_begin));"); - tabs--; - println("}"); - println("returnToken_ = _token;"); - } - - // Gen the return statement if there is one (lexer has hard-wired return action) - if (rblk.returnAction != null) { - println("return " + extractIdOfAction(rblk.returnAction, rblk.getLine(), rblk.getColumn()) + ";"); - } - - if ( grammar.debuggingOutput || grammar.traceRules) { - tabs--; - println("}"); - println("finally"); - println("{ // debugging"); - tabs++; - - // If debugging, generate calls to mark exit of rule - if ( grammar.debuggingOutput) - if (grammar instanceof ParserGrammar) - println("fireExitRule(" + ruleNum + ",0);"); - else if (grammar instanceof LexerGrammar) - println("fireExitRule(" + ruleNum + ",_ttype);"); - - if (grammar.traceRules) { - if ( grammar instanceof TreeWalkerGrammar ) { - println("traceOut(\""+ s.getId() +"\",_t);"); - } - else { - println("traceOut(\""+ s.getId() +"\");"); - } - } - - tabs--; - println("}"); - } - - tabs--; - println("}"); - println(""); - - // Restore the AST generation state - genAST = savegenAST; - - // restore char save state - // saveText = oldsaveTest; - } - private void GenRuleInvocation(RuleRefElement rr) { - // dump rule name - _print(rr.targetRule + "("); - - // lexers must tell rule if it should set returnToken_ - if ( grammar instanceof LexerGrammar ) { - // if labeled, could access Token, so tell rule to create - if ( rr.getLabel() != null ) { - _print("true"); - } - else { - _print("false"); - } - if (commonExtraArgs.length() != 0 || rr.args!=null ) { - _print(","); - } - } - - // Extra arguments common to all rules for this grammar - _print(commonExtraArgs); - if (commonExtraArgs.length() != 0 && rr.args!=null ) { - _print(","); - } - - // Process arguments to method, if any - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rr.targetRule); - if (rr.args != null) - { - // When not guessing, execute user arg action - ActionTransInfo tInfo = new ActionTransInfo(); - String args = processActionForSpecialSymbols(rr.args, 0, currentRule, tInfo); - if ( tInfo.assignToRoot || tInfo.refRuleRoot!=null ) - { - antlrTool.error("Arguments of rule reference '" + rr.targetRule + "' cannot set or ref #" + - currentRule.getRuleName(), grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - _print(args); - - // Warn if the rule accepts no arguments - if (rs.block.argAction == null) - { - antlrTool.warning("Rule '" + rr.targetRule + "' accepts no arguments", grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - } - else - { - // For C++, no warning if rule has parameters, because there may be default - // values for all of the parameters - if (rs.block.argAction != null) - { - antlrTool.warning("Missing parameters on reference to rule " + rr.targetRule, grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - } - _println(");"); - - // move down to the first child while parsing - if ( grammar instanceof TreeWalkerGrammar ) { - println("_t = retTree_;"); - } - } - protected void genSemPred(String pred, int line) { - // translate $ and # references - ActionTransInfo tInfo = new ActionTransInfo(); - pred = processActionForSpecialSymbols(pred, line, currentRule, tInfo); - // ignore translation info...we don't need to do anything with it. - String escapedPred = charFormatter.escapeString(pred); - - // if debugging, wrap the semantic predicate evaluation in a method - // that can tell SemanticPredicateListeners the result - if (grammar.debuggingOutput && ((grammar instanceof ParserGrammar) || (grammar instanceof LexerGrammar))) - pred = "fireSemanticPredicateEvaluated(persistence.antlr.debug.SemanticPredicateEvent.VALIDATING," - + addSemPred(escapedPred) + "," + pred + ")"; - println("if (!(" + pred + "))"); - println(" throw new SemanticException(\"" + escapedPred + "\");"); - } - /** Write an array of Strings which are the semantic predicate - * expressions. The debugger will reference them by number only - */ - protected void genSemPredMap() { - Enumeration e = semPreds.elements(); - println("private string[] _semPredNames = {"); - tabs++; - while(e.hasMoreElements()) - println("\""+e.nextElement()+"\","); - tabs--; - println("};"); - } - protected void genSynPred(SynPredBlock blk, String lookaheadExpr) { - if ( DEBUG_CODE_GENERATOR ) System.out.println("gen=>("+blk+")"); - - // Dump synpred result variable - println("bool synPredMatched" + blk.ID + " = false;"); - // Gen normal lookahead test - println("if (" + lookaheadExpr + ")"); - println("{"); - tabs++; - - // Save input state - if ( grammar instanceof TreeWalkerGrammar ) { - println("AST __t" + blk.ID + " = _t;"); - } - else { - println("int _m" + blk.ID + " = mark();"); - } - - // Once inside the try, assume synpred works unless exception caught - println("synPredMatched" + blk.ID + " = true;"); - println("inputState.guessing++;"); - - // if debugging, tell listeners that a synpred has started - if (grammar.debuggingOutput && ((grammar instanceof ParserGrammar) || - (grammar instanceof LexerGrammar))) { - println("fireSyntacticPredicateStarted();"); - } - - syntacticPredLevel++; - println("try {"); - tabs++; - gen((AlternativeBlock)blk); // gen code to test predicate - tabs--; - //println("System.out.println(\"pred "+blk+" succeeded\");"); - println("}"); - //kunle: lose a few warnings cheaply - // println("catch (" + exceptionThrown + " pe)"); - println("catch (" + exceptionThrown + ")"); - println("{"); - tabs++; - println("synPredMatched"+blk.ID+" = false;"); - //println("System.out.println(\"pred "+blk+" failed\");"); - tabs--; - println("}"); - - // Restore input state - if ( grammar instanceof TreeWalkerGrammar ) { - println("_t = __t"+blk.ID+";"); - } - else { - println("rewind(_m"+blk.ID+");"); - } - - println("inputState.guessing--;"); - - // if debugging, tell listeners how the synpred turned out - if (grammar.debuggingOutput && ((grammar instanceof ParserGrammar) || - (grammar instanceof LexerGrammar))) { - println("if (synPredMatched" + blk.ID +")"); - println(" fireSyntacticPredicateSucceeded();"); - println("else"); - println(" fireSyntacticPredicateFailed();"); - } - - syntacticPredLevel--; - tabs--; - - // Close lookahead test - println("}"); - - // Test synred result - println("if ( synPredMatched"+blk.ID+" )"); - println("{"); - } - /** Generate a static array containing the names of the tokens, - * indexed by the token type values. This static array is used - * to format error messages so that the token identifers or literal - * strings are displayed instead of the token numbers. - * - * If a lexical rule has a paraphrase, use it rather than the - * token label. - */ - public void genTokenStrings() { - // Generate a string for each token. This creates a static - // array of Strings indexed by token type. - println(""); - println("public static readonly string[] tokenNames_ = new string[] {"); - tabs++; - - // Walk the token vocabulary and generate a Vector of strings - // from the tokens. - Vector v = grammar.tokenManager.getVocabulary(); - for (int i = 0; i < v.size(); i++) - { - String s = (String)v.elementAt(i); - if (s == null) - { - s = "<"+String.valueOf(i)+">"; - } - if ( !s.startsWith("\"") && !s.startsWith("<") ) { - TokenSymbol ts = (TokenSymbol)grammar.tokenManager.getTokenSymbol(s); - if ( ts!=null && ts.getParaphrase()!=null ) { - s = StringUtils.stripFrontBack(ts.getParaphrase(), "\"", "\""); - } - } - else if (s.startsWith("\"")) { - s = StringUtils.stripFrontBack(s, "\"", "\""); - } - print(charFormatter.literalString(s)); - if (i != v.size()-1) { - _print(","); - } - _println(""); - } - - // Close the string array initailizer - tabs--; - println("};"); - } - /** Generate the token types CSharp file */ - protected void genTokenTypes(TokenManager tm) throws IOException { - // Open the token output CSharp file and set the currentOutput stream - // SAS: file open was moved to a method so a subclass can override - // This was mainly for the VAJ interface - setupOutput(tm.getName() + TokenTypesFileSuffix); - - tabs = 0; - - // Generate the header common to all CSharp files - genHeader(); - // Do not use printAction because we assume tabs==0 - println(behavior.getHeaderAction("")); - - // Generate the CSharp namespace declaration (if specified) - if (nameSpace != null) - nameSpace.emitDeclarations(currentOutput); - tabs++; - - // Encapsulate the definitions in a class. This has to be done as a class because - // they are all constants and CSharp inteface types cannot contain constants. - println("public class " + tm.getName() + TokenTypesFileSuffix); - //println("public class " + getTokenTypesClassName()); - println("{"); - tabs++; - - genTokenDefinitions(tm); - - // Close the interface - tabs--; - println("}"); - - tabs--; - // Generate the CSharp namespace closures (if required) - if (nameSpace != null) - nameSpace.emitClosures(currentOutput); - - // Close the tokens output file - currentOutput.close(); - currentOutput = null; - exitIfError(); - } - protected void genTokenDefinitions(TokenManager tm) throws IOException { - // Generate a definition for each token type - Vector v = tm.getVocabulary(); - - // Do special tokens manually - println("public const int EOF = " + Token.EOF_TYPE + ";"); - println("public const int NULL_TREE_LOOKAHEAD = " + Token.NULL_TREE_LOOKAHEAD + ";"); - - for (int i = Token.MIN_USER_TYPE; i < v.size(); i++) { - String s = (String)v.elementAt(i); - if (s != null) { - if ( s.startsWith("\"") ) { - // a string literal - StringLiteralSymbol sl = (StringLiteralSymbol)tm.getTokenSymbol(s); - if ( sl==null ) { - antlrTool.panic("String literal " + s + " not in symbol table"); - } - else if ( sl.label != null ) { - println("public const int " + sl.label + " = " + i + ";"); - } - else { - String mangledName = mangleLiteral(s); - if (mangledName != null) { - // We were able to create a meaningful mangled token name - println("public const int " + mangledName + " = " + i + ";"); - // if no label specified, make the label equal to the mangled name - sl.label = mangledName; - } - else { - println("// " + s + " = " + i); - } - } - } - else if ( !s.startsWith("<") ) { - println("public const int " + s + " = " + i + ";"); - } - } - } - println(""); - } - /** Process a string for an simple expression for use in xx/action.g - * it is used to cast simple tokens/references to the right type for - * the generated language. Basically called for every element in - * the vector to getASTCreateString(vector V) - * @param str A String. - */ - public String processStringForASTConstructor( String str ) - { - /* - System.out.println("processStringForASTConstructor: str = "+str+ - ", custom = "+(new Boolean(usingCustomAST)).toString()+ - ", tree = "+(new Boolean((grammar instanceof TreeWalkerGrammar))).toString()+ - ", parser = "+(new Boolean((grammar instanceof ParserGrammar))).toString()+ - ", notDefined = "+(new Boolean((!(grammar.tokenManager.tokenDefined(str))))).toString() - ); - */ - if( usingCustomAST && - ( (grammar instanceof TreeWalkerGrammar) || - (grammar instanceof ParserGrammar) ) && - !(grammar.tokenManager.tokenDefined(str)) ) - { - //System.out.println("processStringForASTConstructor: "+str+" with cast"); - return "(AST)"+str; - } - else - { - //System.out.println("processStringForASTConstructor: "+str); - return str; - } - } - /** Get a string for an expression to generate creation of an AST subtree. - * @param v A Vector of String, where each element is an expression - * in the target language yielding an AST node. - */ - public String getASTCreateString(Vector v) { - if (v.size() == 0) { - return ""; - } - StringBuffer buf = new StringBuffer(); - buf.append("("+labeledElementASTType+ - ")astFactory.make( (new ASTArray(" + v.size() + - "))"); - for (int i = 0; i < v.size(); i++) { - buf.append(".add(" + v.elementAt(i) + ")"); - } - buf.append(")"); - return buf.toString(); - } - - /** Get a string for an expression to generate creating of an AST node - * @param atom The grammar node for which you are creating the node - * @param str The arguments to the AST constructor - */ - public String getASTCreateString(GrammarAtom atom, String astCtorArgs) { - String astCreateString = "astFactory.create(" + astCtorArgs + ")"; - - if (atom == null) - return getASTCreateString(astCtorArgs); - else { - if ( atom.getASTNodeType() != null ) { - // this Atom was instantiated from a Token that had an "AST" option - associating - // it with a specific heterogeneous AST type - applied to either: - // 1) it's underlying TokenSymbol (in the "tokens {} section" or, - // 2) a particular token reference in the grammar - // - // For option (1), we simply generate a cast to hetero-AST type - // For option (2), we generate a call to factory.create(Token, ASTNodeType) and cast it too - TokenSymbol ts = grammar.tokenManager.getTokenSymbol(atom.getText()); - if ( (ts == null) || (ts.getASTNodeType() != atom.getASTNodeType()) ) - astCreateString = "(" + atom.getASTNodeType() + ") astFactory.create(" + astCtorArgs + ", \"" + atom.getASTNodeType() + "\")"; - else if ( (ts != null) && (ts.getASTNodeType() != null) ) - astCreateString = "(" + ts.getASTNodeType() + ") " + astCreateString; - } - else if ( usingCustomAST ) - astCreateString = "(" + labeledElementASTType + ") " + astCreateString; - } - return astCreateString; - } - - /** Returns a string expression that creates an AST node using the specified - * AST constructor argument string. - * Parses the first (possibly only) argument in the supplied AST ctor argument - * string to obtain the token type -- ctorID. - * - * IF the token type is a valid token symbol AND - * it has an associated AST node type AND - * this is not a #[ID, "T", "ASTType"] constructor - * THEN - * generate a call to factory.create(ID, Text, token.ASTNodeType()) - * - * #[ID, "T", "ASTType"] constructors are mapped to astFactory.create(ID, "T", "ASTType") - * - * The supported AST constructor forms are: - * #[ID] - * #[ID, "text"] - * #[ID, "text", ASTclassname] -- introduced in 2.7.2 - * - * @param astCtorArgs The arguments to the AST constructor - */ - public String getASTCreateString(String astCtorArgs) { - // kunle: 19-Aug-2002 - // This AST creation string is almost certainly[*1] a manual tree construction request. - // From the manual [I couldn't read ALL of the code ;-)], this can only be one of: - // 1) #[ID] -- 'astCtorArgs' contains: 'ID' (without quotes) or, - // 2) #[ID, "T"] -- 'astCtorArgs' contains: 'ID, "Text"' (without single quotes) or, - // kunle: 08-Dec-2002 - 2.7.2a6 - // 3) #[ID, "T", "ASTTypeName"] -- 'astCtorArgs' contains: 'ID, "T", "ASTTypeName"' (without single quotes) - // - // [*1] In my tests, 'atom' was '== null' only for manual tree construction requests - - if ( astCtorArgs==null ) { - astCtorArgs = ""; - } - String astCreateString = "astFactory.create(" + astCtorArgs + ")"; - String ctorID = astCtorArgs; - String ctorText = null; - int commaIndex; - boolean ctorIncludesCustomType = false; // Is this a #[ID, "t", "ASTType"] constructor? - - commaIndex = astCtorArgs.indexOf(','); - if ( commaIndex != -1 ) { - ctorID = astCtorArgs.substring(0, commaIndex); // the 'ID' portion of #[ID, "Text"] - ctorText = astCtorArgs.substring(commaIndex+1, astCtorArgs.length()); // the 'Text' portion of #[ID, "Text"] - commaIndex = ctorText.indexOf(','); - if (commaIndex != -1 ) { - // This is an AST creation of the form: #[ID, "Text", "ASTTypename"] - // Support for this was introduced with 2.7.2a6 - // create default type or (since 2.7.2) 3rd arg is classname - ctorIncludesCustomType = true; - } - } - TokenSymbol ts = grammar.tokenManager.getTokenSymbol(ctorID); - if ( (null != ts) && (null != ts.getASTNodeType()) ) - astCreateString = "(" + ts.getASTNodeType() + ") " + astCreateString; - else if ( usingCustomAST ) - astCreateString = "(" + labeledElementASTType + ") " + astCreateString; - - return astCreateString; - } - - protected String getLookaheadTestExpression(Lookahead[] look, int k) { - StringBuffer e = new StringBuffer(100); - boolean first = true; - - e.append("("); - for (int i = 1; i <= k; i++) { - BitSet p = look[i].fset; - if (!first) { - e.append(") && ("); - } - first = false; - - // Syn preds can yield <end-of-syn-pred> (epsilon) lookahead. - // There is no way to predict what that token would be. Just - // allow anything instead. - if (look[i].containsEpsilon()) { - e.append("true"); - } else { - e.append(getLookaheadTestTerm(i, p)); - } - } - e.append(")"); - - return e.toString(); - } - - /**Generate a lookahead test expression for an alternate. This - * will be a series of tests joined by '&&' and enclosed by '()', - * the number of such tests being determined by the depth of the lookahead. - */ - protected String getLookaheadTestExpression(Alternative alt, int maxDepth) { - int depth = alt.lookaheadDepth; - if ( depth == GrammarAnalyzer.NONDETERMINISTIC ) { - // if the decision is nondeterministic, do the best we can: LL(k) - // any predicates that are around will be generated later. - depth = grammar.maxk; - } - - if ( maxDepth==0 ) { - // empty lookahead can result from alt with sem pred - // that can see end of token. E.g., A : {pred}? ('a')? ; - return "( true )"; - } - return "(" + getLookaheadTestExpression(alt.cache,depth) + ")"; - } - - /**Generate a depth==1 lookahead test expression given the BitSet. - * This may be one of: - * 1) a series of 'x==X||' tests - * 2) a range test using >= && <= where possible, - * 3) a bitset membership test for complex comparisons - * @param k The lookahead level - * @param p The lookahead set for level k - */ - protected String getLookaheadTestTerm(int k, BitSet p) { - // Determine the name of the item to be compared - String ts = lookaheadString(k); - - // Generate a range expression if possible - int[] elems = p.toArray(); - if (elementsAreRange(elems)) { - return getRangeExpression(k, elems); - } - - // Generate a bitset membership test if possible - StringBuffer e; - int degree = p.degree(); - if ( degree == 0 ) { - return "true"; - } - - if (degree >= bitsetTestThreshold) { - int bitsetIdx = markBitsetForGen(p); - return getBitsetName(bitsetIdx) + ".member(" + ts + ")"; - } - - // Otherwise, generate the long-winded series of "x==X||" tests - e = new StringBuffer(); - for (int i = 0; i < elems.length; i++) { - // Get the compared-to item (token or character value) - String cs = getValueString(elems[i]); - - // Generate the element comparison - if ( i>0 ) e.append("||"); - e.append(ts); - e.append("=="); - e.append(cs); - } - return e.toString(); - } - - /** Return an expression for testing a contiguous renage of elements - * @param k The lookahead level - * @param elems The elements representing the set, usually from BitSet.toArray(). - * @return String containing test expression. - */ - public String getRangeExpression(int k, int[] elems) { - if (!elementsAreRange(elems)) { - antlrTool.panic("getRangeExpression called with non-range"); - } - int begin = elems[0]; - int end = elems[elems.length-1]; - - return - "(" + lookaheadString(k) + " >= " + getValueString(begin) + " && " + - lookaheadString(k) + " <= " + getValueString(end) + ")"; - } - - /** getValueString: get a string representation of a token or char value - * @param value The token or char value - */ - private String getValueString(int value) { - String cs; - if ( grammar instanceof LexerGrammar ) { - cs = charFormatter.literalChar(value); - } - else - { - TokenSymbol ts = grammar.tokenManager.getTokenSymbolAt(value); - if ( ts == null ) { - return ""+value; // return token type as string - // antlrTool.panic("vocabulary for token type " + value + " is null"); - } - String tId = ts.getId(); - if ( ts instanceof StringLiteralSymbol ) { - // if string literal, use predefined label if any - // if no predefined, try to mangle into LITERAL_xxx. - // if can't mangle, use int value as last resort - StringLiteralSymbol sl = (StringLiteralSymbol)ts; - String label = sl.getLabel(); - if ( label!=null ) { - cs = label; - } - else { - cs = mangleLiteral(tId); - if (cs == null) { - cs = String.valueOf(value); - } - } - } - else { - cs = tId; - } - } - return cs; - } - - /**Is the lookahead for this alt empty? */ - protected boolean lookaheadIsEmpty(Alternative alt, int maxDepth) { - int depth = alt.lookaheadDepth; - if ( depth == GrammarAnalyzer.NONDETERMINISTIC ) { - depth = grammar.maxk; - } - for (int i=1; i<=depth && i<=maxDepth; i++) { - BitSet p = alt.cache[i].fset; - if (p.degree() != 0) { - return false; - } - } - return true; - } - - private String lookaheadString(int k) { - if (grammar instanceof TreeWalkerGrammar) { - return "_t.Type"; - } - return "LA(" + k + ")"; - } - - /** Mangle a string literal into a meaningful token name. This is - * only possible for literals that are all characters. The resulting - * mangled literal name is literalsPrefix with the text of the literal - * appended. - * @return A string representing the mangled literal, or null if not possible. - */ - private String mangleLiteral(String s) { - String mangled = antlrTool.literalsPrefix; - for (int i = 1; i < s.length()-1; i++) { - if (!Character.isLetter(s.charAt(i)) && - s.charAt(i) != '_') { - return null; - } - mangled += s.charAt(i); - } - if ( antlrTool.upperCaseMangledLiterals ) { - mangled = mangled.toUpperCase(); - } - return mangled; - } - - /** Map an identifier to it's corresponding tree-node variable. - * This is context-sensitive, depending on the rule and alternative - * being generated - * @param idParam The identifier name to map - * @return The mapped id (which may be the same as the input), or null if the mapping is invalid due to duplicates - */ - public String mapTreeId(String idParam, ActionTransInfo transInfo) { - // if not in an action of a rule, nothing to map. - if ( currentRule==null ) return idParam; - - boolean in_var = false; - String id = idParam; - if (grammar instanceof TreeWalkerGrammar) - { - if ( !grammar.buildAST ) - { - in_var = true; - } - // If the id ends with "_in", then map it to the input variable - else if (id.length() > 3 && id.lastIndexOf("_in") == id.length()-3) - { - // Strip off the "_in" - id = id.substring(0, id.length()-3); - in_var = true; - } - } - - // Check the rule labels. If id is a label, then the output - // variable is label_AST, and the input variable is plain label. - for (int i = 0; i < currentRule.labeledElements.size(); i++) - { - AlternativeElement elt = (AlternativeElement)currentRule.labeledElements.elementAt(i); - if (elt.getLabel().equals(id)) - { - return in_var ? id : id + "_AST"; - } - } - - // Failing that, check the id-to-variable map for the alternative. - // If the id is in the map, then output variable is the name in the - // map, and input variable is name_in - String s = (String)treeVariableMap.get(id); - if (s != null) - { - if (s == NONUNIQUE) - { - // There is more than one element with this id - antlrTool.error("Ambiguous reference to AST element "+id+ - " in rule "+currentRule.getRuleName()); - return null; - } - else if (s.equals(currentRule.getRuleName())) - { - // a recursive call to the enclosing rule is - // ambiguous with the rule itself. -// if( in_var ) -// System.out.println("returning null (rulename)"); - antlrTool.error("Ambiguous reference to AST element "+id+ - " in rule "+currentRule.getRuleName()); - return null; - } - else - { - return in_var ? s + "_in" : s; - } - } - - // Failing that, check the rule name itself. Output variable - // is rule_AST; input variable is rule_AST_in (treeparsers). - if( id.equals(currentRule.getRuleName()) ) - { - String r = in_var ? id + "_AST_in" : id + "_AST"; - if ( transInfo!=null ) { - if ( !in_var ) { - transInfo.refRuleRoot = r; - } - } - return r; - } - else - { - // id does not map to anything -- return itself. - return id; - } - } - - /** Given an element and the name of an associated AST variable, - * create a mapping between the element "name" and the variable name. - */ - private void mapTreeVariable(AlternativeElement e, String name) - { - // For tree elements, defer to the root - if (e instanceof TreeElement) { - mapTreeVariable( ((TreeElement)e).root, name); - return; - } - - // Determine the name of the element, if any, for mapping purposes - String elName = null; - - // Don't map labeled items - if (e.getLabel() == null) { - if (e instanceof TokenRefElement) { - // use the token id - elName = ((TokenRefElement)e).atomText; - } - else if (e instanceof RuleRefElement) { - // use the rule name - elName = ((RuleRefElement)e).targetRule; - } - } - // Add the element to the tree variable map if it has a name - if (elName != null) { - if (treeVariableMap.get(elName) != null) { - // Name is already in the map -- mark it as duplicate - treeVariableMap.remove(elName); - treeVariableMap.put(elName, NONUNIQUE); - } - else { - treeVariableMap.put(elName, name); - } - } - } - - /** Lexically process tree-specifiers in the action. - * This will replace #id and #(...) with the appropriate - * function calls and/or variables. - */ - protected String processActionForSpecialSymbols(String actionStr, - int line, - RuleBlock currentRule, - ActionTransInfo tInfo) - { - if ( actionStr==null || actionStr.length()==0 ) - return null; - - // The action trans info tells us (at the moment) whether an - // assignment was done to the rule's tree root. - if (grammar==null) - return actionStr; - - // see if we have anything to do... - if ((grammar.buildAST && actionStr.indexOf('#') != -1) || - grammar instanceof TreeWalkerGrammar || - ((grammar instanceof LexerGrammar || - grammar instanceof ParserGrammar) - && actionStr.indexOf('$') != -1) ) - { - // Create a lexer to read an action and return the translated version - persistence.antlr.actions.csharp.ActionLexer lexer = new persistence.antlr.actions.csharp.ActionLexer(actionStr, currentRule, this, tInfo); - - lexer.setLineOffset(line); - lexer.setFilename(grammar.getFilename()); - lexer.setTool(antlrTool); - - try { - lexer.mACTION(true); - actionStr = lexer.getTokenObject().getText(); - // System.out.println("action translated: "+actionStr); - // System.out.println("trans info is "+tInfo); - } - catch (RecognitionException ex) { - lexer.reportError(ex); - return actionStr; - } - catch (TokenStreamException tex) { - antlrTool.panic("Error reading action:"+actionStr); - return actionStr; - } - catch (CharStreamException io) { - antlrTool.panic("Error reading action:"+actionStr); - return actionStr; - } - } - return actionStr; - } - - private void setupGrammarParameters(Grammar g) { - if (g instanceof ParserGrammar || - g instanceof LexerGrammar || - g instanceof TreeWalkerGrammar - ) - { - /* RK: options also have to be added to Grammar.java and for options - * on the file level entries have to be defined in - * DefineGrammarSymbols.java and passed around via 'globals' in antlrTool.java - */ - if( antlrTool.nameSpace != null ) - nameSpace = new CSharpNameSpace( antlrTool.nameSpace.getName() ); - //genHashLines = antlrTool.genHashLines; - - /* let grammar level options override filelevel ones... - */ - if( g.hasOption("namespace") ) { - Token t = g.getOption("namespace"); - if( t != null ) { - nameSpace = new CSharpNameSpace(t.getText()); - } - } - /* - if( g.hasOption("genHashLines") ) { - Token t = g.getOption("genHashLines"); - if( t != null ) { - String val = StringUtils.stripFrontBack(t.getText(),"\"","\""); - genHashLines = val.equals("true"); - } - } - */ - } - - if (g instanceof ParserGrammar) { - labeledElementASTType = "AST"; - if ( g.hasOption("ASTLabelType") ) { - Token tsuffix = g.getOption("ASTLabelType"); - if ( tsuffix != null ) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(), "\"", "\""); - if ( suffix != null ) { - usingCustomAST = true; - labeledElementASTType = suffix; - } - } - } - labeledElementType = "Token "; - labeledElementInit = "null"; - commonExtraArgs = ""; - commonExtraParams = ""; - commonLocalVars = ""; - lt1Value = "LT(1)"; - exceptionThrown = "RecognitionException"; - throwNoViable = "throw new NoViableAltException(LT(1), getFilename());"; - } - else if (g instanceof LexerGrammar) { - labeledElementType = "char "; - labeledElementInit = "'\\0'"; - commonExtraArgs = ""; - commonExtraParams = "bool _createToken"; - commonLocalVars = "int _ttype; Token _token=null; int _begin=text.Length;"; - lt1Value = "LA(1)"; - exceptionThrown = "RecognitionException"; - throwNoViable = "throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());"; - } - else if (g instanceof TreeWalkerGrammar) { - labeledElementASTType = "AST"; - labeledElementType = "AST"; - if ( g.hasOption("ASTLabelType") ) { - Token tsuffix = g.getOption("ASTLabelType"); - if ( tsuffix != null ) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(), "\"", "\""); - if ( suffix != null ) { - usingCustomAST = true; - labeledElementASTType = suffix; - labeledElementType = suffix; - } - } - } - if ( !g.hasOption("ASTLabelType") ) { - g.setOption("ASTLabelType", new Token(ANTLRTokenTypes.STRING_LITERAL,"AST")); - } - labeledElementInit = "null"; - commonExtraArgs = "_t"; - commonExtraParams = "AST _t"; - commonLocalVars = ""; - if (usingCustomAST) - lt1Value = "(_t==ASTNULL) ? null : (" + labeledElementASTType + ")_t"; - else - lt1Value = "_t"; - exceptionThrown = "RecognitionException"; - throwNoViable = "throw new NoViableAltException(_t);"; - } - else { - antlrTool.panic("Unknown grammar type"); - } - } - - /** This method exists so a subclass, namely VAJCodeGenerator, - * can open the file in its own evil way. JavaCodeGenerator - * simply opens a text file... - */ - public void setupOutput(String className) throws IOException - { - currentOutput = antlrTool.openOutputFile(className + ".cs"); - } - - /** Helper method from Eric Smith's version of CSharpCodeGenerator.*/ - private static String OctalToUnicode(String str) - { - // only do any conversion if the string looks like "'\003'" - if ( (4 <= str.length()) && - ('\'' == str.charAt(0)) && - ('\\' == str.charAt(1)) && - (('0' <= str.charAt(2)) && ('7' >= str.charAt(2))) && - ('\'' == str.charAt(str.length()-1)) ) - { - // convert octal representation to decimal, then to hex - Integer x = Integer.valueOf(str.substring(2, str.length()-1), 8); - - return "'\\x" + Integer.toHexString(x.intValue()) + "'"; - } - else { - return str; - } - } - - /** Helper method that returns the name of the interface/class/enum type for - token type constants. - */ - public String getTokenTypesClassName() - { - TokenManager tm = grammar.tokenManager; - return new String(tm.getName() + TokenTypesFileSuffix); - } - - private void declareSaveIndexVariableIfNeeded() - { - if (!bSaveIndexCreated) - { - println("int _saveIndex = 0;"); - bSaveIndexCreated = true; - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/CSharpNameSpace.java glassfish-gil/entity-persistence/src/java/persistence/antlr/CSharpNameSpace.java --- glassfish/entity-persistence/src/java/persistence/antlr/CSharpNameSpace.java 2006-08-31 00:34:04.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/CSharpNameSpace.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,55 +0,0 @@ -package persistence.antlr; - -/** - * ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - * Container for a C++ namespace specification. Namespaces can be - * nested, so this contains a vector of all the nested names. - * - * @author David Wagner (JPL/Caltech) 8-12-00 - * - */ - - -// -// ANTLR C# Code Generator by Micheal Jordan -// Kunle Odutola : kunle UNDERSCORE odutola AT hotmail DOT com -// Anthony Oguntimehin -// -// With many thanks to Eric V. Smith from the ANTLR list. -// - -// HISTORY: -// -// 17-May-2002 kunle Original version -// - -import java.util.Vector; -import java.util.Enumeration; -import java.io.PrintWriter; -import java.util.StringTokenizer; - -public class CSharpNameSpace extends NameSpace -{ - public CSharpNameSpace(String name) - { - super(name); - } - - /** - * Method to generate the required CSharp namespace declarations - */ - void emitDeclarations(PrintWriter out) { - out.println("namespace " + getName() ); - out.println("{"); - } - - /** - * Method to generate the required CSharp namespace closures - */ - void emitClosures(PrintWriter out) { - out.println("}"); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/DebuggingCharScanner.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/DebuggingCharScanner.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/DebuggingCharScanner.java 2006-02-08 22:31:16.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/DebuggingCharScanner.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,237 +0,0 @@ -package persistence.antlr.debug; - -import persistence.antlr.*; -import persistence.antlr.collections.*; -import persistence.antlr.collections.impl.*; -import java.io.*; - -public abstract class DebuggingCharScanner extends CharScanner implements DebuggingParser { - private ParserEventSupport parserEventSupport = new ParserEventSupport(this); - private boolean _notDebugMode = false; - protected String ruleNames[]; - protected String semPredNames[]; - - - public DebuggingCharScanner(InputBuffer cb) { - super(cb); - } - public DebuggingCharScanner(LexerSharedInputState state) { - super(state); - } - public void addMessageListener(MessageListener l) { - parserEventSupport.addMessageListener(l); - } - public void addNewLineListener(NewLineListener l) { - parserEventSupport.addNewLineListener(l); - } - public void addParserListener(ParserListener l) { - parserEventSupport.addParserListener(l); - } - public void addParserMatchListener(ParserMatchListener l) { - parserEventSupport.addParserMatchListener(l); - } - public void addParserTokenListener(ParserTokenListener l) { - parserEventSupport.addParserTokenListener(l); - } - public void addSemanticPredicateListener(SemanticPredicateListener l) { - parserEventSupport.addSemanticPredicateListener(l); - } - public void addSyntacticPredicateListener(SyntacticPredicateListener l) { - parserEventSupport.addSyntacticPredicateListener(l); - } - public void addTraceListener(TraceListener l) { - parserEventSupport.addTraceListener(l); - } - public void consume() throws CharStreamException { - int la_1 = -99; - try {la_1 = LA(1);} - catch (CharStreamException ignoreAnIOException) {} - super.consume(); - parserEventSupport.fireConsume(la_1); - } - protected void fireEnterRule(int num, int data) { - if (isDebugMode()) - parserEventSupport.fireEnterRule(num,inputState.guessing,data); - } - protected void fireExitRule(int num, int ttype) { - if (isDebugMode()) - parserEventSupport.fireExitRule(num,inputState.guessing, ttype); - } - protected boolean fireSemanticPredicateEvaluated(int type, int num, boolean condition) { - if (isDebugMode()) - return parserEventSupport.fireSemanticPredicateEvaluated(type,num,condition,inputState.guessing); - else - return condition; - } - protected void fireSyntacticPredicateFailed() { - if (isDebugMode()) - parserEventSupport.fireSyntacticPredicateFailed(inputState.guessing); - } - protected void fireSyntacticPredicateStarted() { - if (isDebugMode()) - parserEventSupport.fireSyntacticPredicateStarted(inputState.guessing); - } - protected void fireSyntacticPredicateSucceeded() { - if (isDebugMode()) - parserEventSupport.fireSyntacticPredicateSucceeded(inputState.guessing); - } - public String getRuleName(int num) { - return ruleNames[num]; - } - public String getSemPredName(int num) { - return semPredNames[num]; - } - public synchronized void goToSleep() { - try {wait();} - catch (InterruptedException e) { } - } - public boolean isDebugMode() { - return !_notDebugMode; - } - public char LA(int i) throws CharStreamException { - char la = super.LA(i); - parserEventSupport.fireLA(i, la); - return la; - } - protected Token makeToken(int t) { - // do something with char buffer??? -// try { -// Token tok = (Token)tokenObjectClass.newInstance(); -// tok.setType(t); -// // tok.setText(getText()); done in generated lexer now -// tok.setLine(line); -// return tok; -// } -// catch (InstantiationException ie) { -// panic("can't instantiate a Token"); -// } -// catch (IllegalAccessException iae) { -// panic("Token class is not accessible"); -// } - return super.makeToken(t); - } - public void match(char c) throws MismatchedCharException, CharStreamException { - char la_1 = LA(1); - try { - super.match(c); - parserEventSupport.fireMatch(c, inputState.guessing); - } - catch (MismatchedCharException e) { - if (inputState.guessing == 0) - parserEventSupport.fireMismatch(la_1, c, inputState.guessing); - throw e; - } - } - public void match(BitSet b) throws MismatchedCharException, CharStreamException { - String text = this.text.toString(); - char la_1 = LA(1); - try { - super.match(b); - parserEventSupport.fireMatch(la_1, b, text, inputState.guessing); - } - catch (MismatchedCharException e) { - if (inputState.guessing == 0) - parserEventSupport.fireMismatch(la_1, b, text, inputState.guessing); - throw e; - } - } - public void match(String s) throws MismatchedCharException, CharStreamException { - StringBuffer la_s = new StringBuffer(""); - int len = s.length(); - // peek at the next len worth of characters - try { - for(int i = 1; i <= len; i++) { - la_s.append(super.LA(i)); - } - } - catch(Exception ignoreMe) {} - - try { - super.match(s); - parserEventSupport.fireMatch(s, inputState.guessing); - } - catch (MismatchedCharException e) { - if (inputState.guessing == 0) - parserEventSupport.fireMismatch(la_s.toString(), s, inputState.guessing); - throw e; - } - - } - public void matchNot(char c) throws MismatchedCharException, CharStreamException { - char la_1 = LA(1); - try { - super.matchNot(c); - parserEventSupport.fireMatchNot(la_1, c, inputState.guessing); - } - catch (MismatchedCharException e) { - if (inputState.guessing == 0) - parserEventSupport.fireMismatchNot(la_1, c, inputState.guessing); - throw e; - } - - } - public void matchRange(char c1, char c2) throws MismatchedCharException, CharStreamException { - char la_1 = LA(1); - try { - super.matchRange(c1,c2); - parserEventSupport.fireMatch(la_1, ""+c1+c2, inputState.guessing); - } - catch (MismatchedCharException e) { - if (inputState.guessing == 0) - parserEventSupport.fireMismatch(la_1, ""+c1+c2, inputState.guessing); - throw e; - } - - } - public void newline() { - super.newline(); - parserEventSupport.fireNewLine(getLine()); - } - public void removeMessageListener(MessageListener l) { - parserEventSupport.removeMessageListener(l); - } - public void removeNewLineListener(NewLineListener l) { - parserEventSupport.removeNewLineListener(l); - } - public void removeParserListener(ParserListener l) { - parserEventSupport.removeParserListener(l); - } - public void removeParserMatchListener(ParserMatchListener l) { - parserEventSupport.removeParserMatchListener(l); - } - public void removeParserTokenListener(ParserTokenListener l) { - parserEventSupport.removeParserTokenListener(l); - } - public void removeSemanticPredicateListener(SemanticPredicateListener l) { - parserEventSupport.removeSemanticPredicateListener(l); - } - public void removeSyntacticPredicateListener(SyntacticPredicateListener l) { - parserEventSupport.removeSyntacticPredicateListener(l); - } - public void removeTraceListener(TraceListener l) { - parserEventSupport.removeTraceListener(l); - } - /** Report exception errors caught in nextToken() */ - public void reportError(MismatchedCharException e) { - parserEventSupport.fireReportError(e); - super.reportError(e); - } - /** Parser error-reporting function can be overridden in subclass */ - public void reportError(String s) { - parserEventSupport.fireReportError(s); - super.reportError(s); - } - /** Parser warning-reporting function can be overridden in subclass */ - public void reportWarning(String s) { - parserEventSupport.fireReportWarning(s); - super.reportWarning(s); - } - public void setDebugMode(boolean value) { - _notDebugMode = !value; - } - public void setupDebugging() { - } - public synchronized void wakeUp() { - notify(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/DebuggingInputBuffer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/DebuggingInputBuffer.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/DebuggingInputBuffer.java 2006-02-08 22:31:16.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/DebuggingInputBuffer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,63 +0,0 @@ -package persistence.antlr.debug; - -import persistence.antlr.InputBuffer; -import persistence.antlr.CharStreamException; -import java.util.Vector; -import java.io.IOException; - -public class DebuggingInputBuffer extends InputBuffer { - private InputBuffer buffer; - private InputBufferEventSupport inputBufferEventSupport; - private boolean debugMode = true; - - - public DebuggingInputBuffer(InputBuffer buffer) { - this.buffer = buffer; - inputBufferEventSupport = new InputBufferEventSupport(this); - } - public void addInputBufferListener(InputBufferListener l) { - inputBufferEventSupport.addInputBufferListener(l); - } - public void consume() { - char la = ' '; - try {la = buffer.LA(1);} - catch (CharStreamException e) {} // vaporize it... - buffer.consume(); - if (debugMode) - inputBufferEventSupport.fireConsume(la); - } - public void fill(int a) throws CharStreamException { - buffer.fill(a); - } - public Vector getInputBufferListeners() { - return inputBufferEventSupport.getInputBufferListeners(); - } - public boolean isDebugMode() { - return debugMode; - } - public boolean isMarked() { - return buffer.isMarked(); - } - public char LA(int i) throws CharStreamException { - char la = buffer.LA(i); - if (debugMode) - inputBufferEventSupport.fireLA(la,i); - return la; - } - public int mark() { - int m = buffer.mark(); - inputBufferEventSupport.fireMark(m); - return m; - } - public void removeInputBufferListener(InputBufferListener l) { - if (inputBufferEventSupport != null) - inputBufferEventSupport.removeInputBufferListener(l); - } - public void rewind(int mark) { - buffer.rewind(mark); - inputBufferEventSupport.fireRewind(mark); - } - public void setDebugMode(boolean value) { - debugMode = value; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/DebuggingParser.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/DebuggingParser.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/DebuggingParser.java 2006-02-08 22:31:17.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/DebuggingParser.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,11 +0,0 @@ -package persistence.antlr.debug; - -/** - * This type was created in VisualAge. - */ -public interface DebuggingParser { - - - public String getRuleName(int n); - public String getSemPredName(int n); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/Event.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/Event.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/Event.java 2006-02-08 22:31:17.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/Event.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,26 +0,0 @@ -package persistence.antlr.debug; - -import java.util.EventObject; - -public abstract class Event extends EventObject { - private int type; - - - public Event(Object source) { - super(source); - } - public Event(Object source, int type) { - super(source); - setType(type); - } - public int getType() { - return type; - } - void setType(int type) { - this.type = type; - } - /** This should NOT be called from anyone other than ParserEventSupport! */ - void setValues(int type) { - setType(type); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/GuessingEvent.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/GuessingEvent.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/GuessingEvent.java 2006-02-08 22:31:17.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/GuessingEvent.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -package persistence.antlr.debug; - -public abstract class GuessingEvent extends Event { - private int guessing; - - - public GuessingEvent(Object source) { - super(source); - } - public GuessingEvent(Object source, int type) { - super(source, type); - } - public int getGuessing() { - return guessing; - } - void setGuessing(int guessing) { - this.guessing = guessing; - } - /** This should NOT be called from anyone other than ParserEventSupport! */ - void setValues(int type, int guessing) { - super.setValues(type); - setGuessing(guessing); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/InputBufferAdapter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/InputBufferAdapter.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/InputBufferAdapter.java 2006-02-08 22:31:18.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/InputBufferAdapter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -package persistence.antlr.debug; - -/** A dummy implementation of a CharBufferListener -- this class is not - * meant to be used by itself -- it's meant to be subclassed */ -public abstract class InputBufferAdapter implements InputBufferListener { - - - public void doneParsing(TraceEvent e) { - } -/** - * charConsumed method comment. - */ -public void inputBufferConsume(InputBufferEvent e) { -} -/** - * charLA method comment. - */ -public void inputBufferLA(InputBufferEvent e) { -} - public void inputBufferMark(InputBufferEvent e) {} - public void inputBufferRewind(InputBufferEvent e) {} - public void refresh() { - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/InputBufferEvent.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/InputBufferEvent.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/InputBufferEvent.java 2006-02-08 22:31:18.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/InputBufferEvent.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,50 +0,0 @@ -package persistence.antlr.debug; - -public class InputBufferEvent extends Event { - char c; - int lookaheadAmount; // amount of lookahead - public static final int CONSUME = 0; - public static final int LA = 1; - public static final int MARK = 2; - public static final int REWIND = 3; - - -/** - * CharBufferEvent constructor comment. - * @param source java.lang.Object - */ -public InputBufferEvent(Object source) { - super(source); -} -/** - * CharBufferEvent constructor comment. - * @param source java.lang.Object - */ -public InputBufferEvent(Object source, int type, char c, int lookaheadAmount) { - super(source); - setValues(type, c, lookaheadAmount); -} - public char getChar() { - return c; - } - public int getLookaheadAmount() { - return lookaheadAmount; - } - void setChar(char c) { - this.c = c; - } - void setLookaheadAmount(int la) { - this.lookaheadAmount = la; - } - /** This should NOT be called from anyone other than ParserEventSupport! */ - void setValues(int type, char c, int la) { - super.setValues(type); - setChar(c); - setLookaheadAmount(la); - } - public String toString() { - return "CharBufferEvent [" + - (getType()==CONSUME?"CONSUME, ":"LA, ")+ - getChar() + "," + getLookaheadAmount() + "]"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/InputBufferEventSupport.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/InputBufferEventSupport.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/InputBufferEventSupport.java 2006-02-08 22:31:18.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/InputBufferEventSupport.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,85 +0,0 @@ -package persistence.antlr.debug; - -import java.util.Vector; -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.RecognitionException; - -public class InputBufferEventSupport { - private Object source; - private Vector inputBufferListeners; - private InputBufferEvent inputBufferEvent; - protected static final int CONSUME=0; - protected static final int LA=1; - protected static final int MARK=2; - protected static final int REWIND=3; - - - public InputBufferEventSupport(Object source) { - inputBufferEvent = new InputBufferEvent(source); - this.source = source; - } - public void addInputBufferListener(InputBufferListener l) { - if (inputBufferListeners == null) inputBufferListeners = new Vector(); - inputBufferListeners.addElement(l); - } - public void fireConsume(char c) { - inputBufferEvent.setValues(InputBufferEvent.CONSUME, c, 0); - fireEvents(CONSUME, inputBufferListeners); - } - public void fireEvent(int type, ListenerBase l) { - switch(type) { - case CONSUME: ((InputBufferListener)l).inputBufferConsume(inputBufferEvent); break; - case LA: ((InputBufferListener)l).inputBufferLA(inputBufferEvent); break; - case MARK: ((InputBufferListener)l).inputBufferMark(inputBufferEvent); break; - case REWIND: ((InputBufferListener)l).inputBufferRewind(inputBufferEvent); break; - default: - throw new IllegalArgumentException("bad type "+type+" for fireEvent()"); - } - } - public void fireEvents(int type, Vector listeners) { - Vector targets=null; - ListenerBase l=null; - - synchronized (this) { - if (listeners == null) return; - targets = (Vector)listeners.clone(); - } - - if (targets != null) - for (int i = 0; i < targets.size(); i++) { - l = (ListenerBase)targets.elementAt(i); - fireEvent(type, l); - } - } - public void fireLA(char c, int la) { - inputBufferEvent.setValues(InputBufferEvent.LA, c, la); - fireEvents(LA, inputBufferListeners); - } - public void fireMark(int pos) { - inputBufferEvent.setValues(InputBufferEvent.MARK, ' ', pos); - fireEvents(MARK, inputBufferListeners); - } - public void fireRewind(int pos) { - inputBufferEvent.setValues(InputBufferEvent.REWIND, ' ', pos); - fireEvents(REWIND, inputBufferListeners); - } - public Vector getInputBufferListeners() { - return inputBufferListeners; - } - protected void refresh(Vector listeners) { - Vector v; - synchronized (listeners) { - v = (Vector)listeners.clone(); - } - if (v != null) - for (int i = 0; i < v.size(); i++) - ((ListenerBase)v.elementAt(i)).refresh(); - } - public void refreshListeners() { - refresh(inputBufferListeners); - } - public void removeInputBufferListener(InputBufferListener l) { - if (inputBufferListeners != null) - inputBufferListeners.removeElement(l); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/InputBufferListener.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/InputBufferListener.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/InputBufferListener.java 2006-02-08 22:31:19.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/InputBufferListener.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -package persistence.antlr.debug; - -public interface InputBufferListener extends ListenerBase { - - - public void inputBufferConsume(InputBufferEvent e); - public void inputBufferLA(InputBufferEvent e); - public void inputBufferMark(InputBufferEvent e); - public void inputBufferRewind(InputBufferEvent e); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/InputBufferReporter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/InputBufferReporter.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/InputBufferReporter.java 2006-02-08 22:31:19.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/InputBufferReporter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,37 +0,0 @@ -package persistence.antlr.debug; - -public class InputBufferReporter implements InputBufferListener { - - -/** - * doneParsing method comment. - */ -public void doneParsing(TraceEvent e) { -} - public void inputBufferChanged(InputBufferEvent e) { - System.out.println(e); - } -/** - * charBufferConsume method comment. - */ -public void inputBufferConsume(InputBufferEvent e) { - System.out.println(e); -} -/** - * charBufferLA method comment. - */ -public void inputBufferLA(InputBufferEvent e) { - System.out.println(e); -} - public void inputBufferMark(InputBufferEvent e) { - System.out.println(e); - } - public void inputBufferRewind(InputBufferEvent e) { - System.out.println(e); - } -/** - * refresh method comment. - */ -public void refresh() { -} -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ListenerBase.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ListenerBase.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ListenerBase.java 2006-02-08 22:31:20.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ListenerBase.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -package persistence.antlr.debug; - -import java.util.EventListener; - -public interface ListenerBase extends EventListener { - - - public void doneParsing(TraceEvent e); - public void refresh(); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/LLkDebuggingParser.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/LLkDebuggingParser.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/LLkDebuggingParser.java 2006-02-08 22:31:19.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/LLkDebuggingParser.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,235 +0,0 @@ -package persistence.antlr.debug; - -import persistence.antlr.ParserSharedInputState; -import persistence.antlr.TokenStreamException; -import persistence.antlr.LLkParser; -import persistence.antlr.TokenBuffer; -import persistence.antlr.TokenStream; -import persistence.antlr.MismatchedTokenException; -import persistence.antlr.RecognitionException; -import persistence.antlr.collections.impl.BitSet; -import java.io.IOException; -import persistence.antlr.TokenStreamException; - -import persistence.antlr.debug.ParserEventSupport; - -import java.lang.reflect.Constructor; - -public class LLkDebuggingParser extends LLkParser implements DebuggingParser { - protected ParserEventSupport parserEventSupport = new ParserEventSupport(this); - - private boolean _notDebugMode = false; - protected String ruleNames[]; - protected String semPredNames[]; - - - public LLkDebuggingParser(int k_) { - super(k_); - } - public LLkDebuggingParser(ParserSharedInputState state, int k_) { - super(state, k_); - } - public LLkDebuggingParser(TokenBuffer tokenBuf, int k_) { - super(tokenBuf, k_); - } - public LLkDebuggingParser(TokenStream lexer, int k_) { - super(lexer, k_); - } - public void addMessageListener(MessageListener l) { - parserEventSupport.addMessageListener(l); - } - public void addParserListener(ParserListener l) { - parserEventSupport.addParserListener(l); - } - public void addParserMatchListener(ParserMatchListener l) { - parserEventSupport.addParserMatchListener(l); - } - public void addParserTokenListener(ParserTokenListener l) { - parserEventSupport.addParserTokenListener(l); - } - public void addSemanticPredicateListener(SemanticPredicateListener l) { - parserEventSupport.addSemanticPredicateListener(l); - } - public void addSyntacticPredicateListener(SyntacticPredicateListener l) { - parserEventSupport.addSyntacticPredicateListener(l); - } - public void addTraceListener(TraceListener l) { - parserEventSupport.addTraceListener(l); - } - /**Get another token object from the token stream */ - public void consume() { - int la_1 = -99; - try {la_1 = LA(1);} - catch (TokenStreamException ignoreAnException) {} - super.consume(); - parserEventSupport.fireConsume(la_1); - } - protected void fireEnterRule(int num,int data) { - if (isDebugMode()) - parserEventSupport.fireEnterRule(num,inputState.guessing,data); - } - protected void fireExitRule(int num,int data) { - if (isDebugMode()) - parserEventSupport.fireExitRule(num,inputState.guessing,data); - } - protected boolean fireSemanticPredicateEvaluated(int type, int num, boolean condition) { - if (isDebugMode()) - return parserEventSupport.fireSemanticPredicateEvaluated(type,num,condition,inputState.guessing); - else - return condition; - } - protected void fireSyntacticPredicateFailed() { - if (isDebugMode()) - parserEventSupport.fireSyntacticPredicateFailed(inputState.guessing); - } - protected void fireSyntacticPredicateStarted() { - if (isDebugMode()) - parserEventSupport.fireSyntacticPredicateStarted(inputState.guessing); - } - protected void fireSyntacticPredicateSucceeded() { - if (isDebugMode()) - parserEventSupport.fireSyntacticPredicateSucceeded(inputState.guessing); - } - public String getRuleName(int num) { - return ruleNames[num]; - } - public String getSemPredName(int num) { - return semPredNames[num]; - } - public synchronized void goToSleep() { - try {wait();} - catch (InterruptedException e) { } - } - public boolean isDebugMode() { - return !_notDebugMode; - } - public boolean isGuessing() { - return inputState.guessing > 0; - } - /** Return the token type of the ith token of lookahead where i=1 - * is the current token being examined by the parser (i.e., it - * has not been matched yet). - */ - public int LA(int i) throws TokenStreamException { - int la = super.LA(i); - parserEventSupport.fireLA(i, la); - return la; - } - /**Make sure current lookahead symbol matches token type <tt>t</tt>. - * Throw an exception upon mismatch, which is catch by either the - * error handler or by the syntactic predicate. - */ - public void match(int t) throws MismatchedTokenException, TokenStreamException { - String text = LT(1).getText(); - int la_1 = LA(1); - try { - super.match(t); - parserEventSupport.fireMatch(t, text, inputState.guessing); - } - catch (MismatchedTokenException e) { - if (inputState.guessing == 0) - parserEventSupport.fireMismatch(la_1, t, text, inputState.guessing); - throw e; - } - } - /**Make sure current lookahead symbol matches the given set - * Throw an exception upon mismatch, which is catch by either the - * error handler or by the syntactic predicate. - */ - public void match(BitSet b) throws MismatchedTokenException, TokenStreamException { - String text = LT(1).getText(); - int la_1 = LA(1); - try { - super.match(b); - parserEventSupport.fireMatch(la_1,b, text, inputState.guessing); - } - catch (MismatchedTokenException e) { - if (inputState.guessing == 0) - parserEventSupport.fireMismatch(la_1, b, text, inputState.guessing); - throw e; - } - } - public void matchNot(int t) throws MismatchedTokenException, TokenStreamException { - String text = LT(1).getText(); - int la_1 = LA(1); - try { - super.matchNot(t); - parserEventSupport.fireMatchNot(la_1, t, text, inputState.guessing); - } - catch (MismatchedTokenException e) { - if (inputState.guessing == 0) - parserEventSupport.fireMismatchNot(la_1, t, text, inputState.guessing); - throw e; - } - } - public void removeMessageListener(MessageListener l) { - parserEventSupport.removeMessageListener(l); - } - public void removeParserListener(ParserListener l) { - parserEventSupport.removeParserListener(l); - } - public void removeParserMatchListener(ParserMatchListener l) { - parserEventSupport.removeParserMatchListener(l); - } - public void removeParserTokenListener(ParserTokenListener l) { - parserEventSupport.removeParserTokenListener(l); - } - public void removeSemanticPredicateListener(SemanticPredicateListener l) { - parserEventSupport.removeSemanticPredicateListener(l); - } - public void removeSyntacticPredicateListener(SyntacticPredicateListener l) { - parserEventSupport.removeSyntacticPredicateListener(l); - } - public void removeTraceListener(TraceListener l) { - parserEventSupport.removeTraceListener(l); - } - /** Parser error-reporting function can be overridden in subclass */ - public void reportError(RecognitionException ex) { - parserEventSupport.fireReportError(ex); - super.reportError(ex); - } - /** Parser error-reporting function can be overridden in subclass */ - public void reportError(String s) { - parserEventSupport.fireReportError(s); - super.reportError(s); - } - /** Parser warning-reporting function can be overridden in subclass */ - public void reportWarning(String s) { - parserEventSupport.fireReportWarning(s); - super.reportWarning(s); - } - public void setDebugMode(boolean value) { - _notDebugMode = !value; - } - public void setupDebugging(TokenBuffer tokenBuf) { - setupDebugging(null, tokenBuf); - } - public void setupDebugging(TokenStream lexer) { - setupDebugging(lexer, null); - } - /** User can override to do their own debugging */ - protected void setupDebugging(TokenStream lexer, TokenBuffer tokenBuf) { - setDebugMode(true); - // default parser debug setup is ParseView - try { - try { - Class.forName("javax.swing.JButton"); - } - catch (ClassNotFoundException e) { - System.err.println("Swing is required to use ParseView, but is not present in your CLASSPATH"); - System.exit(1); - } - Class c = Class.forName("antlr.parseview.ParseView"); - Constructor constructor = c.getConstructor(new Class[] {LLkDebuggingParser.class, TokenStream.class, TokenBuffer.class}); - constructor.newInstance(new Object[] {this, lexer, tokenBuf}); - } - catch(Exception e) { - System.err.println("Error initializing ParseView: "+e); - System.err.println("Please report this to Scott Stanchfield, thetick@magelang.com"); - System.exit(1); - } - } - public synchronized void wakeUp() { - notify(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/MessageAdapter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/MessageAdapter.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/MessageAdapter.java 2006-02-08 22:31:20.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/MessageAdapter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -package persistence.antlr.debug; - -public class MessageAdapter implements MessageListener { - - - public void doneParsing(TraceEvent e) {} - public void refresh() {} - public void reportError(MessageEvent e) {} - public void reportWarning(MessageEvent e) {} -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/MessageEvent.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/MessageEvent.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/MessageEvent.java 2006-02-08 22:31:20.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/MessageEvent.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,32 +0,0 @@ -package persistence.antlr.debug; - -public class MessageEvent extends Event { - private String text; - public static int WARNING = 0; - public static int ERROR = 1; - - - public MessageEvent(Object source) { - super(source); - } - public MessageEvent(Object source, int type, String text) { - super(source); - setValues(type,text); - } - public String getText() { - return text; - } - void setText(String text) { - this.text = text; - } - /** This should NOT be called from anyone other than ParserEventSupport! */ - void setValues(int type, String text) { - super.setValues(type); - setText(text); - } - public String toString() { - return "ParserMessageEvent [" + - (getType()==WARNING?"warning,":"error,") + - getText() + "]"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/MessageListener.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/MessageListener.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/MessageListener.java 2006-02-08 22:31:21.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/MessageListener.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -package persistence.antlr.debug; - -public interface MessageListener extends ListenerBase { - - - public void reportError(MessageEvent e); - public void reportWarning(MessageEvent e); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/misc/ASTFrame.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/misc/ASTFrame.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/misc/ASTFrame.java 2006-08-31 00:34:15.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/misc/ASTFrame.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,67 +0,0 @@ -package persistence.antlr.debug.misc; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.*; -import persistence.antlr.collections.AST; - -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; -import javax.swing.event.*; -import javax.swing.tree.*; - -public class ASTFrame extends JFrame { - // The initial width and height of the frame - static final int WIDTH = 200; - static final int HEIGHT = 300; - - class MyTreeSelectionListener - implements TreeSelectionListener { - public void valueChanged(TreeSelectionEvent event) { - TreePath path = event.getPath(); - System.out.println("Selected: " + - path.getLastPathComponent()); - Object elements[] = path.getPath(); - for (int i = 0; i < elements.length; i++) { - System.out.print("->" + elements[i]); - } - System.out.println(); - } - } - - public ASTFrame(String lab, AST r) { - super(lab); - - // Create the TreeSelectionListener - TreeSelectionListener listener = new MyTreeSelectionListener(); - JTreeASTPanel tp = new JTreeASTPanel(new JTreeASTModel(r), null); - Container content = getContentPane(); - content.add(tp, BorderLayout.CENTER); - addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - Frame f = (Frame)e.getSource(); - f.setVisible(false); - f.dispose(); - // System.exit(0); - } - }); - setSize(WIDTH, HEIGHT); - } - - public static void main(String args[]) { - // Create the tree nodes - ASTFactory factory = new ASTFactory(); - CommonAST r = (CommonAST)factory.create(0, "ROOT"); - r.addChild((CommonAST)factory.create(0, "C1")); - r.addChild((CommonAST)factory.create(0, "C2")); - r.addChild((CommonAST)factory.create(0, "C3")); - - ASTFrame frame = new ASTFrame("AST JTree Example", r); - frame.setVisible(true); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/misc/JTreeASTModel.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/misc/JTreeASTModel.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/misc/JTreeASTModel.java 2006-08-31 00:34:15.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/misc/JTreeASTModel.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,98 +0,0 @@ -package persistence.antlr.debug.misc; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.AST; - -import javax.swing.*; -import javax.swing.event.*; -import javax.swing.tree.*; - -public class JTreeASTModel implements TreeModel { - - AST root = null; - - public JTreeASTModel(AST t) { - if (t == null) { - throw new IllegalArgumentException("root is null"); - } - root = t; - } - - public void addTreeModelListener(TreeModelListener l) { - } - - public Object getChild(Object parent, int index) { - if (parent == null) { - return null; - } - AST p = (AST)parent; - AST c = p.getFirstChild(); - if (c == null) { - throw new ArrayIndexOutOfBoundsException("node has no children"); - } - int i = 0; - while (c != null && i < index) { - c = c.getNextSibling(); - i++; - } - return c; - } - - public int getChildCount(Object parent) { - if (parent == null) { - throw new IllegalArgumentException("root is null"); - } - AST p = (AST)parent; - AST c = p.getFirstChild(); - int i = 0; - while (c != null) { - c = c.getNextSibling(); - i++; - } - return i; - } - - public int getIndexOfChild(Object parent, Object child) { - if (parent == null || child == null) { - throw new IllegalArgumentException("root or child is null"); - } - AST p = (AST)parent; - AST c = p.getFirstChild(); - if (c == null) { - throw new ArrayIndexOutOfBoundsException("node has no children"); - } - int i = 0; - while (c != null && c != child) { - c = c.getNextSibling(); - i++; - } - if (c == child) { - return i; - } - throw new java.util.NoSuchElementException("node is not a child"); - } - - public Object getRoot() { - return root; - } - - public boolean isLeaf(Object node) { - if (node == null) { - throw new IllegalArgumentException("node is null"); - } - AST t = (AST)node; - return t.getFirstChild() == null; - } - - public void removeTreeModelListener(TreeModelListener l) { - } - - public void valueForPathChanged(TreePath path, Object newValue) { - System.out.println("heh, who is calling this mystery method?"); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/misc/JTreeASTPanel.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/misc/JTreeASTPanel.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/misc/JTreeASTPanel.java 2006-08-31 00:34:15.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/misc/JTreeASTPanel.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,37 +0,0 @@ -package persistence.antlr.debug.misc; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.awt.*; -import javax.swing.*; -import javax.swing.tree.*; -import javax.swing.event.*; - -public class JTreeASTPanel extends JPanel { - JTree tree; - - public JTreeASTPanel(TreeModel tm, TreeSelectionListener listener) { - // use a layout that will stretch tree to panel size - setLayout(new BorderLayout()); - - // Create tree - tree = new JTree(tm); - - // Change line style - tree.putClientProperty("JTree.lineStyle", "Angled"); - - // Add TreeSelectionListener - if (listener != null) - tree.addTreeSelectionListener(listener); - - // Put tree in a scrollable pane's viewport - JScrollPane sp = new JScrollPane(); - sp.getViewport().add(tree); - - add(sp, BorderLayout.CENTER); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/NewLineEvent.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/NewLineEvent.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/NewLineEvent.java 2006-02-08 22:31:21.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/NewLineEvent.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -package persistence.antlr.debug; - -public class NewLineEvent extends Event { - private int line; - - - public NewLineEvent(Object source) { - super(source); - } - public NewLineEvent(Object source, int line) { - super(source); - setValues(line); - } - public int getLine() { - return line; - } - void setLine(int line) { - this.line = line; - } - /** This should NOT be called from anyone other than ParserEventSupport! */ - void setValues(int line) { - setLine(line); - } - public String toString() { - return "NewLineEvent [" + line + "]"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/NewLineListener.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/NewLineListener.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/NewLineListener.java 2006-02-08 22:31:21.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/NewLineListener.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,7 +0,0 @@ -package persistence.antlr.debug; - -public interface NewLineListener extends ListenerBase { - - - public void hitNewLine(NewLineEvent e); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserAdapter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserAdapter.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserAdapter.java 2006-02-08 22:31:22.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserAdapter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -package persistence.antlr.debug; - -public class ParserAdapter implements ParserListener { - - - public void doneParsing(TraceEvent e) {} - public void enterRule(TraceEvent e) {} - public void exitRule(TraceEvent e) {} - public void parserConsume(ParserTokenEvent e) {} - public void parserLA(ParserTokenEvent e) {} - public void parserMatch(ParserMatchEvent e) {} - public void parserMatchNot(ParserMatchEvent e) {} - public void parserMismatch(ParserMatchEvent e) {} - public void parserMismatchNot(ParserMatchEvent e) {} - public void refresh() {} - public void reportError(MessageEvent e) {} - public void reportWarning(MessageEvent e) {} - public void semanticPredicateEvaluated(SemanticPredicateEvent e) {} - public void syntacticPredicateFailed(SyntacticPredicateEvent e) {} - public void syntacticPredicateStarted(SyntacticPredicateEvent e) {} - public void syntacticPredicateSucceeded(SyntacticPredicateEvent e) {} -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserController.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserController.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserController.java 2006-02-08 22:31:22.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserController.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -package persistence.antlr.debug; - -public interface ParserController extends ParserListener { - - - public void checkBreak(); - public void setParserEventSupport(ParserEventSupport p); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserEventSupport.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserEventSupport.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserEventSupport.java 2006-02-08 22:31:22.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserEventSupport.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,372 +0,0 @@ -package persistence.antlr.debug; - -import java.util.Vector; -import java.util.Hashtable; -import java.util.Enumeration; -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.RecognitionException; - - -/** A class to assist in firing parser events - * NOTE: I intentionally _did_not_ synchronize the event firing and - * add/remove listener methods. This is because the add/remove should - * _only_ be called by the parser at its start/end, and the _same_thread_ - * should be performing the parsing. This should help performance a tad... - */ -public class ParserEventSupport { - private Object source; - private Hashtable doneListeners; - private Vector matchListeners; - private Vector messageListeners; - private Vector tokenListeners; - private Vector traceListeners; - private Vector semPredListeners; - private Vector synPredListeners; - private Vector newLineListeners; - private ParserMatchEvent matchEvent; - private MessageEvent messageEvent; - private ParserTokenEvent tokenEvent; - private SemanticPredicateEvent semPredEvent; - private SyntacticPredicateEvent synPredEvent; - private TraceEvent traceEvent; - private NewLineEvent newLineEvent; - private ParserController controller; - protected static final int CONSUME=0; - protected static final int ENTER_RULE=1; - protected static final int EXIT_RULE=2; - protected static final int LA=3; - protected static final int MATCH=4; - protected static final int MATCH_NOT=5; - protected static final int MISMATCH=6; - protected static final int MISMATCH_NOT=7; - protected static final int REPORT_ERROR=8; - protected static final int REPORT_WARNING=9; - protected static final int SEMPRED=10; - protected static final int SYNPRED_FAILED=11; - protected static final int SYNPRED_STARTED=12; - protected static final int SYNPRED_SUCCEEDED=13; - protected static final int NEW_LINE=14; - protected static final int DONE_PARSING=15; - private int ruleDepth = 0; - - - public ParserEventSupport(Object source) { - matchEvent = new ParserMatchEvent(source); - messageEvent = new MessageEvent(source); - tokenEvent = new ParserTokenEvent(source); - traceEvent = new TraceEvent(source); - semPredEvent = new SemanticPredicateEvent(source); - synPredEvent = new SyntacticPredicateEvent(source); - newLineEvent = new NewLineEvent(source); - this.source = source; - } - public void addDoneListener(ListenerBase l) { - if (doneListeners == null) doneListeners = new Hashtable(); - Integer i = (Integer)doneListeners.get(l); - int val; - if (i != null) - val = i.intValue() + 1; - else - val = 1; - doneListeners.put(l, new Integer(val)); - } - public void addMessageListener(MessageListener l) { - if (messageListeners == null) messageListeners = new Vector(); - messageListeners.addElement(l); - addDoneListener(l); - } - public void addNewLineListener(NewLineListener l) { - if (newLineListeners == null) newLineListeners = new Vector(); - newLineListeners.addElement(l); - addDoneListener(l); - } - public void addParserListener(ParserListener l) { - if (l instanceof ParserController) { - ((ParserController)l).setParserEventSupport(this); - controller = (ParserController)l; - } - addParserMatchListener(l); - addParserTokenListener(l); - - addMessageListener(l); - addTraceListener(l); - addSemanticPredicateListener(l); - addSyntacticPredicateListener(l); - } - public void addParserMatchListener(ParserMatchListener l) { - if (matchListeners == null) matchListeners = new Vector(); - matchListeners.addElement(l); - addDoneListener(l); - } - public void addParserTokenListener(ParserTokenListener l) { - if (tokenListeners == null) tokenListeners = new Vector(); - tokenListeners.addElement(l); - addDoneListener(l); - } - public void addSemanticPredicateListener(SemanticPredicateListener l) { - if (semPredListeners == null) semPredListeners = new Vector(); - semPredListeners.addElement(l); - addDoneListener(l); - } - public void addSyntacticPredicateListener(SyntacticPredicateListener l) { - if (synPredListeners == null) synPredListeners = new Vector(); - synPredListeners.addElement(l); - addDoneListener(l); - } - public void addTraceListener(TraceListener l) { - if (traceListeners == null) traceListeners = new Vector(); - traceListeners.addElement(l); - addDoneListener(l); - } - public void fireConsume(int value) { - tokenEvent.setValues(ParserTokenEvent.CONSUME, 1, value); - fireEvents(CONSUME, tokenListeners); - } - public void fireDoneParsing() { - traceEvent.setValues(TraceEvent.DONE_PARSING, 0,0,0); - - Hashtable targets=null; -// Hashtable targets=doneListeners; - ListenerBase l=null; - - synchronized (this) { - if (doneListeners == null) return; - targets = (Hashtable)doneListeners.clone(); - } - - if (targets != null) { - Enumeration e = targets.keys(); - while(e.hasMoreElements()) { - l = (ListenerBase)e.nextElement(); - fireEvent(DONE_PARSING, l); - } - } - if (controller != null) - controller.checkBreak(); - } - public void fireEnterRule(int ruleNum, int guessing, int data) { - ruleDepth++; - traceEvent.setValues(TraceEvent.ENTER, ruleNum, guessing, data); - fireEvents(ENTER_RULE, traceListeners); - } - public void fireEvent(int type, ListenerBase l) { - switch(type) { - case CONSUME: ((ParserTokenListener)l).parserConsume(tokenEvent); break; - case LA: ((ParserTokenListener)l).parserLA(tokenEvent); break; - - case ENTER_RULE: ((TraceListener)l).enterRule(traceEvent); break; - case EXIT_RULE: ((TraceListener)l).exitRule(traceEvent); break; - - case MATCH: ((ParserMatchListener)l).parserMatch(matchEvent); break; - case MATCH_NOT: ((ParserMatchListener)l).parserMatchNot(matchEvent); break; - case MISMATCH: ((ParserMatchListener)l).parserMismatch(matchEvent); break; - case MISMATCH_NOT: ((ParserMatchListener)l).parserMismatchNot(matchEvent); break; - - case SEMPRED: ((SemanticPredicateListener)l).semanticPredicateEvaluated(semPredEvent); break; - - case SYNPRED_STARTED: ((SyntacticPredicateListener)l).syntacticPredicateStarted(synPredEvent); break; - case SYNPRED_FAILED: ((SyntacticPredicateListener)l).syntacticPredicateFailed(synPredEvent); break; - case SYNPRED_SUCCEEDED: ((SyntacticPredicateListener)l).syntacticPredicateSucceeded(synPredEvent); break; - - case REPORT_ERROR: ((MessageListener)l).reportError(messageEvent); break; - case REPORT_WARNING: ((MessageListener)l).reportWarning(messageEvent); break; - - case DONE_PARSING: l.doneParsing(traceEvent); break; - case NEW_LINE: ((NewLineListener)l).hitNewLine(newLineEvent); break; - - default: - throw new IllegalArgumentException("bad type "+type+" for fireEvent()"); - } - } - public void fireEvents(int type, Vector listeners) { - ListenerBase l=null; - - if (listeners != null) - for (int i = 0; i < listeners.size(); i++) { - l = (ListenerBase)listeners.elementAt(i); - fireEvent(type, l); - } - if (controller != null) - controller.checkBreak(); - } - public void fireExitRule(int ruleNum, int guessing, int data) { - traceEvent.setValues(TraceEvent.EXIT, ruleNum, guessing, data); - fireEvents(EXIT_RULE, traceListeners); - ruleDepth--; - if (ruleDepth == 0) - fireDoneParsing(); - } - public void fireLA(int k, int la) { - tokenEvent.setValues(ParserTokenEvent.LA, k, la); - fireEvents(LA, tokenListeners); - } - public void fireMatch(char c, int guessing) { - matchEvent.setValues(ParserMatchEvent.CHAR, c, new Character(c), null, guessing, false, true); - fireEvents(MATCH, matchListeners); - } - public void fireMatch(char value, BitSet b, int guessing) { - matchEvent.setValues(ParserMatchEvent.CHAR_BITSET, value, b, null, guessing, false, true); - fireEvents(MATCH, matchListeners); - } - public void fireMatch(char value, String target, int guessing) { - matchEvent.setValues(ParserMatchEvent.CHAR_RANGE, value, target, null, guessing, false, true); - fireEvents(MATCH, matchListeners); - } - public void fireMatch(int value, BitSet b, String text, int guessing) { - matchEvent.setValues(ParserMatchEvent.BITSET, value, b, text, guessing, false, true); - fireEvents(MATCH, matchListeners); - } - public void fireMatch(int n, String text, int guessing) { - matchEvent.setValues(ParserMatchEvent.TOKEN, n, new Integer(n), text, guessing, false, true); - fireEvents(MATCH, matchListeners); - } - public void fireMatch(String s, int guessing) { - matchEvent.setValues(ParserMatchEvent.STRING, 0, s, null, guessing, false, true); - fireEvents(MATCH, matchListeners); - } - public void fireMatchNot(char value, char n, int guessing) { - matchEvent.setValues(ParserMatchEvent.CHAR, value, new Character(n), null, guessing, true, true); - fireEvents(MATCH_NOT, matchListeners); - } - public void fireMatchNot(int value, int n, String text, int guessing) { - matchEvent.setValues(ParserMatchEvent.TOKEN, value, new Integer(n), text, guessing, true, true); - fireEvents(MATCH_NOT, matchListeners); - } - public void fireMismatch(char value, char n, int guessing) { - matchEvent.setValues(ParserMatchEvent.CHAR, value, new Character(n), null, guessing, false, false); - fireEvents(MISMATCH, matchListeners); - } - public void fireMismatch(char value, BitSet b, int guessing) { - matchEvent.setValues(ParserMatchEvent.CHAR_BITSET, value, b, null, guessing, false, true); - fireEvents(MISMATCH, matchListeners); - } - public void fireMismatch(char value, String target, int guessing) { - matchEvent.setValues(ParserMatchEvent.CHAR_RANGE, value, target, null, guessing, false, true); - fireEvents(MISMATCH, matchListeners); - } - public void fireMismatch(int value, int n, String text, int guessing) { - matchEvent.setValues(ParserMatchEvent.TOKEN, value, new Integer(n), text, guessing, false, false); - fireEvents(MISMATCH, matchListeners); - } - public void fireMismatch(int value, BitSet b, String text, int guessing) { - matchEvent.setValues(ParserMatchEvent.BITSET, value, b, text, guessing, false, true); - fireEvents(MISMATCH, matchListeners); - } - public void fireMismatch(String value, String text, int guessing) { - matchEvent.setValues(ParserMatchEvent.STRING, 0, text, value, guessing, false, true); - fireEvents(MISMATCH, matchListeners); - } - public void fireMismatchNot(char value, char c, int guessing) { - matchEvent.setValues(ParserMatchEvent.CHAR, value, new Character(c), null, guessing, true, true); - fireEvents(MISMATCH_NOT, matchListeners); - } - public void fireMismatchNot(int value, int n, String text, int guessing) { - matchEvent.setValues(ParserMatchEvent.TOKEN, value, new Integer(n), text, guessing, true, true); - fireEvents(MISMATCH_NOT, matchListeners); - } - public void fireNewLine(int line) { - newLineEvent.setValues(line); - fireEvents(NEW_LINE, newLineListeners); - } - public void fireReportError(Exception e) { - messageEvent.setValues(MessageEvent.ERROR, e.toString()); - fireEvents(REPORT_ERROR, messageListeners); - } - public void fireReportError(String s) { - messageEvent.setValues(MessageEvent.ERROR, s); - fireEvents(REPORT_ERROR, messageListeners); - } - public void fireReportWarning(String s) { - messageEvent.setValues(MessageEvent.WARNING, s); - fireEvents(REPORT_WARNING, messageListeners); - } - public boolean fireSemanticPredicateEvaluated(int type, int condition, boolean result, int guessing) { - semPredEvent.setValues(type, condition, result, guessing); - fireEvents(SEMPRED, semPredListeners); - return result; - } - public void fireSyntacticPredicateFailed(int guessing) { - synPredEvent.setValues(0, guessing); - fireEvents(SYNPRED_FAILED, synPredListeners); - } - public void fireSyntacticPredicateStarted(int guessing) { - synPredEvent.setValues(0, guessing); - fireEvents(SYNPRED_STARTED, synPredListeners); - } - public void fireSyntacticPredicateSucceeded(int guessing) { - synPredEvent.setValues(0, guessing); - fireEvents(SYNPRED_SUCCEEDED, synPredListeners); - } - protected void refresh(Vector listeners) { - Vector v; - synchronized (listeners) { - v = (Vector)listeners.clone(); - } - if (v != null) - for (int i = 0; i < v.size(); i++) - ((ListenerBase)v.elementAt(i)).refresh(); - } - public void refreshListeners() { - refresh(matchListeners); - refresh(messageListeners); - refresh(tokenListeners); - refresh(traceListeners); - refresh(semPredListeners); - refresh(synPredListeners); - } - public void removeDoneListener(ListenerBase l) { - if (doneListeners == null) return; - Integer i = (Integer)doneListeners.get(l); - int val=0; - if (i != null) - val = i.intValue() - 1; - - if (val == 0) - doneListeners.remove(l); - else - doneListeners.put(l, new Integer(val)); - } - public void removeMessageListener(MessageListener l) { - if (messageListeners != null) - messageListeners.removeElement(l); - removeDoneListener(l); - } - public void removeNewLineListener(NewLineListener l) { - if (newLineListeners != null) - newLineListeners.removeElement(l); - removeDoneListener(l); - } - public void removeParserListener(ParserListener l) { - removeParserMatchListener(l); - removeMessageListener(l); - removeParserTokenListener(l); - removeTraceListener(l); - removeSemanticPredicateListener(l); - removeSyntacticPredicateListener(l); - } - public void removeParserMatchListener(ParserMatchListener l) { - if (matchListeners != null) - matchListeners.removeElement(l); - removeDoneListener(l); - } - public void removeParserTokenListener(ParserTokenListener l) { - if (tokenListeners != null) - tokenListeners.removeElement(l); - removeDoneListener(l); - } - public void removeSemanticPredicateListener(SemanticPredicateListener l) { - if (semPredListeners != null) - semPredListeners.removeElement(l); - removeDoneListener(l); - } - public void removeSyntacticPredicateListener(SyntacticPredicateListener l) { - if (synPredListeners != null) - synPredListeners.removeElement(l); - removeDoneListener(l); - } - public void removeTraceListener(TraceListener l) { - if (traceListeners != null) - traceListeners.removeElement(l); - removeDoneListener(l); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserListener.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserListener.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserListener.java 2006-02-08 22:31:23.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserListener.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -package persistence.antlr.debug; - -public interface ParserListener extends SemanticPredicateListener, - ParserMatchListener, - MessageListener, - ParserTokenListener, - TraceListener, - SyntacticPredicateListener { -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserMatchAdapter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserMatchAdapter.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserMatchAdapter.java 2006-02-08 22:31:23.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserMatchAdapter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,12 +0,0 @@ -package persistence.antlr.debug; - -public class ParserMatchAdapter implements ParserMatchListener { - - - public void doneParsing(TraceEvent e) {} - public void parserMatch(ParserMatchEvent e) {} - public void parserMatchNot(ParserMatchEvent e) {} - public void parserMismatch(ParserMatchEvent e) {} - public void parserMismatchNot(ParserMatchEvent e) {} - public void refresh() {} -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserMatchEvent.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserMatchEvent.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserMatchEvent.java 2006-02-08 22:31:23.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserMatchEvent.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,74 +0,0 @@ -package persistence.antlr.debug; - -public class ParserMatchEvent extends GuessingEvent { - // NOTE: for a mismatch on type STRING, the "text" is used as the lookahead - // value. Normally "value" is this - public static int TOKEN=0; - public static int BITSET=1; - public static int CHAR=2; - public static int CHAR_BITSET=3; - public static int STRING=4; - public static int CHAR_RANGE=5; - private boolean inverse; - private boolean matched; - private Object target; - private int value; - private String text; - - - public ParserMatchEvent(Object source) { - super(source); - } - public ParserMatchEvent(Object source, int type, - int value, Object target, String text, int guessing, - boolean inverse, boolean matched) { - super(source); - setValues(type,value,target,text,guessing,inverse,matched); - } - public Object getTarget() { - return target; - } - public String getText() { - return text; - } - public int getValue() { - return value; - } - public boolean isInverse() { - return inverse; - } - public boolean isMatched() { - return matched; - } - void setInverse(boolean inverse) { - this.inverse = inverse; - } - void setMatched(boolean matched) { - this.matched = matched; - } - void setTarget(Object target) { - this.target = target; - } - void setText(String text) { - this.text = text; - } - void setValue(int value) { - this.value = value; - } - /** This should NOT be called from anyone other than ParserEventSupport! */ - void setValues(int type, int value, Object target, String text, int guessing, boolean inverse, boolean matched) { - super.setValues(type, guessing); - setValue(value); - setTarget(target); - setInverse(inverse); - setMatched(matched); - setText(text); - } - public String toString() { - return "ParserMatchEvent [" + - (isMatched()?"ok,":"bad,") + - (isInverse()?"NOT ":"") + - (getType()==TOKEN?"token,":"bitset,") + - getValue() + "," + getTarget() + "," + getGuessing() + "]"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserMatchListener.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserMatchListener.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserMatchListener.java 2006-02-08 22:31:24.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserMatchListener.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -package persistence.antlr.debug; - -public interface ParserMatchListener extends ListenerBase { - - - public void parserMatch(ParserMatchEvent e); - public void parserMatchNot(ParserMatchEvent e); - public void parserMismatch(ParserMatchEvent e); - public void parserMismatchNot(ParserMatchEvent e); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserReporter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserReporter.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserReporter.java 2006-02-08 22:31:29.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserReporter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,42 +0,0 @@ -package persistence.antlr.debug; - -public class ParserReporter extends Tracer implements ParserListener { - - - public void parserConsume(ParserTokenEvent e) { - System.out.println(indent+e); - } - public void parserLA(ParserTokenEvent e) { - System.out.println(indent+e); - } - public void parserMatch(ParserMatchEvent e) { - System.out.println(indent+e); - } - public void parserMatchNot(ParserMatchEvent e) { - System.out.println(indent+e); - } - public void parserMismatch(ParserMatchEvent e) { - System.out.println(indent+e); - } - public void parserMismatchNot(ParserMatchEvent e) { - System.out.println(indent+e); - } - public void reportError(MessageEvent e) { - System.out.println(indent+e); - } - public void reportWarning(MessageEvent e) { - System.out.println(indent+e); - } - public void semanticPredicateEvaluated(SemanticPredicateEvent e) { - System.out.println(indent+e); - } - public void syntacticPredicateFailed(SyntacticPredicateEvent e) { - System.out.println(indent+e); - } - public void syntacticPredicateStarted(SyntacticPredicateEvent e) { - System.out.println(indent+e); - } - public void syntacticPredicateSucceeded(SyntacticPredicateEvent e) { - System.out.println(indent+e); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserTokenAdapter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserTokenAdapter.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserTokenAdapter.java 2006-02-08 22:31:29.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserTokenAdapter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -package persistence.antlr.debug; - -public class ParserTokenAdapter implements ParserTokenListener { - - - public void doneParsing(TraceEvent e) {} - public void parserConsume(ParserTokenEvent e) {} - public void parserLA(ParserTokenEvent e) {} - public void refresh() {} -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserTokenEvent.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserTokenEvent.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserTokenEvent.java 2006-02-08 22:31:29.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserTokenEvent.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,44 +0,0 @@ -package persistence.antlr.debug; - -public class ParserTokenEvent extends Event { - private int value; - private int amount; - public static int LA=0; - public static int CONSUME=1; - - - public ParserTokenEvent(Object source) { - super(source); - } - public ParserTokenEvent(Object source, int type, - int amount, int value) { - super(source); - setValues(type,amount,value); - } - public int getAmount() { - return amount; - } - public int getValue() { - return value; - } - void setAmount(int amount) { - this.amount = amount; - } - void setValue(int value) { - this.value = value; - } - /** This should NOT be called from anyone other than ParserEventSupport! */ - void setValues(int type, int amount, int value) { - super.setValues(type); - setAmount(amount); - setValue(value); - } - public String toString() { - if (getType()==LA) - return "ParserTokenEvent [LA," + getAmount() + "," + - getValue() + "]"; - else - return "ParserTokenEvent [consume,1," + - getValue() + "]"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserTokenListener.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserTokenListener.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParserTokenListener.java 2006-02-08 22:31:30.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParserTokenListener.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -package persistence.antlr.debug; - -public interface ParserTokenListener extends ListenerBase { - - - public void parserConsume(ParserTokenEvent e); - public void parserLA(ParserTokenEvent e); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/ParseTreeDebugParser.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParseTreeDebugParser.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/ParseTreeDebugParser.java 2006-02-08 22:31:22.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/ParseTreeDebugParser.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,116 +0,0 @@ -package persistence.antlr.debug; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - */ - -import persistence.antlr.*; -import persistence.antlr.collections.impl.BitSet; - -import java.util.Stack; - -/** Override the standard matching and rule entry/exit routines - * to build parse trees. This class is useful for 2.7.3 where - * you can specify a superclass like - * - * class TinyCParser extends Parser(ParseTreeDebugParser); - */ -public class ParseTreeDebugParser extends LLkParser { - /** Each new rule invocation must have it's own subtree. Tokens - * are added to the current root so we must have a stack of subtree roots. - */ - protected Stack currentParseTreeRoot = new Stack(); - - /** Track most recently created parse subtree so that when parsing - * is finished, we can get to the root. - */ - protected ParseTreeRule mostRecentParseTreeRoot = null; - - /** For every rule replacement with a production, we bump up count. */ - protected int numberOfDerivationSteps = 1; // n replacements plus step 0 - - public ParseTreeDebugParser(int k_) { - super(k_); - } - - public ParseTreeDebugParser(ParserSharedInputState state, int k_) { - super(state,k_); - } - - public ParseTreeDebugParser(TokenBuffer tokenBuf, int k_) { - super(tokenBuf, k_); - } - - public ParseTreeDebugParser(TokenStream lexer, int k_) { - super(lexer,k_); - } - - public ParseTree getParseTree() { - return mostRecentParseTreeRoot; - } - - public int getNumberOfDerivationSteps() { - return numberOfDerivationSteps; - } - - public void match(int i) throws MismatchedTokenException, TokenStreamException { - addCurrentTokenToParseTree(); - super.match(i); - } - - public void match(BitSet bitSet) throws MismatchedTokenException, TokenStreamException { - addCurrentTokenToParseTree(); - super.match(bitSet); - } - - public void matchNot(int i) throws MismatchedTokenException, TokenStreamException { - addCurrentTokenToParseTree(); - super.matchNot(i); - } - - /** This adds LT(1) to the current parse subtree. Note that the match() - * routines add the node before checking for correct match. This means - * that, upon mismatched token, there will a token node in the tree - * corresponding to where that token was expected. For no viable - * alternative errors, no node will be in the tree as nothing was - * matched() (the lookahead failed to predict an alternative). - */ - protected void addCurrentTokenToParseTree() throws TokenStreamException { - if (inputState.guessing>0) { - return; - } - ParseTreeRule root = (ParseTreeRule)currentParseTreeRoot.peek(); - ParseTreeToken tokenNode = null; - if ( LA(1)==Token.EOF_TYPE ) { - tokenNode = new ParseTreeToken(new persistence.antlr.CommonToken("EOF")); - } - else { - tokenNode = new ParseTreeToken(LT(1)); - } - root.addChild(tokenNode); - } - - /** Create a rule node, add to current tree, and make it current root */ - public void traceIn(String s) throws TokenStreamException { - if (inputState.guessing>0) { - return; - } - ParseTreeRule subRoot = new ParseTreeRule(s); - if ( currentParseTreeRoot.size()>0 ) { - ParseTreeRule oldRoot = (ParseTreeRule)currentParseTreeRoot.peek(); - oldRoot.addChild(subRoot); - } - currentParseTreeRoot.push(subRoot); - numberOfDerivationSteps++; - } - - /** Pop current root; back to adding to old root */ - public void traceOut(String s) throws TokenStreamException { - if (inputState.guessing>0) { - return; - } - mostRecentParseTreeRoot = (ParseTreeRule)currentParseTreeRoot.pop(); - } - -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateAdapter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateAdapter.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateAdapter.java 2006-02-08 22:31:30.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateAdapter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -package persistence.antlr.debug; - -public class SemanticPredicateAdapter implements SemanticPredicateListener { - - - public void doneParsing(TraceEvent e) {} - public void refresh() {} - public void semanticPredicateEvaluated(SemanticPredicateEvent e) {} -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateEvent.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateEvent.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateEvent.java 2006-02-08 22:31:30.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateEvent.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,38 +0,0 @@ -package persistence.antlr.debug; - -public class SemanticPredicateEvent extends GuessingEvent { - public static final int VALIDATING=0; - public static final int PREDICTING=1; - private int condition; - private boolean result; - - - public SemanticPredicateEvent(Object source) { - super(source); - } - public SemanticPredicateEvent(Object source, int type) { - super(source, type); - } - public int getCondition() { - return condition; - } - public boolean getResult() { - return result; - } - void setCondition(int condition) { - this.condition = condition; - } - void setResult(boolean result) { - this.result = result; - } - /** This should NOT be called from anyone other than ParserEventSupport! */ - void setValues(int type, int condition, boolean result, int guessing) { - super.setValues(type, guessing); - setCondition(condition); - setResult(result); - } - public String toString() { - return "SemanticPredicateEvent [" + - getCondition() + "," + getResult() + "," + getGuessing() + "]"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateListener.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateListener.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateListener.java 2006-02-08 22:31:30.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SemanticPredicateListener.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,7 +0,0 @@ -package persistence.antlr.debug; - -public interface SemanticPredicateListener extends ListenerBase { - - - public void semanticPredicateEvaluated(SemanticPredicateEvent e); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateAdapter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateAdapter.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateAdapter.java 2006-02-08 22:31:31.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateAdapter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,11 +0,0 @@ -package persistence.antlr.debug; - -public class SyntacticPredicateAdapter implements SyntacticPredicateListener { - - - public void doneParsing(TraceEvent e) {} - public void refresh() {} - public void syntacticPredicateFailed(SyntacticPredicateEvent e) {} - public void syntacticPredicateStarted(SyntacticPredicateEvent e) {} - public void syntacticPredicateSucceeded(SyntacticPredicateEvent e) {} -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateEvent.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateEvent.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateEvent.java 2006-02-08 22:31:31.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateEvent.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,19 +0,0 @@ -package persistence.antlr.debug; - -public class SyntacticPredicateEvent extends GuessingEvent { - - - public SyntacticPredicateEvent(Object source) { - super(source); - } - public SyntacticPredicateEvent(Object source, int type) { - super(source, type); - } - /** This should NOT be called from anyone other than ParserEventSupport! */ - void setValues(int type, int guessing) { - super.setValues(type, guessing); - } - public String toString() { - return "SyntacticPredicateEvent [" + getGuessing() + "]"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateListener.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateListener.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateListener.java 2006-02-08 22:31:31.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/SyntacticPredicateListener.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -package persistence.antlr.debug; - -public interface SyntacticPredicateListener extends ListenerBase { - - - public void syntacticPredicateFailed(SyntacticPredicateEvent e); - public void syntacticPredicateStarted(SyntacticPredicateEvent e); - public void syntacticPredicateSucceeded(SyntacticPredicateEvent e); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/TraceAdapter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/TraceAdapter.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/TraceAdapter.java 2006-02-08 22:31:32.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/TraceAdapter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -package persistence.antlr.debug; - -public class TraceAdapter implements TraceListener { - - - public void doneParsing(TraceEvent e) {} - public void enterRule(TraceEvent e) {} - public void exitRule(TraceEvent e) {} - public void refresh() {} -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/TraceEvent.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/TraceEvent.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/TraceEvent.java 2006-02-08 22:31:32.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/TraceEvent.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,41 +0,0 @@ -package persistence.antlr.debug; - -public class TraceEvent extends GuessingEvent { - private int ruleNum; - private int data; - public static int ENTER=0; - public static int EXIT=1; - public static int DONE_PARSING=2; - - - public TraceEvent(Object source) { - super(source); - } - public TraceEvent(Object source, int type, int ruleNum, int guessing, int data) { - super(source); - setValues(type, ruleNum, guessing, data); - } - public int getData() { - return data; - } - public int getRuleNum() { - return ruleNum; - } - void setData(int data) { - this.data = data; - } - void setRuleNum(int ruleNum) { - this.ruleNum = ruleNum; - } - /** This should NOT be called from anyone other than ParserEventSupport! */ - void setValues(int type, int ruleNum, int guessing, int data) { - super.setValues(type, guessing); - setRuleNum(ruleNum); - setData(data); - } - public String toString() { - return "ParserTraceEvent [" + - (getType()==ENTER?"enter,":"exit,") + - getRuleNum() + "," + getGuessing() +"]"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/TraceListener.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/TraceListener.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/TraceListener.java 2006-02-08 22:31:32.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/TraceListener.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -package persistence.antlr.debug; - -public interface TraceListener extends ListenerBase { - - - public void enterRule(TraceEvent e); - public void exitRule(TraceEvent e); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/debug/Tracer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/Tracer.java --- glassfish/entity-persistence/src/java/persistence/antlr/debug/Tracer.java 2006-02-08 22:31:32.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/debug/Tracer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -package persistence.antlr.debug; - -public class Tracer extends TraceAdapter implements TraceListener { - String indent=""; // TBD: should be StringBuffer - - - protected void dedent() { - if (indent.length() < 2) - indent = ""; - else - indent = indent.substring(2); - } - public void enterRule(TraceEvent e) { - System.out.println(indent+e); - indent(); - } - public void exitRule(TraceEvent e) { - dedent(); - System.out.println(indent+e); - } - protected void indent() { - indent += " "; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/DefaultFileLineFormatter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/DefaultFileLineFormatter.java --- glassfish/entity-persistence/src/java/persistence/antlr/DefaultFileLineFormatter.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/DefaultFileLineFormatter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,32 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public class DefaultFileLineFormatter extends FileLineFormatter { - public String getFormatString(String fileName, int line, int column) { - StringBuffer buf = new StringBuffer(); - - if (fileName != null) - buf.append(fileName + ":"); - - if (line != -1) { - if (fileName == null) - buf.append("line "); - - buf.append(line); - - if (column != -1) - buf.append(":" + column); - - buf.append(":"); - } - - buf.append(" "); - - return buf.toString(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/DefaultToolErrorHandler.java glassfish-gil/entity-persistence/src/java/persistence/antlr/DefaultToolErrorHandler.java --- glassfish/entity-persistence/src/java/persistence/antlr/DefaultToolErrorHandler.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/DefaultToolErrorHandler.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,118 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.BitSet; - -class DefaultToolErrorHandler implements ToolErrorHandler { - DefaultToolErrorHandler(persistence.antlr.Tool tool) { - antlrTool = tool; - } - private final persistence.antlr.Tool antlrTool; - - CharFormatter javaCharFormatter = new JavaCharFormatter(); - - /** Dump token/character sets to a string array suitable for - * {@link persistence.antlr.Tool.warning(String[], String, int, int) - * @param output The array that will contain the token/character set dump, - * one element per k (lookahead) value - * @param outputStartIndex The index into <code>output</code> that the - * dump should start at. - * @param lexicalAnalysis true for lexical rule - * @param depth The depth of the ambiguity - * @param sets An array of bitsets containing the ambiguities - */ - private void dumpSets(String[] output, - int outputStartIndex, - Grammar grammar, - boolean lexicalAnalysis, - int depth, - Lookahead[] sets) { - StringBuffer line = new StringBuffer(100); - for (int i = 1; i <= depth; i++) { - line.append("k==").append(i).append(':'); - if (lexicalAnalysis) { - String bits = sets[i].fset.toStringWithRanges(",", javaCharFormatter); - if (sets[i].containsEpsilon()) { - line.append("<end-of-token>"); - if (bits.length() > 0) { - line.append(','); - } - } - line.append(bits); - } else { - line.append(sets[i].fset.toString(",", grammar.tokenManager.getVocabulary())); - } - output[outputStartIndex++] = line.toString(); - line.setLength(0); - } - } - - /** Issue a warning about ambiguity between a alternates - * @param blk The block being analyzed - * @param lexicalAnalysis true for lexical rule - * @param depth The depth of the ambiguity - * @param sets An array of bitsets containing the ambiguities - * @param altIdx1 The zero-based index of the first ambiguous alternative - * @param altIdx2 The zero-based index of the second ambiguous alternative - */ - public void warnAltAmbiguity(Grammar grammar, - AlternativeBlock blk, - boolean lexicalAnalysis, - int depth, - Lookahead[] sets, - int altIdx1, - int altIdx2) - { - final StringBuffer line = new StringBuffer(100); - if (blk instanceof RuleBlock && ((RuleBlock)blk).isLexerAutoGenRule()) { - Alternative ai = blk.getAlternativeAt(altIdx1); - Alternative aj = blk.getAlternativeAt(altIdx2); - RuleRefElement rri = (RuleRefElement)ai.head; - RuleRefElement rrj = (RuleRefElement)aj.head; - String ri = CodeGenerator.reverseLexerRuleName(rri.targetRule); - String rj = CodeGenerator.reverseLexerRuleName(rrj.targetRule); - line.append("lexical nondeterminism between rules "); - line.append(ri).append(" and ").append(rj).append(" upon"); - } - else { - if (lexicalAnalysis) { - line.append("lexical "); - } - line.append("nondeterminism between alts "); - line.append(altIdx1 + 1).append(" and "); - line.append(altIdx2 + 1).append(" of block upon"); - } - final String [] output = new String [depth + 1];; - output[0] = line.toString(); - dumpSets(output, 1, grammar, lexicalAnalysis, depth, sets); - antlrTool.warning(output, grammar.getFilename(), blk.getLine(), blk.getColumn()); - - } - - /** Issue a warning about ambiguity between an alternate and exit path. - * @param blk The block being analyzed - * @param lexicalAnalysis true for lexical rule - * @param depth The depth of the ambiguity - * @param sets An array of bitsets containing the ambiguities - * @param altIdx The zero-based index of the ambiguous alternative - */ - public void warnAltExitAmbiguity(Grammar grammar, - BlockWithImpliedExitPath blk, - boolean lexicalAnalysis, - int depth, - Lookahead[] sets, - int altIdx - ) - { - String [] output = new String[depth + 2]; - output[0] = (lexicalAnalysis ? "lexical " : "") + "nondeterminism upon"; - dumpSets(output, 1, grammar, lexicalAnalysis, depth, sets); - output[depth + 1] = "between alt " + (altIdx + 1) + " and exit branch of block"; - antlrTool.warning(output, grammar.getFilename(), blk.getLine(), blk.getColumn()); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/DefineGrammarSymbols.java glassfish-gil/entity-persistence/src/java/persistence/antlr/DefineGrammarSymbols.java --- glassfish/entity-persistence/src/java/persistence/antlr/DefineGrammarSymbols.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/DefineGrammarSymbols.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,792 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Hashtable; - -import persistence.antlr.collections.impl.BitSet; - -/**DefineGrammarSymbols is a behavior for the ANTLRParser that adds all - * the token and rule symbols to the grammar symbol table. - * - * Token types are assigned to token symbols in this class also. - * The token type for a token is done in the order seen (lexically). - */ -public class DefineGrammarSymbols implements ANTLRGrammarParseBehavior { - // Contains all of the defined parser and lexer Grammar's indexed by name - protected Hashtable grammars = new Hashtable(); - // Contains all the TokenManagers indexed by name - protected Hashtable tokenManagers = new Hashtable(); - // Current grammar (parser or lexer) - protected Grammar grammar; - // The tool under which this is invoked - protected Tool tool; - // The grammar analyzer object - LLkAnalyzer analyzer; - // The command-line arguments passed to the tool. - // This allows each grammar to parse the arguments as it is created - String[] args; - // Name for default token manager does not match any valid name - static final String DEFAULT_TOKENMANAGER_NAME = "*default"; - // Header actions apply to all parsers unless redefined - // Contains all of the header actions indexed by name - protected Hashtable headerActions = new Hashtable(); - // Place where preamble is stored until a grammar is defined - Token thePreambleAction = new CommonToken(Token.INVALID_TYPE, ""); // init to empty token - // The target language - String language = "Java"; - - protected int numLexers = 0; - protected int numParsers = 0; - protected int numTreeParsers = 0; - - public DefineGrammarSymbols(Tool tool_, String[] args_, LLkAnalyzer analyzer_) { - tool = tool_; - args = args_; - analyzer = analyzer_; - } - - public void _refStringLiteral(Token lit, Token label, int autoGenType, boolean lastInRule) { - if (!(grammar instanceof LexerGrammar)) { - // String literals are treated like tokens except by the lexer - String str = lit.getText(); - if (grammar.tokenManager.getTokenSymbol(str) != null) { - // string symbol is already defined - return; - } - StringLiteralSymbol sl = new StringLiteralSymbol(str); - int tt = grammar.tokenManager.nextTokenType(); - sl.setTokenType(tt); - grammar.tokenManager.define(sl); - } - } - - /** Reference a token */ - public void _refToken(Token assignId, - Token t, - Token label, - Token args, - boolean inverted, - int autoGenType, - boolean lastInRule) { - String id = t.getText(); - if (!grammar.tokenManager.tokenDefined(id)) { - /* - // RK: dish out a warning if the token was not defined before. - tool.warning("Token '" + id + "' defined outside tokens section", - tool.grammarFile, t.getLine(), t.getColumn()); - */ - int tt = grammar.tokenManager.nextTokenType(); - TokenSymbol ts = new TokenSymbol(id); - ts.setTokenType(tt); - grammar.tokenManager.define(ts); - } - } - - /** Abort the processing of a grammar due to syntax errors */ - public void abortGrammar() { - if (grammar != null && grammar.getClassName() != null) { - grammars.remove(grammar.getClassName()); - } - grammar = null; - } - - public void beginAlt(boolean doAST_) { - } - - public void beginChildList() { - } - - // Exception handling - public void beginExceptionGroup() { - } - - public void beginExceptionSpec(Token label) { - } - - public void beginSubRule(Token label, Token start, boolean not) { - } - - public void beginTree(Token tok) throws SemanticException { - } - - /** Define a lexer or parser rule */ - public void defineRuleName(Token r, - String access, - boolean ruleAutoGen, - String docComment) - throws SemanticException { - String id = r.getText(); - - // if ( Character.isUpperCase(id.charAt(0)) ) { - if (r.type == ANTLRTokenTypes.TOKEN_REF) { - // lexer rule - id = CodeGenerator.encodeLexerRuleName(id); - // make sure we define it as token identifier also - if (!grammar.tokenManager.tokenDefined(r.getText())) { - int tt = grammar.tokenManager.nextTokenType(); - TokenSymbol ts = new TokenSymbol(r.getText()); - ts.setTokenType(tt); - grammar.tokenManager.define(ts); - } - } - - RuleSymbol rs; - if (grammar.isDefined(id)) { - // symbol seen before? - rs = (RuleSymbol)grammar.getSymbol(id); - // rule just referenced or has it been defined yet? - if (rs.isDefined()) { - tool.error("redefinition of rule " + id, grammar.getFilename(), r.getLine(), r.getColumn()); - } - } - else { - rs = new RuleSymbol(id); - grammar.define(rs); - } - rs.setDefined(); - rs.access = access; - rs.comment = docComment; - } - - /** Define a token from tokens {...}. - * Must be label and literal or just label or just a literal. - */ - public void defineToken(Token tokname, Token tokliteral) { - String name = null; - String literal = null; - if (tokname != null) { - name = tokname.getText(); - } - if (tokliteral != null) { - literal = tokliteral.getText(); - } - // System.out.println("defining " + name + " with literal " + literal); - // - if (literal != null) { - StringLiteralSymbol sl = (StringLiteralSymbol)grammar.tokenManager.getTokenSymbol(literal); - if (sl != null) { - // This literal is known already. - // If the literal has no label already, but we can provide - // one here, then no problem, just map the label to the literal - // and don't change anything else. - // Otherwise, labels conflict: error. - if (name == null || sl.getLabel() != null) { - tool.warning("Redefinition of literal in tokens {...}: " + literal, grammar.getFilename(), tokliteral.getLine(), tokliteral.getColumn()); - return; - } - else if (name != null) { - // The literal had no label, but new def does. Set it. - sl.setLabel(name); - // Also, map the label to the literal. - grammar.tokenManager.mapToTokenSymbol(name, sl); - } - } - // if they provide a name/label and that name/label already - // exists, just hook this literal onto old token. - if (name != null) { - TokenSymbol ts = (TokenSymbol)grammar.tokenManager.getTokenSymbol(name); - if (ts != null) { - // watch out that the label is not more than just a token. - // If it already has a literal attached, then: conflict. - if (ts instanceof StringLiteralSymbol) { - tool.warning("Redefinition of token in tokens {...}: " + name, grammar.getFilename(), tokliteral.getLine(), tokliteral.getColumn()); - return; - } - // a simple token symbol such as DECL is defined - // must convert it to a StringLiteralSymbol with a - // label by co-opting token type and killing old - // TokenSymbol. Kill mapping and entry in vector - // of token manager. - // First, claim token type. - int ttype = ts.getTokenType(); - // now, create string literal with label - sl = new StringLiteralSymbol(literal); - sl.setTokenType(ttype); - sl.setLabel(name); - // redefine this critter as a string literal - grammar.tokenManager.define(sl); - // make sure the label can be used also. - grammar.tokenManager.mapToTokenSymbol(name, sl); - return; - } - // here, literal was labeled but not by a known token symbol. - } - sl = new StringLiteralSymbol(literal); - int tt = grammar.tokenManager.nextTokenType(); - sl.setTokenType(tt); - sl.setLabel(name); - grammar.tokenManager.define(sl); - if (name != null) { - // make the label point at token symbol too - grammar.tokenManager.mapToTokenSymbol(name, sl); - } - } - - // create a token in the token manager not a literal - else { - if (grammar.tokenManager.tokenDefined(name)) { - tool.warning("Redefinition of token in tokens {...}: " + name, grammar.getFilename(), tokname.getLine(), tokname.getColumn()); - return; - } - int tt = grammar.tokenManager.nextTokenType(); - TokenSymbol ts = new TokenSymbol(name); - ts.setTokenType(tt); - grammar.tokenManager.define(ts); - } - } - - public void endAlt() { - } - - public void endChildList() { - } - - public void endExceptionGroup() { - } - - public void endExceptionSpec() { - } - - public void endGrammar() { - } - - /** Called after the optional options section, to compensate for - * options that may not have been set. - * This method is bigger than it needs to be, but is much more - * clear if I delineate all the cases. - */ - public void endOptions() { - // NO VOCAB OPTIONS - if (grammar.exportVocab == null && grammar.importVocab == null) { - grammar.exportVocab = grammar.getClassName(); - // Can we get initial vocab from default shared vocab? - if (tokenManagers.containsKey(DEFAULT_TOKENMANAGER_NAME)) { - // Use the already-defined token manager - grammar.exportVocab = DEFAULT_TOKENMANAGER_NAME; - TokenManager tm = (TokenManager)tokenManagers.get(DEFAULT_TOKENMANAGER_NAME); - // System.out.println("No tokenVocabulary for '" + grammar.getClassName() + "', using default '" + tm.getName() + "'"); - grammar.setTokenManager(tm); - return; - } - // no shared vocab for file, make new one - // System.out.println("No exportVocab for '" + grammar.getClassName() + "', creating default '" + grammar.exportVocab + "'"); - TokenManager tm = new SimpleTokenManager(grammar.exportVocab, tool); - grammar.setTokenManager(tm); - // Add the token manager to the list of token managers - tokenManagers.put(grammar.exportVocab, tm); - // no default vocab, so make this the default vocab - tokenManagers.put(DEFAULT_TOKENMANAGER_NAME, tm); - return; - } - - // NO OUTPUT, BUT HAS INPUT VOCAB - if (grammar.exportVocab == null && grammar.importVocab != null) { - grammar.exportVocab = grammar.getClassName(); - // first make sure input!=output - if (grammar.importVocab.equals(grammar.exportVocab)) { - tool.warning("Grammar " + grammar.getClassName() + - " cannot have importVocab same as default output vocab (grammar name); ignored."); - // kill importVocab option and try again: use default vocab - grammar.importVocab = null; - endOptions(); - return; - } - // check to see if the vocab is already in memory - // (defined by another grammar in the file). Not normal situation. - if (tokenManagers.containsKey(grammar.importVocab)) { - // make a copy since we'll be generating a new output vocab - // and we don't want to affect this one. Set the name to - // the default output vocab==classname. - TokenManager tm = (TokenManager)tokenManagers.get(grammar.importVocab); - // System.out.println("Duping importVocab of " + grammar.importVocab); - TokenManager dup = (TokenManager)tm.clone(); - dup.setName(grammar.exportVocab); - // System.out.println("Setting name to " + grammar.exportVocab); - dup.setReadOnly(false); - grammar.setTokenManager(dup); - tokenManagers.put(grammar.exportVocab, dup); - return; - } - // System.out.println("reading in vocab "+grammar.importVocab); - // Must be a file, go get it. - ImportVocabTokenManager tm = - new ImportVocabTokenManager(grammar, - grammar.importVocab + CodeGenerator.TokenTypesFileSuffix + CodeGenerator.TokenTypesFileExt, - grammar.exportVocab, - tool); - tm.setReadOnly(false); // since renamed, can write out - // Add this token manager to the list so its tokens will be generated - tokenManagers.put(grammar.exportVocab, tm); - // System.out.println("vocab renamed to default output vocab of "+tm.getName()); - // Assign the token manager to this grammar. - grammar.setTokenManager(tm); - - // set default vocab if none - if (!tokenManagers.containsKey(DEFAULT_TOKENMANAGER_NAME)) { - tokenManagers.put(DEFAULT_TOKENMANAGER_NAME, tm); - } - - return; - } - - // OUTPUT VOCAB, BUT NO INPUT VOCAB - if (grammar.exportVocab != null && grammar.importVocab == null) { - // share with previous vocab if it exists - if (tokenManagers.containsKey(grammar.exportVocab)) { - // Use the already-defined token manager - TokenManager tm = (TokenManager)tokenManagers.get(grammar.exportVocab); - // System.out.println("Sharing exportVocab of " + grammar.exportVocab); - grammar.setTokenManager(tm); - return; - } - // create new output vocab - // System.out.println("Creating exportVocab " + grammar.exportVocab); - TokenManager tm = new SimpleTokenManager(grammar.exportVocab, tool); - grammar.setTokenManager(tm); - // Add the token manager to the list of token managers - tokenManagers.put(grammar.exportVocab, tm); - // set default vocab if none - if (!tokenManagers.containsKey(DEFAULT_TOKENMANAGER_NAME)) { - tokenManagers.put(DEFAULT_TOKENMANAGER_NAME, tm); - } - return; - } - - // BOTH INPUT AND OUTPUT VOCAB - if (grammar.exportVocab != null && grammar.importVocab != null) { - // don't want input==output - if (grammar.importVocab.equals(grammar.exportVocab)) { - tool.error("exportVocab of " + grammar.exportVocab + " same as importVocab; probably not what you want"); - } - // does the input vocab already exist in memory? - if (tokenManagers.containsKey(grammar.importVocab)) { - // make a copy since we'll be generating a new output vocab - // and we don't want to affect this one. - TokenManager tm = (TokenManager)tokenManagers.get(grammar.importVocab); - // System.out.println("Duping importVocab of " + grammar.importVocab); - TokenManager dup = (TokenManager)tm.clone(); - dup.setName(grammar.exportVocab); - // System.out.println("Setting name to " + grammar.exportVocab); - dup.setReadOnly(false); - grammar.setTokenManager(dup); - tokenManagers.put(grammar.exportVocab, dup); - return; - } - // Must be a file, go get it. - ImportVocabTokenManager tm = - new ImportVocabTokenManager(grammar, - grammar.importVocab + CodeGenerator.TokenTypesFileSuffix + CodeGenerator.TokenTypesFileExt, - grammar.exportVocab, - tool); - tm.setReadOnly(false); // write it out as we've changed name - // Add this token manager to the list so its tokens will be generated - tokenManagers.put(grammar.exportVocab, tm); - // Assign the token manager to this grammar. - grammar.setTokenManager(tm); - - // set default vocab if none - if (!tokenManagers.containsKey(DEFAULT_TOKENMANAGER_NAME)) { - tokenManagers.put(DEFAULT_TOKENMANAGER_NAME, tm); - } - - return; - } - } - - public void endRule(String r) { - } - - public void endSubRule() { - } - - public void endTree() { - } - - public void hasError() { - } - - public void noASTSubRule() { - } - - public void oneOrMoreSubRule() { - } - - public void optionalSubRule() { - } - - public void setUserExceptions(String thr) { - } - - public void refAction(Token action) { - } - - public void refArgAction(Token action) { - } - - public void refCharLiteral(Token lit, Token label, boolean inverted, int autoGenType, boolean lastInRule) { - } - - public void refCharRange(Token t1, Token t2, Token label, int autoGenType, boolean lastInRule) { - } - - public void refElementOption(Token option, Token value) { - } - - public void refTokensSpecElementOption(Token tok, Token option, Token value) { - } - - public void refExceptionHandler(Token exTypeAndName, Token action) { - } - - // Header action applies to all parsers and lexers. - public void refHeaderAction(Token name, Token act) { - String key; - - if (name == null) - key = ""; - else - key = StringUtils.stripFrontBack(name.getText(), "\"", "\""); - - // FIXME: depending on the mode the inserted header actions should - // be checked for sanity. - if (headerActions.containsKey(key)) { - if (key.equals("")) - tool.error(act.getLine() + ": header action already defined"); - else - tool.error(act.getLine() + ": header action '" + key + "' already defined"); - } - headerActions.put(key, act); - } - - public String getHeaderAction(String name) { - Token t = (Token)headerActions.get(name); - if (t == null) { - return ""; - } - return t.getText(); - } - - public void refInitAction(Token action) { - } - - public void refMemberAction(Token act) { - } - - public void refPreambleAction(Token act) { - thePreambleAction = act; - } - - public void refReturnAction(Token returnAction) { - } - - public void refRule(Token idAssign, - Token r, - Token label, - Token args, - int autoGenType) { - String id = r.getText(); - // if ( Character.isUpperCase(id.charAt(0)) ) { // lexer rule? - if (r.type == ANTLRTokenTypes.TOKEN_REF) { - // lexer rule? - id = CodeGenerator.encodeLexerRuleName(id); - } - if (!grammar.isDefined(id)) { - grammar.define(new RuleSymbol(id)); - } - } - - public void refSemPred(Token pred) { - } - - public void refStringLiteral(Token lit, - Token label, - int autoGenType, - boolean lastInRule) { - _refStringLiteral(lit, label, autoGenType, lastInRule); - } - - /** Reference a token */ - public void refToken(Token assignId, Token t, Token label, Token args, - boolean inverted, int autoGenType, boolean lastInRule) { - _refToken(assignId, t, label, args, inverted, autoGenType, lastInRule); - } - - public void refTokenRange(Token t1, Token t2, Token label, int autoGenType, boolean lastInRule) { - // ensure that the DefineGrammarSymbols methods are called; otherwise a range addes more - // token refs to the alternative by calling MakeGrammar.refToken etc... - if (t1.getText().charAt(0) == '"') { - refStringLiteral(t1, null, GrammarElement.AUTO_GEN_NONE, lastInRule); - } - else { - _refToken(null, t1, null, null, false, GrammarElement.AUTO_GEN_NONE, lastInRule); - } - if (t2.getText().charAt(0) == '"') { - _refStringLiteral(t2, null, GrammarElement.AUTO_GEN_NONE, lastInRule); - } - else { - _refToken(null, t2, null, null, false, GrammarElement.AUTO_GEN_NONE, lastInRule); - } - } - - public void refTreeSpecifier(Token treeSpec) { - } - - public void refWildcard(Token t, Token label, int autoGenType) { - } - - /** Get ready to process a new grammar */ - public void reset() { - grammar = null; - } - - public void setArgOfRuleRef(Token argaction) { - } - - /** Set the character vocabulary for a lexer */ - public void setCharVocabulary(BitSet b) { - // grammar should enforce that this is only called for lexer - ((LexerGrammar)grammar).setCharVocabulary(b); - } - - /** setFileOption: Associate an option value with a key. - * This applies to options for an entire grammar file. - * @param key The token containing the option name - * @param value The token containing the option value. - */ - public void setFileOption(Token key, Token value, String filename) { - if (key.getText().equals("language")) { - if (value.getType() == ANTLRParser.STRING_LITERAL) { - language = StringUtils.stripBack(StringUtils.stripFront(value.getText(), '"'), '"'); - } - else if (value.getType() == ANTLRParser.TOKEN_REF || value.getType() == ANTLRParser.RULE_REF) { - language = value.getText(); - } - else { - tool.error("language option must be string or identifier", filename, value.getLine(), value.getColumn()); - } - } - else if (key.getText().equals("mangleLiteralPrefix")) { - if (value.getType() == ANTLRParser.STRING_LITERAL) { - tool.literalsPrefix = StringUtils.stripFrontBack(value.getText(), "\"", "\""); - } - else { - tool.error("mangleLiteralPrefix option must be string", filename, value.getLine(), value.getColumn()); - } - } - else if (key.getText().equals("upperCaseMangledLiterals")) { - if (value.getText().equals("true")) { - tool.upperCaseMangledLiterals = true; - } - else if (value.getText().equals("false")) { - tool.upperCaseMangledLiterals = false; - } - else { - grammar.antlrTool.error("Value for upperCaseMangledLiterals must be true or false", filename, key.getLine(), key.getColumn()); - } - } - else if ( key.getText().equals("namespaceStd") || - key.getText().equals("namespaceAntlr") || - key.getText().equals("genHashLines") - ) { - if (!language.equals("Cpp")) { - tool.error(key.getText() + " option only valid for C++", filename, key.getLine(), key.getColumn()); - } - else { - if (key.getText().equals("noConstructors")) { - if (!(value.getText().equals("true") || value.getText().equals("false"))) - tool.error("noConstructors option must be true or false", filename, value.getLine(), value.getColumn()); - tool.noConstructors = value.getText().equals("true"); - } else if (key.getText().equals("genHashLines")) { - if (!(value.getText().equals("true") || value.getText().equals("false"))) - tool.error("genHashLines option must be true or false", filename, value.getLine(), value.getColumn()); - tool.genHashLines = value.getText().equals("true"); - } - else { - if (value.getType() != ANTLRParser.STRING_LITERAL) { - tool.error(key.getText() + " option must be a string", filename, value.getLine(), value.getColumn()); - } - else { - if (key.getText().equals("namespaceStd")) - tool.namespaceStd = value.getText(); - else if (key.getText().equals("namespaceAntlr")) - tool.namespaceAntlr = value.getText(); - } - } - } - } - else if ( key.getText().equals("namespace") ) { - if ( !language.equals("Cpp") && !language.equals("CSharp") ) - { - tool.error(key.getText() + " option only valid for C++ and C# (a.k.a CSharp)", filename, key.getLine(), key.getColumn()); - } - else - { - if (value.getType() != ANTLRParser.STRING_LITERAL) - { - tool.error(key.getText() + " option must be a string", filename, value.getLine(), value.getColumn()); - } - else { - if (key.getText().equals("namespace")) - tool.setNameSpace(value.getText()); - } - } - } - else { - tool.error("Invalid file-level option: " + key.getText(), filename, key.getLine(), value.getColumn()); - } - } - - /** setGrammarOption: Associate an option value with a key. - * This function forwards to Grammar.setOption for some options. - * @param key The token containing the option name - * @param value The token containing the option value. - */ - public void setGrammarOption(Token key, Token value) { - if (key.getText().equals("tokdef") || key.getText().equals("tokenVocabulary")) { - tool.error("tokdef/tokenVocabulary options are invalid >= ANTLR 2.6.0.\n" + - " Use importVocab/exportVocab instead. Please see the documentation.\n" + - " The previous options were so heinous that Terence changed the whole\n" + - " vocabulary mechanism; it was better to change the names rather than\n" + - " subtly change the functionality of the known options. Sorry!", grammar.getFilename(), value.getLine(), value.getColumn()); - } - else if (key.getText().equals("literal") && - grammar instanceof LexerGrammar) { - tool.error("the literal option is invalid >= ANTLR 2.6.0.\n" + - " Use the \"tokens {...}\" mechanism instead.", - grammar.getFilename(), value.getLine(), value.getColumn()); - } - else if (key.getText().equals("exportVocab")) { - // Set the token manager associated with the parser - if (value.getType() == ANTLRParser.RULE_REF || value.getType() == ANTLRParser.TOKEN_REF) { - grammar.exportVocab = value.getText(); - } - else { - tool.error("exportVocab must be an identifier", grammar.getFilename(), value.getLine(), value.getColumn()); - } - } - else if (key.getText().equals("importVocab")) { - if (value.getType() == ANTLRParser.RULE_REF || value.getType() == ANTLRParser.TOKEN_REF) { - grammar.importVocab = value.getText(); - } - else { - tool.error("importVocab must be an identifier", grammar.getFilename(), value.getLine(), value.getColumn()); - } - } - else { - // Forward all unrecognized options to the grammar - grammar.setOption(key.getText(), value); - } - } - - public void setRuleOption(Token key, Token value) { - } - - public void setSubruleOption(Token key, Token value) { - } - - /** Start a new lexer */ - public void startLexer(String file, Token name, String superClass, String doc) { - if (numLexers > 0) { - tool.panic("You may only have one lexer per grammar file: class " + name.getText()); - } - numLexers++; - reset(); - //System.out.println("Processing lexer '" + name.getText() + "'"); - // Does the lexer already exist? - Grammar g = (Grammar)grammars.get(name); - if (g != null) { - if (!(g instanceof LexerGrammar)) { - tool.panic("'" + name.getText() + "' is already defined as a non-lexer"); - } - else { - tool.panic("Lexer '" + name.getText() + "' is already defined"); - } - } - else { - // Create a new lexer grammar - LexerGrammar lg = new LexerGrammar(name.getText(), tool, superClass); - lg.comment = doc; - lg.processArguments(args); - lg.setFilename(file); - grammars.put(lg.getClassName(), lg); - // Use any preamble action - lg.preambleAction = thePreambleAction; - thePreambleAction = new CommonToken(Token.INVALID_TYPE, ""); - // This is now the current grammar - grammar = lg; - } - } - - /** Start a new parser */ - public void startParser(String file, Token name, String superClass, String doc) { - if (numParsers > 0) { - tool.panic("You may only have one parser per grammar file: class " + name.getText()); - } - numParsers++; - reset(); - //System.out.println("Processing parser '" + name.getText() + "'"); - // Is this grammar already defined? - Grammar g = (Grammar)grammars.get(name); - if (g != null) { - if (!(g instanceof ParserGrammar)) { - tool.panic("'" + name.getText() + "' is already defined as a non-parser"); - } - else { - tool.panic("Parser '" + name.getText() + "' is already defined"); - } - } - else { - // Create a new grammar - grammar = new ParserGrammar(name.getText(), tool, superClass); - grammar.comment = doc; - grammar.processArguments(args); - grammar.setFilename(file); - grammars.put(grammar.getClassName(), grammar); - // Use any preamble action - grammar.preambleAction = thePreambleAction; - thePreambleAction = new CommonToken(Token.INVALID_TYPE, ""); - } - } - - /** Start a new tree-walker */ - public void startTreeWalker(String file, Token name, String superClass, String doc) { - if (numTreeParsers > 0) { - tool.panic("You may only have one tree parser per grammar file: class " + name.getText()); - } - numTreeParsers++; - reset(); - //System.out.println("Processing tree-walker '" + name.getText() + "'"); - // Is this grammar already defined? - Grammar g = (Grammar)grammars.get(name); - if (g != null) { - if (!(g instanceof TreeWalkerGrammar)) { - tool.panic("'" + name.getText() + "' is already defined as a non-tree-walker"); - } - else { - tool.panic("Tree-walker '" + name.getText() + "' is already defined"); - } - } - else { - // Create a new grammar - grammar = new TreeWalkerGrammar(name.getText(), tool, superClass); - grammar.comment = doc; - grammar.processArguments(args); - grammar.setFilename(file); - grammars.put(grammar.getClassName(), grammar); - // Use any preamble action - grammar.preambleAction = thePreambleAction; - thePreambleAction = new CommonToken(Token.INVALID_TYPE, ""); - } - } - - public void synPred() { - } - - public void zeroOrMoreSubRule() { - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/DiagnosticCodeGenerator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/DiagnosticCodeGenerator.java --- glassfish/entity-persistence/src/java/persistence/antlr/DiagnosticCodeGenerator.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/DiagnosticCodeGenerator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,920 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Enumeration; - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; - -import java.io.PrintWriter; //SAS: changed for proper text file io -import java.io.IOException; -import java.io.FileWriter; - -/**Generate MyParser.txt, MyLexer.txt and MyParserTokenTypes.txt */ -public class DiagnosticCodeGenerator extends CodeGenerator { - /** non-zero if inside syntactic predicate generation */ - protected int syntacticPredLevel = 0; - - /** true during lexer generation, false during parser generation */ - protected boolean doingLexRules = false; - - /** Create a Diagnostic code-generator using the given Grammar - * The caller must still call setTool, setBehavior, and setAnalyzer - * before generating code. - */ - public DiagnosticCodeGenerator() { - super(); - charFormatter = new JavaCharFormatter(); - } - - /**Generate the parser, lexer, and token types documentation */ - public void gen() { - - // Do the code generation - try { - // Loop over all grammars - Enumeration grammarIter = behavior.grammars.elements(); - while (grammarIter.hasMoreElements()) { - Grammar g = (Grammar)grammarIter.nextElement(); - - // Connect all the components to each other - g.setGrammarAnalyzer(analyzer); - g.setCodeGenerator(this); - analyzer.setGrammar(g); - - // To get right overloading behavior across hetrogeneous grammars - g.generate(); - - if (antlrTool.hasError()) { - antlrTool.panic("Exiting due to errors."); - } - - } - - // Loop over all token managers (some of which are lexers) - Enumeration tmIter = behavior.tokenManagers.elements(); - while (tmIter.hasMoreElements()) { - TokenManager tm = (TokenManager)tmIter.nextElement(); - if (!tm.isReadOnly()) { - // Write the token manager tokens as Java - genTokenTypes(tm); - } - } - } - catch (IOException e) { - antlrTool.reportException(e, null); - } - } - - /** Generate code for the given grammar element. - * @param blk The {...} action to generate - */ - public void gen(ActionElement action) { - if (action.isSemPred) { - // handled elsewhere - } - else { - print("ACTION: "); - _printAction(action.actionText); - } - } - - /** Generate code for the given grammar element. - * @param blk The "x|y|z|..." block to generate - */ - public void gen(AlternativeBlock blk) { - println("Start of alternative block."); - tabs++; - genBlockPreamble(blk); - - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - if (!ok) { - println("Warning: This alternative block is non-deterministic"); - } - genCommonBlock(blk); - tabs--; - } - - /** Generate code for the given grammar element. - * @param blk The block-end element to generate. Block-end - * elements are synthesized by the grammar parser to represent - * the end of a block. - */ - public void gen(BlockEndElement end) { - // no-op - } - - /** Generate code for the given grammar element. - * @param blk The character literal reference to generate - */ - public void gen(CharLiteralElement atom) { - print("Match character "); - if (atom.not) { - _print("NOT "); - } - _print(atom.atomText); - if (atom.label != null) { - _print(", label=" + atom.label); - } - _println(""); - } - - /** Generate code for the given grammar element. - * @param blk The character-range reference to generate - */ - public void gen(CharRangeElement r) { - print("Match character range: " + r.beginText + ".." + r.endText); - if (r.label != null) { - _print(", label = " + r.label); - } - _println(""); - } - - /** Generate the lexer TXT file */ - public void gen(LexerGrammar g) throws IOException { - setGrammar(g); - antlrTool.reportProgress("Generating " + grammar.getClassName() + TokenTypesFileExt); - currentOutput = antlrTool.openOutputFile(grammar.getClassName() + TokenTypesFileExt); - //SAS: changed for proper text file io - - tabs = 0; - doingLexRules = true; - - // Generate header common to all TXT output files - genHeader(); - - // Output the user-defined lexer premamble - println(""); - println("*** Lexer Preamble Action."); - println("This action will appear before the declaration of your lexer class:"); - tabs++; - println(grammar.preambleAction.getText()); - tabs--; - println("*** End of Lexer Preamble Action"); - - // Generate lexer class definition - println(""); - println("*** Your lexer class is called '" + grammar.getClassName() + "' and is a subclass of '" + grammar.getSuperClass() + "'."); - - // Generate user-defined parser class members - println(""); - println("*** User-defined lexer class members:"); - println("These are the member declarations that you defined for your class:"); - tabs++; - printAction(grammar.classMemberAction.getText()); - tabs--; - println("*** End of user-defined lexer class members"); - - // Generate string literals - println(""); - println("*** String literals used in the parser"); - println("The following string literals were used in the parser."); - println("An actual code generator would arrange to place these literals"); - println("into a table in the generated lexer, so that actions in the"); - println("generated lexer could match token text against the literals."); - println("String literals used in the lexer are not listed here, as they"); - println("are incorporated into the mainstream lexer processing."); - tabs++; - // Enumerate all of the symbols and look for string literal symbols - Enumeration ids = grammar.getSymbols(); - while (ids.hasMoreElements()) { - GrammarSymbol sym = (GrammarSymbol)ids.nextElement(); - // Only processing string literals -- reject other symbol entries - if (sym instanceof StringLiteralSymbol) { - StringLiteralSymbol s = (StringLiteralSymbol)sym; - println(s.getId() + " = " + s.getTokenType()); - } - } - tabs--; - println("*** End of string literals used by the parser"); - - // Generate nextToken() rule. - // nextToken() is a synthetic lexer rule that is the implicit OR of all - // user-defined lexer rules. - genNextToken(); - - // Generate code for each rule in the lexer - println(""); - println("*** User-defined Lexer rules:"); - tabs++; - - ids = grammar.rules.elements(); - while (ids.hasMoreElements()) { - RuleSymbol rs = (RuleSymbol)ids.nextElement(); - if (!rs.id.equals("mnextToken")) { - genRule(rs); - } - } - - tabs--; - println(""); - println("*** End User-defined Lexer rules:"); - - // Close the lexer output file - currentOutput.close(); - currentOutput = null; - doingLexRules = false; - } - - /** Generate code for the given grammar element. - * @param blk The (...)+ block to generate - */ - public void gen(OneOrMoreBlock blk) { - println("Start ONE-OR-MORE (...)+ block:"); - tabs++; - genBlockPreamble(blk); - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - if (!ok) { - println("Warning: This one-or-more block is non-deterministic"); - } - genCommonBlock(blk); - tabs--; - println("End ONE-OR-MORE block."); - } - - /** Generate the parser TXT file */ - public void gen(ParserGrammar g) throws IOException { - setGrammar(g); - // Open the output stream for the parser and set the currentOutput - antlrTool.reportProgress("Generating " + grammar.getClassName() + TokenTypesFileExt); - currentOutput = antlrTool.openOutputFile(grammar.getClassName() + TokenTypesFileExt); - //SAS: changed for proper text file io - - tabs = 0; - - // Generate the header common to all output files. - genHeader(); - - // Output the user-defined parser premamble - println(""); - println("*** Parser Preamble Action."); - println("This action will appear before the declaration of your parser class:"); - tabs++; - println(grammar.preambleAction.getText()); - tabs--; - println("*** End of Parser Preamble Action"); - - // Generate parser class definition - println(""); - println("*** Your parser class is called '" + grammar.getClassName() + "' and is a subclass of '" + grammar.getSuperClass() + "'."); - - // Generate user-defined parser class members - println(""); - println("*** User-defined parser class members:"); - println("These are the member declarations that you defined for your class:"); - tabs++; - printAction(grammar.classMemberAction.getText()); - tabs--; - println("*** End of user-defined parser class members"); - - // Generate code for each rule in the grammar - println(""); - println("*** Parser rules:"); - tabs++; - - // Enumerate the parser rules - Enumeration rules = grammar.rules.elements(); - while (rules.hasMoreElements()) { - println(""); - // Get the rules from the list and downcast it to proper type - GrammarSymbol sym = (GrammarSymbol)rules.nextElement(); - // Only process parser rules - if (sym instanceof RuleSymbol) { - genRule((RuleSymbol)sym); - } - } - tabs--; - println(""); - println("*** End of parser rules"); - - println(""); - println("*** End of parser"); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - - /** Generate code for the given grammar element. - * @param blk The rule-reference to generate - */ - public void gen(RuleRefElement rr) { - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rr.targetRule); - - // Generate the actual rule description - print("Rule Reference: " + rr.targetRule); - if (rr.idAssign != null) { - _print(", assigned to '" + rr.idAssign + "'"); - } - if (rr.args != null) { - _print(", arguments = " + rr.args); - } - _println(""); - - // Perform diagnostics - if (rs == null || !rs.isDefined()) { - println("Rule '" + rr.targetRule + "' is referenced, but that rule is not defined."); - println("\tPerhaps the rule is misspelled, or you forgot to define it."); - return; - } - if (!(rs instanceof RuleSymbol)) { - // Should this ever happen?? - println("Rule '" + rr.targetRule + "' is referenced, but that is not a grammar rule."); - return; - } - if (rr.idAssign != null) { - // Warn if the rule has no return type - if (rs.block.returnAction == null) { - println("Error: You assigned from Rule '" + rr.targetRule + "', but that rule has no return type."); - } - } - else { - // Warn about return value if any, but not inside syntactic predicate - if (!(grammar instanceof LexerGrammar) && syntacticPredLevel == 0 && rs.block.returnAction != null) { - println("Warning: Rule '" + rr.targetRule + "' returns a value"); - } - } - if (rr.args != null && rs.block.argAction == null) { - println("Error: Rule '" + rr.targetRule + "' accepts no arguments."); - } - } - - /** Generate code for the given grammar element. - * @param blk The string-literal reference to generate - */ - public void gen(StringLiteralElement atom) { - print("Match string literal "); - _print(atom.atomText); - if (atom.label != null) { - _print(", label=" + atom.label); - } - _println(""); - } - - /** Generate code for the given grammar element. - * @param blk The token-range reference to generate - */ - public void gen(TokenRangeElement r) { - print("Match token range: " + r.beginText + ".." + r.endText); - if (r.label != null) { - _print(", label = " + r.label); - } - _println(""); - } - - /** Generate code for the given grammar element. - * @param blk The token-reference to generate - */ - public void gen(TokenRefElement atom) { - print("Match token "); - if (atom.not) { - _print("NOT "); - } - _print(atom.atomText); - if (atom.label != null) { - _print(", label=" + atom.label); - } - _println(""); - } - - public void gen(TreeElement t) { - print("Tree reference: " + t); - } - - /** Generate the tree-walker TXT file */ - public void gen(TreeWalkerGrammar g) throws IOException { - setGrammar(g); - // Open the output stream for the parser and set the currentOutput - antlrTool.reportProgress("Generating " + grammar.getClassName() + TokenTypesFileExt); - currentOutput = antlrTool.openOutputFile(grammar.getClassName() + TokenTypesFileExt); - //SAS: changed for proper text file io - - tabs = 0; - - // Generate the header common to all output files. - genHeader(); - - // Output the user-defined parser premamble - println(""); - println("*** Tree-walker Preamble Action."); - println("This action will appear before the declaration of your tree-walker class:"); - tabs++; - println(grammar.preambleAction.getText()); - tabs--; - println("*** End of tree-walker Preamble Action"); - - // Generate tree-walker class definition - println(""); - println("*** Your tree-walker class is called '" + grammar.getClassName() + "' and is a subclass of '" + grammar.getSuperClass() + "'."); - - // Generate user-defined tree-walker class members - println(""); - println("*** User-defined tree-walker class members:"); - println("These are the member declarations that you defined for your class:"); - tabs++; - printAction(grammar.classMemberAction.getText()); - tabs--; - println("*** End of user-defined tree-walker class members"); - - // Generate code for each rule in the grammar - println(""); - println("*** tree-walker rules:"); - tabs++; - - // Enumerate the tree-walker rules - Enumeration rules = grammar.rules.elements(); - while (rules.hasMoreElements()) { - println(""); - // Get the rules from the list and downcast it to proper type - GrammarSymbol sym = (GrammarSymbol)rules.nextElement(); - // Only process tree-walker rules - if (sym instanceof RuleSymbol) { - genRule((RuleSymbol)sym); - } - } - tabs--; - println(""); - println("*** End of tree-walker rules"); - - println(""); - println("*** End of tree-walker"); - - // Close the tree-walker output stream - currentOutput.close(); - currentOutput = null; - } - - /** Generate a wildcard element */ - public void gen(WildcardElement wc) { - print("Match wildcard"); - if (wc.getLabel() != null) { - _print(", label = " + wc.getLabel()); - } - _println(""); - } - - /** Generate code for the given grammar element. - * @param blk The (...)* block to generate - */ - public void gen(ZeroOrMoreBlock blk) { - println("Start ZERO-OR-MORE (...)+ block:"); - tabs++; - genBlockPreamble(blk); - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - if (!ok) { - println("Warning: This zero-or-more block is non-deterministic"); - } - genCommonBlock(blk); - tabs--; - println("End ZERO-OR-MORE block."); - } - - protected void genAlt(Alternative alt) { - for ( - AlternativeElement elem = alt.head; - !(elem instanceof BlockEndElement); - elem = elem.next - ) { - elem.generate(); - } - if (alt.getTreeSpecifier() != null) { - println("AST will be built as: " + alt.getTreeSpecifier().getText()); - } - } - - /** Generate the header for a block, which may be a RuleBlock or a - * plain AlternativeBLock. This generates any variable declarations, - * init-actions, and syntactic-predicate-testing variables. - * @blk The block for which the preamble is to be generated. - */ - protected void genBlockPreamble(AlternativeBlock blk) { - // dump out init action - if (blk.initAction != null) { - printAction("Init action: " + blk.initAction); - } - } - - /**Generate common code for a block of alternatives; return a postscript - * that needs to be generated at the end of the block. Other routines - * may append else-clauses and such for error checking before the postfix - * is generated. - */ - public void genCommonBlock(AlternativeBlock blk) { - boolean singleAlt = (blk.alternatives.size() == 1); - - println("Start of an alternative block."); - tabs++; - println("The lookahead set for this block is:"); - tabs++; - genLookaheadSetForBlock(blk); - tabs--; - - if (singleAlt) { - println("This block has a single alternative"); - if (blk.getAlternativeAt(0).synPred != null) { - // Generate a warning if there is one alt and it has a synPred - println("Warning: you specified a syntactic predicate for this alternative,"); - println("and it is the only alternative of a block and will be ignored."); - } - } - else { - println("This block has multiple alternatives:"); - tabs++; - } - - for (int i = 0; i < blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - AlternativeElement elem = alt.head; - - // Print lookahead set for alternate - println(""); - if (i != 0) { - print("Otherwise, "); - } - else { - print(""); - } - _println("Alternate(" + (i + 1) + ") will be taken IF:"); - println("The lookahead set: "); - tabs++; - genLookaheadSetForAlt(alt); - tabs--; - if (alt.semPred != null || alt.synPred != null) { - print("is matched, AND "); - } - else { - println("is matched."); - } - - // Dump semantic predicates - if (alt.semPred != null) { - _println("the semantic predicate:"); - tabs++; - println(alt.semPred); - if (alt.synPred != null) { - print("is true, AND "); - } - else { - println("is true."); - } - } - - // Dump syntactic predicate - if (alt.synPred != null) { - _println("the syntactic predicate:"); - tabs++; - genSynPred(alt.synPred); - tabs--; - println("is matched."); - } - - // Dump the alternative - genAlt(alt); - } - println(""); - println("OTHERWISE, a NoViableAlt exception will be thrown"); - println(""); - - if (!singleAlt) { - tabs--; - println("End of alternatives"); - } - tabs--; - println("End of alternative block."); - } - - /** Generate a textual representation of the follow set - * for a block. - * @param blk The rule block of interest - */ - public void genFollowSetForRuleBlock(RuleBlock blk) { - Lookahead follow = grammar.theLLkAnalyzer.FOLLOW(1, blk.endNode); - printSet(grammar.maxk, 1, follow); - } - - /** Generate a header that is common to all TXT files */ - protected void genHeader() { - println("ANTLR-generated file resulting from grammar " + antlrTool.grammarFile); - println("Diagnostic output"); - println(""); - println("Terence Parr, MageLang Institute"); - println("with John Lilley, Empathy Software"); - println("ANTLR Version " + antlrTool.version + "; 1996,1997"); - println(""); - println("*** Header Action."); - println("This action will appear at the top of all generated files."); - tabs++; - printAction(behavior.getHeaderAction("")); - tabs--; - println("*** End of Header Action"); - println(""); - } - - /**Generate the lookahead set for an alternate. */ - protected void genLookaheadSetForAlt(Alternative alt) { - if (doingLexRules && alt.cache[1].containsEpsilon()) { - println("MATCHES ALL"); - return; - } - int depth = alt.lookaheadDepth; - if (depth == GrammarAnalyzer.NONDETERMINISTIC) { - // if the decision is nondeterministic, do the best we can: LL(k) - // any predicates that are around will be generated later. - depth = grammar.maxk; - } - for (int i = 1; i <= depth; i++) { - Lookahead lookahead = alt.cache[i]; - printSet(depth, i, lookahead); - } - } - - /** Generate a textual representation of the lookahead set - * for a block. - * @param blk The block of interest - */ - public void genLookaheadSetForBlock(AlternativeBlock blk) { - // Find the maximal lookahead depth over all alternatives - int depth = 0; - for (int i = 0; i < blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - if (alt.lookaheadDepth == GrammarAnalyzer.NONDETERMINISTIC) { - depth = grammar.maxk; - break; - } - else if (depth < alt.lookaheadDepth) { - depth = alt.lookaheadDepth; - } - } - - for (int i = 1; i <= depth; i++) { - Lookahead lookahead = grammar.theLLkAnalyzer.look(i, blk); - printSet(depth, i, lookahead); - } - } - - /** Generate the nextToken rule. - * nextToken is a synthetic lexer rule that is the implicit OR of all - * user-defined lexer rules. - */ - public void genNextToken() { - println(""); - println("*** Lexer nextToken rule:"); - println("The lexer nextToken rule is synthesized from all of the user-defined"); - println("lexer rules. It logically consists of one big alternative block with"); - println("each user-defined rule being an alternative."); - println(""); - - // Create the synthesized rule block for nextToken consisting - // of an alternate block containing all the user-defined lexer rules. - RuleBlock blk = MakeGrammar.createNextTokenRule(grammar, grammar.rules, "nextToken"); - - // Define the nextToken rule symbol - RuleSymbol nextTokenRs = new RuleSymbol("mnextToken"); - nextTokenRs.setDefined(); - nextTokenRs.setBlock(blk); - nextTokenRs.access = "private"; - grammar.define(nextTokenRs); - - // Analyze the synthesized block - if (!grammar.theLLkAnalyzer.deterministic(blk)) { - println("The grammar analyzer has determined that the synthesized"); - println("nextToken rule is non-deterministic (i.e., it has ambiguities)"); - println("This means that there is some overlap of the character"); - println("lookahead for two or more of your lexer rules."); - } - - genCommonBlock(blk); - - println("*** End of nextToken lexer rule."); - } - - /** Generate code for a named rule block - * @param s The RuleSymbol describing the rule to generate - */ - public void genRule(RuleSymbol s) { - println(""); - String ruleType = (doingLexRules ? "Lexer" : "Parser"); - println("*** " + ruleType + " Rule: " + s.getId()); - if (!s.isDefined()) { - println("This rule is undefined."); - println("This means that the rule was referenced somewhere in the grammar,"); - println("but a definition for the rule was not encountered."); - println("It is also possible that syntax errors during the parse of"); - println("your grammar file prevented correct processing of the rule."); - println("*** End " + ruleType + " Rule: " + s.getId()); - return; - } - tabs++; - - if (s.access.length() != 0) { - println("Access: " + s.access); - } - - // Get rule return type and arguments - RuleBlock rblk = s.getBlock(); - - // Gen method return value(s) - if (rblk.returnAction != null) { - println("Return value(s): " + rblk.returnAction); - if (doingLexRules) { - println("Error: you specified return value(s) for a lexical rule."); - println("\tLexical rules have an implicit return type of 'int'."); - } - } - else { - if (doingLexRules) { - println("Return value: lexical rule returns an implicit token type"); - } - else { - println("Return value: none"); - } - } - - // Gen arguments - if (rblk.argAction != null) { - println("Arguments: " + rblk.argAction); - } - - // Dump any init-action - genBlockPreamble(rblk); - - // Analyze the rule - boolean ok = grammar.theLLkAnalyzer.deterministic(rblk); - if (!ok) { - println("Error: This rule is non-deterministic"); - } - - // Dump the alternates of the rule - genCommonBlock(rblk); - - // Search for an unlabeled exception specification attached to the rule - ExceptionSpec unlabeledUserSpec = rblk.findExceptionSpec(""); - - // Generate user-defined or default catch phrases - if (unlabeledUserSpec != null) { - println("You specified error-handler(s) for this rule:"); - tabs++; - for (int i = 0; i < unlabeledUserSpec.handlers.size(); i++) { - if (i != 0) { - println(""); - } - - ExceptionHandler handler = (ExceptionHandler)unlabeledUserSpec.handlers.elementAt(i); - println("Error-handler(" + (i + 1) + ") catches [" + handler.exceptionTypeAndName.getText() + "] and executes:"); - printAction(handler.action.getText()); - } - tabs--; - println("End error-handlers."); - } - else if (!doingLexRules) { - println("Default error-handling will be generated, which catches all"); - println("parser exceptions and consumes tokens until the follow-set is seen."); - } - - // Dump the follow set - // Doesn't seem to work for lexical rules... - if (!doingLexRules) { - println("The follow set for this rule is:"); - tabs++; - genFollowSetForRuleBlock(rblk); - tabs--; - } - - tabs--; - println("*** End " + ruleType + " Rule: " + s.getId()); - } - - /** Generate the syntactic predicate. This basically generates - * the alternative block, buts tracks if we are inside a synPred - * @param blk The syntactic predicate block - */ - protected void genSynPred(SynPredBlock blk) { - syntacticPredLevel++; - gen((AlternativeBlock)blk); - syntacticPredLevel--; - } - - /** Generate the token types TXT file */ - protected void genTokenTypes(TokenManager tm) throws IOException { - // Open the token output TXT file and set the currentOutput stream - antlrTool.reportProgress("Generating " + tm.getName() + TokenTypesFileSuffix + TokenTypesFileExt); - currentOutput = antlrTool.openOutputFile(tm.getName() + TokenTypesFileSuffix + TokenTypesFileExt); - //SAS: changed for proper text file io - tabs = 0; - - // Generate the header common to all diagnostic files - genHeader(); - - // Generate a string for each token. This creates a static - // array of Strings indexed by token type. - println(""); - println("*** Tokens used by the parser"); - println("This is a list of the token numeric values and the corresponding"); - println("token identifiers. Some tokens are literals, and because of that"); - println("they have no identifiers. Literals are double-quoted."); - tabs++; - - // Enumerate all the valid token types - Vector v = tm.getVocabulary(); - for (int i = Token.MIN_USER_TYPE; i < v.size(); i++) { - String s = (String)v.elementAt(i); - if (s != null) { - println(s + " = " + i); - } - } - - // Close the interface - tabs--; - println("*** End of tokens used by the parser"); - - // Close the tokens output file - currentOutput.close(); - currentOutput = null; - } - - /** Get a string for an expression to generate creation of an AST subtree. - * @param v A Vector of String, where each element is an expression in the target language yielding an AST node. - */ - public String getASTCreateString(Vector v) { - return "***Create an AST from a vector here***" + System.getProperty("line.separator"); - } - - /** Get a string for an expression to generate creating of an AST node - * @param str The arguments to the AST constructor - */ - public String getASTCreateString(GrammarAtom atom, String str) { - return "[" + str + "]"; - } - - /// unused. - protected String processActionForSpecialSymbols(String actionStr, - int line, - RuleBlock currentRule, - ActionTransInfo tInfo) { - return actionStr; - } - - /** Map an identifier to it's corresponding tree-node variable. - * This is context-sensitive, depending on the rule and alternative - * being generated - * @param id The identifier name to map - * @param forInput true if the input tree node variable is to be returned, otherwise the output variable is returned. - */ - public String mapTreeId(String id, ActionTransInfo tInfo) { - return id; - } - - /** Format a lookahead or follow set. - * @param depth The depth of the entire lookahead/follow - * @param k The lookahead level to print - * @param lookahead The lookahead/follow set to print - */ - public void printSet(int depth, int k, Lookahead lookahead) { - int numCols = 5; - - int[] elems = lookahead.fset.toArray(); - - if (depth != 1) { - print("k==" + k + ": {"); - } - else { - print("{ "); - } - if (elems.length > numCols) { - _println(""); - tabs++; - print(""); - } - - int column = 0; - for (int i = 0; i < elems.length; i++) { - column++; - if (column > numCols) { - _println(""); - print(""); - column = 0; - } - if (doingLexRules) { - _print(charFormatter.literalChar(elems[i])); - } - else { - _print((String)grammar.tokenManager.getVocabulary().elementAt(elems[i])); - } - if (i != elems.length - 1) { - _print(", "); - } - } - - if (elems.length > numCols) { - _println(""); - tabs--; - print(""); - } - _println(" }"); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/DocBookCodeGenerator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/DocBookCodeGenerator.java --- glassfish/entity-persistence/src/java/persistence/antlr/DocBookCodeGenerator.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/DocBookCodeGenerator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,822 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** TODO: strip comments from javadoc entries - */ - -import java.util.Enumeration; - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; - -import java.io.PrintWriter; //SAS: changed for proper text file io -import java.io.IOException; -import java.io.FileWriter; - -/**Generate P.sgml, a cross-linked representation of P with or without actions */ -public class DocBookCodeGenerator extends CodeGenerator { - /** non-zero if inside syntactic predicate generation */ - protected int syntacticPredLevel = 0; - - /** true during lexer generation, false during parser generation */ - protected boolean doingLexRules = false; - - protected boolean firstElementInAlt; - - protected AlternativeElement prevAltElem = null; // what was generated last? - - /** Create a Diagnostic code-generator using the given Grammar - * The caller must still call setTool, setBehavior, and setAnalyzer - * before generating code. - */ - public DocBookCodeGenerator() { - super(); - charFormatter = new JavaCharFormatter(); - } - - /** Encode a string for printing in a HTML document.. - * e.g. encode '<' '>' and similar stuff - * @param s the string to encode - */ - static String HTMLEncode(String s) { - StringBuffer buf = new StringBuffer(); - - for (int i = 0, len = s.length(); i < len; i++) { - char c = s.charAt(i); - if (c == '&') - buf.append("&"); - else if (c == '\"') - buf.append("""); - else if (c == '\'') - buf.append("'"); - else if (c == '<') - buf.append("<"); - else if (c == '>') - buf.append(">"); - else - buf.append(c); - } - return buf.toString(); - } - - /** Encode a string for printing in a HTML document.. - * e.g. encode '<' '>' and similar stuff - * @param s the string to encode - */ - static String QuoteForId(String s) { - StringBuffer buf = new StringBuffer(); - - for (int i = 0, len = s.length(); i < len; i++) { - char c = s.charAt(i); - if (c == '_') - buf.append("."); - else - buf.append(c); - } - return buf.toString(); - } - - public void gen() { - // Do the code generation - try { - // Loop over all grammars - Enumeration grammarIter = behavior.grammars.elements(); - while (grammarIter.hasMoreElements()) { - Grammar g = (Grammar)grammarIter.nextElement(); - - // Connect all the components to each other - /* - g.setGrammarAnalyzer(analyzer); - analyzer.setGrammar(g); - */ - g.setCodeGenerator(this); - - // To get right overloading behavior across hetrogeneous grammars - g.generate(); - - if (antlrTool.hasError()) { - antlrTool.fatalError("Exiting due to errors."); - } - - } - - } - catch (IOException e) { - antlrTool.reportException(e, null); - } - } - - /** Generate code for the given grammar element. - * @param blk The {...} action to generate - */ - public void gen(ActionElement action) { - // no-op - } - - /** Generate code for the given grammar element. - * @param blk The "x|y|z|..." block to generate - */ - public void gen(AlternativeBlock blk) { - genGenericBlock(blk, ""); - } - - /** Generate code for the given grammar element. - * @param blk The block-end element to generate. Block-end - * elements are synthesized by the grammar parser to represent - * the end of a block. - */ - public void gen(BlockEndElement end) { - // no-op - } - - /** Generate code for the given grammar element. - * @param blk The character literal reference to generate - */ - public void gen(CharLiteralElement atom) { - if (atom.not) { - _print("~"); - } - _print(HTMLEncode(atom.atomText) + " "); - } - - /** Generate code for the given grammar element. - * @param blk The character-range reference to generate - */ - public void gen(CharRangeElement r) { - print(r.beginText + ".." + r.endText + " "); - } - - /** Generate the lexer HTML file */ - public void gen(LexerGrammar g) throws IOException { - setGrammar(g); - antlrTool.reportProgress("Generating " + grammar.getClassName() + TokenTypesFileExt); - currentOutput = antlrTool.openOutputFile(grammar.getClassName() + TokenTypesFileExt); - //SAS: changed for proper text file io - - tabs = 0; - doingLexRules = true; - - // Generate header common to all TXT output files - genHeader(); - - // Output the user-defined lexer premamble - // RK: guess not.. - // println(grammar.preambleAction.getText()); - - // Generate lexer class definition - println(""); - - // print javadoc comment if any - if (grammar.comment != null) { - _println(HTMLEncode(grammar.comment)); - } - - println("<para>Definition of lexer " + grammar.getClassName() + ", which is a subclass of " + grammar.getSuperClass() + ".</para>"); - - // Generate user-defined parser class members - // printAction(grammar.classMemberAction.getText()); - - /* - // Generate string literals - println(""); - println("*** String literals used in the parser"); - println("The following string literals were used in the parser."); - println("An actual code generator would arrange to place these literals"); - println("into a table in the generated lexer, so that actions in the"); - println("generated lexer could match token text against the literals."); - println("String literals used in the lexer are not listed here, as they"); - println("are incorporated into the mainstream lexer processing."); - tabs++; - // Enumerate all of the symbols and look for string literal symbols - Enumeration ids = grammar.getSymbols(); - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol)ids.nextElement(); - // Only processing string literals -- reject other symbol entries - if ( sym instanceof StringLiteralSymbol ) { - StringLiteralSymbol s = (StringLiteralSymbol)sym; - println(s.getId() + " = " + s.getTokenType()); - } - } - tabs--; - println("*** End of string literals used by the parser"); - */ - - // Generate nextToken() rule. - // nextToken() is a synthetic lexer rule that is the implicit OR of all - // user-defined lexer rules. - genNextToken(); - - // Generate code for each rule in the lexer - - Enumeration ids = grammar.rules.elements(); - while (ids.hasMoreElements()) { - RuleSymbol rs = (RuleSymbol)ids.nextElement(); - if (!rs.id.equals("mnextToken")) { - genRule(rs); - } - } - - // Close the lexer output file - currentOutput.close(); - currentOutput = null; - doingLexRules = false; - } - - /** Generate code for the given grammar element. - * @param blk The (...)+ block to generate - */ - public void gen(OneOrMoreBlock blk) { - genGenericBlock(blk, "+"); - } - - /** Generate the parser HTML file */ - public void gen(ParserGrammar g) throws IOException { - setGrammar(g); - // Open the output stream for the parser and set the currentOutput - antlrTool.reportProgress("Generating " + grammar.getClassName() + ".sgml"); - currentOutput = antlrTool.openOutputFile(grammar.getClassName() + ".sgml"); - - tabs = 0; - - // Generate the header common to all output files. - genHeader(); - - // Generate parser class definition - println(""); - - // print javadoc comment if any - if (grammar.comment != null) { - _println(HTMLEncode(grammar.comment)); - } - - println("<para>Definition of parser " + grammar.getClassName() + ", which is a subclass of " + grammar.getSuperClass() + ".</para>"); - - // Enumerate the parser rules - Enumeration rules = grammar.rules.elements(); - while (rules.hasMoreElements()) { - println(""); - // Get the rules from the list and downcast it to proper type - GrammarSymbol sym = (GrammarSymbol)rules.nextElement(); - // Only process parser rules - if (sym instanceof RuleSymbol) { - genRule((RuleSymbol)sym); - } - } - tabs--; - println(""); - - genTail(); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - - /** Generate code for the given grammar element. - * @param blk The rule-reference to generate - */ - public void gen(RuleRefElement rr) { - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rr.targetRule); - - // Generate the actual rule description - _print("<link linkend=\"" + QuoteForId(rr.targetRule) + "\">"); - _print(rr.targetRule); - _print("</link>"); - // RK: Leave out args.. - // if (rr.args != null) { - // _print("["+rr.args+"]"); - // } - _print(" "); - } - - /** Generate code for the given grammar element. - * @param blk The string-literal reference to generate - */ - public void gen(StringLiteralElement atom) { - if (atom.not) { - _print("~"); - } - _print(HTMLEncode(atom.atomText)); - _print(" "); - } - - /** Generate code for the given grammar element. - * @param blk The token-range reference to generate - */ - public void gen(TokenRangeElement r) { - print(r.beginText + ".." + r.endText + " "); - } - - /** Generate code for the given grammar element. - * @param blk The token-reference to generate - */ - public void gen(TokenRefElement atom) { - if (atom.not) { - _print("~"); - } - _print(atom.atomText); - _print(" "); - } - - public void gen(TreeElement t) { - print(t + " "); - } - - /** Generate the tree-walker TXT file */ - public void gen(TreeWalkerGrammar g) throws IOException { - setGrammar(g); - // Open the output stream for the parser and set the currentOutput - antlrTool.reportProgress("Generating " + grammar.getClassName() + ".sgml"); - currentOutput = antlrTool.openOutputFile(grammar.getClassName() + ".sgml"); - //SAS: changed for proper text file io - - tabs = 0; - - // Generate the header common to all output files. - genHeader(); - - // Output the user-defined parser premamble - println(""); -// println("*** Tree-walker Preamble Action."); -// println("This action will appear before the declaration of your tree-walker class:"); -// tabs++; -// println(grammar.preambleAction.getText()); -// tabs--; -// println("*** End of tree-walker Preamble Action"); - - // Generate tree-walker class definition - println(""); - - // print javadoc comment if any - if (grammar.comment != null) { - _println(HTMLEncode(grammar.comment)); - } - - println("<para>Definition of tree parser " + grammar.getClassName() + ", which is a subclass of " + grammar.getSuperClass() + ".</para>"); - - // Generate user-defined tree-walker class members -// println(""); -// println("*** User-defined tree-walker class members:"); -// println("These are the member declarations that you defined for your class:"); -// tabs++; -// printAction(grammar.classMemberAction.getText()); -// tabs--; -// println("*** End of user-defined tree-walker class members"); - - // Generate code for each rule in the grammar - println(""); -// println("*** tree-walker rules:"); - tabs++; - - // Enumerate the tree-walker rules - Enumeration rules = grammar.rules.elements(); - while (rules.hasMoreElements()) { - println(""); - // Get the rules from the list and downcast it to proper type - GrammarSymbol sym = (GrammarSymbol)rules.nextElement(); - // Only process tree-walker rules - if (sym instanceof RuleSymbol) { - genRule((RuleSymbol)sym); - } - } - tabs--; - println(""); -// println("*** End of tree-walker rules"); - -// println(""); -// println("*** End of tree-walker"); - - // Close the tree-walker output stream - currentOutput.close(); - currentOutput = null; - } - - /** Generate a wildcard element */ - public void gen(WildcardElement wc) { - /* - if ( wc.getLabel()!=null ) { - _print(wc.getLabel()+"="); - } - */ - _print(". "); - } - - /** Generate code for the given grammar element. - * @param blk The (...)* block to generate - */ - public void gen(ZeroOrMoreBlock blk) { - genGenericBlock(blk, "*"); - } - - protected void genAlt(Alternative alt) { - if (alt.getTreeSpecifier() != null) { - _print(alt.getTreeSpecifier().getText()); - } - prevAltElem = null; - for (AlternativeElement elem = alt.head; - !(elem instanceof BlockEndElement); - elem = elem.next) { - elem.generate(); - firstElementInAlt = false; - prevAltElem = elem; - } - } - /** Generate the header for a block, which may be a RuleBlock or a - * plain AlternativeBLock. This generates any variable declarations, - * init-actions, and syntactic-predicate-testing variables. - * @blk The block for which the preamble is to be generated. - */ -// protected void genBlockPreamble(AlternativeBlock blk) { - // RK: don't dump out init actions - // dump out init action -// if ( blk.initAction!=null ) { -// printAction("{" + blk.initAction + "}"); -// } -// } - /** Generate common code for a block of alternatives; return a postscript - * that needs to be generated at the end of the block. Other routines - * may append else-clauses and such for error checking before the postfix - * is generated. - */ - public void genCommonBlock(AlternativeBlock blk) { - if (blk.alternatives.size() > 1) - println("<itemizedlist mark=\"none\">"); - for (int i = 0; i < blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - AlternativeElement elem = alt.head; - - if (blk.alternatives.size() > 1) - print("<listitem><para>"); - - // dump alt operator | - if (i > 0 && blk.alternatives.size() > 1) { - _print("| "); - } - - // Dump the alternative, starting with predicates - // - boolean save = firstElementInAlt; - firstElementInAlt = true; - tabs++; // in case we do a newline in alt, increase the tab indent - - genAlt(alt); - tabs--; - firstElementInAlt = save; - if (blk.alternatives.size() > 1) - _println("</para></listitem>"); - } - if (blk.alternatives.size() > 1) - println("</itemizedlist>"); - } - - /** Generate a textual representation of the follow set - * for a block. - * @param blk The rule block of interest - */ - public void genFollowSetForRuleBlock(RuleBlock blk) { - Lookahead follow = grammar.theLLkAnalyzer.FOLLOW(1, blk.endNode); - printSet(grammar.maxk, 1, follow); - } - - protected void genGenericBlock(AlternativeBlock blk, String blkOp) { - if (blk.alternatives.size() > 1) { - // make sure we start on a new line - _println(""); - if (!firstElementInAlt) { - // only do newline if the last element wasn't a multi-line block - //if ( prevAltElem==null || - // !(prevAltElem instanceof AlternativeBlock) || - // ((AlternativeBlock)prevAltElem).alternatives.size()==1 ) - //{ - _println("("); - //} - //else - //{ - // _print("("); - //} - // _println(""); - // print("(\t"); - } - else { - _print("("); - } - } - else { - _print("( "); - } - // RK: don't dump init actions - // genBlockPreamble(blk); - genCommonBlock(blk); - if (blk.alternatives.size() > 1) { - _println(""); - print(")" + blkOp + " "); - // if not last element of alt, need newline & to indent - if (!(blk.next instanceof BlockEndElement)) { - _println(""); - print(""); - } - } - else { - _print(")" + blkOp + " "); - } - } - - /** Generate a header that is common to all TXT files */ - protected void genHeader() { - println("<?xml version=\"1.0\" standalone=\"no\"?>"); - println("<!DOCTYPE book PUBLIC \"-//OASIS//DTD DocBook V3.1//EN\">"); - println("<book lang=\"en\">"); - println("<bookinfo>"); - println("<title>Grammar " + grammar.getClassName() + "</title>"); - println(" <author>"); - println(" <firstname></firstname>"); - println(" <othername></othername>"); - println(" <surname></surname>"); - println(" <affiliation>"); - println(" <address>"); - println(" <email></email>"); - println(" </address>"); - println(" </affiliation>"); - println(" </author>"); - println(" <othercredit>"); - println(" <contrib>"); - println(" Generated by <ulink url=\"http://www.ANTLR.org/\">ANTLR</ulink>" + antlrTool.version); - println(" from " + antlrTool.grammarFile); - println(" </contrib>"); - println(" </othercredit>"); - println(" <pubdate></pubdate>"); - println(" <abstract>"); - println(" <para>"); - println(" </para>"); - println(" </abstract>"); - println("</bookinfo>"); - println("<chapter>"); - println("<title></title>"); - } - - /**Generate the lookahead set for an alternate. */ - protected void genLookaheadSetForAlt(Alternative alt) { - if (doingLexRules && alt.cache[1].containsEpsilon()) { - println("MATCHES ALL"); - return; - } - int depth = alt.lookaheadDepth; - if (depth == GrammarAnalyzer.NONDETERMINISTIC) { - // if the decision is nondeterministic, do the best we can: LL(k) - // any predicates that are around will be generated later. - depth = grammar.maxk; - } - for (int i = 1; i <= depth; i++) { - Lookahead lookahead = alt.cache[i]; - printSet(depth, i, lookahead); - } - } - - /** Generate a textual representation of the lookahead set - * for a block. - * @param blk The block of interest - */ - public void genLookaheadSetForBlock(AlternativeBlock blk) { - // Find the maximal lookahead depth over all alternatives - int depth = 0; - for (int i = 0; i < blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - if (alt.lookaheadDepth == GrammarAnalyzer.NONDETERMINISTIC) { - depth = grammar.maxk; - break; - } - else if (depth < alt.lookaheadDepth) { - depth = alt.lookaheadDepth; - } - } - - for (int i = 1; i <= depth; i++) { - Lookahead lookahead = grammar.theLLkAnalyzer.look(i, blk); - printSet(depth, i, lookahead); - } - } - - /** Generate the nextToken rule. - * nextToken is a synthetic lexer rule that is the implicit OR of all - * user-defined lexer rules. - */ - public void genNextToken() { - println(""); - println("/** Lexer nextToken rule:"); - println(" * The lexer nextToken rule is synthesized from all of the user-defined"); - println(" * lexer rules. It logically consists of one big alternative block with"); - println(" * each user-defined rule being an alternative."); - println(" */"); - - // Create the synthesized rule block for nextToken consisting - // of an alternate block containing all the user-defined lexer rules. - RuleBlock blk = MakeGrammar.createNextTokenRule(grammar, grammar.rules, "nextToken"); - - // Define the nextToken rule symbol - RuleSymbol nextTokenRs = new RuleSymbol("mnextToken"); - nextTokenRs.setDefined(); - nextTokenRs.setBlock(blk); - nextTokenRs.access = "private"; - grammar.define(nextTokenRs); - - /* - // Analyze the synthesized block - if (!grammar.theLLkAnalyzer.deterministic(blk)) - { - println("The grammar analyzer has determined that the synthesized"); - println("nextToken rule is non-deterministic (i.e., it has ambiguities)"); - println("This means that there is some overlap of the character"); - println("lookahead for two or more of your lexer rules."); - } - */ - - genCommonBlock(blk); - } - - /** Generate code for a named rule block - * @param s The RuleSymbol describing the rule to generate - */ - public void genRule(RuleSymbol s) { - if (s == null || !s.isDefined()) return; // undefined rule - println(""); - - if (s.access.length() != 0) { - if (!s.access.equals("public")) { - _print("<para>" + s.access + " </para>"); - } - } - - println("<section id=\"" + QuoteForId(s.getId()) + "\">"); - println("<title>" + s.getId() + "</title>"); - if (s.comment != null) { - _println("<para>" + HTMLEncode(s.comment) + "</para>"); - } - println("<para>"); - - // Get rule return type and arguments - RuleBlock rblk = s.getBlock(); - - // RK: for HTML output not of much value... - // Gen method return value(s) -// if (rblk.returnAction != null) { -// _print("["+rblk.returnAction+"]"); -// } - // Gen arguments -// if (rblk.argAction != null) -// { -// _print(" returns [" + rblk.argAction+"]"); -// } - _println(""); - print(s.getId() + ":\t"); - tabs++; - - // Dump any init-action - // genBlockPreamble(rblk); - - // Dump the alternates of the rule - genCommonBlock(rblk); - - _println(""); -// println(";"); - tabs--; - _println("</para>"); - _println("</section><!-- section \"" + s.getId() + "\" -->"); - } - - /** Generate the syntactic predicate. This basically generates - * the alternative block, buts tracks if we are inside a synPred - * @param blk The syntactic predicate block - */ - protected void genSynPred(SynPredBlock blk) { - // no op - } - - public void genTail() { - println("</chapter>"); - println("</book>"); - } - - /** Generate the token types TXT file */ - protected void genTokenTypes(TokenManager tm) throws IOException { - // Open the token output TXT file and set the currentOutput stream - antlrTool.reportProgress("Generating " + tm.getName() + TokenTypesFileSuffix + TokenTypesFileExt); - currentOutput = antlrTool.openOutputFile(tm.getName() + TokenTypesFileSuffix + TokenTypesFileExt); - //SAS: changed for proper text file io - tabs = 0; - - // Generate the header common to all diagnostic files - genHeader(); - - // Generate a string for each token. This creates a static - // array of Strings indexed by token type. - println(""); - println("*** Tokens used by the parser"); - println("This is a list of the token numeric values and the corresponding"); - println("token identifiers. Some tokens are literals, and because of that"); - println("they have no identifiers. Literals are double-quoted."); - tabs++; - - // Enumerate all the valid token types - Vector v = tm.getVocabulary(); - for (int i = Token.MIN_USER_TYPE; i < v.size(); i++) { - String s = (String)v.elementAt(i); - if (s != null) { - println(s + " = " + i); - } - } - - // Close the interface - tabs--; - println("*** End of tokens used by the parser"); - - // Close the tokens output file - currentOutput.close(); - currentOutput = null; - } - - /// unused. - protected String processActionForSpecialSymbols(String actionStr, - int line, - RuleBlock currentRule, - ActionTransInfo tInfo) { - return actionStr; - } - - /** Get a string for an expression to generate creation of an AST subtree. - * @param v A Vector of String, where each element is an expression in the target language yielding an AST node. - */ - public String getASTCreateString(Vector v) { - return null; - } - - /** Get a string for an expression to generate creating of an AST node - * @param str The arguments to the AST constructor - */ - public String getASTCreateString(GrammarAtom atom, String str) { - return null; - } - - /** Map an identifier to it's corresponding tree-node variable. - * This is context-sensitive, depending on the rule and alternative - * being generated - * @param id The identifier name to map - * @param forInput true if the input tree node variable is to be returned, otherwise the output variable is returned. - */ - public String mapTreeId(String id, ActionTransInfo tInfo) { - return id; - } - - /** Format a lookahead or follow set. - * @param depth The depth of the entire lookahead/follow - * @param k The lookahead level to print - * @param lookahead The lookahead/follow set to print - */ - public void printSet(int depth, int k, Lookahead lookahead) { - int numCols = 5; - - int[] elems = lookahead.fset.toArray(); - - if (depth != 1) { - print("k==" + k + ": {"); - } - else { - print("{ "); - } - if (elems.length > numCols) { - _println(""); - tabs++; - print(""); - } - - int column = 0; - for (int i = 0; i < elems.length; i++) { - column++; - if (column > numCols) { - _println(""); - print(""); - column = 0; - } - if (doingLexRules) { - _print(charFormatter.literalChar(elems[i])); - } - else { - _print((String)grammar.tokenManager.getVocabulary().elementAt(elems[i])); - } - if (i != elems.length - 1) { - _print(", "); - } - } - - if (elems.length > numCols) { - _println(""); - tabs--; - print(""); - } - _println(" }"); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/DumpASTVisitor.java glassfish-gil/entity-persistence/src/java/persistence/antlr/DumpASTVisitor.java --- glassfish/entity-persistence/src/java/persistence/antlr/DumpASTVisitor.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/DumpASTVisitor.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,66 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.io.*; - -import persistence.antlr.collections.AST; - -/** Simple class to dump the contents of an AST to the output */ -public class DumpASTVisitor implements ASTVisitor { - protected int level = 0; - - - private void tabs() { - for (int i = 0; i < level; i++) { - System.out.print(" "); - } - } - - public void visit(AST node) { - // Flatten this level of the tree if it has no children - boolean flatten = /*true*/ false; - AST node2; - for (node2 = node; node2 != null; node2 = node2.getNextSibling()) { - if (node2.getFirstChild() != null) { - flatten = false; - break; - } - } - - for (node2 = node; node2 != null; node2 = node2.getNextSibling()) { - if (!flatten || node2 == node) { - tabs(); - } - if (node2.getText() == null) { - System.out.print("nil"); - } - else { - System.out.print(node2.getText()); - } - - System.out.print(" [" + node2.getType() + "] "); - - if (flatten) { - System.out.print(" "); - } - else { - System.out.println(""); - } - - if (node2.getFirstChild() != null) { - level++; - visit(node2.getFirstChild()); - level--; - } - } - - if (flatten) { - System.out.println(""); - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ExceptionHandler.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ExceptionHandler.java --- glassfish/entity-persistence/src/java/persistence/antlr/ExceptionHandler.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ExceptionHandler.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,21 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class ExceptionHandler { - // Type of the ANTLR exception class to catch and the variable decl - protected Token exceptionTypeAndName; - // The action to be executed when the exception is caught - protected Token action; - - - public ExceptionHandler(Token exceptionTypeAndName_, - Token action_) { - exceptionTypeAndName = exceptionTypeAndName_; - action = action_; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ExceptionSpec.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ExceptionSpec.java --- glassfish/entity-persistence/src/java/persistence/antlr/ExceptionSpec.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ExceptionSpec.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.Vector; - -class ExceptionSpec { - // Non-null if this refers to a labeled rule - // Use a token instead of a string to get the line information - protected Token label; - - // List of ExceptionHandler (catch phrases) - protected Vector handlers; - - - public ExceptionSpec(Token label_) { - label = label_; - handlers = new Vector(); - } - - public void addHandler(ExceptionHandler handler) { - handlers.appendElement(handler); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/FileCopyException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/FileCopyException.java --- glassfish/entity-persistence/src/java/persistence/antlr/FileCopyException.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/FileCopyException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class FileCopyException extends java.io.IOException { - public FileCopyException(String msg) { - super(msg); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/FileLineFormatter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/FileLineFormatter.java --- glassfish/entity-persistence/src/java/persistence/antlr/FileLineFormatter.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/FileLineFormatter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,26 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public abstract class FileLineFormatter { - - private static FileLineFormatter formatter = new DefaultFileLineFormatter(); - - public static FileLineFormatter getFormatter() { - return formatter; - } - - public static void setFormatter(FileLineFormatter f) { - formatter = f; - } - - /** @param fileName the file that should appear in the prefix. (or null) - * @param line the line (or -1) - * @param column the column (or -1) - */ - public abstract String getFormatString(String fileName, int line, int column); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/GrammarAnalyzer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/GrammarAnalyzer.java --- glassfish/entity-persistence/src/java/persistence/antlr/GrammarAnalyzer.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/GrammarAnalyzer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,35 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**A GrammarAnalyzer computes lookahead from Grammar (which contains - * a grammar symbol table) and can then answer questions about the - * grammar. - * - * To access the RuleBlock for a rule name, the grammar symbol table - * is consulted. - * - * There should be no distinction between static & dynamic analysis. - * In other words, some of the easy analysis can be done statically - * and then the part that is hard statically can be deferred to - * parse-time. Interestingly, computing LL(k) for k>1 lookahead - * statically is O(|T|^k) where T is the grammar vocabulary, but, - * is O(k) at run-time (ignoring the large constant associated with - * the size of the grammar). In English, the difference can be - * described as "find the set of all possible k-sequences of input" - * versus "does this specific k-sequence match?". - */ -public interface GrammarAnalyzer { - /**The epsilon token type is an imaginary type used - * during analysis. It indicates an incomplete look() computation. - * Must be kept consistent with Token constants to be between - * MIN_USER_TYPE and INVALID_TYPE. - */ - // public static final int EPSILON_TYPE = 2; - public static final int NONDETERMINISTIC = Integer.MAX_VALUE; // lookahead depth - public static final int LOOKAHEAD_DEPTH_INIT = -1; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/GrammarAtom.java glassfish-gil/entity-persistence/src/java/persistence/antlr/GrammarAtom.java --- glassfish/entity-persistence/src/java/persistence/antlr/GrammarAtom.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/GrammarAtom.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,67 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** A GrammarAtom is either a token ref, a character ref, or string. - * The analysis doesn't care. - */ -abstract class GrammarAtom extends AlternativeElement { - protected String label; - protected String atomText; - protected int tokenType = Token.INVALID_TYPE; - protected boolean not = false; // ~T or ~'c' or ~"foo" - /** Set to type of AST node to create during parse. Defaults to what is - * set in the TokenSymbol. - */ - protected String ASTNodeType = null; - - public GrammarAtom(Grammar g, Token t, int autoGenType) { - super(g, t, autoGenType); - atomText = t.getText(); - } - - public String getLabel() { - return label; - } - - public String getText() { - return atomText; - } - - public int getType() { - return tokenType; - } - - public void setLabel(String label_) { - label = label_; - } - - public String getASTNodeType() { - return ASTNodeType; - } - - public void setASTNodeType(String type) { - ASTNodeType = type; - } - - public void setOption(Token option, Token value) { - if (option.getText().equals("AST")) { - setASTNodeType(value.getText()); - } - else { - grammar.antlrTool.error("Invalid element option:" + option.getText(), - grammar.getFilename(), option.getLine(), option.getColumn()); - } - } - - public String toString() { - String s = " "; - if (label != null) s += label + ":"; - if (not) s += "~"; - return s + atomText; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/GrammarElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/GrammarElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/GrammarElement.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/GrammarElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,61 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**A GrammarElement is a generic node in our - * data structure that holds a grammar in memory. - * This data structure can be used for static - * analysis or for dynamic analysis (during parsing). - * Every node must know which grammar owns it, how - * to generate code, and how to do analysis. - */ -abstract class GrammarElement { - public static final int AUTO_GEN_NONE = 1; - public static final int AUTO_GEN_CARET = 2; - public static final int AUTO_GEN_BANG = 3; - - /* - * Note that Java does static argument type matching to - * determine which function to execute on the receiver. - * Here, that implies that we cannot simply say - * grammar.generator.gen(this) in GrammarElement or - * only CodeGenerator.gen(GrammarElement ge) would - * ever be called. - */ - protected Grammar grammar; - protected int line; - protected int column; - - public GrammarElement(Grammar g) { - grammar = g; - line = -1; - column = -1; - } - - public GrammarElement(Grammar g, Token start) { - grammar = g; - line = start.getLine(); - column = start.getColumn(); - } - - public void generate() { - } - - public int getLine() { - return line; - } - - public int getColumn() { - return column; - } - - public Lookahead look(int k) { - return null; - } - - public abstract String toString(); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/Grammar.java glassfish-gil/entity-persistence/src/java/persistence/antlr/Grammar.java --- glassfish/entity-persistence/src/java/persistence/antlr/Grammar.java 2006-08-31 00:34:06.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/Grammar.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,287 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Hashtable; -import java.util.Enumeration; -import java.io.IOException; - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; - -/**A Grammar holds a set of rules (which are stored - * in a symbol table). Most of the time a grammar - * needs a code generator and an LLkAnalyzer too. - */ -public abstract class Grammar { - protected Tool antlrTool; - protected CodeGenerator generator; - protected LLkGrammarAnalyzer theLLkAnalyzer; - protected Hashtable symbols; - protected boolean buildAST = false; - protected boolean analyzerDebug = false; - protected boolean interactive = false; - protected String superClass = null; - - /** The token manager associated with the grammar, if any. - // The token manager is responsible for maintaining the set of valid tokens, and - // is conceptually shared between the lexer and parser. This may be either a - // LexerGrammar or a ImportVocabTokenManager. - */ - protected TokenManager tokenManager; - - /** The name of the export vocabulary...used to generate the output - * token types interchange file. - */ - protected String exportVocab = null; - - /** The name of the import vocabulary. "Initial conditions" - */ - protected String importVocab = null; - - // Mapping from String keys to Token option values - protected Hashtable options; - // Vector of RuleSymbol entries - protected Vector rules; - - protected Token preambleAction = new CommonToken(Token.INVALID_TYPE, ""); - protected String className = null; - protected String fileName = null; - protected Token classMemberAction = new CommonToken(Token.INVALID_TYPE, ""); - protected boolean hasSyntacticPredicate = false; - protected boolean hasUserErrorHandling = false; - - // max lookahead that can be attempted for this parser. - protected int maxk = 1; - - // options - protected boolean traceRules = false; - protected boolean debuggingOutput = false; - protected boolean defaultErrorHandler = true; - - protected String comment = null; // javadoc comment - - public Grammar(String className_, Tool tool_, String superClass) { - className = className_; - antlrTool = tool_; - symbols = new Hashtable(); - options = new Hashtable(); - rules = new Vector(100); - this.superClass = superClass; - } - - /** Define a rule */ - public void define(RuleSymbol rs) { - rules.appendElement(rs); - // add the symbol to the rules hash table - symbols.put(rs.getId(), rs); - } - - /** Top-level call to generate the code for this grammar */ - public abstract void generate() throws IOException; - - protected String getClassName() { - return className; - } - - /* Does this grammar have a default error handler? */ - public boolean getDefaultErrorHandler() { - return defaultErrorHandler; - } - - public String getFilename() { - return fileName; - } - - /** Get an integer option. Given the name of the option find its - * associated integer value. If the associated value is not an integer or - * is not in the table, then throw an exception of type NumberFormatException. - * @param key The name of the option - * @return The value associated with the key. - */ - public int getIntegerOption(String key) throws NumberFormatException { - Token t = (Token)options.get(key); - if (t == null || t.getType() != ANTLRTokenTypes.INT) { - throw new NumberFormatException(); - } - else { - return Integer.parseInt(t.getText()); - } - } - - /** Get an option. Given the name of the option find its associated value. - * @param key The name of the option - * @return The value associated with the key, or null if the key has not been set. - */ - public Token getOption(String key) { - return (Token)options.get(key); - } - - // Get name of class from which generated parser/lexer inherits - protected abstract String getSuperClass(); - - public GrammarSymbol getSymbol(String s) { - return (GrammarSymbol)symbols.get(s); - } - - public Enumeration getSymbols() { - return symbols.elements(); - } - - /** Check the existence of an option in the table - * @param key The name of the option - * @return true if the option is in the table - */ - public boolean hasOption(String key) { - return options.containsKey(key); - } - - /** Is a rule symbol defined? (not used for tokens) */ - public boolean isDefined(String s) { - return symbols.containsKey(s); - } - - /**Process command line arguments. Implemented in subclasses */ - public abstract void processArguments(String[] args); - - public void setCodeGenerator(CodeGenerator gen) { - generator = gen; - } - - public void setFilename(String s) { - fileName = s; - } - - public void setGrammarAnalyzer(LLkGrammarAnalyzer a) { - theLLkAnalyzer = a; - } - - /** Set a generic option. - * This associates a generic option key with a Token value. - * No validation is performed by this method, although users of the value - * (code generation and/or analysis) may require certain formats. - * The value is stored as a token so that the location of an error - * can be reported. - * @param key The name of the option. - * @param value The value to associate with the key. - * @return true if the option was a valid generic grammar option, false o/w - */ - public boolean setOption(String key, Token value) { - options.put(key, value); - String s = value.getText(); - int i; - if (key.equals("k")) { - try { - maxk = getIntegerOption("k"); - if ( maxk<=0 ) { - antlrTool.error("option 'k' must be greater than 0 (was " + - value.getText() + ")", - getFilename(), - value.getLine(), - value.getColumn()); - maxk = 1; - } - } - catch (NumberFormatException e) { - antlrTool.error("option 'k' must be an integer (was " + value.getText() + ")", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("codeGenMakeSwitchThreshold")) { - try { - i = getIntegerOption("codeGenMakeSwitchThreshold"); - } - catch (NumberFormatException e) { - antlrTool.error("option 'codeGenMakeSwitchThreshold' must be an integer", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("codeGenBitsetTestThreshold")) { - try { - i = getIntegerOption("codeGenBitsetTestThreshold"); - } - catch (NumberFormatException e) { - antlrTool.error("option 'codeGenBitsetTestThreshold' must be an integer", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("defaultErrorHandler")) { - if (s.equals("true")) { - defaultErrorHandler = true; - } - else if (s.equals("false")) { - defaultErrorHandler = false; - } - else { - antlrTool.error("Value for defaultErrorHandler must be true or false", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("analyzerDebug")) { - if (s.equals("true")) { - analyzerDebug = true; - } - else if (s.equals("false")) { - analyzerDebug = false; - } - else { - antlrTool.error("option 'analyzerDebug' must be true or false", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("codeGenDebug")) { - if (s.equals("true")) { - analyzerDebug = true; - } - else if (s.equals("false")) { - analyzerDebug = false; - } - else { - antlrTool.error("option 'codeGenDebug' must be true or false", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("classHeaderSuffix")) { - return true; - } - if (key.equals("classHeaderPrefix")) { - return true; - } - if (key.equals("namespaceAntlr")) { - return true; - } - if (key.equals("namespaceStd")) { - return true; - } - if (key.equals("genHashLines")) { - return true; - } - if (key.equals("noConstructors")) { - return true; - } - return false; - } - - public void setTokenManager(TokenManager tokenManager_) { - tokenManager = tokenManager_; - } - - /** Print out the grammar without actions */ - public String toString() { - StringBuffer buf = new StringBuffer(20000); - Enumeration ids = rules.elements(); - while (ids.hasMoreElements()) { - RuleSymbol rs = (RuleSymbol)ids.nextElement(); - if (!rs.id.equals("mnextToken")) { - buf.append(rs.getBlock().toString()); - buf.append("\n\n"); - } - } - return buf.toString(); - } - -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/GrammarSymbol.java glassfish-gil/entity-persistence/src/java/persistence/antlr/GrammarSymbol.java --- glassfish/entity-persistence/src/java/persistence/antlr/GrammarSymbol.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/GrammarSymbol.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,29 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**A GrammarSymbol is a generic symbol that can be - * added to the symbol table for a grammar. - */ -abstract class GrammarSymbol { - protected String id; - - public GrammarSymbol() { - } - - public GrammarSymbol(String s) { - id = s; - } - - public String getId() { - return id; - } - - public void setId(String s) { - id = s; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/HTMLCodeGenerator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/HTMLCodeGenerator.java --- glassfish/entity-persistence/src/java/persistence/antlr/HTMLCodeGenerator.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/HTMLCodeGenerator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,796 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Enumeration; - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; - -import java.io.PrintWriter; //SAS: changed for proper text file io -import java.io.IOException; -import java.io.FileWriter; - -/**Generate P.html, a cross-linked representation of P with or without actions */ -public class HTMLCodeGenerator extends CodeGenerator { - /** non-zero if inside syntactic predicate generation */ - protected int syntacticPredLevel = 0; - - /** true during lexer generation, false during parser generation */ - protected boolean doingLexRules = false; - - protected boolean firstElementInAlt; - - protected AlternativeElement prevAltElem = null; // what was generated last? - - /** Create a Diagnostic code-generator using the given Grammar - * The caller must still call setTool, setBehavior, and setAnalyzer - * before generating code. - */ - public HTMLCodeGenerator() { - super(); - charFormatter = new JavaCharFormatter(); - } - - /** Encode a string for printing in a HTML document.. - * e.g. encode '<' '>' and similar stuff - * @param s the string to encode - */ - static String HTMLEncode(String s) { - StringBuffer buf = new StringBuffer(); - - for (int i = 0, len = s.length(); i < len; i++) { - char c = s.charAt(i); - if (c == '&') - buf.append("&"); - else if (c == '\"') - buf.append("""); - else if (c == '\'') - buf.append("'"); - else if (c == '<') - buf.append("<"); - else if (c == '>') - buf.append(">"); - else - buf.append(c); - } - return buf.toString(); - } - - public void gen() { - // Do the code generation - try { - // Loop over all grammars - Enumeration grammarIter = behavior.grammars.elements(); - while (grammarIter.hasMoreElements()) { - Grammar g = (Grammar)grammarIter.nextElement(); - - // Connect all the components to each other - /* - g.setGrammarAnalyzer(analyzer); - analyzer.setGrammar(g); - */ - g.setCodeGenerator(this); - - // To get right overloading behavior across hetrogeneous grammars - g.generate(); - - if (antlrTool.hasError()) { - antlrTool.fatalError("Exiting due to errors."); - } - - } - - } - catch (IOException e) { - antlrTool.reportException(e, null); - } - } - - /** Generate code for the given grammar element. - * @param blk The {...} action to generate - */ - public void gen(ActionElement action) { - // no-op - } - - /** Generate code for the given grammar element. - * @param blk The "x|y|z|..." block to generate - */ - public void gen(AlternativeBlock blk) { - genGenericBlock(blk, ""); - } - - /** Generate code for the given grammar element. - * @param blk The block-end element to generate. Block-end - * elements are synthesized by the grammar parser to represent - * the end of a block. - */ - public void gen(BlockEndElement end) { - // no-op - } - - /** Generate code for the given grammar element. - * @param blk The character literal reference to generate - */ - public void gen(CharLiteralElement atom) { - if (atom.not) { - _print("~"); - } - _print(HTMLEncode(atom.atomText) + " "); - } - - /** Generate code for the given grammar element. - * @param blk The character-range reference to generate - */ - public void gen(CharRangeElement r) { - print(r.beginText + ".." + r.endText + " "); - } - - /** Generate the lexer HTML file */ - public void gen(LexerGrammar g) throws IOException { - setGrammar(g); - antlrTool.reportProgress("Generating " + grammar.getClassName() + TokenTypesFileExt); - currentOutput = antlrTool.openOutputFile(grammar.getClassName() + TokenTypesFileExt); - //SAS: changed for proper text file io - - tabs = 0; - doingLexRules = true; - - // Generate header common to all TXT output files - genHeader(); - - // Output the user-defined lexer premamble - // RK: guess not.. - // println(grammar.preambleAction.getText()); - - // Generate lexer class definition - println(""); - - // print javadoc comment if any - if (grammar.comment != null) { - _println(HTMLEncode(grammar.comment)); - } - - println("Definition of lexer " + grammar.getClassName() + ", which is a subclass of " + grammar.getSuperClass() + "."); - - // Generate user-defined parser class members - // printAction(grammar.classMemberAction.getText()); - - /* - // Generate string literals - println(""); - println("*** String literals used in the parser"); - println("The following string literals were used in the parser."); - println("An actual code generator would arrange to place these literals"); - println("into a table in the generated lexer, so that actions in the"); - println("generated lexer could match token text against the literals."); - println("String literals used in the lexer are not listed here, as they"); - println("are incorporated into the mainstream lexer processing."); - tabs++; - // Enumerate all of the symbols and look for string literal symbols - Enumeration ids = grammar.getSymbols(); - while ( ids.hasMoreElements() ) { - GrammarSymbol sym = (GrammarSymbol)ids.nextElement(); - // Only processing string literals -- reject other symbol entries - if ( sym instanceof StringLiteralSymbol ) { - StringLiteralSymbol s = (StringLiteralSymbol)sym; - println(s.getId() + " = " + s.getTokenType()); - } - } - tabs--; - println("*** End of string literals used by the parser"); - */ - - // Generate nextToken() rule. - // nextToken() is a synthetic lexer rule that is the implicit OR of all - // user-defined lexer rules. - genNextToken(); - - // Generate code for each rule in the lexer - - Enumeration ids = grammar.rules.elements(); - while (ids.hasMoreElements()) { - RuleSymbol rs = (RuleSymbol)ids.nextElement(); - if (!rs.id.equals("mnextToken")) { - genRule(rs); - } - } - - // Close the lexer output file - currentOutput.close(); - currentOutput = null; - doingLexRules = false; - } - - /** Generate code for the given grammar element. - * @param blk The (...)+ block to generate - */ - public void gen(OneOrMoreBlock blk) { - genGenericBlock(blk, "+"); - } - - /** Generate the parser HTML file */ - public void gen(ParserGrammar g) throws IOException { - setGrammar(g); - // Open the output stream for the parser and set the currentOutput - antlrTool.reportProgress("Generating " + grammar.getClassName() + ".html"); - currentOutput = antlrTool.openOutputFile(grammar.getClassName() + ".html"); - - tabs = 0; - - // Generate the header common to all output files. - genHeader(); - - // Generate parser class definition - println(""); - - // print javadoc comment if any - if (grammar.comment != null) { - _println(HTMLEncode(grammar.comment)); - } - - println("Definition of parser " + grammar.getClassName() + ", which is a subclass of " + grammar.getSuperClass() + "."); - - // Enumerate the parser rules - Enumeration rules = grammar.rules.elements(); - while (rules.hasMoreElements()) { - println(""); - // Get the rules from the list and downcast it to proper type - GrammarSymbol sym = (GrammarSymbol)rules.nextElement(); - // Only process parser rules - if (sym instanceof RuleSymbol) { - genRule((RuleSymbol)sym); - } - } - tabs--; - println(""); - - genTail(); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - - /** Generate code for the given grammar element. - * @param blk The rule-reference to generate - */ - public void gen(RuleRefElement rr) { - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rr.targetRule); - - // Generate the actual rule description - _print("<a href=\"" + grammar.getClassName() + ".html#" + rr.targetRule + "\">"); - _print(rr.targetRule); - _print("</a>"); - // RK: Leave out args.. - // if (rr.args != null) { - // _print("["+rr.args+"]"); - // } - _print(" "); - } - - /** Generate code for the given grammar element. - * @param blk The string-literal reference to generate - */ - public void gen(StringLiteralElement atom) { - if (atom.not) { - _print("~"); - } - _print(HTMLEncode(atom.atomText)); - _print(" "); - } - - /** Generate code for the given grammar element. - * @param blk The token-range reference to generate - */ - public void gen(TokenRangeElement r) { - print(r.beginText + ".." + r.endText + " "); - } - - /** Generate code for the given grammar element. - * @param blk The token-reference to generate - */ - public void gen(TokenRefElement atom) { - if (atom.not) { - _print("~"); - } - _print(atom.atomText); - _print(" "); - } - - public void gen(TreeElement t) { - print(t + " "); - } - - /** Generate the tree-walker TXT file */ - public void gen(TreeWalkerGrammar g) throws IOException { - setGrammar(g); - // Open the output stream for the parser and set the currentOutput - antlrTool.reportProgress("Generating " + grammar.getClassName() + ".html"); - currentOutput = antlrTool.openOutputFile(grammar.getClassName() + ".html"); - //SAS: changed for proper text file io - - tabs = 0; - - // Generate the header common to all output files. - genHeader(); - - // Output the user-defined parser premamble - println(""); -// println("*** Tree-walker Preamble Action."); -// println("This action will appear before the declaration of your tree-walker class:"); -// tabs++; -// println(grammar.preambleAction.getText()); -// tabs--; -// println("*** End of tree-walker Preamble Action"); - - // Generate tree-walker class definition - println(""); - - // print javadoc comment if any - if (grammar.comment != null) { - _println(HTMLEncode(grammar.comment)); - } - - println("Definition of tree parser " + grammar.getClassName() + ", which is a subclass of " + grammar.getSuperClass() + "."); - - // Generate user-defined tree-walker class members -// println(""); -// println("*** User-defined tree-walker class members:"); -// println("These are the member declarations that you defined for your class:"); -// tabs++; -// printAction(grammar.classMemberAction.getText()); -// tabs--; -// println("*** End of user-defined tree-walker class members"); - - // Generate code for each rule in the grammar - println(""); -// println("*** tree-walker rules:"); - tabs++; - - // Enumerate the tree-walker rules - Enumeration rules = grammar.rules.elements(); - while (rules.hasMoreElements()) { - println(""); - // Get the rules from the list and downcast it to proper type - GrammarSymbol sym = (GrammarSymbol)rules.nextElement(); - // Only process tree-walker rules - if (sym instanceof RuleSymbol) { - genRule((RuleSymbol)sym); - } - } - tabs--; - println(""); -// println("*** End of tree-walker rules"); - -// println(""); -// println("*** End of tree-walker"); - - // Close the tree-walker output stream - currentOutput.close(); - currentOutput = null; - } - - /** Generate a wildcard element */ - public void gen(WildcardElement wc) { - /* - if ( wc.getLabel()!=null ) { - _print(wc.getLabel()+"="); - } - */ - _print(". "); - } - - /** Generate code for the given grammar element. - * @param blk The (...)* block to generate - */ - public void gen(ZeroOrMoreBlock blk) { - genGenericBlock(blk, "*"); - } - - protected void genAlt(Alternative alt) { - if (alt.getTreeSpecifier() != null) { - _print(alt.getTreeSpecifier().getText()); - } - prevAltElem = null; - for (AlternativeElement elem = alt.head; - !(elem instanceof BlockEndElement); - elem = elem.next) { - elem.generate(); - firstElementInAlt = false; - prevAltElem = elem; - } - } - /** Generate the header for a block, which may be a RuleBlock or a - * plain AlternativeBLock. This generates any variable declarations, - * init-actions, and syntactic-predicate-testing variables. - * @blk The block for which the preamble is to be generated. - */ -// protected void genBlockPreamble(AlternativeBlock blk) { - // RK: don't dump out init actions - // dump out init action -// if ( blk.initAction!=null ) { -// printAction("{" + blk.initAction + "}"); -// } -// } - /**Generate common code for a block of alternatives; return a postscript - * that needs to be generated at the end of the block. Other routines - * may append else-clauses and such for error checking before the postfix - * is generated. - */ - public void genCommonBlock(AlternativeBlock blk) { - for (int i = 0; i < blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - AlternativeElement elem = alt.head; - - // dump alt operator | - if (i > 0 && blk.alternatives.size() > 1) { - _println(""); - print("|\t"); - } - - // Dump the alternative, starting with predicates - // - boolean save = firstElementInAlt; - firstElementInAlt = true; - tabs++; // in case we do a newline in alt, increase the tab indent - - // RK: don't dump semantic/syntactic predicates - // only obscures grammar. - // - // Dump semantic predicates - // - // if (alt.semPred != null) { - // println("{" + alt.semPred + "}?"); - // } - // Dump syntactic predicate - // if (alt.synPred != null) { - // genSynPred(alt.synPred); - // } - genAlt(alt); - tabs--; - firstElementInAlt = save; - } - } - - /** Generate a textual representation of the follow set - * for a block. - * @param blk The rule block of interest - */ - public void genFollowSetForRuleBlock(RuleBlock blk) { - Lookahead follow = grammar.theLLkAnalyzer.FOLLOW(1, blk.endNode); - printSet(grammar.maxk, 1, follow); - } - - protected void genGenericBlock(AlternativeBlock blk, String blkOp) { - if (blk.alternatives.size() > 1) { - // make sure we start on a new line - if (!firstElementInAlt) { - // only do newline if the last element wasn't a multi-line block - if (prevAltElem == null || - !(prevAltElem instanceof AlternativeBlock) || - ((AlternativeBlock)prevAltElem).alternatives.size() == 1) { - _println(""); - print("(\t"); - } - else { - _print("(\t"); - } - // _println(""); - // print("(\t"); - } - else { - _print("(\t"); - } - } - else { - _print("( "); - } - // RK: don't dump init actions - // genBlockPreamble(blk); - genCommonBlock(blk); - if (blk.alternatives.size() > 1) { - _println(""); - print(")" + blkOp + " "); - // if not last element of alt, need newline & to indent - if (!(blk.next instanceof BlockEndElement)) { - _println(""); - print(""); - } - } - else { - _print(")" + blkOp + " "); - } - } - - /** Generate a header that is common to all TXT files */ - protected void genHeader() { - println("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); - println("<HTML>"); - println("<HEAD>"); - println("<TITLE>Grammar " + antlrTool.grammarFile + "</TITLE>"); - println("</HEAD>"); - println("<BODY>"); - println("<table summary=\"\" border=\"1\" cellpadding=\"5\">"); - println("<tr>"); - println("<td>"); - println("<font size=\"+2\">Grammar " + grammar.getClassName() + "</font><br>"); - println("<a href=\"http://www.ANTLR.org\">ANTLR</a>-generated HTML file from " + antlrTool.grammarFile); - println("<p>"); - println("Terence Parr, <a href=\"http://www.magelang.com\">MageLang Institute</a>"); - println("<br>ANTLR Version " + antlrTool.version + "; 1989-1999"); - println("</td>"); - println("</tr>"); - println("</table>"); - println("<PRE>"); - // RK: see no reason for printing include files and stuff... -// tabs++; -// printAction(behavior.getHeaderAction("")); -// tabs--; - } - - /**Generate the lookahead set for an alternate. */ - protected void genLookaheadSetForAlt(Alternative alt) { - if (doingLexRules && alt.cache[1].containsEpsilon()) { - println("MATCHES ALL"); - return; - } - int depth = alt.lookaheadDepth; - if (depth == GrammarAnalyzer.NONDETERMINISTIC) { - // if the decision is nondeterministic, do the best we can: LL(k) - // any predicates that are around will be generated later. - depth = grammar.maxk; - } - for (int i = 1; i <= depth; i++) { - Lookahead lookahead = alt.cache[i]; - printSet(depth, i, lookahead); - } - } - - /** Generate a textual representation of the lookahead set - * for a block. - * @param blk The block of interest - */ - public void genLookaheadSetForBlock(AlternativeBlock blk) { - // Find the maximal lookahead depth over all alternatives - int depth = 0; - for (int i = 0; i < blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - if (alt.lookaheadDepth == GrammarAnalyzer.NONDETERMINISTIC) { - depth = grammar.maxk; - break; - } - else if (depth < alt.lookaheadDepth) { - depth = alt.lookaheadDepth; - } - } - - for (int i = 1; i <= depth; i++) { - Lookahead lookahead = grammar.theLLkAnalyzer.look(i, blk); - printSet(depth, i, lookahead); - } - } - - /** Generate the nextToken rule. - * nextToken is a synthetic lexer rule that is the implicit OR of all - * user-defined lexer rules. - */ - public void genNextToken() { - println(""); - println("/** Lexer nextToken rule:"); - println(" * The lexer nextToken rule is synthesized from all of the user-defined"); - println(" * lexer rules. It logically consists of one big alternative block with"); - println(" * each user-defined rule being an alternative."); - println(" */"); - - // Create the synthesized rule block for nextToken consisting - // of an alternate block containing all the user-defined lexer rules. - RuleBlock blk = MakeGrammar.createNextTokenRule(grammar, grammar.rules, "nextToken"); - - // Define the nextToken rule symbol - RuleSymbol nextTokenRs = new RuleSymbol("mnextToken"); - nextTokenRs.setDefined(); - nextTokenRs.setBlock(blk); - nextTokenRs.access = "private"; - grammar.define(nextTokenRs); - - /* - // Analyze the synthesized block - if (!grammar.theLLkAnalyzer.deterministic(blk)) - { - println("The grammar analyzer has determined that the synthesized"); - println("nextToken rule is non-deterministic (i.e., it has ambiguities)"); - println("This means that there is some overlap of the character"); - println("lookahead for two or more of your lexer rules."); - } - */ - - genCommonBlock(blk); - } - - /** Generate code for a named rule block - * @param s The RuleSymbol describing the rule to generate - */ - public void genRule(RuleSymbol s) { - if (s == null || !s.isDefined()) return; // undefined rule - println(""); - if (s.comment != null) { - _println(HTMLEncode(s.comment)); - } - if (s.access.length() != 0) { - if (!s.access.equals("public")) { - _print(s.access + " "); - } - } - _print("<a name=\"" + s.getId() + "\">"); - _print(s.getId()); - _print("</a>"); - - // Get rule return type and arguments - RuleBlock rblk = s.getBlock(); - - // RK: for HTML output not of much value... - // Gen method return value(s) -// if (rblk.returnAction != null) { -// _print("["+rblk.returnAction+"]"); -// } - // Gen arguments -// if (rblk.argAction != null) -// { -// _print(" returns [" + rblk.argAction+"]"); -// } - _println(""); - tabs++; - print(":\t"); - - // Dump any init-action - // genBlockPreamble(rblk); - - // Dump the alternates of the rule - genCommonBlock(rblk); - - _println(""); - println(";"); - tabs--; - } - - /** Generate the syntactic predicate. This basically generates - * the alternative block, buts tracks if we are inside a synPred - * @param blk The syntactic predicate block - */ - protected void genSynPred(SynPredBlock blk) { - syntacticPredLevel++; - genGenericBlock(blk, " =>"); - syntacticPredLevel--; - } - - public void genTail() { - println("</PRE>"); - println("</BODY>"); - println("</HTML>"); - } - - /** Generate the token types TXT file */ - protected void genTokenTypes(TokenManager tm) throws IOException { - // Open the token output TXT file and set the currentOutput stream - antlrTool.reportProgress("Generating " + tm.getName() + TokenTypesFileSuffix + TokenTypesFileExt); - currentOutput = antlrTool.openOutputFile(tm.getName() + TokenTypesFileSuffix + TokenTypesFileExt); - //SAS: changed for proper text file io - tabs = 0; - - // Generate the header common to all diagnostic files - genHeader(); - - // Generate a string for each token. This creates a static - // array of Strings indexed by token type. - println(""); - println("*** Tokens used by the parser"); - println("This is a list of the token numeric values and the corresponding"); - println("token identifiers. Some tokens are literals, and because of that"); - println("they have no identifiers. Literals are double-quoted."); - tabs++; - - // Enumerate all the valid token types - Vector v = tm.getVocabulary(); - for (int i = Token.MIN_USER_TYPE; i < v.size(); i++) { - String s = (String)v.elementAt(i); - if (s != null) { - println(s + " = " + i); - } - } - - // Close the interface - tabs--; - println("*** End of tokens used by the parser"); - - // Close the tokens output file - currentOutput.close(); - currentOutput = null; - } - - /** Get a string for an expression to generate creation of an AST subtree. - * @param v A Vector of String, where each element is an expression in the target language yielding an AST node. - */ - public String getASTCreateString(Vector v) { - return null; - } - - /** Get a string for an expression to generate creating of an AST node - * @param str The arguments to the AST constructor - */ - public String getASTCreateString(GrammarAtom atom, String str) { - return null; - } - - /** Map an identifier to it's corresponding tree-node variable. - * This is context-sensitive, depending on the rule and alternative - * being generated - * @param id The identifier name to map - * @param forInput true if the input tree node variable is to be returned, otherwise the output variable is returned. - */ - public String mapTreeId(String id, ActionTransInfo tInfo) { - return id; - } - - /// unused. - protected String processActionForSpecialSymbols(String actionStr, - int line, - RuleBlock currentRule, - ActionTransInfo tInfo) { - return actionStr; - } - - /** Format a lookahead or follow set. - * @param depth The depth of the entire lookahead/follow - * @param k The lookahead level to print - * @param lookahead The lookahead/follow set to print - */ - public void printSet(int depth, int k, Lookahead lookahead) { - int numCols = 5; - - int[] elems = lookahead.fset.toArray(); - - if (depth != 1) { - print("k==" + k + ": {"); - } - else { - print("{ "); - } - if (elems.length > numCols) { - _println(""); - tabs++; - print(""); - } - - int column = 0; - for (int i = 0; i < elems.length; i++) { - column++; - if (column > numCols) { - _println(""); - print(""); - column = 0; - } - if (doingLexRules) { - _print(charFormatter.literalChar(elems[i])); - } - else { - _print((String)grammar.tokenManager.getVocabulary().elementAt(elems[i])); - } - if (i != elems.length - 1) { - _print(", "); - } - } - - if (elems.length > numCols) { - _println(""); - tabs--; - print(""); - } - _println(" }"); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ImportVocabTokenManager.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ImportVocabTokenManager.java --- glassfish/entity-persistence/src/java/persistence/antlr/ImportVocabTokenManager.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ImportVocabTokenManager.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,100 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.io.*; -import java.util.Hashtable; -import java.util.Enumeration; - -import persistence.antlr.collections.impl.Vector; - -/** Static implementation of the TokenManager, used for importVocab option */ -class ImportVocabTokenManager extends SimpleTokenManager implements Cloneable { - private String filename; - protected Grammar grammar; - - // FIXME: it would be nice if the path to the original grammar file was - // also searched. - ImportVocabTokenManager(Grammar grammar, String filename_, String name_, Tool tool_) { - // initialize - super(name_, tool_); - - this.grammar = grammar; - this.filename = filename_; - - // Figure out exactly where the file lives. Check $PWD first, - // and then search in -o <output_dir>. - // - File grammarFile = new File(filename); - - if (!grammarFile.exists()) { - grammarFile = new File(antlrTool.getOutputDirectory(), filename); - - if (!grammarFile.exists()) { - antlrTool.panic("Cannot find importVocab file '" + filename + "'"); - } - } - - setReadOnly(true); - - // Read a file with lines of the form ID=number - try { - Reader fileIn = new BufferedReader(new FileReader(grammarFile)); - ANTLRTokdefLexer tokdefLexer = new ANTLRTokdefLexer(fileIn); - ANTLRTokdefParser tokdefParser = new ANTLRTokdefParser(tokdefLexer); - tokdefParser.setTool(antlrTool); - tokdefParser.setFilename(filename); - tokdefParser.file(this); - } - catch (FileNotFoundException fnf) { - antlrTool.panic("Cannot find importVocab file '" + filename + "'"); - } - catch (RecognitionException ex) { - antlrTool.panic("Error parsing importVocab file '" + filename + "': " + ex.toString()); - } - catch (TokenStreamException ex) { - antlrTool.panic("Error reading importVocab file '" + filename + "'"); - } - } - - public Object clone() { - ImportVocabTokenManager tm; - tm = (ImportVocabTokenManager)super.clone(); - tm.filename = this.filename; - tm.grammar = this.grammar; - return tm; - } - - /** define a token. */ - public void define(TokenSymbol ts) { - super.define(ts); - } - - /** define a token. Intended for use only when reading the importVocab file. */ - public void define(String s, int ttype) { - TokenSymbol ts = null; - if (s.startsWith("\"")) { - ts = new StringLiteralSymbol(s); - } - else { - ts = new TokenSymbol(s); - } - ts.setTokenType(ttype); - super.define(ts); - maxToken = (ttype + 1) > maxToken ? (ttype + 1) : maxToken; // record maximum token type - } - - /** importVocab token manager is read-only if output would be same as input */ - public boolean isReadOnly() { - return readOnly; - } - - /** Get the next unused token type. */ - public int nextTokenType() { - return super.nextTokenType(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/InputBuffer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/InputBuffer.java --- glassfish/entity-persistence/src/java/persistence/antlr/InputBuffer.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/InputBuffer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,130 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -// SAS: Added this class to genericise the input buffers for scanners -// This allows a scanner to use a binary (FileInputStream) or -// text (FileReader) stream of data; the generated scanner -// subclass will define the input stream -// There are two subclasses to this: CharBuffer and ByteBuffer - -import java.io.IOException; - -/**A Stream of characters fed to the lexer from a InputStream that can - * be rewound via mark()/rewind() methods. - * <p> - * A dynamic array is used to buffer up all the input characters. Normally, - * "k" characters are stored in the buffer. More characters may be stored during - * guess mode (testing syntactic predicate), or when LT(i>k) is referenced. - * Consumption of characters is deferred. In other words, reading the next - * character is not done by conume(), but deferred until needed by LA or LT. - * <p> - * - * @see persistence.antlr.CharQueue - */ -public abstract class InputBuffer { - // Number of active markers - protected int nMarkers = 0; - - // Additional offset used when markers are active - protected int markerOffset = 0; - - // Number of calls to consume() since last LA() or LT() call - protected int numToConsume = 0; - - // Circular queue - protected CharQueue queue; - - /** Create an input buffer */ - public InputBuffer() { - queue = new CharQueue(1); - } - - /** This method updates the state of the input buffer so that - * the text matched since the most recent mark() is no longer - * held by the buffer. So, you either do a mark/rewind for - * failed predicate or mark/commit to keep on parsing without - * rewinding the input. - */ - public void commit() { - nMarkers--; - } - - /** Mark another character for deferred consumption */ - public void consume() { - numToConsume++; - } - - /** Ensure that the input buffer is sufficiently full */ - public abstract void fill(int amount) throws CharStreamException; - - public String getLAChars() { - StringBuffer la = new StringBuffer(); - for (int i = markerOffset; i < queue.nbrEntries; i++) - la.append(queue.elementAt(i)); - return la.toString(); - } - - public String getMarkedChars() { - StringBuffer marked = new StringBuffer(); - for (int i = 0; i < markerOffset; i++) - marked.append(queue.elementAt(i)); - return marked.toString(); - } - - public boolean isMarked() { - return (nMarkers != 0); - } - - /** Get a lookahead character */ - public char LA(int i) throws CharStreamException { - fill(i); - return queue.elementAt(markerOffset + i - 1); - } - - /**Return an integer marker that can be used to rewind the buffer to - * its current state. - */ - public int mark() { - syncConsume(); - nMarkers++; - return markerOffset; - } - - /**Rewind the character buffer to a marker. - * @param mark Marker returned previously from mark() - */ - public void rewind(int mark) { - syncConsume(); - markerOffset = mark; - nMarkers--; - } - - /** Reset the input buffer - */ - public void reset() { - nMarkers = 0; - markerOffset = 0; - numToConsume = 0; - queue.reset(); - } - - /** Sync up deferred consumption */ - protected void syncConsume() { - while (numToConsume > 0) { - if (nMarkers > 0) { - // guess mode -- leave leading characters and bump offset. - markerOffset++; - } - else { - // normal mode -- remove first character - queue.removeFirst(); - } - numToConsume--; - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/JavaBlockFinishingInfo.java glassfish-gil/entity-persistence/src/java/persistence/antlr/JavaBlockFinishingInfo.java --- glassfish/entity-persistence/src/java/persistence/antlr/JavaBlockFinishingInfo.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/JavaBlockFinishingInfo.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,33 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class JavaBlockFinishingInfo { - String postscript; // what to generate to terminate block - boolean generatedSwitch;// did block finish with "default:" of switch? - boolean generatedAnIf; - - /** When generating an if or switch, end-of-token lookahead sets - * will become the else or default clause, don't generate an - * error clause in this case. - */ - boolean needAnErrorClause; - - - public JavaBlockFinishingInfo() { - postscript = null; - generatedSwitch = generatedSwitch = false; - needAnErrorClause = true; - } - - public JavaBlockFinishingInfo(String ps, boolean genS, boolean generatedAnIf, boolean n) { - postscript = ps; - generatedSwitch = genS; - this.generatedAnIf = generatedAnIf; - needAnErrorClause = n; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/JavaCharFormatter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/JavaCharFormatter.java --- glassfish/entity-persistence/src/java/persistence/antlr/JavaCharFormatter.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/JavaCharFormatter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,86 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class JavaCharFormatter implements CharFormatter { - - - /** Given a character value, return a string representing the character - * that can be embedded inside a string literal or character literal - * This works for Java/C/C++ code-generation and languages with compatible - * special-character-escapment. - * Code-generators for languages should override this method. - * @param c The character of interest. - * @param forCharLiteral true to escape for char literal, false for string literal - */ - public String escapeChar(int c, boolean forCharLiteral) { - switch (c) { - // case GrammarAnalyzer.EPSILON_TYPE : return "<end-of-token>"; - case '\n': - return "\\n"; - case '\t': - return "\\t"; - case '\r': - return "\\r"; - case '\\': - return "\\\\"; - case '\'': - return forCharLiteral ? "\\'" : "'"; - case '"': - return forCharLiteral ? "\"" : "\\\""; - default : - if (c < ' ' || c > 126) { - if ((0x0000 <= c) && (c <= 0x000F)) { - return "\\u000" + Integer.toString(c, 16); - } - else if ((0x0010 <= c) && (c <= 0x00FF)) { - return "\\u00" + Integer.toString(c, 16); - } - else if ((0x0100 <= c) && (c <= 0x0FFF)) { - return "\\u0" + Integer.toString(c, 16); - } - else { - return "\\u" + Integer.toString(c, 16); - } - } - else { - return String.valueOf((char)c); - } - } - } - - /** Converts a String into a representation that can be use as a literal - * when surrounded by double-quotes. - * @param s The String to be changed into a literal - */ - public String escapeString(String s) { - String retval = new String(); - for (int i = 0; i < s.length(); i++) { - retval += escapeChar(s.charAt(i), false); - } - return retval; - } - - /** Given a character value, return a string representing the character - * literal that can be recognized by the target language compiler. - * This works for languages that use single-quotes for character literals. - * Code-generators for languages should override this method. - * @param c The character of interest. - */ - public String literalChar(int c) { - return "'" + escapeChar(c, true) + "'"; - } - - /** Converts a String into a string literal - * This works for languages that use double-quotes for string literals. - * Code-generators for languages should override this method. - * @param s The String to be changed into a literal - */ - public String literalString(String s) { - return "\"" + escapeString(s) + "\""; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/JavaCodeGenerator.java glassfish-gil/entity-persistence/src/java/persistence/antlr/JavaCodeGenerator.java --- glassfish/entity-persistence/src/java/persistence/antlr/JavaCodeGenerator.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/JavaCodeGenerator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,3484 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Enumeration; -import java.util.Hashtable; - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; - -import java.io.PrintWriter; //SAS: changed for proper text file io -import java.io.IOException; -import java.io.FileWriter; - -/**Generate MyParser.java, MyLexer.java and MyParserTokenTypes.java */ -public class JavaCodeGenerator extends CodeGenerator { - // non-zero if inside syntactic predicate generation - protected int syntacticPredLevel = 0; - - // Are we generating ASTs (for parsers and tree parsers) right now? - protected boolean genAST = false; - - // Are we saving the text consumed (for lexers) right now? - protected boolean saveText = false; - - // Grammar parameters set up to handle different grammar classes. - // These are used to get instanceof tests out of code generation - String labeledElementType; - String labeledElementASTType; - String labeledElementInit; - String commonExtraArgs; - String commonExtraParams; - String commonLocalVars; - String lt1Value; - String exceptionThrown; - String throwNoViable; - - /** Tracks the rule being generated. Used for mapTreeId */ - RuleBlock currentRule; - - /** Tracks the rule or labeled subrule being generated. Used for - AST generation. */ - String currentASTResult; - - /** Mapping between the ids used in the current alt, and the - * names of variables used to represent their AST values. - */ - Hashtable treeVariableMap = new Hashtable(); - - /** Used to keep track of which AST variables have been defined in a rule - * (except for the #rule_name and #rule_name_in var's - */ - Hashtable declaredASTVariables = new Hashtable(); - - /* Count of unnamed generated variables */ - int astVarNumber = 1; - - /** Special value used to mark duplicate in treeVariableMap */ - protected static final String NONUNIQUE = new String(); - - public static final int caseSizeThreshold = 127; // ascii is max - - private Vector semPreds; - - /** Create a Java code-generator using the given Grammar. - * The caller must still call setTool, setBehavior, and setAnalyzer - * before generating code. - */ - public JavaCodeGenerator() { - super(); - charFormatter = new JavaCharFormatter(); - } - - /** Adds a semantic predicate string to the sem pred vector - These strings will be used to build an array of sem pred names - when building a debugging parser. This method should only be - called when the debug option is specified - */ - protected int addSemPred(String predicate) { - semPreds.appendElement(predicate); - return semPreds.size() - 1; - } - - public void exitIfError() { - if (antlrTool.hasError()) { - antlrTool.fatalError("Exiting due to errors."); - } - } - - /**Generate the parser, lexer, treeparser, and token types in Java */ - public void gen() { - // Do the code generation - try { - // Loop over all grammars - Enumeration grammarIter = behavior.grammars.elements(); - while (grammarIter.hasMoreElements()) { - Grammar g = (Grammar)grammarIter.nextElement(); - // Connect all the components to each other - g.setGrammarAnalyzer(analyzer); - g.setCodeGenerator(this); - analyzer.setGrammar(g); - // To get right overloading behavior across hetrogeneous grammars - setupGrammarParameters(g); - g.generate(); - // print out the grammar with lookahead sets (and FOLLOWs) - // System.out.print(g.toString()); - exitIfError(); - } - - // Loop over all token managers (some of which are lexers) - Enumeration tmIter = behavior.tokenManagers.elements(); - while (tmIter.hasMoreElements()) { - TokenManager tm = (TokenManager)tmIter.nextElement(); - if (!tm.isReadOnly()) { - // Write the token manager tokens as Java - // this must appear before genTokenInterchange so that - // labels are set on string literals - genTokenTypes(tm); - // Write the token manager tokens as plain text - genTokenInterchange(tm); - } - exitIfError(); - } - } - catch (IOException e) { - antlrTool.reportException(e, null); - } - } - - /** Generate code for the given grammar element. - * @param blk The {...} action to generate - */ - public void gen(ActionElement action) { - if (DEBUG_CODE_GENERATOR) System.out.println("genAction(" + action + ")"); - if (action.isSemPred) { - genSemPred(action.actionText, action.line); - } - else { - if (grammar.hasSyntacticPredicate) { - println("if ( inputState.guessing==0 ) {"); - tabs++; - } - - // get the name of the followSet for the current rule so that we - // can replace $FOLLOW in the .g file. - ActionTransInfo tInfo = new ActionTransInfo(); - String actionStr = processActionForSpecialSymbols(action.actionText, - action.getLine(), - currentRule, - tInfo); - - if (tInfo.refRuleRoot != null) { - // Somebody referenced "#rule", make sure translated var is valid - // assignment to #rule is left as a ref also, meaning that assignments - // with no other refs like "#rule = foo();" still forces this code to be - // generated (unnecessarily). - println(tInfo.refRuleRoot + " = (" + labeledElementASTType + ")currentAST.root;"); - } - - // dump the translated action - printAction(actionStr); - - if (tInfo.assignToRoot) { - // Somebody did a "#rule=", reset internal currentAST.root - println("currentAST.root = " + tInfo.refRuleRoot + ";"); - // reset the child pointer too to be last sibling in sibling list - println("currentAST.child = " + tInfo.refRuleRoot + "!=null &&" + tInfo.refRuleRoot + ".getFirstChild()!=null ?"); - tabs++; - println(tInfo.refRuleRoot + ".getFirstChild() : " + tInfo.refRuleRoot + ";"); - tabs--; - println("currentAST.advanceChildToEnd();"); - } - - if (grammar.hasSyntacticPredicate) { - tabs--; - println("}"); - } - } - } - - /** Generate code for the given grammar element. - * @param blk The "x|y|z|..." block to generate - */ - public void gen(AlternativeBlock blk) { - if (DEBUG_CODE_GENERATOR) System.out.println("gen(" + blk + ")"); - println("{"); - genBlockPreamble(blk); - genBlockInitAction(blk); - - // Tell AST generation to build subrule result - String saveCurrentASTResult = currentASTResult; - if (blk.getLabel() != null) { - currentASTResult = blk.getLabel(); - } - - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - - JavaBlockFinishingInfo howToFinish = genCommonBlock(blk, true); - genBlockFinish(howToFinish, throwNoViable); - - println("}"); - - // Restore previous AST generation - currentASTResult = saveCurrentASTResult; - } - - /** Generate code for the given grammar element. - * @param blk The block-end element to generate. Block-end - * elements are synthesized by the grammar parser to represent - * the end of a block. - */ - public void gen(BlockEndElement end) { - if (DEBUG_CODE_GENERATOR) System.out.println("genRuleEnd(" + end + ")"); - } - - /** Generate code for the given grammar element. - * @param blk The character literal reference to generate - */ - public void gen(CharLiteralElement atom) { - if (DEBUG_CODE_GENERATOR) System.out.println("genChar(" + atom + ")"); - - if (atom.getLabel() != null) { - println(atom.getLabel() + " = " + lt1Value + ";"); - } - - boolean oldsaveText = saveText; - saveText = saveText && atom.getAutoGenType() == GrammarElement.AUTO_GEN_NONE; - genMatch(atom); - saveText = oldsaveText; - } - - /** Generate code for the given grammar element. - * @param blk The character-range reference to generate - */ - public void gen(CharRangeElement r) { - if (r.getLabel() != null && syntacticPredLevel == 0) { - println(r.getLabel() + " = " + lt1Value + ";"); - } - boolean flag = ( grammar instanceof LexerGrammar && - ( !saveText || - r.getAutoGenType() == - GrammarElement.AUTO_GEN_BANG ) ); - if (flag) { - println("_saveIndex=text.length();"); - } - - println("matchRange(" + r.beginText + "," + r.endText + ");"); - - if (flag) { - println("text.setLength(_saveIndex);"); - } - } - - /** Generate the lexer Java file */ - public void gen(LexerGrammar g) throws IOException { - // If debugging, create a new sempred vector for this grammar - if (g.debuggingOutput) - semPreds = new Vector(); - - setGrammar(g); - if (!(grammar instanceof LexerGrammar)) { - antlrTool.panic("Internal error generating lexer"); - } - - // SAS: moved output creation to method so a subclass can change - // how the output is generated (for VAJ interface) - setupOutput(grammar.getClassName()); - - genAST = false; // no way to gen trees. - saveText = true; // save consumed characters. - - tabs = 0; - - // Generate header common to all Java output files - genHeader(); - // Do not use printAction because we assume tabs==0 - println(behavior.getHeaderAction("")); - - // Generate header specific to lexer Java file - // println("import java.io.FileInputStream;"); - println("import java.io.InputStream;"); - println("import persistence.antlr.TokenStreamException;"); - println("import persistence.antlr.TokenStreamIOException;"); - println("import persistence.antlr.TokenStreamRecognitionException;"); - println("import persistence.antlr.CharStreamException;"); - println("import persistence.antlr.CharStreamIOException;"); - println("import persistence.antlr.ANTLRException;"); - println("import java.io.Reader;"); - println("import java.util.Hashtable;"); - println("import persistence.antlr." + grammar.getSuperClass() + ";"); - println("import persistence.antlr.InputBuffer;"); - println("import persistence.antlr.ByteBuffer;"); - println("import persistence.antlr.CharBuffer;"); - println("import persistence.antlr.Token;"); - println("import persistence.antlr.CommonToken;"); - println("import persistence.antlr.RecognitionException;"); - println("import persistence.antlr.NoViableAltForCharException;"); - println("import persistence.antlr.MismatchedCharException;"); - println("import persistence.antlr.TokenStream;"); - println("import persistence.antlr.ANTLRHashString;"); - println("import persistence.antlr.LexerSharedInputState;"); - println("import persistence.antlr.collections.impl.BitSet;"); - println("import persistence.antlr.SemanticException;"); - - // Generate user-defined lexer file preamble - println(grammar.preambleAction.getText()); - - // Generate lexer class definition - String sup = null; - if (grammar.superClass != null) { - sup = grammar.superClass; - } - else { - sup = "persistence.antlr." + grammar.getSuperClass(); - } - - // print javadoc comment if any - if (grammar.comment != null) { - _println(grammar.comment); - } - - // get prefix (replaces "public" and lets user specify) - String prefix = "public"; - Token tprefix = (Token)grammar.options.get("classHeaderPrefix"); - if (tprefix != null) { - String p = StringUtils.stripFrontBack(tprefix.getText(), "\"", "\""); - if (p != null) { - prefix = p; - } - } - - print(prefix+" "); - print("class " + grammar.getClassName() + " extends " + sup); - println(" implements " + grammar.tokenManager.getName() + TokenTypesFileSuffix + ", TokenStream"); - Token tsuffix = (Token)grammar.options.get("classHeaderSuffix"); - if (tsuffix != null) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(), "\"", "\""); - if (suffix != null) { - print(", " + suffix); // must be an interface name for Java - } - } - println(" {"); - - // Generate user-defined lexer class members - print( - processActionForSpecialSymbols(grammar.classMemberAction.getText(), grammar.classMemberAction.getLine(), currentRule, null) - ); - - // - // Generate the constructor from InputStream, which in turn - // calls the ByteBuffer constructor - // - println("public " + grammar.getClassName() + "(InputStream in) {"); - tabs++; - println("this(new ByteBuffer(in));"); - tabs--; - println("}"); - - // - // Generate the constructor from Reader, which in turn - // calls the CharBuffer constructor - // - println("public " + grammar.getClassName() + "(Reader in) {"); - tabs++; - println("this(new CharBuffer(in));"); - tabs--; - println("}"); - - println("public " + grammar.getClassName() + "(InputBuffer ib) {"); - tabs++; - // if debugging, wrap the input buffer in a debugger - if (grammar.debuggingOutput) - println("this(new LexerSharedInputState(new persistence.antlr.debug.DebuggingInputBuffer(ib)));"); - else - println("this(new LexerSharedInputState(ib));"); - tabs--; - println("}"); - - // - // Generate the constructor from InputBuffer (char or byte) - // - println("public " + grammar.getClassName() + "(LexerSharedInputState state) {"); - tabs++; - - println("super(state);"); - // if debugging, set up array variables and call user-overridable - // debugging setup method - if (grammar.debuggingOutput) { - println(" ruleNames = _ruleNames;"); - println(" semPredNames = _semPredNames;"); - println(" setupDebugging();"); - } - - // Generate the setting of various generated options. - // These need to be before the literals since ANTLRHashString depends on - // the casesensitive stuff. - println("caseSensitiveLiterals = " + g.caseSensitiveLiterals + ";"); - println("setCaseSensitive(" + g.caseSensitive + ");"); - - // Generate the initialization of a hashtable - // containing the string literals used in the lexer - // The literals variable itself is in CharScanner - println("literals = new Hashtable();"); - Enumeration keys = grammar.tokenManager.getTokenSymbolKeys(); - while (keys.hasMoreElements()) { - String key = (String)keys.nextElement(); - if (key.charAt(0) != '"') { - continue; - } - TokenSymbol sym = grammar.tokenManager.getTokenSymbol(key); - if (sym instanceof StringLiteralSymbol) { - StringLiteralSymbol s = (StringLiteralSymbol)sym; - println("literals.put(new ANTLRHashString(" + s.getId() + ", this), new Integer(" + s.getTokenType() + "));"); - } - } - tabs--; - - Enumeration ids; - println("}"); - - // generate the rule name array for debugging - if (grammar.debuggingOutput) { - println("private static final String _ruleNames[] = {"); - - ids = grammar.rules.elements(); - int ruleNum = 0; - while (ids.hasMoreElements()) { - GrammarSymbol sym = (GrammarSymbol)ids.nextElement(); - if (sym instanceof RuleSymbol) - println(" \"" + ((RuleSymbol)sym).getId() + "\","); - } - println("};"); - } - - // Generate nextToken() rule. - // nextToken() is a synthetic lexer rule that is the implicit OR of all - // user-defined lexer rules. - genNextToken(); - - // Generate code for each rule in the lexer - ids = grammar.rules.elements(); - int ruleNum = 0; - while (ids.hasMoreElements()) { - RuleSymbol sym = (RuleSymbol)ids.nextElement(); - // Don't generate the synthetic rules - if (!sym.getId().equals("mnextToken")) { - genRule(sym, false, ruleNum++); - } - exitIfError(); - } - - // Generate the semantic predicate map for debugging - if (grammar.debuggingOutput) - genSemPredMap(); - - // Generate the bitsets used throughout the lexer - genBitsets(bitsetsUsed, ((LexerGrammar)grammar).charVocabulary.size()); - - println(""); - println("}"); - - // Close the lexer output stream - currentOutput.close(); - currentOutput = null; - } - - /** Generate code for the given grammar element. - * @param blk The (...)+ block to generate - */ - public void gen(OneOrMoreBlock blk) { - if (DEBUG_CODE_GENERATOR) System.out.println("gen+(" + blk + ")"); - String label; - String cnt; - println("{"); - genBlockPreamble(blk); - if (blk.getLabel() != null) { - cnt = "_cnt_" + blk.getLabel(); - } - else { - cnt = "_cnt" + blk.ID; - } - println("int " + cnt + "=0;"); - if (blk.getLabel() != null) { - label = blk.getLabel(); - } - else { - label = "_loop" + blk.ID; - } - println(label + ":"); - println("do {"); - tabs++; - // generate the init action for ()+ ()* inside the loop - // this allows us to do usefull EOF checking... - genBlockInitAction(blk); - - // Tell AST generation to build subrule result - String saveCurrentASTResult = currentASTResult; - if (blk.getLabel() != null) { - currentASTResult = blk.getLabel(); - } - - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - - // generate exit test if greedy set to false - // and an alt is ambiguous with exit branch - // or when lookahead derived purely from end-of-file - // Lookahead analysis stops when end-of-file is hit, - // returning set {epsilon}. Since {epsilon} is not - // ambig with any real tokens, no error is reported - // by deterministic() routines and we have to check - // for the case where the lookahead depth didn't get - // set to NONDETERMINISTIC (this only happens when the - // FOLLOW contains real atoms + epsilon). - boolean generateNonGreedyExitPath = false; - int nonGreedyExitDepth = grammar.maxk; - - if (!blk.greedy && - blk.exitLookaheadDepth <= grammar.maxk && - blk.exitCache[blk.exitLookaheadDepth].containsEpsilon()) { - generateNonGreedyExitPath = true; - nonGreedyExitDepth = blk.exitLookaheadDepth; - } - else if (!blk.greedy && - blk.exitLookaheadDepth == LLkGrammarAnalyzer.NONDETERMINISTIC) { - generateNonGreedyExitPath = true; - } - - // generate exit test if greedy set to false - // and an alt is ambiguous with exit branch - if (generateNonGreedyExitPath) { - if (DEBUG_CODE_GENERATOR) { - System.out.println("nongreedy (...)+ loop; exit depth is " + - blk.exitLookaheadDepth); - } - String predictExit = - getLookaheadTestExpression(blk.exitCache, - nonGreedyExitDepth); - println("// nongreedy exit test"); - println("if ( " + cnt + ">=1 && " + predictExit + ") break " + label + ";"); - } - - JavaBlockFinishingInfo howToFinish = genCommonBlock(blk, false); - genBlockFinish( - howToFinish, - "if ( " + cnt + ">=1 ) { break " + label + "; } else {" + throwNoViable + "}" - ); - - println(cnt + "++;"); - tabs--; - println("} while (true);"); - println("}"); - - // Restore previous AST generation - currentASTResult = saveCurrentASTResult; - } - - /** Generate the parser Java file */ - public void gen(ParserGrammar g) throws IOException { - - // if debugging, set up a new vector to keep track of sempred - // strings for this grammar - if (g.debuggingOutput) - semPreds = new Vector(); - - setGrammar(g); - if (!(grammar instanceof ParserGrammar)) { - antlrTool.panic("Internal error generating parser"); - } - - // Open the output stream for the parser and set the currentOutput - // SAS: moved file setup so subclass could do it (for VAJ interface) - setupOutput(grammar.getClassName()); - - genAST = grammar.buildAST; - - tabs = 0; - - // Generate the header common to all output files. - genHeader(); - // Do not use printAction because we assume tabs==0 - println(behavior.getHeaderAction("")); - - // Generate header for the parser - println("import persistence.antlr.TokenBuffer;"); - println("import persistence.antlr.TokenStreamException;"); - println("import persistence.antlr.TokenStreamIOException;"); - println("import persistence.antlr.ANTLRException;"); - println("import persistence.antlr." + grammar.getSuperClass() + ";"); - println("import persistence.antlr.Token;"); - println("import persistence.antlr.TokenStream;"); - println("import persistence.antlr.RecognitionException;"); - println("import persistence.antlr.NoViableAltException;"); - println("import persistence.antlr.MismatchedTokenException;"); - println("import persistence.antlr.SemanticException;"); - println("import persistence.antlr.ParserSharedInputState;"); - println("import persistence.antlr.collections.impl.BitSet;"); - if ( genAST ) { - println("import persistence.antlr.collections.AST;"); - println("import java.util.Hashtable;"); - println("import persistence.antlr.ASTFactory;"); - println("import persistence.antlr.ASTPair;"); - println("import persistence.antlr.collections.impl.ASTArray;"); - } - - // Output the user-defined parser preamble - println(grammar.preambleAction.getText()); - - // Generate parser class definition - String sup = null; - if (grammar.superClass != null) - sup = grammar.superClass; - else - sup = "persistence.antlr." + grammar.getSuperClass(); - - // print javadoc comment if any - if (grammar.comment != null) { - _println(grammar.comment); - } - - // get prefix (replaces "public" and lets user specify) - String prefix = "public"; - Token tprefix = (Token)grammar.options.get("classHeaderPrefix"); - if (tprefix != null) { - String p = StringUtils.stripFrontBack(tprefix.getText(), "\"", "\""); - if (p != null) { - prefix = p; - } - } - - print(prefix+" "); - print("class " + grammar.getClassName() + " extends " + sup); - println(" implements " + grammar.tokenManager.getName() + TokenTypesFileSuffix); - - Token tsuffix = (Token)grammar.options.get("classHeaderSuffix"); - if (tsuffix != null) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(), "\"", "\""); - if (suffix != null) - print(", " + suffix); // must be an interface name for Java - } - println(" {"); - - // set up an array of all the rule names so the debugger can - // keep track of them only by number -- less to store in tree... - if (grammar.debuggingOutput) { - println("private static final String _ruleNames[] = {"); - - Enumeration ids = grammar.rules.elements(); - int ruleNum = 0; - while (ids.hasMoreElements()) { - GrammarSymbol sym = (GrammarSymbol)ids.nextElement(); - if (sym instanceof RuleSymbol) - println(" \"" + ((RuleSymbol)sym).getId() + "\","); - } - println("};"); - } - - // Generate user-defined parser class members - print( - processActionForSpecialSymbols(grammar.classMemberAction.getText(), grammar.classMemberAction.getLine(), currentRule, null) - ); - - // Generate parser class constructor from TokenBuffer - println(""); - println("protected " + grammar.getClassName() + "(TokenBuffer tokenBuf, int k) {"); - println(" super(tokenBuf,k);"); - println(" tokenNames = _tokenNames;"); - // if debugging, set up arrays and call the user-overridable - // debugging setup method - if (grammar.debuggingOutput) { - println(" ruleNames = _ruleNames;"); - println(" semPredNames = _semPredNames;"); - println(" setupDebugging(tokenBuf);"); - } - if ( grammar.buildAST ) { - println(" buildTokenTypeASTClassMap();"); - println(" astFactory = new ASTFactory(getTokenTypeToASTClassMap());"); - } - println("}"); - println(""); - - println("public " + grammar.getClassName() + "(TokenBuffer tokenBuf) {"); - println(" this(tokenBuf," + grammar.maxk + ");"); - println("}"); - println(""); - - // Generate parser class constructor from TokenStream - println("protected " + grammar.getClassName() + "(TokenStream lexer, int k) {"); - println(" super(lexer,k);"); - println(" tokenNames = _tokenNames;"); - - // if debugging, set up arrays and call the user-overridable - // debugging setup method - if (grammar.debuggingOutput) { - println(" ruleNames = _ruleNames;"); - println(" semPredNames = _semPredNames;"); - println(" setupDebugging(lexer);"); - } - if ( grammar.buildAST ) { - println(" buildTokenTypeASTClassMap();"); - println(" astFactory = new ASTFactory(getTokenTypeToASTClassMap());"); - } - println("}"); - println(""); - - println("public " + grammar.getClassName() + "(TokenStream lexer) {"); - println(" this(lexer," + grammar.maxk + ");"); - println("}"); - println(""); - - println("public " + grammar.getClassName() + "(ParserSharedInputState state) {"); - println(" super(state," + grammar.maxk + ");"); - println(" tokenNames = _tokenNames;"); - if ( grammar.buildAST ) { - println(" buildTokenTypeASTClassMap();"); - println(" astFactory = new ASTFactory(getTokenTypeToASTClassMap());"); - } - println("}"); - println(""); - - // Generate code for each rule in the grammar - Enumeration ids = grammar.rules.elements(); - int ruleNum = 0; - while (ids.hasMoreElements()) { - GrammarSymbol sym = (GrammarSymbol)ids.nextElement(); - if (sym instanceof RuleSymbol) { - RuleSymbol rs = (RuleSymbol)sym; - genRule(rs, rs.references.size() == 0, ruleNum++); - } - exitIfError(); - } - - // Generate the token names - genTokenStrings(); - - if ( grammar.buildAST ) { - genTokenASTNodeMap(); - } - - // Generate the bitsets used throughout the grammar - genBitsets(bitsetsUsed, grammar.tokenManager.maxTokenType()); - - // Generate the semantic predicate map for debugging - if (grammar.debuggingOutput) - genSemPredMap(); - - // Close class definition - println(""); - println("}"); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - - /** Generate code for the given grammar element. - * @param blk The rule-reference to generate - */ - public void gen(RuleRefElement rr) { - if (DEBUG_CODE_GENERATOR) System.out.println("genRR(" + rr + ")"); - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rr.targetRule); - if (rs == null || !rs.isDefined()) { - // Is this redundant??? - antlrTool.error("Rule '" + rr.targetRule + "' is not defined", grammar.getFilename(), rr.getLine(), rr.getColumn()); - return; - } - if (!(rs instanceof RuleSymbol)) { - // Is this redundant??? - antlrTool.error("'" + rr.targetRule + "' does not name a grammar rule", grammar.getFilename(), rr.getLine(), rr.getColumn()); - return; - } - - genErrorTryForElement(rr); - - // AST value for labeled rule refs in tree walker. - // This is not AST construction; it is just the input tree node value. - if (grammar instanceof TreeWalkerGrammar && - rr.getLabel() != null && - syntacticPredLevel == 0) { - println(rr.getLabel() + " = _t==ASTNULL ? null : " + lt1Value + ";"); - } - - // if in lexer and ! on rule ref or alt or rule, save buffer index to kill later - if (grammar instanceof LexerGrammar && (!saveText || rr.getAutoGenType() == GrammarElement.AUTO_GEN_BANG)) { - println("_saveIndex=text.length();"); - } - - // Process return value assignment if any - printTabs(); - if (rr.idAssign != null) { - // Warn if the rule has no return type - if (rs.block.returnAction == null) { - antlrTool.warning("Rule '" + rr.targetRule + "' has no return type", grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - _print(rr.idAssign + "="); - } - else { - // Warn about return value if any, but not inside syntactic predicate - if (!(grammar instanceof LexerGrammar) && syntacticPredLevel == 0 && rs.block.returnAction != null) { - antlrTool.warning("Rule '" + rr.targetRule + "' returns a value", grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - } - - // Call the rule - GenRuleInvocation(rr); - - // if in lexer and ! on element or alt or rule, save buffer index to kill later - if (grammar instanceof LexerGrammar && (!saveText || rr.getAutoGenType() == GrammarElement.AUTO_GEN_BANG)) { - println("text.setLength(_saveIndex);"); - } - - // if not in a syntactic predicate - if (syntacticPredLevel == 0) { - boolean doNoGuessTest = ( - grammar.hasSyntacticPredicate && - ( - grammar.buildAST && rr.getLabel() != null || - (genAST && rr.getAutoGenType() == GrammarElement.AUTO_GEN_NONE) - ) - ); - if (doNoGuessTest) { - // println("if (inputState.guessing==0) {"); - // tabs++; - } - - if (grammar.buildAST && rr.getLabel() != null) { - // always gen variable for rule return on labeled rules - println(rr.getLabel() + "_AST = (" + labeledElementASTType + ")returnAST;"); - } - if (genAST) { - switch (rr.getAutoGenType()) { - case GrammarElement.AUTO_GEN_NONE: - // println("theASTFactory.addASTChild(currentAST, returnAST);"); - println("astFactory.addASTChild(currentAST, returnAST);"); - break; - case GrammarElement.AUTO_GEN_CARET: - antlrTool.error("Internal: encountered ^ after rule reference"); - break; - default: - break; - } - } - - // if a lexer and labeled, Token label defined at rule level, just set it here - if (grammar instanceof LexerGrammar && rr.getLabel() != null) { - println(rr.getLabel() + "=_returnToken;"); - } - - if (doNoGuessTest) { - // tabs--; - // println("}"); - } - } - genErrorCatchForElement(rr); - } - - /** Generate code for the given grammar element. - * @param blk The string-literal reference to generate - */ - public void gen(StringLiteralElement atom) { - if (DEBUG_CODE_GENERATOR) System.out.println("genString(" + atom + ")"); - - // Variable declarations for labeled elements - if (atom.getLabel() != null && syntacticPredLevel == 0) { - println(atom.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(atom); - - // is there a bang on the literal? - boolean oldsaveText = saveText; - saveText = saveText && atom.getAutoGenType() == GrammarElement.AUTO_GEN_NONE; - - // matching - genMatch(atom); - - saveText = oldsaveText; - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _t.getNextSibling();"); - } - } - - /** Generate code for the given grammar element. - * @param blk The token-range reference to generate - */ - public void gen(TokenRangeElement r) { - genErrorTryForElement(r); - if (r.getLabel() != null && syntacticPredLevel == 0) { - println(r.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(r); - - // match - println("matchRange(" + r.beginText + "," + r.endText + ");"); - genErrorCatchForElement(r); - } - - /** Generate code for the given grammar element. - * @param blk The token-reference to generate - */ - public void gen(TokenRefElement atom) { - if (DEBUG_CODE_GENERATOR) System.out.println("genTokenRef(" + atom + ")"); - if (grammar instanceof LexerGrammar) { - antlrTool.panic("Token reference found in lexer"); - } - genErrorTryForElement(atom); - // Assign Token value to token label variable - if (atom.getLabel() != null && syntacticPredLevel == 0) { - println(atom.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(atom); - // matching - genMatch(atom); - genErrorCatchForElement(atom); - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _t.getNextSibling();"); - } - } - - public void gen(TreeElement t) { - // save AST cursor - println("AST __t" + t.ID + " = _t;"); - - // If there is a label on the root, then assign that to the variable - if (t.root.getLabel() != null) { - println(t.root.getLabel() + " = _t==ASTNULL ? null :(" + labeledElementASTType + ")_t;"); - } - - // check for invalid modifiers ! and ^ on tree element roots - if ( t.root.getAutoGenType() == GrammarElement.AUTO_GEN_BANG ) { - antlrTool.error("Suffixing a root node with '!' is not implemented", - grammar.getFilename(), t.getLine(), t.getColumn()); - t.root.setAutoGenType(GrammarElement.AUTO_GEN_NONE); - } - if ( t.root.getAutoGenType() == GrammarElement.AUTO_GEN_CARET ) { - antlrTool.warning("Suffixing a root node with '^' is redundant; already a root", - grammar.getFilename(), t.getLine(), t.getColumn()); - t.root.setAutoGenType(GrammarElement.AUTO_GEN_NONE); - } - - // Generate AST variables - genElementAST(t.root); - if (grammar.buildAST) { - // Save the AST construction state - println("ASTPair __currentAST" + t.ID + " = currentAST.copy();"); - // Make the next item added a child of the TreeElement root - println("currentAST.root = currentAST.child;"); - println("currentAST.child = null;"); - } - - // match root - if ( t.root instanceof WildcardElement ) { - println("if ( _t==null ) throw new MismatchedTokenException();"); - } - else { - genMatch(t.root); - } - // move to list of children - println("_t = _t.getFirstChild();"); - - // walk list of children, generating code for each - for (int i = 0; i < t.getAlternatives().size(); i++) { - Alternative a = t.getAlternativeAt(i); - AlternativeElement e = a.head; - while (e != null) { - e.generate(); - e = e.next; - } - } - - if (grammar.buildAST) { - // restore the AST construction state to that just after the - // tree root was added - println("currentAST = __currentAST" + t.ID + ";"); - } - // restore AST cursor - println("_t = __t" + t.ID + ";"); - // move cursor to sibling of tree just parsed - println("_t = _t.getNextSibling();"); - } - - /** Generate the tree-parser Java file */ - public void gen(TreeWalkerGrammar g) throws IOException { - // SAS: debugging stuff removed for now... - setGrammar(g); - if (!(grammar instanceof TreeWalkerGrammar)) { - antlrTool.panic("Internal error generating tree-walker"); - } - // Open the output stream for the parser and set the currentOutput - // SAS: move file open to method so subclass can override it - // (mainly for VAJ interface) - setupOutput(grammar.getClassName()); - - genAST = grammar.buildAST; - tabs = 0; - - // Generate the header common to all output files. - genHeader(); - // Do not use printAction because we assume tabs==0 - println(behavior.getHeaderAction("")); - - // Generate header for the parser - println("import persistence.antlr." + grammar.getSuperClass() + ";"); - println("import persistence.antlr.Token;"); - println("import persistence.antlr.collections.AST;"); - println("import persistence.antlr.RecognitionException;"); - println("import persistence.antlr.ANTLRException;"); - println("import persistence.antlr.NoViableAltException;"); - println("import persistence.antlr.MismatchedTokenException;"); - println("import persistence.antlr.SemanticException;"); - println("import persistence.antlr.collections.impl.BitSet;"); - println("import persistence.antlr.ASTPair;"); - println("import persistence.antlr.collections.impl.ASTArray;"); - - // Output the user-defined parser premamble - println(grammar.preambleAction.getText()); - - // Generate parser class definition - String sup = null; - if (grammar.superClass != null) { - sup = grammar.superClass; - } - else { - sup = "persistence.antlr." + grammar.getSuperClass(); - } - println(""); - - // print javadoc comment if any - if (grammar.comment != null) { - _println(grammar.comment); - } - - // get prefix (replaces "public" and lets user specify) - String prefix = "public"; - Token tprefix = (Token)grammar.options.get("classHeaderPrefix"); - if (tprefix != null) { - String p = StringUtils.stripFrontBack(tprefix.getText(), "\"", "\""); - if (p != null) { - prefix = p; - } - } - - print(prefix+" "); - print("class " + grammar.getClassName() + " extends " + sup); - println(" implements " + grammar.tokenManager.getName() + TokenTypesFileSuffix); - Token tsuffix = (Token)grammar.options.get("classHeaderSuffix"); - if (tsuffix != null) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(), "\"", "\""); - if (suffix != null) { - print(", " + suffix); // must be an interface name for Java - } - } - println(" {"); - - // Generate user-defined parser class members - print( - processActionForSpecialSymbols(grammar.classMemberAction.getText(), grammar.classMemberAction.getLine(), currentRule, null) - ); - - // Generate default parser class constructor - println("public " + grammar.getClassName() + "() {"); - tabs++; - println("tokenNames = _tokenNames;"); - tabs--; - println("}"); - println(""); - - // Generate code for each rule in the grammar - Enumeration ids = grammar.rules.elements(); - int ruleNum = 0; - String ruleNameInits = ""; - while (ids.hasMoreElements()) { - GrammarSymbol sym = (GrammarSymbol)ids.nextElement(); - if (sym instanceof RuleSymbol) { - RuleSymbol rs = (RuleSymbol)sym; - genRule(rs, rs.references.size() == 0, ruleNum++); - } - exitIfError(); - } - - // Generate the token names - genTokenStrings(); - - // Generate the bitsets used throughout the grammar - genBitsets(bitsetsUsed, grammar.tokenManager.maxTokenType()); - - // Close class definition - println("}"); - println(""); - - // Close the parser output stream - currentOutput.close(); - currentOutput = null; - } - - /** Generate code for the given grammar element. - * @param wc The wildcard element to generate - */ - public void gen(WildcardElement wc) { - // Variable assignment for labeled elements - if (wc.getLabel() != null && syntacticPredLevel == 0) { - println(wc.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(wc); - // Match anything but EOF - if (grammar instanceof TreeWalkerGrammar) { - println("if ( _t==null ) throw new MismatchedTokenException();"); - } - else if (grammar instanceof LexerGrammar) { - if (grammar instanceof LexerGrammar && - (!saveText || wc.getAutoGenType() == GrammarElement.AUTO_GEN_BANG)) { - println("_saveIndex=text.length();"); - } - println("matchNot(EOF_CHAR);"); - if (grammar instanceof LexerGrammar && - (!saveText || wc.getAutoGenType() == GrammarElement.AUTO_GEN_BANG)) { - println("text.setLength(_saveIndex);"); // kill text atom put in buffer - } - } - else { - println("matchNot(" + getValueString(Token.EOF_TYPE) + ");"); - } - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _t.getNextSibling();"); - } - } - - /** Generate code for the given grammar element. - * @param blk The (...)* block to generate - */ - public void gen(ZeroOrMoreBlock blk) { - if (DEBUG_CODE_GENERATOR) System.out.println("gen*(" + blk + ")"); - println("{"); - genBlockPreamble(blk); - String label; - if (blk.getLabel() != null) { - label = blk.getLabel(); - } - else { - label = "_loop" + blk.ID; - } - println(label + ":"); - println("do {"); - tabs++; - // generate the init action for ()* inside the loop - // this allows us to do usefull EOF checking... - genBlockInitAction(blk); - - // Tell AST generation to build subrule result - String saveCurrentASTResult = currentASTResult; - if (blk.getLabel() != null) { - currentASTResult = blk.getLabel(); - } - - boolean ok = grammar.theLLkAnalyzer.deterministic(blk); - - // generate exit test if greedy set to false - // and an alt is ambiguous with exit branch - // or when lookahead derived purely from end-of-file - // Lookahead analysis stops when end-of-file is hit, - // returning set {epsilon}. Since {epsilon} is not - // ambig with any real tokens, no error is reported - // by deterministic() routines and we have to check - // for the case where the lookahead depth didn't get - // set to NONDETERMINISTIC (this only happens when the - // FOLLOW contains real atoms + epsilon). - boolean generateNonGreedyExitPath = false; - int nonGreedyExitDepth = grammar.maxk; - - if (!blk.greedy && - blk.exitLookaheadDepth <= grammar.maxk && - blk.exitCache[blk.exitLookaheadDepth].containsEpsilon()) { - generateNonGreedyExitPath = true; - nonGreedyExitDepth = blk.exitLookaheadDepth; - } - else if (!blk.greedy && - blk.exitLookaheadDepth == LLkGrammarAnalyzer.NONDETERMINISTIC) { - generateNonGreedyExitPath = true; - } - if (generateNonGreedyExitPath) { - if (DEBUG_CODE_GENERATOR) { - System.out.println("nongreedy (...)* loop; exit depth is " + - blk.exitLookaheadDepth); - } - String predictExit = - getLookaheadTestExpression(blk.exitCache, - nonGreedyExitDepth); - println("// nongreedy exit test"); - println("if (" + predictExit + ") break " + label + ";"); - } - - JavaBlockFinishingInfo howToFinish = genCommonBlock(blk, false); - genBlockFinish(howToFinish, "break " + label + ";"); - - tabs--; - println("} while (true);"); - println("}"); - - // Restore previous AST generation - currentASTResult = saveCurrentASTResult; - } - - /** Generate an alternative. - * @param alt The alternative to generate - * @param blk The block to which the alternative belongs - */ - protected void genAlt(Alternative alt, AlternativeBlock blk) { - // Save the AST generation state, and set it to that of the alt - boolean savegenAST = genAST; - genAST = genAST && alt.getAutoGen(); - - boolean oldsaveTest = saveText; - saveText = saveText && alt.getAutoGen(); - - // Reset the variable name map for the alternative - Hashtable saveMap = treeVariableMap; - treeVariableMap = new Hashtable(); - - // Generate try block around the alt for error handling - if (alt.exceptionSpec != null) { - println("try { // for error handling"); - tabs++; - } - - AlternativeElement elem = alt.head; - while (!(elem instanceof BlockEndElement)) { - elem.generate(); // alt can begin with anything. Ask target to gen. - elem = elem.next; - } - - if (genAST) { - if (blk instanceof RuleBlock) { - // Set the AST return value for the rule - RuleBlock rblk = (RuleBlock)blk; - if (grammar.hasSyntacticPredicate) { - // println("if ( inputState.guessing==0 ) {"); - // tabs++; - } - println(rblk.getRuleName() + "_AST = (" + labeledElementASTType + ")currentAST.root;"); - if (grammar.hasSyntacticPredicate) { - // --tabs; - // println("}"); - } - } - else if (blk.getLabel() != null) { - // ### future: also set AST value for labeled subrules. - // println(blk.getLabel() + "_AST = ("+labeledElementASTType+")currentAST.root;"); - antlrTool.warning("Labeled subrules not yet supported", grammar.getFilename(), blk.getLine(), blk.getColumn()); - } - } - - if (alt.exceptionSpec != null) { - // close try block - tabs--; - println("}"); - genErrorHandler(alt.exceptionSpec); - } - - genAST = savegenAST; - saveText = oldsaveTest; - - treeVariableMap = saveMap; - } - - /** Generate all the bitsets to be used in the parser or lexer - * Generate the raw bitset data like "long _tokenSet1_data[] = {...};" - * and the BitSet object declarations like "BitSet _tokenSet1 = new BitSet(_tokenSet1_data);" - * Note that most languages do not support object initialization inside a - * class definition, so other code-generators may have to separate the - * bitset declarations from the initializations (e.g., put the initializations - * in the generated constructor instead). - * @param bitsetList The list of bitsets to generate. - * @param maxVocabulary Ensure that each generated bitset can contain at least this value. - */ - protected void genBitsets(Vector bitsetList, - int maxVocabulary - ) { - println(""); - for (int i = 0; i < bitsetList.size(); i++) { - BitSet p = (BitSet)bitsetList.elementAt(i); - // Ensure that generated BitSet is large enough for vocabulary - p.growToInclude(maxVocabulary); - genBitSet(p, i); - } - } - - /** Do something simple like: - * private static final long[] mk_tokenSet_0() { - * long[] data = { -2305839160922996736L, 63L, 16777216L, 0L, 0L, 0L }; - * return data; - * } - * public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - * - * Or, for large bitsets, optimize init so ranges are collapsed into loops. - * This is most useful for lexers using unicode. - */ - private void genBitSet(BitSet p, int id) { - // initialization data - println( - "private static final long[] mk" + getBitsetName(id) + "() {" - ); - int n = p.lengthInLongWords(); - if ( n<BITSET_OPTIMIZE_INIT_THRESHOLD ) { - println("\tlong[] data = { " + p.toStringOfWords() + "};"); - } - else { - // will init manually, allocate space then set values - println("\tlong[] data = new long["+n+"];"); - long[] elems = p.toPackedArray(); - for (int i = 0; i < elems.length;) { - if ( elems[i]==0 ) { - // done automatically by Java, don't waste time/code - i++; - continue; - } - if ( (i+1)==elems.length || elems[i]!=elems[i+1] ) { - // last number or no run of numbers, just dump assignment - println("\tdata["+i+"]="+elems[i]+"L;"); - i++; - } - else { - // scan to find end of run - int j; - for (j = i + 1; - j < elems.length && elems[j]==elems[i]; - j++) - { - } - // j-1 is last member of run - println("\tfor (int i = "+i+"; i<="+(j-1)+"; i++) { data[i]="+ - elems[i]+"L; }"); - i = j; - } - } - } - - println("\treturn data;"); - println("}"); - // BitSet object - println( - "public static final BitSet " + getBitsetName(id) + " = new BitSet(" + - "mk" + getBitsetName(id) + "()" + - ");" - ); - } - - /** Generate the finish of a block, using a combination of the info - * returned from genCommonBlock() and the action to perform when - * no alts were taken - * @param howToFinish The return of genCommonBlock() - * @param noViableAction What to generate when no alt is taken - */ - private void genBlockFinish(JavaBlockFinishingInfo howToFinish, String noViableAction) { - if (howToFinish.needAnErrorClause && - (howToFinish.generatedAnIf || howToFinish.generatedSwitch)) { - if (howToFinish.generatedAnIf) { - println("else {"); - } - else { - println("{"); - } - tabs++; - println(noViableAction); - tabs--; - println("}"); - } - - if (howToFinish.postscript != null) { - println(howToFinish.postscript); - } - } - - /** Generate the init action for a block, which may be a RuleBlock or a - * plain AlternativeBLock. - * @blk The block for which the preamble is to be generated. - */ - protected void genBlockInitAction(AlternativeBlock blk) { - // dump out init action - if (blk.initAction != null) { - printAction(processActionForSpecialSymbols(blk.initAction, blk.getLine(), currentRule, null)); - } - } - - /** Generate the header for a block, which may be a RuleBlock or a - * plain AlternativeBLock. This generates any variable declarations - * and syntactic-predicate-testing variables. - * @blk The block for which the preamble is to be generated. - */ - protected void genBlockPreamble(AlternativeBlock blk) { - // define labels for rule blocks. - if (blk instanceof RuleBlock) { - RuleBlock rblk = (RuleBlock)blk; - if (rblk.labeledElements != null) { - for (int i = 0; i < rblk.labeledElements.size(); i++) { - AlternativeElement a = (AlternativeElement)rblk.labeledElements.elementAt(i); - // System.out.println("looking at labeled element: "+a); - // Variables for labeled rule refs and - // subrules are different than variables for - // grammar atoms. This test is a little tricky - // because we want to get all rule refs and ebnf, - // but not rule blocks or syntactic predicates - if ( - a instanceof RuleRefElement || - a instanceof AlternativeBlock && - !(a instanceof RuleBlock) && - !(a instanceof SynPredBlock) - ) { - - if ( - !(a instanceof RuleRefElement) && - ((AlternativeBlock)a).not && - analyzer.subruleCanBeInverted(((AlternativeBlock)a), grammar instanceof LexerGrammar) - ) { - // Special case for inverted subrules that - // will be inlined. Treat these like - // token or char literal references - println(labeledElementType + " " + a.getLabel() + " = " + labeledElementInit + ";"); - if (grammar.buildAST) { - genASTDeclaration(a); - } - } - else { - if (grammar.buildAST) { - // Always gen AST variables for - // labeled elements, even if the - // element itself is marked with ! - genASTDeclaration(a); - } - if (grammar instanceof LexerGrammar) { - println("Token " + a.getLabel() + "=null;"); - } - if (grammar instanceof TreeWalkerGrammar) { - // always generate rule-ref variables - // for tree walker - println(labeledElementType + " " + a.getLabel() + " = " + labeledElementInit + ";"); - } - } - } - else { - // It is a token or literal reference. Generate the - // correct variable type for this grammar - println(labeledElementType + " " + a.getLabel() + " = " + labeledElementInit + ";"); - - // In addition, generate *_AST variables if - // building ASTs - if (grammar.buildAST) { - if (a instanceof GrammarAtom && - ((GrammarAtom)a).getASTNodeType() != null) { - GrammarAtom ga = (GrammarAtom)a; - genASTDeclaration(a, ga.getASTNodeType()); - } - else { - genASTDeclaration(a); - } - } - } - } - } - } - } - - /** Generate a series of case statements that implement a BitSet test. - * @param p The Bitset for which cases are to be generated - */ - protected void genCases(BitSet p) { - if (DEBUG_CODE_GENERATOR) System.out.println("genCases(" + p + ")"); - int[] elems; - - elems = p.toArray(); - // Wrap cases four-per-line for lexer, one-per-line for parser - int wrap = (grammar instanceof LexerGrammar) ? 4 : 1; - int j = 1; - boolean startOfLine = true; - for (int i = 0; i < elems.length; i++) { - if (j == 1) { - print(""); - } - else { - _print(" "); - } - _print("case " + getValueString(elems[i]) + ":"); - - if (j == wrap) { - _println(""); - startOfLine = true; - j = 1; - } - else { - j++; - startOfLine = false; - } - } - if (!startOfLine) { - _println(""); - } - } - - /**Generate common code for a block of alternatives; return a - * postscript that needs to be generated at the end of the - * block. Other routines may append else-clauses and such for - * error checking before the postfix is generated. If the - * grammar is a lexer, then generate alternatives in an order - * where alternatives requiring deeper lookahead are generated - * first, and EOF in the lookahead set reduces the depth of - * the lookahead. @param blk The block to generate @param - * noTestForSingle If true, then it does not generate a test - * for a single alternative. - */ - public JavaBlockFinishingInfo genCommonBlock(AlternativeBlock blk, - boolean noTestForSingle) { - int nIF = 0; - boolean createdLL1Switch = false; - int closingBracesOfIFSequence = 0; - JavaBlockFinishingInfo finishingInfo = new JavaBlockFinishingInfo(); - if (DEBUG_CODE_GENERATOR) System.out.println("genCommonBlock(" + blk + ")"); - - // Save the AST generation state, and set it to that of the block - boolean savegenAST = genAST; - genAST = genAST && blk.getAutoGen(); - - boolean oldsaveTest = saveText; - saveText = saveText && blk.getAutoGen(); - - // Is this block inverted? If so, generate special-case code - if ( - blk.not && - analyzer.subruleCanBeInverted(blk, grammar instanceof LexerGrammar) - ) { - if (DEBUG_CODE_GENERATOR) System.out.println("special case: ~(subrule)"); - Lookahead p = analyzer.look(1, blk); - // Variable assignment for labeled elements - if (blk.getLabel() != null && syntacticPredLevel == 0) { - println(blk.getLabel() + " = " + lt1Value + ";"); - } - - // AST - genElementAST(blk); - - String astArgs = ""; - if (grammar instanceof TreeWalkerGrammar) { - astArgs = "_t,"; - } - - // match the bitset for the alternative - println("match(" + astArgs + getBitsetName(markBitsetForGen(p.fset)) + ");"); - - // tack on tree cursor motion if doing a tree walker - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _t.getNextSibling();"); - } - return finishingInfo; - } - - // Special handling for single alt - if (blk.getAlternatives().size() == 1) { - Alternative alt = blk.getAlternativeAt(0); - // Generate a warning if there is a synPred for single alt. - if (alt.synPred != null) { - antlrTool.warning( - "Syntactic predicate superfluous for single alternative", - grammar.getFilename(), - blk.getAlternativeAt(0).synPred.getLine(), - blk.getAlternativeAt(0).synPred.getColumn() - ); - } - if (noTestForSingle) { - if (alt.semPred != null) { - // Generate validating predicate - genSemPred(alt.semPred, blk.line); - } - genAlt(alt, blk); - return finishingInfo; - } - } - - // count number of simple LL(1) cases; only do switch for - // many LL(1) cases (no preds, no end of token refs) - // We don't care about exit paths for (...)*, (...)+ - // because we don't explicitly have a test for them - // as an alt in the loop. - // - // Also, we now count how many unicode lookahead sets - // there are--they must be moved to DEFAULT or ELSE - // clause. - int nLL1 = 0; - for (int i = 0; i < blk.getAlternatives().size(); i++) { - Alternative a = blk.getAlternativeAt(i); - if (suitableForCaseExpression(a)) { - nLL1++; - } - } - - // do LL(1) cases - if (nLL1 >= makeSwitchThreshold) { - // Determine the name of the item to be compared - String testExpr = lookaheadString(1); - createdLL1Switch = true; - // when parsing trees, convert null to valid tree node with NULL lookahead - if (grammar instanceof TreeWalkerGrammar) { - println("if (_t==null) _t=ASTNULL;"); - } - println("switch ( " + testExpr + ") {"); - for (int i = 0; i < blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - // ignore any non-LL(1) alts, predicated alts, - // or end-of-token alts for case expressions - if (!suitableForCaseExpression(alt)) { - continue; - } - Lookahead p = alt.cache[1]; - if (p.fset.degree() == 0 && !p.containsEpsilon()) { - antlrTool.warning("Alternate omitted due to empty prediction set", - grammar.getFilename(), - alt.head.getLine(), alt.head.getColumn()); - } - else { - genCases(p.fset); - println("{"); - tabs++; - genAlt(alt, blk); - println("break;"); - tabs--; - println("}"); - } - } - println("default:"); - tabs++; - } - - // do non-LL(1) and nondeterministic cases This is tricky in - // the lexer, because of cases like: STAR : '*' ; ASSIGN_STAR - // : "*="; Since nextToken is generated without a loop, then - // the STAR will have end-of-token as it's lookahead set for - // LA(2). So, we must generate the alternatives containing - // trailing end-of-token in their lookahead sets *after* the - // alternatives without end-of-token. This implements the - // usual lexer convention that longer matches come before - // shorter ones, e.g. "*=" matches ASSIGN_STAR not STAR - // - // For non-lexer grammars, this does not sort the alternates - // by depth Note that alts whose lookahead is purely - // end-of-token at k=1 end up as default or else clauses. - int startDepth = (grammar instanceof LexerGrammar) ? grammar.maxk : 0; - for (int altDepth = startDepth; altDepth >= 0; altDepth--) { - if (DEBUG_CODE_GENERATOR) System.out.println("checking depth " + altDepth); - for (int i = 0; i < blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - if (DEBUG_CODE_GENERATOR) System.out.println("genAlt: " + i); - // if we made a switch above, ignore what we already took care - // of. Specifically, LL(1) alts with no preds - // that do not have end-of-token in their prediction set - // and that are not giant unicode sets. - if (createdLL1Switch && suitableForCaseExpression(alt)) { - if (DEBUG_CODE_GENERATOR) System.out.println("ignoring alt because it was in the switch"); - continue; - } - String e; - - boolean unpredicted = false; - - if (grammar instanceof LexerGrammar) { - // Calculate the "effective depth" of the alt, - // which is the max depth at which - // cache[depth]!=end-of-token - int effectiveDepth = alt.lookaheadDepth; - if (effectiveDepth == GrammarAnalyzer.NONDETERMINISTIC) { - // use maximum lookahead - effectiveDepth = grammar.maxk; - } - while (effectiveDepth >= 1 && - alt.cache[effectiveDepth].containsEpsilon()) { - effectiveDepth--; - } - // Ignore alts whose effective depth is other than - // the ones we are generating for this iteration. - if (effectiveDepth != altDepth) { - if (DEBUG_CODE_GENERATOR) - System.out.println("ignoring alt because effectiveDepth!=altDepth;" + effectiveDepth + "!=" + altDepth); - continue; - } - unpredicted = lookaheadIsEmpty(alt, effectiveDepth); - e = getLookaheadTestExpression(alt, effectiveDepth); - } - else { - unpredicted = lookaheadIsEmpty(alt, grammar.maxk); - e = getLookaheadTestExpression(alt, grammar.maxk); - } - - // Was it a big unicode range that forced unsuitability - // for a case expression? - if (alt.cache[1].fset.degree() > caseSizeThreshold && - suitableForCaseExpression(alt)) { - if (nIF == 0) { - println("if " + e + " {"); - } - else { - println("else if " + e + " {"); - } - } - else if (unpredicted && - alt.semPred == null && - alt.synPred == null) { - // The alt has empty prediction set and no - // predicate to help out. if we have not - // generated a previous if, just put {...} around - // the end-of-token clause - if (nIF == 0) { - println("{"); - } - else { - println("else {"); - } - finishingInfo.needAnErrorClause = false; - } - else { // check for sem and syn preds - - // Add any semantic predicate expression to the - // lookahead test - if (alt.semPred != null) { - // if debugging, wrap the evaluation of the - // predicate in a method translate $ and # - // references - ActionTransInfo tInfo = new ActionTransInfo(); - String actionStr = - processActionForSpecialSymbols(alt.semPred, - blk.line, - currentRule, - tInfo); - // ignore translation info...we don't need to - // do anything with it. call that will inform - // SemanticPredicateListeners of the result - if (((grammar instanceof ParserGrammar) || - (grammar instanceof LexerGrammar)) && - grammar.debuggingOutput) { - e = "(" + e + "&& fireSemanticPredicateEvaluated(persistence.antlr.debug.SemanticPredicateEvent.PREDICTING," + - addSemPred(charFormatter.escapeString(actionStr)) + "," + actionStr + "))"; - } - else { - e = "(" + e + "&&(" + actionStr + "))"; - } - } - - // Generate any syntactic predicates - if (nIF > 0) { - if (alt.synPred != null) { - println("else {"); - tabs++; - genSynPred(alt.synPred, e); - closingBracesOfIFSequence++; - } - else { - println("else if " + e + " {"); - } - } - else { - if (alt.synPred != null) { - genSynPred(alt.synPred, e); - } - else { - // when parsing trees, convert null to - // valid tree node with NULL lookahead. - if (grammar instanceof TreeWalkerGrammar) { - println("if (_t==null) _t=ASTNULL;"); - } - println("if " + e + " {"); - } - } - - } - - nIF++; - tabs++; - genAlt(alt, blk); - tabs--; - println("}"); - } - } - String ps = ""; - for (int i = 1; i <= closingBracesOfIFSequence; i++) { - ps += "}"; - } - - // Restore the AST generation state - genAST = savegenAST; - - // restore save text state - saveText = oldsaveTest; - - // Return the finishing info. - if (createdLL1Switch) { - tabs--; - finishingInfo.postscript = ps + "}"; - finishingInfo.generatedSwitch = true; - finishingInfo.generatedAnIf = nIF > 0; - //return new JavaBlockFinishingInfo(ps+"}",true,nIF>0); // close up switch statement - - } - else { - finishingInfo.postscript = ps; - finishingInfo.generatedSwitch = false; - finishingInfo.generatedAnIf = nIF > 0; - // return new JavaBlockFinishingInfo(ps, false,nIF>0); - } - return finishingInfo; - } - - private static boolean suitableForCaseExpression(Alternative a) { - return - a.lookaheadDepth == 1 && - a.semPred == null && - !a.cache[1].containsEpsilon() && - a.cache[1].fset.degree() <= caseSizeThreshold; - } - - /** Generate code to link an element reference into the AST */ - private void genElementAST(AlternativeElement el) { - // handle case where you're not building trees, but are in tree walker. - // Just need to get labels set up. - if (grammar instanceof TreeWalkerGrammar && !grammar.buildAST) { - String elementRef; - String astName; - - // Generate names and declarations of the AST variable(s) - if (el.getLabel() == null) { - elementRef = lt1Value; - // Generate AST variables for unlabeled stuff - astName = "tmp" + astVarNumber + "_AST"; - astVarNumber++; - // Map the generated AST variable in the alternate - mapTreeVariable(el, astName); - // Generate an "input" AST variable also - println(labeledElementASTType + " " + astName + "_in = " + elementRef + ";"); - } - return; - } - - if (grammar.buildAST && syntacticPredLevel == 0) { - boolean needASTDecl = - (genAST && - (el.getLabel() != null || - el.getAutoGenType() != GrammarElement.AUTO_GEN_BANG - ) - ); - - // RK: if we have a grammar element always generate the decl - // since some guy can access it from an action and we can't - // peek ahead (well not without making a mess). - // I'd prefer taking this out. - if (el.getAutoGenType() != GrammarElement.AUTO_GEN_BANG && - (el instanceof TokenRefElement)) - { - needASTDecl = true; - } - - boolean doNoGuessTest = - (grammar.hasSyntacticPredicate && needASTDecl); - - String elementRef; - String astNameBase; - - // Generate names and declarations of the AST variable(s) - if (el.getLabel() != null) { - elementRef = el.getLabel(); - astNameBase = el.getLabel(); - } - else { - elementRef = lt1Value; - // Generate AST variables for unlabeled stuff - astNameBase = "tmp" + astVarNumber; - ; - astVarNumber++; - } - - // Generate the declaration if required. - if (needASTDecl) { - // Generate the declaration - if (el instanceof GrammarAtom) { - GrammarAtom ga = (GrammarAtom)el; - if (ga.getASTNodeType() != null) { - genASTDeclaration(el, astNameBase, ga.getASTNodeType()); -// println(ga.getASTNodeType()+" " + astName+" = null;"); - } - else { - genASTDeclaration(el, astNameBase, labeledElementASTType); -// println(labeledElementASTType+" " + astName + " = null;"); - } - } - else { - genASTDeclaration(el, astNameBase, labeledElementASTType); -// println(labeledElementASTType+" " + astName + " = null;"); - } - } - - // for convenience.. - String astName = astNameBase + "_AST"; - - // Map the generated AST variable in the alternate - mapTreeVariable(el, astName); - if (grammar instanceof TreeWalkerGrammar) { - // Generate an "input" AST variable also - println(labeledElementASTType + " " + astName + "_in = null;"); - } - - // Enclose actions with !guessing - if (doNoGuessTest) { - // println("if (inputState.guessing==0) {"); - // tabs++; - } - - // if something has a label assume it will be used - // so we must initialize the RefAST - if (el.getLabel() != null) { - if (el instanceof GrammarAtom) { - println(astName + " = " + getASTCreateString((GrammarAtom)el, elementRef) + ";"); - } - else { - println(astName + " = " + getASTCreateString(elementRef) + ";"); - } - } - - // if it has no label but a declaration exists initialize it. - if (el.getLabel() == null && needASTDecl) { - elementRef = lt1Value; - if (el instanceof GrammarAtom) { - println(astName + " = " + getASTCreateString((GrammarAtom)el, elementRef) + ";"); - } - else { - println(astName + " = " + getASTCreateString(elementRef) + ";"); - } - // Map the generated AST variable in the alternate - if (grammar instanceof TreeWalkerGrammar) { - // set "input" AST variable also - println(astName + "_in = " + elementRef + ";"); - } - } - - if (genAST) { - switch (el.getAutoGenType()) { - case GrammarElement.AUTO_GEN_NONE: - println("astFactory.addASTChild(currentAST, " + astName + ");"); - break; - case GrammarElement.AUTO_GEN_CARET: - println("astFactory.makeASTRoot(currentAST, " + astName + ");"); - break; - default: - break; - } - } - if (doNoGuessTest) { - // tabs--; - // println("}"); - } - } - } - - /** Close the try block and generate catch phrases - * if the element has a labeled handler in the rule - */ - private void genErrorCatchForElement(AlternativeElement el) { - if (el.getLabel() == null) return; - String r = el.enclosingRuleName; - if (grammar instanceof LexerGrammar) { - r = CodeGenerator.encodeLexerRuleName(el.enclosingRuleName); - } - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(r); - if (rs == null) { - antlrTool.panic("Enclosing rule not found!"); - } - ExceptionSpec ex = rs.block.findExceptionSpec(el.getLabel()); - if (ex != null) { - tabs--; - println("}"); - genErrorHandler(ex); - } - } - - /** Generate the catch phrases for a user-specified error handler */ - private void genErrorHandler(ExceptionSpec ex) { - // Each ExceptionHandler in the ExceptionSpec is a separate catch - for (int i = 0; i < ex.handlers.size(); i++) { - ExceptionHandler handler = (ExceptionHandler)ex.handlers.elementAt(i); - // Generate catch phrase - println("catch (" + handler.exceptionTypeAndName.getText() + ") {"); - tabs++; - if (grammar.hasSyntacticPredicate) { - println("if (inputState.guessing==0) {"); - tabs++; - } - - // When not guessing, execute user handler action - ActionTransInfo tInfo = new ActionTransInfo(); - printAction( - processActionForSpecialSymbols(handler.action.getText(), - handler.action.getLine(), - currentRule, tInfo) - ); - - if (grammar.hasSyntacticPredicate) { - tabs--; - println("} else {"); - tabs++; - // When guessing, rethrow exception - println( - "throw " + - extractIdOfAction(handler.exceptionTypeAndName) + - ";" - ); - tabs--; - println("}"); - } - // Close catch phrase - tabs--; - println("}"); - } - } - - /** Generate a try { opening if the element has a labeled handler in the rule */ - private void genErrorTryForElement(AlternativeElement el) { - if (el.getLabel() == null) return; - String r = el.enclosingRuleName; - if (grammar instanceof LexerGrammar) { - r = CodeGenerator.encodeLexerRuleName(el.enclosingRuleName); - } - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(r); - if (rs == null) { - antlrTool.panic("Enclosing rule not found!"); - } - ExceptionSpec ex = rs.block.findExceptionSpec(el.getLabel()); - if (ex != null) { - println("try { // for error handling"); - tabs++; - } - } - - protected void genASTDeclaration(AlternativeElement el) { - genASTDeclaration(el, labeledElementASTType); - } - - protected void genASTDeclaration(AlternativeElement el, String node_type) { - genASTDeclaration(el, el.getLabel(), node_type); - } - - protected void genASTDeclaration(AlternativeElement el, String var_name, String node_type) { - // already declared? - if (declaredASTVariables.contains(el)) - return; - - // emit code - println(node_type + " " + var_name + "_AST = null;"); - - // mark as declared - declaredASTVariables.put(el,el); - } - - /** Generate a header that is common to all Java files */ - protected void genHeader() { - println("// $ANTLR " + Tool.version + ": " + - "\"" + antlrTool.fileMinusPath(antlrTool.grammarFile) + "\"" + - " -> " + - "\"" + grammar.getClassName() + ".java\"$"); - } - - private void genLiteralsTest() { - println("_ttype = testLiteralsTable(_ttype);"); - } - - private void genLiteralsTestForPartialToken() { - println("_ttype = testLiteralsTable(new String(text.getBuffer(),_begin,text.length()-_begin),_ttype);"); - } - - protected void genMatch(BitSet b) { - } - - protected void genMatch(GrammarAtom atom) { - if (atom instanceof StringLiteralElement) { - if (grammar instanceof LexerGrammar) { - genMatchUsingAtomText(atom); - } - else { - genMatchUsingAtomTokenType(atom); - } - } - else if (atom instanceof CharLiteralElement) { - if (grammar instanceof LexerGrammar) { - genMatchUsingAtomText(atom); - } - else { - antlrTool.error("cannot ref character literals in grammar: " + atom); - } - } - else if (atom instanceof TokenRefElement) { - genMatchUsingAtomText(atom); - } - else if (atom instanceof WildcardElement) { - gen((WildcardElement)atom); - } - } - - protected void genMatchUsingAtomText(GrammarAtom atom) { - // match() for trees needs the _t cursor - String astArgs = ""; - if (grammar instanceof TreeWalkerGrammar) { - astArgs = "_t,"; - } - - // if in lexer and ! on element, save buffer index to kill later - if (grammar instanceof LexerGrammar && (!saveText || atom.getAutoGenType() == GrammarElement.AUTO_GEN_BANG)) { - println("_saveIndex=text.length();"); - } - - print(atom.not ? "matchNot(" : "match("); - _print(astArgs); - - // print out what to match - if (atom.atomText.equals("EOF")) { - // horrible hack to handle EOF case - _print("Token.EOF_TYPE"); - } - else { - _print(atom.atomText); - } - _println(");"); - - if (grammar instanceof LexerGrammar && (!saveText || atom.getAutoGenType() == GrammarElement.AUTO_GEN_BANG)) { - println("text.setLength(_saveIndex);"); // kill text atom put in buffer - } - } - - protected void genMatchUsingAtomTokenType(GrammarAtom atom) { - // match() for trees needs the _t cursor - String astArgs = ""; - if (grammar instanceof TreeWalkerGrammar) { - astArgs = "_t,"; - } - - // If the literal can be mangled, generate the symbolic constant instead - String mangledName = null; - String s = astArgs + getValueString(atom.getType()); - - // matching - println((atom.not ? "matchNot(" : "match(") + s + ");"); - } - - /** Generate the nextToken() rule. nextToken() is a synthetic - * lexer rule that is the implicit OR of all user-defined - * lexer rules. - */ - public void genNextToken() { - // Are there any public rules? If not, then just generate a - // fake nextToken(). - boolean hasPublicRules = false; - for (int i = 0; i < grammar.rules.size(); i++) { - RuleSymbol rs = (RuleSymbol)grammar.rules.elementAt(i); - if (rs.isDefined() && rs.access.equals("public")) { - hasPublicRules = true; - break; - } - } - if (!hasPublicRules) { - println(""); - println("public Token nextToken() throws TokenStreamException {"); - println("\ttry {uponEOF();}"); - println("\tcatch(CharStreamIOException csioe) {"); - println("\t\tthrow new TokenStreamIOException(csioe.io);"); - println("\t}"); - println("\tcatch(CharStreamException cse) {"); - println("\t\tthrow new TokenStreamException(cse.getMessage());"); - println("\t}"); - println("\treturn new CommonToken(Token.EOF_TYPE, \"\");"); - println("}"); - println(""); - return; - } - - // Create the synthesized nextToken() rule - RuleBlock nextTokenBlk = MakeGrammar.createNextTokenRule(grammar, grammar.rules, "nextToken"); - // Define the nextToken rule symbol - RuleSymbol nextTokenRs = new RuleSymbol("mnextToken"); - nextTokenRs.setDefined(); - nextTokenRs.setBlock(nextTokenBlk); - nextTokenRs.access = "private"; - grammar.define(nextTokenRs); - // Analyze the nextToken rule - boolean ok = grammar.theLLkAnalyzer.deterministic(nextTokenBlk); - - // Generate the next token rule - String filterRule = null; - if (((LexerGrammar)grammar).filterMode) { - filterRule = ((LexerGrammar)grammar).filterRule; - } - - println(""); - println("public Token nextToken() throws TokenStreamException {"); - tabs++; - println("Token theRetToken=null;"); - _println("tryAgain:"); - println("for (;;) {"); - tabs++; - println("Token _token = null;"); - println("int _ttype = Token.INVALID_TYPE;"); - if (((LexerGrammar)grammar).filterMode) { - println("setCommitToPath(false);"); - if (filterRule != null) { - // Here's a good place to ensure that the filter rule actually exists - if (!grammar.isDefined(CodeGenerator.encodeLexerRuleName(filterRule))) { - grammar.antlrTool.error("Filter rule " + filterRule + " does not exist in this lexer"); - } - else { - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(CodeGenerator.encodeLexerRuleName(filterRule)); - if (!rs.isDefined()) { - grammar.antlrTool.error("Filter rule " + filterRule + " does not exist in this lexer"); - } - else if (rs.access.equals("public")) { - grammar.antlrTool.error("Filter rule " + filterRule + " must be protected"); - } - } - println("int _m;"); - println("_m = mark();"); - } - } - println("resetText();"); - - println("try { // for char stream error handling"); - tabs++; - - // Generate try around whole thing to trap scanner errors - println("try { // for lexical error handling"); - tabs++; - - // Test for public lexical rules with empty paths - for (int i = 0; i < nextTokenBlk.getAlternatives().size(); i++) { - Alternative a = nextTokenBlk.getAlternativeAt(i); - if (a.cache[1].containsEpsilon()) { - //String r = a.head.toString(); - RuleRefElement rr = (RuleRefElement)a.head; - String r = CodeGenerator.decodeLexerRuleName(rr.targetRule); - antlrTool.warning("public lexical rule "+r+" is optional (can match \"nothing\")"); - } - } - - // Generate the block - String newline = System.getProperty("line.separator"); - JavaBlockFinishingInfo howToFinish = genCommonBlock(nextTokenBlk, false); - String errFinish = "if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);}"; - errFinish += newline + "\t\t\t\t"; - if (((LexerGrammar)grammar).filterMode) { - if (filterRule == null) { - errFinish += "else {consume(); continue tryAgain;}"; - } - else { - errFinish += "else {" + newline + - "\t\t\t\t\tcommit();" + newline + - "\t\t\t\t\ttry {m" + filterRule + "(false);}" + newline + - "\t\t\t\t\tcatch(RecognitionException e) {" + newline + - "\t\t\t\t\t // catastrophic failure" + newline + - "\t\t\t\t\t reportError(e);" + newline + - "\t\t\t\t\t consume();" + newline + - "\t\t\t\t\t}" + newline + - "\t\t\t\t\tcontinue tryAgain;" + newline + - "\t\t\t\t}"; - } - } - else { - errFinish += "else {" + throwNoViable + "}"; - } - genBlockFinish(howToFinish, errFinish); - - // at this point a valid token has been matched, undo "mark" that was done - if (((LexerGrammar)grammar).filterMode && filterRule != null) { - println("commit();"); - } - - // Generate literals test if desired - // make sure _ttype is set first; note _returnToken must be - // non-null as the rule was required to create it. - println("if ( _returnToken==null ) continue tryAgain; // found SKIP token"); - println("_ttype = _returnToken.getType();"); - if (((LexerGrammar)grammar).getTestLiterals()) { - genLiteralsTest(); - } - - // return token created by rule reference in switch - println("_returnToken.setType(_ttype);"); - println("return _returnToken;"); - - // Close try block - tabs--; - println("}"); - println("catch (RecognitionException e) {"); - tabs++; - if (((LexerGrammar)grammar).filterMode) { - if (filterRule == null) { - println("if ( !getCommitToPath() ) {consume(); continue tryAgain;}"); - } - else { - println("if ( !getCommitToPath() ) {"); - tabs++; - println("rewind(_m);"); - println("resetText();"); - println("try {m" + filterRule + "(false);}"); - println("catch(RecognitionException ee) {"); - println(" // horrendous failure: error in filter rule"); - println(" reportError(ee);"); - println(" consume();"); - println("}"); - println("continue tryAgain;"); - tabs--; - println("}"); - } - } - if (nextTokenBlk.getDefaultErrorHandler()) { - println("reportError(e);"); - println("consume();"); - } - else { - // pass on to invoking routine - println("throw new TokenStreamRecognitionException(e);"); - } - tabs--; - println("}"); - - // close CharStreamException try - tabs--; - println("}"); - println("catch (CharStreamException cse) {"); - println(" if ( cse instanceof CharStreamIOException ) {"); - println(" throw new TokenStreamIOException(((CharStreamIOException)cse).io);"); - println(" }"); - println(" else {"); - println(" throw new TokenStreamException(cse.getMessage());"); - println(" }"); - println("}"); - - // close for-loop - tabs--; - println("}"); - - // close method nextToken - tabs--; - println("}"); - println(""); - } - - /** Gen a named rule block. - * ASTs are generated for each element of an alternative unless - * the rule or the alternative have a '!' modifier. - * - * If an alternative defeats the default tree construction, it - * must set <rule>_AST to the root of the returned AST. - * - * Each alternative that does automatic tree construction, builds - * up root and child list pointers in an ASTPair structure. - * - * A rule finishes by setting the returnAST variable from the - * ASTPair. - * - * @param rule The name of the rule to generate - * @param startSymbol true if the rule is a start symbol (i.e., not referenced elsewhere) - */ - public void genRule(RuleSymbol s, boolean startSymbol, int ruleNum) { - tabs = 1; - - if (DEBUG_CODE_GENERATOR) System.out.println("genRule(" + s.getId() + ")"); - if (!s.isDefined()) { - antlrTool.error("undefined rule: " + s.getId()); - return; - } - - // Generate rule return type, name, arguments - RuleBlock rblk = s.getBlock(); - - currentRule = rblk; - currentASTResult = s.getId(); - - // clear list of declared ast variables.. - declaredASTVariables.clear(); - - // Save the AST generation state, and set it to that of the rule - boolean savegenAST = genAST; - genAST = genAST && rblk.getAutoGen(); - - // boolean oldsaveTest = saveText; - saveText = rblk.getAutoGen(); - - // print javadoc comment if any - if (s.comment != null) { - _println(s.comment); - } - - // Gen method access and final qualifier - print(s.access + " final "); - - // Gen method return type (note lexer return action set at rule creation) - if (rblk.returnAction != null) { - // Has specified return value - _print(extractTypeOfAction(rblk.returnAction, rblk.getLine(), rblk.getColumn()) + " "); - } - else { - // No specified return value - _print("void "); - } - - // Gen method name - _print(s.getId() + "("); - - // Additional rule parameters common to all rules for this grammar - _print(commonExtraParams); - if (commonExtraParams.length() != 0 && rblk.argAction != null) { - _print(","); - } - - // Gen arguments - if (rblk.argAction != null) { - // Has specified arguments - _println(""); - tabs++; - println(rblk.argAction); - tabs--; - print(")"); - } - else { - // No specified arguments - _print(")"); - } - - // Gen throws clause and open curly - _print(" throws " + exceptionThrown); - if (grammar instanceof ParserGrammar) { - _print(", TokenStreamException"); - } - else if (grammar instanceof LexerGrammar) { - _print(", CharStreamException, TokenStreamException"); - } - // Add user-defined exceptions unless lexer (for now) - if (rblk.throwsSpec != null) { - if (grammar instanceof LexerGrammar) { - antlrTool.error("user-defined throws spec not allowed (yet) for lexer rule " + rblk.ruleName); - } - else { - _print(", " + rblk.throwsSpec); - } - } - - _println(" {"); - tabs++; - - // Convert return action to variable declaration - if (rblk.returnAction != null) - println(rblk.returnAction + ";"); - - // print out definitions needed by rules for various grammar types - println(commonLocalVars); - - if (grammar.traceRules) { - if (grammar instanceof TreeWalkerGrammar) { - println("traceIn(\"" + s.getId() + "\",_t);"); - } - else { - println("traceIn(\"" + s.getId() + "\");"); - } - } - - if (grammar instanceof LexerGrammar) { - // lexer rule default return value is the rule's token name - // This is a horrible hack to support the built-in EOF lexer rule. - if (s.getId().equals("mEOF")) - println("_ttype = Token.EOF_TYPE;"); - else - println("_ttype = " + s.getId().substring(1) + ";"); - println("int _saveIndex;"); // used for element! (so we can kill text matched for element) - /* - println("boolean old_saveConsumedInput=saveConsumedInput;"); - if ( !rblk.getAutoGen() ) { // turn off "save input" if ! on rule - println("saveConsumedInput=false;"); - } - */ - } - - // if debugging, write code to mark entry to the rule - if (grammar.debuggingOutput) - if (grammar instanceof ParserGrammar) - println("fireEnterRule(" + ruleNum + ",0);"); - else if (grammar instanceof LexerGrammar) - println("fireEnterRule(" + ruleNum + ",_ttype);"); - - // Generate trace code if desired - if (grammar.debuggingOutput || grammar.traceRules) { - println("try { // debugging"); - tabs++; - } - - // Initialize AST variables - if (grammar instanceof TreeWalkerGrammar) { - // "Input" value for rule - println(labeledElementASTType + " " + s.getId() + "_AST_in = (_t == ASTNULL) ? null : (" + labeledElementASTType + ")_t;"); - } - if (grammar.buildAST) { - // Parser member used to pass AST returns from rule invocations - println("returnAST = null;"); - // Tracks AST construction - // println("ASTPair currentAST = (inputState.guessing==0) ? new ASTPair() : null;"); - println("ASTPair currentAST = new ASTPair();"); - // User-settable return value for rule. - println(labeledElementASTType + " " + s.getId() + "_AST = null;"); - } - - genBlockPreamble(rblk); - genBlockInitAction(rblk); - println(""); - - // Search for an unlabeled exception specification attached to the rule - ExceptionSpec unlabeledUserSpec = rblk.findExceptionSpec(""); - - // Generate try block around the entire rule for error handling - if (unlabeledUserSpec != null || rblk.getDefaultErrorHandler()) { - println("try { // for error handling"); - tabs++; - } - - // Generate the alternatives - if (rblk.alternatives.size() == 1) { - // One alternative -- use simple form - Alternative alt = rblk.getAlternativeAt(0); - String pred = alt.semPred; - if (pred != null) - genSemPred(pred, currentRule.line); - if (alt.synPred != null) { - antlrTool.warning( - "Syntactic predicate ignored for single alternative", - grammar.getFilename(), - alt.synPred.getLine(), - alt.synPred.getColumn() - ); - } - genAlt(alt, rblk); - } - else { - // Multiple alternatives -- generate complex form - boolean ok = grammar.theLLkAnalyzer.deterministic(rblk); - - JavaBlockFinishingInfo howToFinish = genCommonBlock(rblk, false); - genBlockFinish(howToFinish, throwNoViable); - } - - // Generate catch phrase for error handling - if (unlabeledUserSpec != null || rblk.getDefaultErrorHandler()) { - // Close the try block - tabs--; - println("}"); - } - - // Generate user-defined or default catch phrases - if (unlabeledUserSpec != null) { - genErrorHandler(unlabeledUserSpec); - } - else if (rblk.getDefaultErrorHandler()) { - // Generate default catch phrase - println("catch (" + exceptionThrown + " ex) {"); - tabs++; - // Generate code to handle error if not guessing - if (grammar.hasSyntacticPredicate) { - println("if (inputState.guessing==0) {"); - tabs++; - } - println("reportError(ex);"); - if (!(grammar instanceof TreeWalkerGrammar)) { - // Generate code to consume until token in k==1 follow set - Lookahead follow = grammar.theLLkAnalyzer.FOLLOW(1, rblk.endNode); - String followSetName = getBitsetName(markBitsetForGen(follow.fset)); - println("consume();"); - println("consumeUntil(" + followSetName + ");"); - } - else { - // Just consume one token - println("if (_t!=null) {_t = _t.getNextSibling();}"); - } - if (grammar.hasSyntacticPredicate) { - tabs--; - // When guessing, rethrow exception - println("} else {"); - println(" throw ex;"); - println("}"); - } - // Close catch phrase - tabs--; - println("}"); - } - - // Squirrel away the AST "return" value - if (grammar.buildAST) { - println("returnAST = " + s.getId() + "_AST;"); - } - - // Set return tree value for tree walkers - if (grammar instanceof TreeWalkerGrammar) { - println("_retTree = _t;"); - } - - // Generate literals test for lexer rules so marked - if (rblk.getTestLiterals()) { - if (s.access.equals("protected")) { - genLiteralsTestForPartialToken(); - } - else { - genLiteralsTest(); - } - } - - // if doing a lexer rule, dump code to create token if necessary - if (grammar instanceof LexerGrammar) { - println("if ( _createToken && _token==null && _ttype!=Token.SKIP ) {"); - println(" _token = makeToken(_ttype);"); - println(" _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin));"); - println("}"); - println("_returnToken = _token;"); - } - - // Gen the return statement if there is one (lexer has hard-wired return action) - if (rblk.returnAction != null) { - println("return " + extractIdOfAction(rblk.returnAction, rblk.getLine(), rblk.getColumn()) + ";"); - } - - if (grammar.debuggingOutput || grammar.traceRules) { - tabs--; - println("} finally { // debugging"); - tabs++; - - // If debugging, generate calls to mark exit of rule - if (grammar.debuggingOutput) - if (grammar instanceof ParserGrammar) - println("fireExitRule(" + ruleNum + ",0);"); - else if (grammar instanceof LexerGrammar) - println("fireExitRule(" + ruleNum + ",_ttype);"); - - if (grammar.traceRules) { - if (grammar instanceof TreeWalkerGrammar) { - println("traceOut(\"" + s.getId() + "\",_t);"); - } - else { - println("traceOut(\"" + s.getId() + "\");"); - } - } - - tabs--; - println("}"); - } - - tabs--; - println("}"); - println(""); - - // Restore the AST generation state - genAST = savegenAST; - - // restore char save state - // saveText = oldsaveTest; - } - - private void GenRuleInvocation(RuleRefElement rr) { - // dump rule name - _print(rr.targetRule + "("); - - // lexers must tell rule if it should set _returnToken - if (grammar instanceof LexerGrammar) { - // if labeled, could access Token, so tell rule to create - if (rr.getLabel() != null) { - _print("true"); - } - else { - _print("false"); - } - if (commonExtraArgs.length() != 0 || rr.args != null) { - _print(","); - } - } - - // Extra arguments common to all rules for this grammar - _print(commonExtraArgs); - if (commonExtraArgs.length() != 0 && rr.args != null) { - _print(","); - } - - // Process arguments to method, if any - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rr.targetRule); - if (rr.args != null) { - // When not guessing, execute user arg action - ActionTransInfo tInfo = new ActionTransInfo(); - String args = processActionForSpecialSymbols(rr.args, 0, currentRule, tInfo); - if (tInfo.assignToRoot || tInfo.refRuleRoot != null) { - antlrTool.error("Arguments of rule reference '" + rr.targetRule + "' cannot set or ref #" + - currentRule.getRuleName(), grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - _print(args); - - // Warn if the rule accepts no arguments - if (rs.block.argAction == null) { - antlrTool.warning("Rule '" + rr.targetRule + "' accepts no arguments", grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - } - else { - // For C++, no warning if rule has parameters, because there may be default - // values for all of the parameters - if (rs.block.argAction != null) { - antlrTool.warning("Missing parameters on reference to rule " + rr.targetRule, grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - } - _println(");"); - - // move down to the first child while parsing - if (grammar instanceof TreeWalkerGrammar) { - println("_t = _retTree;"); - } - } - - protected void genSemPred(String pred, int line) { - // translate $ and # references - ActionTransInfo tInfo = new ActionTransInfo(); - pred = processActionForSpecialSymbols(pred, line, currentRule, tInfo); - // ignore translation info...we don't need to do anything with it. - String escapedPred = charFormatter.escapeString(pred); - - // if debugging, wrap the semantic predicate evaluation in a method - // that can tell SemanticPredicateListeners the result - if (grammar.debuggingOutput && ((grammar instanceof ParserGrammar) || (grammar instanceof LexerGrammar))) - pred = "fireSemanticPredicateEvaluated(persistence.antlr.debug.SemanticPredicateEvent.VALIDATING," - + addSemPred(escapedPred) + "," + pred + ")"; - println("if (!(" + pred + "))"); - println(" throw new SemanticException(\"" + escapedPred + "\");"); - } - - /** Write an array of Strings which are the semantic predicate - * expressions. The debugger will reference them by number only - */ - protected void genSemPredMap() { - Enumeration e = semPreds.elements(); - println("private String _semPredNames[] = {"); - while (e.hasMoreElements()) - println("\"" + e.nextElement() + "\","); - println("};"); - } - - protected void genSynPred(SynPredBlock blk, String lookaheadExpr) { - if (DEBUG_CODE_GENERATOR) System.out.println("gen=>(" + blk + ")"); - - // Dump synpred result variable - println("boolean synPredMatched" + blk.ID + " = false;"); - // Gen normal lookahead test - println("if (" + lookaheadExpr + ") {"); - tabs++; - - // Save input state - if (grammar instanceof TreeWalkerGrammar) { - println("AST __t" + blk.ID + " = _t;"); - } - else { - println("int _m" + blk.ID + " = mark();"); - } - - // Once inside the try, assume synpred works unless exception caught - println("synPredMatched" + blk.ID + " = true;"); - println("inputState.guessing++;"); - - // if debugging, tell listeners that a synpred has started - if (grammar.debuggingOutput && ((grammar instanceof ParserGrammar) || - (grammar instanceof LexerGrammar))) { - println("fireSyntacticPredicateStarted();"); - } - - syntacticPredLevel++; - println("try {"); - tabs++; - gen((AlternativeBlock)blk); // gen code to test predicate - tabs--; - //println("System.out.println(\"pred "+blk+" succeeded\");"); - println("}"); - println("catch (" + exceptionThrown + " pe) {"); - tabs++; - println("synPredMatched" + blk.ID + " = false;"); - //println("System.out.println(\"pred "+blk+" failed\");"); - tabs--; - println("}"); - - // Restore input state - if (grammar instanceof TreeWalkerGrammar) { - println("_t = __t" + blk.ID + ";"); - } - else { - println("rewind(_m" + blk.ID + ");"); - } - - println("inputState.guessing--;"); - - // if debugging, tell listeners how the synpred turned out - if (grammar.debuggingOutput && ((grammar instanceof ParserGrammar) || - (grammar instanceof LexerGrammar))) { - println("if (synPredMatched" + blk.ID + ")"); - println(" fireSyntacticPredicateSucceeded();"); - println("else"); - println(" fireSyntacticPredicateFailed();"); - } - - syntacticPredLevel--; - tabs--; - - // Close lookahead test - println("}"); - - // Test synred result - println("if ( synPredMatched" + blk.ID + " ) {"); - } - - /** Generate a static array containing the names of the tokens, - * indexed by the token type values. This static array is used - * to format error messages so that the token identifers or literal - * strings are displayed instead of the token numbers. - * - * If a lexical rule has a paraphrase, use it rather than the - * token label. - */ - public void genTokenStrings() { - // Generate a string for each token. This creates a static - // array of Strings indexed by token type. - println(""); - println("public static final String[] _tokenNames = {"); - tabs++; - - // Walk the token vocabulary and generate a Vector of strings - // from the tokens. - Vector v = grammar.tokenManager.getVocabulary(); - for (int i = 0; i < v.size(); i++) { - String s = (String)v.elementAt(i); - if (s == null) { - s = "<" + String.valueOf(i) + ">"; - } - if (!s.startsWith("\"") && !s.startsWith("<")) { - TokenSymbol ts = (TokenSymbol)grammar.tokenManager.getTokenSymbol(s); - if (ts != null && ts.getParaphrase() != null) { - s = StringUtils.stripFrontBack(ts.getParaphrase(), "\"", "\""); - } - } - print(charFormatter.literalString(s)); - if (i != v.size() - 1) { - _print(","); - } - _println(""); - } - - // Close the string array initailizer - tabs--; - println("};"); - } - - /** Create and set Integer token type objects that map - * to Java Class objects (which AST node to create). - */ - protected void genTokenASTNodeMap() { - println(""); - println("protected void buildTokenTypeASTClassMap() {"); - // Generate a map.put("T","TNode") for each token - // if heterogeneous node known for that token T. - tabs++; - boolean generatedNewHashtable = false; - int n = 0; - // Walk the token vocabulary and generate puts. - Vector v = grammar.tokenManager.getVocabulary(); - for (int i = 0; i < v.size(); i++) { - String s = (String)v.elementAt(i); - if (s != null) { - TokenSymbol ts = grammar.tokenManager.getTokenSymbol(s); - if (ts != null && ts.getASTNodeType() != null) { - n++; - if ( !generatedNewHashtable ) { - // only generate if we are going to add a mapping - println("tokenTypeToASTClassMap = new Hashtable();"); - generatedNewHashtable = true; - } - println("tokenTypeToASTClassMap.put(new Integer("+ts.getTokenType()+"), "+ - ts.getASTNodeType()+".class);"); - } - } - } - - if ( n==0 ) { - println("tokenTypeToASTClassMap=null;"); - } - tabs--; - println("};"); - } - - /** Generate the token types Java file */ - protected void genTokenTypes(TokenManager tm) throws IOException { - // Open the token output Java file and set the currentOutput stream - // SAS: file open was moved to a method so a subclass can override - // This was mainly for the VAJ interface - setupOutput(tm.getName() + TokenTypesFileSuffix); - - tabs = 0; - - // Generate the header common to all Java files - genHeader(); - // Do not use printAction because we assume tabs==0 - println(behavior.getHeaderAction("")); - - // Encapsulate the definitions in an interface. This can be done - // because they are all constants. - println("public interface " + tm.getName() + TokenTypesFileSuffix + " {"); - tabs++; - - // Generate a definition for each token type - Vector v = tm.getVocabulary(); - - // Do special tokens manually - println("int EOF = " + Token.EOF_TYPE + ";"); - println("int NULL_TREE_LOOKAHEAD = " + Token.NULL_TREE_LOOKAHEAD + ";"); - - for (int i = Token.MIN_USER_TYPE; i < v.size(); i++) { - String s = (String)v.elementAt(i); - if (s != null) { - if (s.startsWith("\"")) { - // a string literal - StringLiteralSymbol sl = (StringLiteralSymbol)tm.getTokenSymbol(s); - if (sl == null) { - antlrTool.panic("String literal " + s + " not in symbol table"); - } - else if (sl.label != null) { - println("int " + sl.label + " = " + i + ";"); - } - else { - String mangledName = mangleLiteral(s); - if (mangledName != null) { - // We were able to create a meaningful mangled token name - println("int " + mangledName + " = " + i + ";"); - // if no label specified, make the label equal to the mangled name - sl.label = mangledName; - } - else { - println("// " + s + " = " + i); - } - } - } - else if (!s.startsWith("<")) { - println("int " + s + " = " + i + ";"); - } - } - } - - // Close the interface - tabs--; - println("}"); - - // Close the tokens output file - currentOutput.close(); - currentOutput = null; - exitIfError(); - } - - /** Get a string for an expression to generate creation of an AST subtree. - * @param v A Vector of String, where each element is an expression in the target language yielding an AST node. - */ - public String getASTCreateString(Vector v) { - if (v.size() == 0) { - return ""; - } - StringBuffer buf = new StringBuffer(); - buf.append("(" + labeledElementASTType + - ")astFactory.make( (new ASTArray(" + v.size() + - "))"); - for (int i = 0; i < v.size(); i++) { - buf.append(".add(" + v.elementAt(i) + ")"); - } - buf.append(")"); - return buf.toString(); - } - - /** Get a string for an expression to generate creating of an AST node - * @param atom The grammar node for which you are creating the node - * @param str The arguments to the AST constructor - */ - public String getASTCreateString(GrammarAtom atom, String astCtorArgs) { - //System.out.println("getASTCreateString("+atom+","+astCtorArgs+")"); - if (atom != null && atom.getASTNodeType() != null) { - // they specified a type either on the reference or in tokens{} section - return "("+atom.getASTNodeType()+")"+ - "astFactory.create("+astCtorArgs+",\""+atom.getASTNodeType()+"\")"; - } - else { - // must be an action or something since not referencing an atom - return getASTCreateString(astCtorArgs); - } - } - - /** Get a string for an expression to generate creating of an AST node. - * Parse the first (possibly only) argument looking for the token type. - * If the token type is a valid token symbol, ask for it's AST node type - * and add to the end if only 2 arguments. The forms are #[T], #[T,"t"], - * and as of 2.7.2 #[T,"t",ASTclassname]. - * - * @param str The arguments to the AST constructor - */ - public String getASTCreateString(String astCtorArgs) { - //System.out.println("AST CTOR: "+astCtorArgs); - if ( astCtorArgs==null ) { - astCtorArgs = ""; - } - int nCommas = 0; - for (int i=0; i<astCtorArgs.length(); i++) { - if ( astCtorArgs.charAt(i)==',' ) { - nCommas++; - } - } - //System.out.println("num commas="+nCommas); - if ( nCommas<2 ) { // if 1 or 2 args - int firstComma = astCtorArgs.indexOf(','); - int lastComma = astCtorArgs.lastIndexOf(','); - String tokenName = astCtorArgs; - if ( nCommas>0 ) { - tokenName = astCtorArgs.substring(0,firstComma); - } - //System.out.println("Checking for ast node type of "+tokenName); - TokenSymbol ts = grammar.tokenManager.getTokenSymbol(tokenName); - if ( ts!=null ) { - String astNodeType = ts.getASTNodeType(); - //System.out.println("node type of "+tokenName+" is "+astNodeType); - String emptyText = ""; - if ( nCommas==0 ) { - // need to add 2nd arg of blank text for token text - emptyText = ",\"\""; - } - if ( astNodeType!=null ) { - return "("+astNodeType+")"+ - "astFactory.create("+astCtorArgs+emptyText+",\""+astNodeType+"\")"; - } - // fall through and just do a regular create with cast on front - // if necessary (it differs from default "AST"). - } - if ( labeledElementASTType.equals("AST") ) { - return "astFactory.create("+astCtorArgs+")"; - } - return "("+labeledElementASTType+")"+ - "astFactory.create("+astCtorArgs+")"; - } - // create default type or (since 2.7.2) 3rd arg is classname - return "(" + labeledElementASTType + ")astFactory.create(" + astCtorArgs + ")"; - } - - protected String getLookaheadTestExpression(Lookahead[] look, int k) { - StringBuffer e = new StringBuffer(100); - boolean first = true; - - e.append("("); - for (int i = 1; i <= k; i++) { - BitSet p = look[i].fset; - if (!first) { - e.append(") && ("); - } - first = false; - - // Syn preds can yield <end-of-syn-pred> (epsilon) lookahead. - // There is no way to predict what that token would be. Just - // allow anything instead. - if (look[i].containsEpsilon()) { - e.append("true"); - } - else { - e.append(getLookaheadTestTerm(i, p)); - } - } - e.append(")"); - - return e.toString(); - } - - /**Generate a lookahead test expression for an alternate. This - * will be a series of tests joined by '&&' and enclosed by '()', - * the number of such tests being determined by the depth of the lookahead. - */ - protected String getLookaheadTestExpression(Alternative alt, int maxDepth) { - int depth = alt.lookaheadDepth; - if (depth == GrammarAnalyzer.NONDETERMINISTIC) { - // if the decision is nondeterministic, do the best we can: LL(k) - // any predicates that are around will be generated later. - depth = grammar.maxk; - } - - if (maxDepth == 0) { - // empty lookahead can result from alt with sem pred - // that can see end of token. E.g., A : {pred}? ('a')? ; - return "( true )"; - } - - return "(" + getLookaheadTestExpression(alt.cache, depth) + ")"; - } - - /**Generate a depth==1 lookahead test expression given the BitSet. - * This may be one of: - * 1) a series of 'x==X||' tests - * 2) a range test using >= && <= where possible, - * 3) a bitset membership test for complex comparisons - * @param k The lookahead level - * @param p The lookahead set for level k - */ - protected String getLookaheadTestTerm(int k, BitSet p) { - // Determine the name of the item to be compared - String ts = lookaheadString(k); - - // Generate a range expression if possible - int[] elems = p.toArray(); - if (elementsAreRange(elems)) { - return getRangeExpression(k, elems); - } - - // Generate a bitset membership test if possible - StringBuffer e; - int degree = p.degree(); - if (degree == 0) { - return "true"; - } - - if (degree >= bitsetTestThreshold) { - int bitsetIdx = markBitsetForGen(p); - return getBitsetName(bitsetIdx) + ".member(" + ts + ")"; - } - - // Otherwise, generate the long-winded series of "x==X||" tests - e = new StringBuffer(); - for (int i = 0; i < elems.length; i++) { - // Get the compared-to item (token or character value) - String cs = getValueString(elems[i]); - - // Generate the element comparison - if (i > 0) e.append("||"); - e.append(ts); - e.append("=="); - e.append(cs); - } - return e.toString(); - } - - /** Return an expression for testing a contiguous renage of elements - * @param k The lookahead level - * @param elems The elements representing the set, usually from BitSet.toArray(). - * @return String containing test expression. - */ - public String getRangeExpression(int k, int[] elems) { - if (!elementsAreRange(elems)) { - antlrTool.panic("getRangeExpression called with non-range"); - } - int begin = elems[0]; - int end = elems[elems.length - 1]; - return - "(" + lookaheadString(k) + " >= " + getValueString(begin) + " && " + - lookaheadString(k) + " <= " + getValueString(end) + ")"; - } - - /** getValueString: get a string representation of a token or char value - * @param value The token or char value - */ - private String getValueString(int value) { - String cs; - if (grammar instanceof LexerGrammar) { - cs = charFormatter.literalChar(value); - } - else { - TokenSymbol ts = grammar.tokenManager.getTokenSymbolAt(value); - if (ts == null) { - return "" + value; // return token type as string - // tool.panic("vocabulary for token type " + value + " is null"); - } - String tId = ts.getId(); - if (ts instanceof StringLiteralSymbol) { - // if string literal, use predefined label if any - // if no predefined, try to mangle into LITERAL_xxx. - // if can't mangle, use int value as last resort - StringLiteralSymbol sl = (StringLiteralSymbol)ts; - String label = sl.getLabel(); - if (label != null) { - cs = label; - } - else { - cs = mangleLiteral(tId); - if (cs == null) { - cs = String.valueOf(value); - } - } - } - else { - cs = tId; - } - } - return cs; - } - - /**Is the lookahead for this alt empty? */ - protected boolean lookaheadIsEmpty(Alternative alt, int maxDepth) { - int depth = alt.lookaheadDepth; - if (depth == GrammarAnalyzer.NONDETERMINISTIC) { - depth = grammar.maxk; - } - for (int i = 1; i <= depth && i <= maxDepth; i++) { - BitSet p = alt.cache[i].fset; - if (p.degree() != 0) { - return false; - } - } - return true; - } - - private String lookaheadString(int k) { - if (grammar instanceof TreeWalkerGrammar) { - return "_t.getType()"; - } - return "LA(" + k + ")"; - } - - /** Mangle a string literal into a meaningful token name. This is - * only possible for literals that are all characters. The resulting - * mangled literal name is literalsPrefix with the text of the literal - * appended. - * @return A string representing the mangled literal, or null if not possible. - */ - private String mangleLiteral(String s) { - String mangled = antlrTool.literalsPrefix; - for (int i = 1; i < s.length() - 1; i++) { - if (!Character.isLetter(s.charAt(i)) && - s.charAt(i) != '_') { - return null; - } - mangled += s.charAt(i); - } - if (antlrTool.upperCaseMangledLiterals) { - mangled = mangled.toUpperCase(); - } - return mangled; - } - - /** Map an identifier to it's corresponding tree-node variable. - * This is context-sensitive, depending on the rule and alternative - * being generated - * @param idParam The identifier name to map - * @return The mapped id (which may be the same as the input), or null if the mapping is invalid due to duplicates - */ - public String mapTreeId(String idParam, ActionTransInfo transInfo) { - // if not in an action of a rule, nothing to map. - if (currentRule == null) return idParam; - - boolean in_var = false; - String id = idParam; - if (grammar instanceof TreeWalkerGrammar) { - if (!grammar.buildAST) { - in_var = true; - } - // If the id ends with "_in", then map it to the input variable - else if (id.length() > 3 && id.lastIndexOf("_in") == id.length() - 3) { - // Strip off the "_in" - id = id.substring(0, id.length() - 3); - in_var = true; - } - } - - // Check the rule labels. If id is a label, then the output - // variable is label_AST, and the input variable is plain label. - for (int i = 0; i < currentRule.labeledElements.size(); i++) { - AlternativeElement elt = (AlternativeElement)currentRule.labeledElements.elementAt(i); - if (elt.getLabel().equals(id)) { - return in_var ? id : id + "_AST"; - } - } - - // Failing that, check the id-to-variable map for the alternative. - // If the id is in the map, then output variable is the name in the - // map, and input variable is name_in - String s = (String)treeVariableMap.get(id); - if (s != null) { - if (s == NONUNIQUE) { - // There is more than one element with this id - antlrTool.error("Ambiguous reference to AST element "+id+ - " in rule "+currentRule.getRuleName()); - - return null; - } - else if (s.equals(currentRule.getRuleName())) { - // a recursive call to the enclosing rule is - // ambiguous with the rule itself. - antlrTool.error("Ambiguous reference to AST element "+id+ - " in rule "+currentRule.getRuleName()); - return null; - } - else { - return in_var ? s + "_in" : s; - } - } - - // Failing that, check the rule name itself. Output variable - // is rule_AST; input variable is rule_AST_in (treeparsers). - if (id.equals(currentRule.getRuleName())) { - String r = in_var ? id + "_AST_in" : id + "_AST"; - if (transInfo != null) { - if (!in_var) { - transInfo.refRuleRoot = r; - } - } - return r; - } - else { - // id does not map to anything -- return itself. - return id; - } - } - - /** Given an element and the name of an associated AST variable, - * create a mapping between the element "name" and the variable name. - */ - private void mapTreeVariable(AlternativeElement e, String name) { - // For tree elements, defer to the root - if (e instanceof TreeElement) { - mapTreeVariable(((TreeElement)e).root, name); - return; - } - - // Determine the name of the element, if any, for mapping purposes - String elName = null; - - // Don't map labeled items - if (e.getLabel() == null) { - if (e instanceof TokenRefElement) { - // use the token id - elName = ((TokenRefElement)e).atomText; - } - else if (e instanceof RuleRefElement) { - // use the rule name - elName = ((RuleRefElement)e).targetRule; - } - } - // Add the element to the tree variable map if it has a name - if (elName != null) { - if (treeVariableMap.get(elName) != null) { - // Name is already in the map -- mark it as duplicate - treeVariableMap.remove(elName); - treeVariableMap.put(elName, NONUNIQUE); - } - else { - treeVariableMap.put(elName, name); - } - } - } - - /** Lexically process $var and tree-specifiers in the action. - * This will replace #id and #(...) with the appropriate - * function calls and/or variables etc... - */ - protected String processActionForSpecialSymbols(String actionStr, - int line, - RuleBlock currentRule, - ActionTransInfo tInfo) { - if (actionStr == null || actionStr.length() == 0) return null; - - // The action trans info tells us (at the moment) whether an - // assignment was done to the rule's tree root. - if (grammar == null) - return actionStr; - - // see if we have anything to do... - if ((grammar.buildAST && actionStr.indexOf('#') != -1) || - grammar instanceof TreeWalkerGrammar || - ((grammar instanceof LexerGrammar || - grammar instanceof ParserGrammar) - && actionStr.indexOf('$') != -1)) { - // Create a lexer to read an action and return the translated version - persistence.antlr.actions.java.ActionLexer lexer = - new persistence.antlr.actions.java.ActionLexer(actionStr, - currentRule, - this, - tInfo); - - lexer.setLineOffset(line); - lexer.setFilename(grammar.getFilename()); - lexer.setTool(antlrTool); - - try { - lexer.mACTION(true); - actionStr = lexer.getTokenObject().getText(); - // System.out.println("action translated: "+actionStr); - // System.out.println("trans info is "+tInfo); - } - catch (RecognitionException ex) { - lexer.reportError(ex); - return actionStr; - } - catch (TokenStreamException tex) { - antlrTool.panic("Error reading action:" + actionStr); - return actionStr; - } - catch (CharStreamException io) { - antlrTool.panic("Error reading action:" + actionStr); - return actionStr; - } - } - return actionStr; - } - - private void setupGrammarParameters(Grammar g) { - if (g instanceof ParserGrammar) { - labeledElementASTType = "AST"; - if (g.hasOption("ASTLabelType")) { - Token tsuffix = g.getOption("ASTLabelType"); - if (tsuffix != null) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(), "\"", "\""); - if (suffix != null) { - labeledElementASTType = suffix; - } - } - } - labeledElementType = "Token "; - labeledElementInit = "null"; - commonExtraArgs = ""; - commonExtraParams = ""; - commonLocalVars = ""; - lt1Value = "LT(1)"; - exceptionThrown = "RecognitionException"; - throwNoViable = "throw new NoViableAltException(LT(1), getFilename());"; - } - else if (g instanceof LexerGrammar) { - labeledElementType = "char "; - labeledElementInit = "'\\0'"; - commonExtraArgs = ""; - commonExtraParams = "boolean _createToken"; - commonLocalVars = "int _ttype; Token _token=null; int _begin=text.length();"; - lt1Value = "LA(1)"; - exceptionThrown = "RecognitionException"; - throwNoViable = "throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());"; - } - else if (g instanceof TreeWalkerGrammar) { - labeledElementASTType = "AST"; - labeledElementType = "AST"; - if (g.hasOption("ASTLabelType")) { - Token tsuffix = g.getOption("ASTLabelType"); - if (tsuffix != null) { - String suffix = StringUtils.stripFrontBack(tsuffix.getText(), "\"", "\""); - if (suffix != null) { - labeledElementASTType = suffix; - labeledElementType = suffix; - } - } - } - if (!g.hasOption("ASTLabelType")) { - g.setOption("ASTLabelType", new Token(ANTLRTokenTypes.STRING_LITERAL, "AST")); - } - labeledElementInit = "null"; - commonExtraArgs = "_t"; - commonExtraParams = "AST _t"; - commonLocalVars = ""; - lt1Value = "(" + labeledElementASTType + ")_t"; - exceptionThrown = "RecognitionException"; - throwNoViable = "throw new NoViableAltException(_t);"; - } - else { - antlrTool.panic("Unknown grammar type"); - } - } - - /** This method exists so a subclass, namely VAJCodeGenerator, - * can open the file in its own evil way. JavaCodeGenerator - * simply opens a text file... - */ - public void setupOutput(String className) throws IOException { - currentOutput = antlrTool.openOutputFile(className + ".java"); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/LexerGrammar.java glassfish-gil/entity-persistence/src/java/persistence/antlr/LexerGrammar.java --- glassfish/entity-persistence/src/java/persistence/antlr/LexerGrammar.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/LexerGrammar.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,168 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Hashtable; -import java.util.Enumeration; -import java.io.IOException; - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; - -/** Lexer-specific grammar subclass */ -class LexerGrammar extends Grammar { - // character set used by lexer - protected BitSet charVocabulary; - // true if the lexer generates literal testing code for nextToken - protected boolean testLiterals = true; - // true if the lexer generates case-sensitive LA(k) testing - protected boolean caseSensitiveLiterals = true; - /** true if the lexer generates case-sensitive literals testing */ - protected boolean caseSensitive = true; - /** true if lexer is to ignore all unrecognized tokens */ - protected boolean filterMode = false; - - /** if filterMode is true, then filterRule can indicate an optional - * rule to use as the scarf language. If null, programmer used - * plain "filter=true" not "filter=rule". - */ - protected String filterRule = null; - - LexerGrammar(String className_, Tool tool_, String superClass) { - super(className_, tool_, superClass); - charVocabulary = new BitSet(); - - // Lexer usually has no default error handling - defaultErrorHandler = false; - } - - /** Top-level call to generate the code */ - public void generate() throws IOException { - generator.gen(this); - } - - public String getSuperClass() { - // If debugging, use debugger version of scanner - if (debuggingOutput) - return "debug.DebuggingCharScanner"; - return "CharScanner"; - } - - // Get the testLiterals option value - public boolean getTestLiterals() { - return testLiterals; - } - - /**Process command line arguments. - * -trace have all rules call traceIn/traceOut - * -traceLexer have lexical rules call traceIn/traceOut - * -debug generate debugging output for parser debugger - */ - public void processArguments(String[] args) { - for (int i = 0; i < args.length; i++) { - if (args[i].equals("-trace")) { - traceRules = true; - antlrTool.setArgOK(i); - } - else if (args[i].equals("-traceLexer")) { - traceRules = true; - antlrTool.setArgOK(i); - } - else if (args[i].equals("-debug")) { - debuggingOutput = true; - antlrTool.setArgOK(i); - } - } - } - - /** Set the character vocabulary used by the lexer */ - public void setCharVocabulary(BitSet b) { - charVocabulary = b; - } - - /** Set lexer options */ - public boolean setOption(String key, Token value) { - String s = value.getText(); - if (key.equals("buildAST")) { - antlrTool.warning("buildAST option is not valid for lexer", getFilename(), value.getLine(), value.getColumn()); - return true; - } - if (key.equals("testLiterals")) { - if (s.equals("true")) { - testLiterals = true; - } - else if (s.equals("false")) { - testLiterals = false; - } - else { - antlrTool.warning("testLiterals option must be true or false", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("interactive")) { - if (s.equals("true")) { - interactive = true; - } - else if (s.equals("false")) { - interactive = false; - } - else { - antlrTool.error("interactive option must be true or false", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("caseSensitive")) { - if (s.equals("true")) { - caseSensitive = true; - } - else if (s.equals("false")) { - caseSensitive = false; - } - else { - antlrTool.warning("caseSensitive option must be true or false", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("caseSensitiveLiterals")) { - if (s.equals("true")) { - caseSensitiveLiterals = true; - } - else if (s.equals("false")) { - caseSensitiveLiterals = false; - } - else { - antlrTool.warning("caseSensitiveLiterals option must be true or false", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("filter")) { - if (s.equals("true")) { - filterMode = true; - } - else if (s.equals("false")) { - filterMode = false; - } - else if (value.getType() == ANTLRTokenTypes.TOKEN_REF) { - filterMode = true; - filterRule = s; - } - else { - antlrTool.warning("filter option must be true, false, or a lexer rule name", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("longestPossible")) { - antlrTool.warning("longestPossible option has been deprecated; ignoring it...", getFilename(), value.getLine(), value.getColumn()); - return true; - } - if (super.setOption(key, value)) { - return true; - } - antlrTool.error("Invalid option: " + key, getFilename(), value.getLine(), value.getColumn()); - return false; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/LexerSharedInputState.java glassfish-gil/entity-persistence/src/java/persistence/antlr/LexerSharedInputState.java --- glassfish/entity-persistence/src/java/persistence/antlr/LexerSharedInputState.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/LexerSharedInputState.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,50 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.io.Reader; -import java.io.InputStream; - -/** This object contains the data associated with an - * input stream of characters. Multiple lexers - * share a single LexerSharedInputState to lex - * the same input stream. - */ -public class LexerSharedInputState { - protected int column = 1; - protected int line = 1; - protected int tokenStartColumn = 1; - protected int tokenStartLine = 1; - protected InputBuffer input; - - /** What file (if known) caused the problem? */ - protected String filename; - - public int guessing = 0; - - public LexerSharedInputState(InputBuffer inbuf) { - input = inbuf; - } - - public LexerSharedInputState(InputStream in) { - this(new ByteBuffer(in)); - } - - public LexerSharedInputState(Reader in) { - this(new CharBuffer(in)); - } - - public void reset() { - column = 1; - line = 1; - tokenStartColumn = 1; - tokenStartLine = 1; - guessing = 0; - filename = null; - input.reset(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/LLkAnalyzer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/LLkAnalyzer.java --- glassfish/entity-persistence/src/java/persistence/antlr/LLkAnalyzer.java 2006-08-31 00:34:07.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/LLkAnalyzer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,1094 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; - -/**A linear-approximate LL(k) grammar analzyer. - * - * All lookahead elements are sets of token types. - * - * @author Terence Parr, John Lilley - * @see persistence.antlr.Grammar - * @see persistence.antlr.Lookahead - */ -public class LLkAnalyzer implements LLkGrammarAnalyzer { - // Set "analyzerDebug" to true - public boolean DEBUG_ANALYZER = false; - private AlternativeBlock currentBlock; - protected Tool tool = null; - protected Grammar grammar = null; - // True if analyzing a lexical grammar - protected boolean lexicalAnalysis = false; - // Used for formatting bit sets in default (Java) format - CharFormatter charFormatter = new JavaCharFormatter(); - - /** Create an LLk analyzer */ - public LLkAnalyzer(Tool tool_) { - tool = tool_; - } - - /** Return true if someone used the '.' wildcard default idiom. - * Either #(. children) or '.' as an alt by itself. - */ - protected boolean altUsesWildcardDefault(Alternative alt) { - AlternativeElement head = alt.head; - // if element is #(. blah) then check to see if el is root - if (head instanceof TreeElement && - ((TreeElement)head).root instanceof WildcardElement) { - return true; - } - if (head instanceof WildcardElement && head.next instanceof BlockEndElement) { - return true; - } - return false; - } - - /**Is this block of alternatives LL(k)? Fill in alternative cache for this block. - * @return true if the block is deterministic - */ - public boolean deterministic(AlternativeBlock blk) { - /** The lookahead depth for this decision */ - int k = 1; // start at k=1 - if (DEBUG_ANALYZER) System.out.println("deterministic(" + blk + ")"); - boolean det = true; - int nalts = blk.alternatives.size(); - AlternativeBlock saveCurrentBlock = currentBlock; - Alternative wildcardAlt = null; - currentBlock = blk; - - /* don't allow nongreedy (...) blocks */ - if (blk.greedy == false && !(blk instanceof OneOrMoreBlock) && !(blk instanceof ZeroOrMoreBlock)) { - tool.warning("Being nongreedy only makes sense for (...)+ and (...)*", grammar.getFilename(), blk.getLine(), blk.getColumn()); - } - - // SPECIAL CASE: only one alternative. We don't need to check the - // determinism, but other code expects the lookahead cache to be - // set for the single alt. - if (nalts == 1) { - AlternativeElement e = blk.getAlternativeAt(0).head; - currentBlock.alti = 0; - blk.getAlternativeAt(0).cache[1] = e.look(1); - blk.getAlternativeAt(0).lookaheadDepth = 1; // set lookahead to LL(1) - currentBlock = saveCurrentBlock; - return true; // always deterministic for one alt - } - - outer: - for (int i = 0; i < nalts - 1; i++) { - currentBlock.alti = i; - currentBlock.analysisAlt = i; // which alt are we analyzing? - currentBlock.altj = i + 1; // reset this alt. Haven't computed yet, - // but we need the alt number. - inner: - // compare against other alternatives with lookahead depth k - for (int j = i + 1; j < nalts; j++) { - currentBlock.altj = j; - if (DEBUG_ANALYZER) System.out.println("comparing " + i + " against alt " + j); - currentBlock.analysisAlt = j; // which alt are we analyzing? - k = 1; // always attempt minimum lookahead possible. - - // check to see if there is a lookahead depth that distinguishes - // between alternatives i and j. - Lookahead[] r = new Lookahead[grammar.maxk + 1]; - boolean haveAmbiguity; - do { - haveAmbiguity = false; - if (DEBUG_ANALYZER) System.out.println("checking depth " + k + "<=" + grammar.maxk); - Lookahead p,q; - p = getAltLookahead(blk, i, k); - q = getAltLookahead(blk, j, k); - - // compare LOOK(alt i) with LOOK(alt j). Is there an intersection? - // Lookahead must be disjoint. - if (DEBUG_ANALYZER) System.out.println("p is " + p.toString(",", charFormatter, grammar)); - if (DEBUG_ANALYZER) System.out.println("q is " + q.toString(",", charFormatter, grammar)); - // r[i] = p.fset.and(q.fset); - r[k] = p.intersection(q); - if (DEBUG_ANALYZER) System.out.println("intersection at depth " + k + " is " + r[k].toString()); - if (!r[k].nil()) { - haveAmbiguity = true; - k++; - } - // go until no more lookahead to use or no intersection - } while (haveAmbiguity && k <= grammar.maxk); - - Alternative ai = blk.getAlternativeAt(i); - Alternative aj = blk.getAlternativeAt(j); - if (haveAmbiguity) { - det = false; - ai.lookaheadDepth = NONDETERMINISTIC; - aj.lookaheadDepth = NONDETERMINISTIC; - - /* if ith alt starts with a syntactic predicate, computing the - * lookahead is still done for code generation, but messages - * should not be generated when comparing against alt j. - * Alternatives with syn preds that are unnecessary do - * not result in syn pred try-blocks. - */ - if (ai.synPred != null) { - if (DEBUG_ANALYZER) { - System.out.println("alt " + i + " has a syn pred"); - } - // The alt with the (...)=> block is nondeterministic for sure. - // If the (...)=> conflicts with alt j, j is nondeterministic. - // This prevents alt j from being in any switch statements. - // move on to next alternative=>no possible ambiguity! - // continue inner; - } - - /* if ith alt starts with a semantic predicate, computing the - * lookahead is still done for code generation, but messages - * should not be generated when comparing against alt j. - */ - else if (ai.semPred != null) { - if (DEBUG_ANALYZER) { - System.out.println("alt " + i + " has a sem pred"); - } - } - - /* if jth alt is exactly the wildcard or wildcard root of tree, - * then remove elements from alt i lookahead from alt j's lookahead. - * Don't do an ambiguity warning. - */ - else if (altUsesWildcardDefault(aj)) { - // System.out.println("removing pred sets"); - // removeCompetingPredictionSetsFromWildcard(aj.cache, aj.head, grammar.maxk); - wildcardAlt = aj; - } - - /* If the user specified warnWhenFollowAmbig=false, then we - * can turn off this warning IFF one of the alts is empty; - * that is, it points immediately at the end block. - */ - else if (!blk.warnWhenFollowAmbig && - (ai.head instanceof BlockEndElement || - aj.head instanceof BlockEndElement)) { - // System.out.println("ai.head pts to "+ai.head.getClass()); - // System.out.println("aj.head pts to "+aj.head.getClass()); - } - - /* If they have the generateAmbigWarnings option off for the block - * then don't generate a warning. - */ - else if (!blk.generateAmbigWarnings) { - } - - /* If greedy=true and *one* empty alt shut off warning. */ - else if (blk.greedySet && blk.greedy && - ((ai.head instanceof BlockEndElement && - !(aj.head instanceof BlockEndElement)) || - (aj.head instanceof BlockEndElement && - !(ai.head instanceof BlockEndElement)))) { - // System.out.println("greedy set to true; one alt empty"); - } - - - /* We have no choice, but to report a nondetermism */ - else { - tool.errorHandler.warnAltAmbiguity( - grammar, - blk, // the block - lexicalAnalysis, // true if lexical - grammar.maxk, // depth of ambiguity - r, // set of linear ambiguities - i, // first ambiguous alternative - j // second ambiguous alternative - ); - } - } - else { - // a lookahead depth, k, was found where i and j do not conflict - ai.lookaheadDepth = Math.max(ai.lookaheadDepth, k); - aj.lookaheadDepth = Math.max(aj.lookaheadDepth, k); - } - } - } - - // finished with block. - - // If had wildcard default clause idiom, remove competing lookahead - /* - if ( wildcardAlt!=null ) { - removeCompetingPredictionSetsFromWildcard(wildcardAlt.cache, wildcardAlt.head, grammar.maxk); - } - */ - - currentBlock = saveCurrentBlock; - return det; - } - - /**Is (...)+ block LL(1)? Fill in alternative cache for this block. - * @return true if the block is deterministic - */ - public boolean deterministic(OneOrMoreBlock blk) { - if (DEBUG_ANALYZER) System.out.println("deterministic(...)+(" + blk + ")"); - AlternativeBlock saveCurrentBlock = currentBlock; - currentBlock = blk; - boolean blkOk = deterministic((AlternativeBlock)blk); - // block has been checked, now check that what follows does not conflict - // with the lookahead of the (...)+ block. - boolean det = deterministicImpliedPath(blk); - currentBlock = saveCurrentBlock; - return det && blkOk; - } - - /**Is (...)* block LL(1)? Fill in alternative cache for this block. - * @return true if the block is deterministic - */ - public boolean deterministic(ZeroOrMoreBlock blk) { - if (DEBUG_ANALYZER) System.out.println("deterministic(...)*(" + blk + ")"); - AlternativeBlock saveCurrentBlock = currentBlock; - currentBlock = blk; - boolean blkOk = deterministic((AlternativeBlock)blk); - // block has been checked, now check that what follows does not conflict - // with the lookahead of the (...)* block. - boolean det = deterministicImpliedPath(blk); - currentBlock = saveCurrentBlock; - return det && blkOk; - } - - /**Is this (...)* or (...)+ block LL(k)? - * @return true if the block is deterministic - */ - public boolean deterministicImpliedPath(BlockWithImpliedExitPath blk) { - /** The lookahead depth for this decision considering implied exit path */ - int k; - boolean det = true; - Vector alts = blk.getAlternatives(); - int nalts = alts.size(); - currentBlock.altj = -1; // comparing against implicit optional/exit alt - - if (DEBUG_ANALYZER) System.out.println("deterministicImpliedPath"); - for (int i = 0; i < nalts; i++) { // check follow against all alts - Alternative alt = blk.getAlternativeAt(i); - - if (alt.head instanceof BlockEndElement) { - tool.warning("empty alternative makes no sense in (...)* or (...)+", grammar.getFilename(), blk.getLine(), blk.getColumn()); - } - - k = 1; // assume eac alt is LL(1) with exit branch - // check to see if there is a lookahead depth that distinguishes - // between alternative i and the exit branch. - Lookahead[] r = new Lookahead[grammar.maxk + 1]; - boolean haveAmbiguity; - do { - haveAmbiguity = false; - if (DEBUG_ANALYZER) System.out.println("checking depth " + k + "<=" + grammar.maxk); - Lookahead p; - Lookahead follow = blk.next.look(k); - blk.exitCache[k] = follow; - currentBlock.alti = i; - p = getAltLookahead(blk, i, k); - - if (DEBUG_ANALYZER) System.out.println("follow is " + follow.toString(",", charFormatter, grammar)); - if (DEBUG_ANALYZER) System.out.println("p is " + p.toString(",", charFormatter, grammar)); - //r[k] = follow.fset.and(p.fset); - r[k] = follow.intersection(p); - if (DEBUG_ANALYZER) System.out.println("intersection at depth " + k + " is " + r[k]); - if (!r[k].nil()) { - haveAmbiguity = true; - k++; - } - // go until no more lookahead to use or no intersection - } while (haveAmbiguity && k <= grammar.maxk); - - if (haveAmbiguity) { - det = false; - alt.lookaheadDepth = NONDETERMINISTIC; - blk.exitLookaheadDepth = NONDETERMINISTIC; - Alternative ambigAlt = blk.getAlternativeAt(currentBlock.alti); - - /* If the user specified warnWhenFollowAmbig=false, then we - * can turn off this warning. - */ - if (!blk.warnWhenFollowAmbig) { - } - - /* If they have the generateAmbigWarnings option off for the block - * then don't generate a warning. - */ - else if (!blk.generateAmbigWarnings) { - } - - /* If greedy=true and alt not empty, shut off warning */ - else if (blk.greedy == true && blk.greedySet && - !(ambigAlt.head instanceof BlockEndElement)) { - if (DEBUG_ANALYZER) System.out.println("greedy loop"); - } - - /* If greedy=false then shut off warning...will have - * to add "if FOLLOW break" - * block during code gen to compensate for removal of warning. - */ - else if (blk.greedy == false && - !(ambigAlt.head instanceof BlockEndElement)) { - if (DEBUG_ANALYZER) System.out.println("nongreedy loop"); - // if FOLLOW not single k-string (|set[k]| can - // be > 1 actually) then must warn them that - // loop may terminate incorrectly. - // For example, ('a'..'d')+ ("ad"|"cb") - if (!lookaheadEquivForApproxAndFullAnalysis(blk.exitCache, grammar.maxk)) { - tool.warning(new String[]{ - "nongreedy block may exit incorrectly due", - "\tto limitations of linear approximate lookahead (first k-1 sets", - "\tin lookahead not singleton)."}, - grammar.getFilename(), blk.getLine(), blk.getColumn()); - } - } - - // no choice but to generate a warning - else { - tool.errorHandler.warnAltExitAmbiguity( - grammar, - blk, // the block - lexicalAnalysis, // true if lexical - grammar.maxk, // depth of ambiguity - r, // set of linear ambiguities - i // ambiguous alternative - ); - } - } - else { - alt.lookaheadDepth = Math.max(alt.lookaheadDepth, k); - blk.exitLookaheadDepth = Math.max(blk.exitLookaheadDepth, k); - } - } - return det; - } - - /**Compute the lookahead set of whatever follows references to - * the rule associated witht the FOLLOW block. - */ - public Lookahead FOLLOW(int k, RuleEndElement end) { - // what rule are we trying to compute FOLLOW of? - RuleBlock rb = (RuleBlock)end.block; - // rule name is different in lexer - String rule; - if (lexicalAnalysis) { - rule = CodeGenerator.encodeLexerRuleName(rb.getRuleName()); - } - else { - rule = rb.getRuleName(); - } - - if (DEBUG_ANALYZER) System.out.println("FOLLOW(" + k + "," + rule + ")"); - - // are we in the midst of computing this FOLLOW already? - if (end.lock[k]) { - if (DEBUG_ANALYZER) System.out.println("FOLLOW cycle to " + rule); - return new Lookahead(rule); - } - - // Check to see if there is cached value - if (end.cache[k] != null) { - if (DEBUG_ANALYZER) { - System.out.println("cache entry FOLLOW(" + k + ") for " + rule + ": " + end.cache[k].toString(",", charFormatter, grammar)); - } - // if the cache is a complete computation then simply return entry - if (end.cache[k].cycle == null) { - return (Lookahead)end.cache[k].clone(); - } - // A cache entry exists, but it is a reference to a cyclic computation. - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(end.cache[k].cycle); - RuleEndElement re = rs.getBlock().endNode; - // The other entry may not exist because it is still being - // computed when this cycle cache entry was found here. - if (re.cache[k] == null) { - // return the cycle...that's all we can do at the moment. - return (Lookahead)end.cache[k].clone(); - } - else { - if (DEBUG_ANALYZER) { - System.out.println("combining FOLLOW(" + k + ") for " + rule + ": from "+end.cache[k].toString(",", charFormatter, grammar) + " with FOLLOW for "+((RuleBlock)re.block).getRuleName()+": "+re.cache[k].toString(",", charFormatter, grammar)); - } - // combine results from other rule's FOLLOW - if ( re.cache[k].cycle==null ) { - // current rule depends on another rule's FOLLOW and - // it is complete with no cycle; just kill our cycle and - // combine full result from other rule's FOLLOW - end.cache[k].combineWith(re.cache[k]); - end.cache[k].cycle = null; // kill cycle as we're complete - } - else { - // the FOLLOW cache for other rule has a cycle also. - // Here is where we bubble up a cycle. We better recursively - // wipe out cycles (partial computations). I'm a little nervous - // that we might leave a cycle here, however. - Lookahead refFOLLOW = FOLLOW(k, re); - end.cache[k].combineWith( refFOLLOW ); - // all cycles should be gone, but if not, record ref to cycle - end.cache[k].cycle = refFOLLOW.cycle; - } - if (DEBUG_ANALYZER) { - System.out.println("saving FOLLOW(" + k + ") for " + rule + ": from "+end.cache[k].toString(",", charFormatter, grammar)); - } - // Return the updated cache entry associated - // with the cycle reference. - return (Lookahead)end.cache[k].clone(); - } - } - - end.lock[k] = true; // prevent FOLLOW computation cycles - - Lookahead p = new Lookahead(); - - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rule); - - // Walk list of references to this rule to compute FOLLOW - for (int i = 0; i < rs.numReferences(); i++) { - RuleRefElement rr = rs.getReference(i); - if (DEBUG_ANALYZER) System.out.println("next[" + rule + "] is " + rr.next.toString()); - Lookahead q = rr.next.look(k); - if (DEBUG_ANALYZER) System.out.println("FIRST of next[" + rule + "] ptr is " + q.toString()); - /* If there is a cycle then if the cycle is to the rule for - * this end block, you have a cycle to yourself. Remove the - * cycle indication--the lookahead is complete. - */ - if (q.cycle != null && q.cycle.equals(rule)) { - q.cycle = null; // don't want cycle to yourself! - } - // add the lookahead into the current FOLLOW computation set - p.combineWith(q); - if (DEBUG_ANALYZER) System.out.println("combined FOLLOW[" + rule + "] is " + p.toString()); - } - - end.lock[k] = false; // we're not doing FOLLOW anymore - - // if no rules follow this, it can be a start symbol or called by a start sym. - // set the follow to be end of file. - if (p.fset.nil() && p.cycle == null) { - if (grammar instanceof TreeWalkerGrammar) { - // Tree grammars don't see EOF, they see end of sibling list or - // "NULL TREE LOOKAHEAD". - p.fset.add(Token.NULL_TREE_LOOKAHEAD); - } - else if (grammar instanceof LexerGrammar) { - // Lexical grammars use Epsilon to indicate that the end of rule has been hit - // EOF would be misleading; any character can follow a token rule not just EOF - // as in a grammar (where a start symbol is followed by EOF). There is no - // sequence info in a lexer between tokens to indicate what is the last token - // to be seen. - // p.fset.add(EPSILON_TYPE); - p.setEpsilon(); - } - else { - p.fset.add(Token.EOF_TYPE); - } - } - - // Cache the result of the FOLLOW computation - if (DEBUG_ANALYZER) { - System.out.println("saving FOLLOW(" + k + ") for " + rule + ": " + p.toString(",", charFormatter, grammar)); - } - end.cache[k] = (Lookahead)p.clone(); - - return p; - } - - private Lookahead getAltLookahead(AlternativeBlock blk, int alt, int k) { - Lookahead p; - Alternative a = blk.getAlternativeAt(alt); - AlternativeElement e = a.head; - //System.out.println("getAltLookahead("+k+","+e+"), cache size is "+a.cache.length); - if (a.cache[k] == null) { - p = e.look(k); - a.cache[k] = p; - } - else { - p = a.cache[k]; - } - return p; - } - - /**Actions are ignored */ - public Lookahead look(int k, ActionElement action) { - if (DEBUG_ANALYZER) System.out.println("lookAction(" + k + "," + action + ")"); - return action.next.look(k); - } - - /**Combine the lookahead computed for each alternative */ - public Lookahead look(int k, AlternativeBlock blk) { - if (DEBUG_ANALYZER) System.out.println("lookAltBlk(" + k + "," + blk + ")"); - AlternativeBlock saveCurrentBlock = currentBlock; - currentBlock = blk; - Lookahead p = new Lookahead(); - for (int i = 0; i < blk.alternatives.size(); i++) { - if (DEBUG_ANALYZER) System.out.println("alt " + i + " of " + blk); - // must set analysis alt - currentBlock.analysisAlt = i; - Alternative alt = blk.getAlternativeAt(i); - AlternativeElement elem = alt.head; - if (DEBUG_ANALYZER) { - if (alt.head == alt.tail) { - System.out.println("alt " + i + " is empty"); - } - } - Lookahead q = elem.look(k); - p.combineWith(q); - } - if (k == 1 && blk.not && subruleCanBeInverted(blk, lexicalAnalysis)) { - // Invert the lookahead set - if (lexicalAnalysis) { - BitSet b = (BitSet)((LexerGrammar)grammar).charVocabulary.clone(); - int[] elems = p.fset.toArray(); - for (int j = 0; j < elems.length; j++) { - b.remove(elems[j]); - } - p.fset = b; - } - else { - p.fset.notInPlace(Token.MIN_USER_TYPE, grammar.tokenManager.maxTokenType()); - } - } - currentBlock = saveCurrentBlock; - return p; - } - - /**Compute what follows this place-holder node and possibly - * what begins the associated loop unless the - * node is locked. - * <p> - * if we hit the end of a loop, we have to include - * what tokens can begin the loop as well. If the start - * node is locked, then we simply found an empty path - * through this subrule while analyzing it. If the - * start node is not locked, then this node was hit - * during a FOLLOW operation and the FIRST of this - * block must be included in that lookahead computation. - */ - public Lookahead look(int k, BlockEndElement end) { - if (DEBUG_ANALYZER) System.out.println("lookBlockEnd(" + k + ", " + end.block + "); lock is " + end.lock[k]); - if (end.lock[k]) { - // computation in progress => the tokens we would have - // computed (had we not been locked) will be included - // in the set by that computation with the lock on this - // node. - return new Lookahead(); - } - - Lookahead p; - - /* Hitting the end of a loop means you can see what begins the loop */ - if (end.block instanceof ZeroOrMoreBlock || - end.block instanceof OneOrMoreBlock) { - // compute what can start the block, - // but lock end node so we don't do it twice in same - // computation. - end.lock[k] = true; - p = look(k, end.block); - end.lock[k] = false; - } - else { - p = new Lookahead(); - } - - /* Tree blocks do not have any follow because they are children - * of what surrounds them. For example, A #(B C) D results in - * a look() for the TreeElement end of NULL_TREE_LOOKAHEAD, which - * indicates that nothing can follow the last node of tree #(B C) - */ - if (end.block instanceof TreeElement) { - p.combineWith(Lookahead.of(Token.NULL_TREE_LOOKAHEAD)); - } - - /* Syntactic predicates such as ( (A)? )=> have no follow per se. - * We cannot accurately say what would be matched following a - * syntactic predicate (you MIGHT be ok if you said it was whatever - * followed the alternative predicted by the predicate). Hence, - * (like end-of-token) we return Epsilon to indicate "unknown - * lookahead." - */ - else if (end.block instanceof SynPredBlock) { - p.setEpsilon(); - } - - // compute what can follow the block - else { - Lookahead q = end.block.next.look(k); - p.combineWith(q); - } - - return p; - } - - /**Return this char as the lookahead if k=1. - * <p>### Doesn't work for ( 'a' 'b' | 'a' ~'b' ) yet!!! - * <p> - * If the atom has the <tt>not</tt> flag on, then - * create the set complement of the tokenType - * which is the set of all characters referenced - * in the grammar with this char turned off. - * Also remove characters from the set that - * are currently allocated for predicting - * previous alternatives. This avoids ambiguity - * messages and is more properly what is meant. - * ( 'a' | ~'a' ) implies that the ~'a' is the - * "else" clause. - * <p> - * NOTE: we do <b>NOT</b> include exit path in - * the exclusion set. E.g., - * ( 'a' | ~'a' )* 'b' - * should exit upon seeing a 'b' during the loop. - */ - public Lookahead look(int k, CharLiteralElement atom) { - if (DEBUG_ANALYZER) System.out.println("lookCharLiteral(" + k + "," + atom + ")"); - // Skip until analysis hits k==1 - if (k > 1) { - return atom.next.look(k - 1); - } - if (lexicalAnalysis) { - if (atom.not) { - BitSet b = (BitSet)((LexerGrammar)grammar).charVocabulary.clone(); - if (DEBUG_ANALYZER) System.out.println("charVocab is " + b.toString()); - // remove stuff predicted by preceding alts and follow of block - removeCompetingPredictionSets(b, atom); - if (DEBUG_ANALYZER) System.out.println("charVocab after removal of prior alt lookahead " + b.toString()); - // now remove element that is stated not to be in the set - b.clear(atom.getType()); - return new Lookahead(b); - } - else { - return Lookahead.of(atom.getType()); - } - } - else { - // Should have been avoided by MakeGrammar - tool.panic("Character literal reference found in parser"); - // ... so we make the compiler happy - return Lookahead.of(atom.getType()); - } - } - - public Lookahead look(int k, CharRangeElement r) { - if (DEBUG_ANALYZER) System.out.println("lookCharRange(" + k + "," + r + ")"); - // Skip until analysis hits k==1 - if (k > 1) { - return r.next.look(k - 1); - } - BitSet p = BitSet.of(r.begin); - for (int i = r.begin + 1; i <= r.end; i++) { - p.add(i); - } - return new Lookahead(p); - } - - public Lookahead look(int k, GrammarAtom atom) { - if (DEBUG_ANALYZER) System.out.println("look(" + k + "," + atom + "[" + atom.getType() + "])"); - - if (lexicalAnalysis) { - // MakeGrammar should have created a rule reference instead - tool.panic("token reference found in lexer"); - } - // Skip until analysis hits k==1 - if (k > 1) { - return atom.next.look(k - 1); - } - Lookahead l = Lookahead.of(atom.getType()); - if (atom.not) { - // Invert the lookahead set against the token vocabulary - int maxToken = grammar.tokenManager.maxTokenType(); - l.fset.notInPlace(Token.MIN_USER_TYPE, maxToken); - // remove stuff predicted by preceding alts and follow of block - removeCompetingPredictionSets(l.fset, atom); - } - return l; - } - - /**The lookahead of a (...)+ block is the combined lookahead of - * all alternatives and, if an empty path is found, the lookahead - * of what follows the block. - */ - public Lookahead look(int k, OneOrMoreBlock blk) { - if (DEBUG_ANALYZER) System.out.println("look+" + k + "," + blk + ")"); - Lookahead p = look(k, (AlternativeBlock)blk); - return p; - } - - /**Combine the lookahead computed for each alternative. - * Lock the node so that no other computation may come back - * on itself--infinite loop. This also implies infinite left-recursion - * in the grammar (or an error in this algorithm ;)). - */ - public Lookahead look(int k, RuleBlock blk) { - if (DEBUG_ANALYZER) System.out.println("lookRuleBlk(" + k + "," + blk + ")"); - Lookahead p = look(k, (AlternativeBlock)blk); - return p; - } - - /**If not locked or noFOLLOW set, compute FOLLOW of a rule. - * <p> - * TJP says 8/12/99: not true anymore: - * Lexical rules never compute follow. They set epsilon and - * the code generator gens code to check for any character. - * The code generator must remove the tokens used to predict - * any previous alts in the same block. - * <p> - * When the last node of a rule is reached and noFOLLOW, - * it implies that a "local" FOLLOW will be computed - * after this call. I.e., - * <pre> - * a : b A; - * b : B | ; - * c : b C; - * </pre> - * Here, when computing the look of rule b from rule a, - * we want only {B,EPSILON_TYPE} so that look(b A) will - * be {B,A} not {B,A,C}. - * <p> - * if the end block is not locked and the FOLLOW is - * wanted, the algorithm must compute the lookahead - * of what follows references to this rule. If - * end block is locked, FOLLOW will return an empty set - * with a cycle to the rule associated with this end block. - */ - public Lookahead look(int k, RuleEndElement end) { - if (DEBUG_ANALYZER) - System.out.println("lookRuleBlockEnd(" + k + "); noFOLLOW=" + - end.noFOLLOW + "; lock is " + end.lock[k]); - if (/*lexicalAnalysis ||*/ end.noFOLLOW) { - Lookahead p = new Lookahead(); - p.setEpsilon(); - p.epsilonDepth = BitSet.of(k); - return p; - } - Lookahead p = FOLLOW(k, end); - return p; - } - - /**Compute the lookahead contributed by a rule reference. - * - * <p> - * When computing ruleref lookahead, we don't want the FOLLOW - * computation done if an empty path exists for the rule. - * The FOLLOW is too loose of a set...we want only to - * include the "local" FOLLOW or what can follow this - * particular ref to the node. In other words, we use - * context information to reduce the complexity of the - * analysis and strengthen the parser. - * - * The noFOLLOW flag is used as a means of restricting - * the FOLLOW to a "local" FOLLOW. This variable is - * orthogonal to the <tt>lock</tt> variable that prevents - * infinite recursion. noFOLLOW does not care about what k is. - */ - public Lookahead look(int k, RuleRefElement rr) { - if (DEBUG_ANALYZER) System.out.println("lookRuleRef(" + k + "," + rr + ")"); - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rr.targetRule); - if (rs == null || !rs.defined) { - tool.error("no definition of rule " + rr.targetRule, grammar.getFilename(), rr.getLine(), rr.getColumn()); - return new Lookahead(); - } - RuleBlock rb = rs.getBlock(); - RuleEndElement end = rb.endNode; - boolean saveEnd = end.noFOLLOW; - end.noFOLLOW = true; - // go off to the rule and get the lookahead (w/o FOLLOW) - Lookahead p = look(k, rr.targetRule); - if (DEBUG_ANALYZER) System.out.println("back from rule ref to " + rr.targetRule); - // restore state of end block - end.noFOLLOW = saveEnd; - - // check for infinite recursion. If a cycle is returned: trouble! - if (p.cycle != null) { - tool.error("infinite recursion to rule " + p.cycle + " from rule " + - rr.enclosingRuleName, grammar.getFilename(), rr.getLine(), rr.getColumn()); - } - - // is the local FOLLOW required? - if (p.containsEpsilon()) { - if (DEBUG_ANALYZER) - System.out.println("rule ref to " + - rr.targetRule + " has eps, depth: " + p.epsilonDepth); - - // remove epsilon - p.resetEpsilon(); - // fset.clear(EPSILON_TYPE); - - // for each lookahead depth that saw epsilon - int[] depths = p.epsilonDepth.toArray(); - p.epsilonDepth = null; // clear all epsilon stuff - for (int i = 0; i < depths.length; i++) { - int rk = k - (k - depths[i]); - Lookahead q = rr.next.look(rk); // see comments in Lookahead - p.combineWith(q); - } - // note: any of these look() computations for local follow can - // set EPSILON in the set again if the end of this rule is found. - } - - return p; - } - - public Lookahead look(int k, StringLiteralElement atom) { - if (DEBUG_ANALYZER) System.out.println("lookStringLiteral(" + k + "," + atom + ")"); - if (lexicalAnalysis) { - // need more lookahead than string can provide? - if (k > atom.processedAtomText.length()) { - return atom.next.look(k - atom.processedAtomText.length()); - } - else { - // get char at lookahead depth k, from the processed literal text - return Lookahead.of(atom.processedAtomText.charAt(k - 1)); - } - } - else { - // Skip until analysis hits k==1 - if (k > 1) { - return atom.next.look(k - 1); - } - Lookahead l = Lookahead.of(atom.getType()); - if (atom.not) { - // Invert the lookahead set against the token vocabulary - int maxToken = grammar.tokenManager.maxTokenType(); - l.fset.notInPlace(Token.MIN_USER_TYPE, maxToken); - } - return l; - } - } - - /**The lookahead of a (...)=> block is the lookahead of - * what follows the block. By definition, the syntactic - * predicate block defies static analysis (you want to try it - * out at run-time). The LOOK of (a)=>A B is A for LL(1) - * ### is this even called? - */ - public Lookahead look(int k, SynPredBlock blk) { - if (DEBUG_ANALYZER) System.out.println("look=>(" + k + "," + blk + ")"); - return blk.next.look(k); - } - - public Lookahead look(int k, TokenRangeElement r) { - if (DEBUG_ANALYZER) System.out.println("lookTokenRange(" + k + "," + r + ")"); - // Skip until analysis hits k==1 - if (k > 1) { - return r.next.look(k - 1); - } - BitSet p = BitSet.of(r.begin); - for (int i = r.begin + 1; i <= r.end; i++) { - p.add(i); - } - return new Lookahead(p); - } - - public Lookahead look(int k, TreeElement t) { - if (DEBUG_ANALYZER) - System.out.println("look(" + k + "," + t.root + "[" + t.root.getType() + "])"); - if (k > 1) { - return t.next.look(k - 1); - } - Lookahead l = null; - if (t.root instanceof WildcardElement) { - l = t.root.look(1); // compute FIRST set minus previous rows - } - else { - l = Lookahead.of(t.root.getType()); - if (t.root.not) { - // Invert the lookahead set against the token vocabulary - int maxToken = grammar.tokenManager.maxTokenType(); - l.fset.notInPlace(Token.MIN_USER_TYPE, maxToken); - } - } - return l; - } - - public Lookahead look(int k, WildcardElement wc) { - if (DEBUG_ANALYZER) System.out.println("look(" + k + "," + wc + ")"); - - // Skip until analysis hits k==1 - if (k > 1) { - return wc.next.look(k - 1); - } - - BitSet b; - if (lexicalAnalysis) { - // Copy the character vocabulary - b = (BitSet)((LexerGrammar)grammar).charVocabulary.clone(); - } - else { - b = new BitSet(1); - // Invert the lookahead set against the token vocabulary - int maxToken = grammar.tokenManager.maxTokenType(); - b.notInPlace(Token.MIN_USER_TYPE, maxToken); - if (DEBUG_ANALYZER) System.out.println("look(" + k + "," + wc + ") after not: " + b); - } - - // Remove prediction sets from competing alternatives - // removeCompetingPredictionSets(b, wc); - - return new Lookahead(b); - } - - /** The (...)* element is the combined lookahead of the alternatives and what can - * follow the loop. - */ - public Lookahead look(int k, ZeroOrMoreBlock blk) { - if (DEBUG_ANALYZER) System.out.println("look*(" + k + "," + blk + ")"); - Lookahead p = look(k, (AlternativeBlock)blk); - Lookahead q = blk.next.look(k); - p.combineWith(q); - return p; - } - - /**Compute the combined lookahead for all productions of a rule. - * If the lookahead returns with epsilon, at least one epsilon - * path exists (one that consumes no tokens). The noFOLLOW - * flag being set for this endruleblk, indicates that the - * a rule ref invoked this rule. - * - * Currently only look(RuleRef) calls this. There is no need - * for the code generator to call this. - */ - public Lookahead look(int k, String rule) { - if (DEBUG_ANALYZER) System.out.println("lookRuleName(" + k + "," + rule + ")"); - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(rule); - RuleBlock rb = rs.getBlock(); - - if (rb.lock[k]) { - if (DEBUG_ANALYZER) - System.out.println("infinite recursion to rule " + rb.getRuleName()); - return new Lookahead(rule); - } - - // have we computed it before? - if (rb.cache[k] != null) { - if (DEBUG_ANALYZER) { - System.out.println("found depth " + k + " result in FIRST " + rule + " cache: " + - rb.cache[k].toString(",", charFormatter, grammar)); - } - return (Lookahead)rb.cache[k].clone(); - } - - rb.lock[k] = true; - Lookahead p = look(k, (RuleBlock)rb); - rb.lock[k] = false; - - // cache results - rb.cache[k] = (Lookahead)p.clone(); - if (DEBUG_ANALYZER) { - System.out.println("saving depth " + k + " result in FIRST " + rule + " cache: " + - rb.cache[k].toString(",", charFormatter, grammar)); - } - return p; - } - - /** If the first k-1 sets are singleton sets, the appoximate - * lookahead analysis is equivalent to full lookahead analysis. - */ - public static boolean lookaheadEquivForApproxAndFullAnalysis(Lookahead[] bset, int k) { - // first k-1 sets degree 1? - for (int i = 1; i <= k - 1; i++) { - BitSet look = bset[i].fset; - if (look.degree() > 1) { - return false; - } - } - return true; - } - - /** Remove the prediction sets from preceding alternatives - * and follow set, but *only* if this element is the first element - * of the alternative. The class members currenBlock and - * currentBlock.analysisAlt must be set correctly. - * @param b The prediction bitset to be modified - * @el The element of interest - */ - private void removeCompetingPredictionSets(BitSet b, AlternativeElement el) { - // Only do this if the element is the first element of the alt, - // because we are making an implicit assumption that k==1. - GrammarElement head = currentBlock.getAlternativeAt(currentBlock.analysisAlt).head; - // if element is #(. blah) then check to see if el is root - if (head instanceof TreeElement) { - if (((TreeElement)head).root != el) { - return; - } - } - else if (el != head) { - return; - } - for (int i = 0; i < currentBlock.analysisAlt; i++) { - AlternativeElement e = currentBlock.getAlternativeAt(i).head; - b.subtractInPlace(e.look(1).fset); - } - } - - /** Remove the prediction sets from preceding alternatives - * The class members currenBlock must be set correctly. - * Remove prediction sets from 1..k. - * @param look The prediction lookahead to be modified - * @el The element of interest - * @k How deep into lookahead to modify - */ - private void removeCompetingPredictionSetsFromWildcard(Lookahead[] look, AlternativeElement el, int k) { - for (int d = 1; d <= k; d++) { - for (int i = 0; i < currentBlock.analysisAlt; i++) { - AlternativeElement e = currentBlock.getAlternativeAt(i).head; - look[d].fset.subtractInPlace(e.look(d).fset); - } - } - } - - /** reset the analyzer so it looks like a new one */ - private void reset() { - grammar = null; - DEBUG_ANALYZER = false; - currentBlock = null; - lexicalAnalysis = false; - } - - /** Set the grammar for the analyzer */ - public void setGrammar(Grammar g) { - if (grammar != null) { - reset(); - } - grammar = g; - - // Is this lexical? - lexicalAnalysis = (grammar instanceof LexerGrammar); - DEBUG_ANALYZER = grammar.analyzerDebug; - } - - public boolean subruleCanBeInverted(AlternativeBlock blk, boolean forLexer) { - if ( - blk instanceof ZeroOrMoreBlock || - blk instanceof OneOrMoreBlock || - blk instanceof SynPredBlock - ) { - return false; - } - // Cannot invert an empty subrule - if (blk.alternatives.size() == 0) { - return false; - } - // The block must only contain alternatives with a single element, - // where each element is a char, token, char range, or token range. - for (int i = 0; i < blk.alternatives.size(); i++) { - Alternative alt = blk.getAlternativeAt(i); - // Cannot have anything interesting in the alternative ... - if (alt.synPred != null || alt.semPred != null || alt.exceptionSpec != null) { - return false; - } - // ... and there must be one simple element - AlternativeElement elt = alt.head; - if ( - !( - elt instanceof CharLiteralElement || - elt instanceof TokenRefElement || - elt instanceof CharRangeElement || - elt instanceof TokenRangeElement || - (elt instanceof StringLiteralElement && !forLexer) - ) || - !(elt.next instanceof BlockEndElement) || - elt.getAutoGenType() != GrammarElement.AUTO_GEN_NONE - ) { - return false; - } - } - return true; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/LLkGrammarAnalyzer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/LLkGrammarAnalyzer.java --- glassfish/entity-persistence/src/java/persistence/antlr/LLkGrammarAnalyzer.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/LLkGrammarAnalyzer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,57 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public interface LLkGrammarAnalyzer extends GrammarAnalyzer { - - - public boolean deterministic(AlternativeBlock blk); - - public boolean deterministic(OneOrMoreBlock blk); - - public boolean deterministic(ZeroOrMoreBlock blk); - - public Lookahead FOLLOW(int k, RuleEndElement end); - - public Lookahead look(int k, ActionElement action); - - public Lookahead look(int k, AlternativeBlock blk); - - public Lookahead look(int k, BlockEndElement end); - - public Lookahead look(int k, CharLiteralElement atom); - - public Lookahead look(int k, CharRangeElement end); - - public Lookahead look(int k, GrammarAtom atom); - - public Lookahead look(int k, OneOrMoreBlock blk); - - public Lookahead look(int k, RuleBlock blk); - - public Lookahead look(int k, RuleEndElement end); - - public Lookahead look(int k, RuleRefElement rr); - - public Lookahead look(int k, StringLiteralElement atom); - - public Lookahead look(int k, SynPredBlock blk); - - public Lookahead look(int k, TokenRangeElement end); - - public Lookahead look(int k, TreeElement end); - - public Lookahead look(int k, WildcardElement wc); - - public Lookahead look(int k, ZeroOrMoreBlock blk); - - public Lookahead look(int k, String rule); - - public void setGrammar(Grammar g); - - public boolean subruleCanBeInverted(AlternativeBlock blk, boolean forLexer); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/LLkParser.java glassfish-gil/entity-persistence/src/java/persistence/antlr/LLkParser.java --- glassfish/entity-persistence/src/java/persistence/antlr/LLkParser.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/LLkParser.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,84 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.io.IOException; - -/**An LL(k) parser. - * - * @see persistence.antlr.Token - * @see persistence.antlr.TokenBuffer - */ -public class LLkParser extends Parser { - int k; - - public LLkParser(int k_) { - k = k_; - } - - public LLkParser(ParserSharedInputState state, int k_) { - super(state); - k = k_; - } - - public LLkParser(TokenBuffer tokenBuf, int k_) { - k = k_; - setTokenBuffer(tokenBuf); - } - - public LLkParser(TokenStream lexer, int k_) { - k = k_; - TokenBuffer tokenBuf = new TokenBuffer(lexer); - setTokenBuffer(tokenBuf); - } - - /**Consume another token from the input stream. Can only write sequentially! - * If you need 3 tokens ahead, you must consume() 3 times. - * <p> - * Note that it is possible to overwrite tokens that have not been matched. - * For example, calling consume() 3 times when k=2, means that the first token - * consumed will be overwritten with the 3rd. - */ - public void consume() { - inputState.input.consume(); - } - - public int LA(int i) throws TokenStreamException { - return inputState.input.LA(i); - } - - public Token LT(int i) throws TokenStreamException { - return inputState.input.LT(i); - } - - private void trace(String ee, String rname) throws TokenStreamException { - traceIndent(); - System.out.print(ee + rname + ((inputState.guessing > 0)?"; [guessing]":"; ")); - for (int i = 1; i <= k; i++) { - if (i != 1) { - System.out.print(", "); - } - if ( LT(i)!=null ) { - System.out.print("LA(" + i + ")==" + LT(i).getText()); - } - else { - System.out.print("LA(" + i + ")==null"); - } - } - System.out.println(""); - } - - public void traceIn(String rname) throws TokenStreamException { - traceDepth += 1; - trace("> ", rname); - } - - public void traceOut(String rname) throws TokenStreamException { - trace("< ", rname); - traceDepth -= 1; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/Lookahead.java glassfish-gil/entity-persistence/src/java/persistence/antlr/Lookahead.java --- glassfish/entity-persistence/src/java/persistence/antlr/Lookahead.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/Lookahead.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,217 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; - -/**This object holds all information needed to represent - * the lookahead for any particular lookahead computation - * for a <b>single</b> lookahead depth. Final lookahead - * information is a simple bit set, but intermediate - * stages need computation cycle and FOLLOW information. - * - * <p> - * Concerning the <tt>cycle</tt> variable. - * If lookahead is computed for a RuleEnd node, then - * computation is part of a FOLLOW cycle for this rule. - * If lookahead is computed for a RuleBlock node, the - * computation is part of a FIRST cycle to this rule. - * - * <p> - * Concerning the <tt>epsilonDepth</tt> variable. - * This is not the depth relative to the rule reference - * that epsilon was encountered. That value is - * <pre> - * initial_k - epsilonDepth + 1 - * </pre> - * Also, lookahead depths past rule ref for local follow are: - * <pre> - * initial_k - (initial_k - epsilonDepth) - * </pre> - * Used for rule references. If we try - * to compute look(k, ruleref) and there are fewer - * than k lookahead terminals before the end of the - * the rule, epsilon will be returned (don't want to - * pass the end of the rule). We must track when the - * the lookahead got stuck. For example, - * <pre> - * a : b A B E F G; - * b : C ; - * </pre> - * LOOK(5, ref-to(b)) is {<EPSILON>} with depth = 4, which - * indicates that at 2 (5-4+1) tokens ahead, end of rule was reached. - * Therefore, the token at 4=5-(5-4) past rule ref b must be - * included in the set == F. - * The situation is complicated by the fact that a computation - * may hit the end of a rule at many different depths. For example, - * <pre> - * a : b A B C ; - * b : E F // epsilon depth of 1 relative to initial k=3 - * | G // epsilon depth of 2 - * ; - * </pre> - * Here, LOOK(3,ref-to(b)) returns epsilon, but the depths are - * {1, 2}; i.e., 3-(3-1) and 3-(3-2). Those are the lookahead depths - * past the rule ref needed for the local follow. - * - * <p> - * This is null unless an epsilon is created. - * - * @see persistence.antlr.Lookahead#combineWith(Lookahead) - */ -public class Lookahead implements Cloneable { - /** actual bitset of the lookahead */ - BitSet fset; - /** is this computation part of a computation cycle? */ - String cycle; - /** What k values were being computed when end of rule hit? */ - BitSet epsilonDepth; - /** Does this lookahead depth include Epsilon token type? This - * is used to avoid having a bit in the set for Epsilon as it - * conflicts with parsing binary files. - */ - boolean hasEpsilon = false; - - public Lookahead() { - fset = new BitSet(); - } - - /** create a new lookahead set with the LL(1) set to the parameter */ - public Lookahead(BitSet p) { - fset = p; - } - - /** create an empty lookahead set, but with cycle */ - public Lookahead(String c) { - this(); - cycle = c; - } - - /** Make a deep copy of everything in this object */ - public Object clone() { - Lookahead p = null; - try { - p = (Lookahead)super.clone(); - p.fset = (BitSet)fset.clone(); - p.cycle = cycle; // strings are immutable - if (epsilonDepth != null) { - p.epsilonDepth = (BitSet)epsilonDepth.clone(); - } - } - catch (CloneNotSupportedException e) { - throw new InternalError(); - } - return p; - } - - public void combineWith(Lookahead q) { - if (cycle == null) { // track at least one cycle - cycle = q.cycle; - } - - if (q.containsEpsilon()) { - hasEpsilon = true; - } - - // combine epsilon depths - if (epsilonDepth != null) { - if (q.epsilonDepth != null) { - epsilonDepth.orInPlace(q.epsilonDepth); - } - } - else if (q.epsilonDepth != null) { - epsilonDepth = (BitSet)q.epsilonDepth.clone(); - } - fset.orInPlace(q.fset); - } - - public boolean containsEpsilon() { - return hasEpsilon; - } - - /** What is the intersection of two lookahead depths? - * Only the Epsilon "bit" and bitset are considered. - */ - public Lookahead intersection(Lookahead q) { - Lookahead p = new Lookahead(fset.and(q.fset)); - if (this.hasEpsilon && q.hasEpsilon) { - p.setEpsilon(); - } - return p; - } - - public boolean nil() { - return fset.nil() && !hasEpsilon; - } - - public static Lookahead of(int el) { - Lookahead look = new Lookahead(); - look.fset.add(el); - return look; - } - - public void resetEpsilon() { - hasEpsilon = false; - } - - public void setEpsilon() { - hasEpsilon = true; - } - - public String toString() { - String e = "",b,f = "",d = ""; - b = fset.toString(","); - if (containsEpsilon()) { - e = "+<epsilon>"; - } - if (cycle != null) { - f = "; FOLLOW(" + cycle + ")"; - } - if (epsilonDepth != null) { - d = "; depths=" + epsilonDepth.toString(","); - } - return b + e + f + d; - - } - - public String toString(String separator, CharFormatter formatter) { - String e = "",b,f = "",d = ""; - b = fset.toString(separator, formatter); - if (containsEpsilon()) { - e = "+<epsilon>"; - } - if (cycle != null) { - f = "; FOLLOW(" + cycle + ")"; - } - if (epsilonDepth != null) { - d = "; depths=" + epsilonDepth.toString(","); - } - return b + e + f + d; - } - - public String toString(String separator, CharFormatter formatter, Grammar g) { - if (g instanceof LexerGrammar) { - return toString(separator, formatter); - } - else { - return toString(separator, g.tokenManager.getVocabulary()); - } - } - - public String toString(String separator, Vector vocab) { - String b,f = "",d = ""; - b = fset.toString(separator, vocab); - if (cycle != null) { - f = "; FOLLOW(" + cycle + ")"; - } - if (epsilonDepth != null) { - d = "; depths=" + epsilonDepth.toString(","); - } - return b + f + d; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/MakeGrammar.java glassfish-gil/entity-persistence/src/java/persistence/antlr/MakeGrammar.java --- glassfish/entity-persistence/src/java/persistence/antlr/MakeGrammar.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/MakeGrammar.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,790 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.Stack; -import persistence.antlr.collections.impl.LList; -import persistence.antlr.collections.impl.Vector; - -public class MakeGrammar extends DefineGrammarSymbols { - - protected Stack blocks = new LList(); // track subrules--Stack<BlockContext> - protected RuleRefElement lastRuleRef; - - protected RuleEndElement ruleEnd; // used if not nested - protected RuleBlock ruleBlock; // points to block of current rule. - protected int nested = 0; // nesting inside a subrule - protected boolean grammarError = false; - - ExceptionSpec currentExceptionSpec = null; - - public MakeGrammar(Tool tool_, String[] args_, LLkAnalyzer analyzer_) { - super(tool_, args_, analyzer_); - } - - /** Abort the processing of a grammar (due to syntax errors) */ - public void abortGrammar() { - String s = "unknown grammar"; - if (grammar != null) { - s = grammar.getClassName(); - } - tool.error("aborting grammar '" + s + "' due to errors"); - super.abortGrammar(); - } - - protected void addElementToCurrentAlt(AlternativeElement e) { - e.enclosingRuleName = ruleBlock.ruleName; - context().addAlternativeElement(e); - } - - public void beginAlt(boolean doAutoGen_) { - super.beginAlt(doAutoGen_); - Alternative alt = new Alternative(); - alt.setAutoGen(doAutoGen_); - context().block.addAlternative(alt); - } - - public void beginChildList() { - super.beginChildList(); - context().block.addAlternative(new Alternative()); - } - - /** Add an exception group to a rule (currently a no-op) */ - public void beginExceptionGroup() { - super.beginExceptionGroup(); - if (!(context().block instanceof RuleBlock)) { - tool.panic("beginExceptionGroup called outside of rule block"); - } - } - - /** Add an exception spec to an exception group or rule block */ - public void beginExceptionSpec(Token label) { - // Hack the label string a bit to remove leading/trailing space. - if (label != null) { - label.setText(StringUtils.stripFront(StringUtils.stripBack(label.getText(), " \n\r\t"), " \n\r\t")); - } - super.beginExceptionSpec(label); - // Don't check for currentExceptionSpec!=null because syntax errors - // may leave it set to something. - currentExceptionSpec = new ExceptionSpec(label); - } - - public void beginSubRule(Token label, Token start, boolean not) { - super.beginSubRule(label, start, not); - // we don't know what kind of subrule it is yet. - // push a dummy one that will allow us to collect the - // alternatives. Later, we'll switch to real object. - blocks.push(new BlockContext()); - context().block = new AlternativeBlock(grammar, start, not); - context().altNum = 0; // reset alternative number - nested++; - // create a final node to which the last elememt of each - // alternative will point. - context().blockEnd = new BlockEndElement(grammar); - // make sure end node points to start of block - context().blockEnd.block = context().block; - labelElement(context().block, label); - } - - public void beginTree(Token tok) throws SemanticException { - if (!(grammar instanceof TreeWalkerGrammar)) { - tool.error("Trees only allowed in TreeParser", grammar.getFilename(), tok.getLine(), tok.getColumn()); - throw new SemanticException("Trees only allowed in TreeParser"); - } - super.beginTree(tok); - blocks.push(new TreeBlockContext()); - context().block = new TreeElement(grammar, tok); - context().altNum = 0; // reset alternative number - } - - public BlockContext context() { - if (blocks.height() == 0) { - return null; - } - else { - return (BlockContext)blocks.top(); - } - } - - /**Used to build nextToken() for the lexer. - * This builds a rule which has every "public" rule in the given Vector of - * rules as it's alternate. Each rule ref generates a Token object. - * @param g The Grammar that is being processed - * @param lexRules A vector of lexer rules that will be used to create an alternate block. - * @param rname The name of the resulting rule. - */ - public static RuleBlock createNextTokenRule(Grammar g, Vector lexRules, String rname) { - // create actual rule data structure - RuleBlock rb = new RuleBlock(g, rname); - rb.setDefaultErrorHandler(g.getDefaultErrorHandler()); - RuleEndElement ruleEnd = new RuleEndElement(g); - rb.setEndElement(ruleEnd); - ruleEnd.block = rb; - // Add an alternative for each element of the rules vector. - for (int i = 0; i < lexRules.size(); i++) { - RuleSymbol r = (RuleSymbol)lexRules.elementAt(i); - if (!r.isDefined()) { - g.antlrTool.error("Lexer rule " + r.id.substring(1) + " is not defined"); - } - else { - if (r.access.equals("public")) { - Alternative alt = new Alternative(); // create alt we'll add to ref rule - RuleBlock targetRuleBlock = r.getBlock(); - Vector targetRuleAlts = targetRuleBlock.getAlternatives(); - // collect a sem pred if only one alt and it's at the start; - // simple, but faster to implement until real hoisting - if ( targetRuleAlts!=null && targetRuleAlts.size()==1 ) { - Alternative onlyAlt = (Alternative)targetRuleAlts.elementAt(0); - if ( onlyAlt.semPred!=null ) { - // ok, has sem pred, make this rule ref alt have a pred - alt.semPred = onlyAlt.semPred; - // REMOVE predicate from target rule??? NOPE, another - // rule other than nextToken() might invoke it. - } - } - - // create a rule ref to lexer rule - // the Token is a RULE_REF not a TOKEN_REF since the - // conversion to mRulename has already taken place - RuleRefElement rr = - new RuleRefElement(g, - new CommonToken(ANTLRTokenTypes.RULE_REF, r.getId()), - GrammarElement.AUTO_GEN_NONE); - rr.setLabel("theRetToken"); - rr.enclosingRuleName = "nextToken"; - rr.next = ruleEnd; - alt.addElement(rr); // add rule ref to alt - alt.setAutoGen(true); // keep text of elements - rb.addAlternative(alt); // add alt to rule block - r.addReference(rr); // track ref to this rule in rule blk - } - } - } - - rb.setAutoGen(true); // keep text of elements - rb.prepareForAnalysis(); - //System.out.println(rb); - return rb; - } - - /** Return block as if they had typed: "( rule )?" */ - private AlternativeBlock createOptionalRuleRef(String rule, Token start) { - // Make the subrule - AlternativeBlock blk = new AlternativeBlock(grammar, start, false); - - // Make sure rule is defined - String mrule = CodeGenerator.encodeLexerRuleName(rule); // can only be a lexer rule! - if (!grammar.isDefined(mrule)) { - grammar.define(new RuleSymbol(mrule)); - } - - // Make the rule ref element - // RK: fixme probably easier to abuse start token.. - Token t = new CommonToken(ANTLRTokenTypes.TOKEN_REF, rule); - t.setLine(start.getLine()); - t.setLine(start.getColumn()); - RuleRefElement rref = - new RuleRefElement(grammar, t, GrammarElement.AUTO_GEN_NONE); - - rref.enclosingRuleName = ruleBlock.ruleName; - - // Make the end of block element - BlockEndElement end = new BlockEndElement(grammar); - end.block = blk; // end block points back to start of blk - - // Make an alternative, putting the rule ref into it - Alternative alt = new Alternative(rref); - alt.addElement(end); // last element in alt points to end of block - - // Add the alternative to this block - blk.addAlternative(alt); - - // create an empty (optional) alt and add to blk - Alternative optAlt = new Alternative(); - optAlt.addElement(end); // points immediately to end of block - - blk.addAlternative(optAlt); - - blk.prepareForAnalysis(); - return blk; - } - - public void defineRuleName(Token r, - String access, - boolean ruleAutoGen, - String docComment) - throws SemanticException { - // if ( Character.isUpperCase(r.getText().charAt(0)) ) { - if (r.type == ANTLRTokenTypes.TOKEN_REF) { - if (!(grammar instanceof LexerGrammar)) { - tool.error("Lexical rule " + r.getText() + - " defined outside of lexer", - grammar.getFilename(), r.getLine(), r.getColumn()); - r.setText(r.getText().toLowerCase()); - } - } - else { - if (grammar instanceof LexerGrammar) { - tool.error("Lexical rule names must be upper case, '" + r.getText() + - "' is not", - grammar.getFilename(), r.getLine(), r.getColumn()); - r.setText(r.getText().toUpperCase()); - } - } - - super.defineRuleName(r, access, ruleAutoGen, docComment); - String id = r.getText(); - // if ( Character.isUpperCase(id.charAt(0)) ) { // lexer rule? - if (r.type == ANTLRTokenTypes.TOKEN_REF) { // lexer rule? - id = CodeGenerator.encodeLexerRuleName(id); - } - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(id); - RuleBlock rb = new RuleBlock(grammar, r.getText(), r.getLine(), ruleAutoGen); - - // Lexer rules do not generate default error handling - rb.setDefaultErrorHandler(grammar.getDefaultErrorHandler()); - - ruleBlock = rb; - blocks.push(new BlockContext()); // enter new context - context().block = rb; - rs.setBlock(rb); - ruleEnd = new RuleEndElement(grammar); - rb.setEndElement(ruleEnd); - nested = 0; - } - - public void endAlt() { - super.endAlt(); - if (nested == 0) { // all rule-level alts link to ruleEnd node - addElementToCurrentAlt(ruleEnd); - } - else { - addElementToCurrentAlt(context().blockEnd); - } - context().altNum++; - } - - public void endChildList() { - super.endChildList(); - // create a final node to which the last elememt of the single - // alternative will point. Done for compatibility with analyzer. - // Does NOT point to any block like alternative blocks because the - // TreeElement is not a block. This is used only as a placeholder. - BlockEndElement be = new BlockEndElement(grammar); - be.block = context().block; - addElementToCurrentAlt(be); - } - - public void endExceptionGroup() { - super.endExceptionGroup(); - } - - public void endExceptionSpec() { - super.endExceptionSpec(); - if (currentExceptionSpec == null) { - tool.panic("exception processing internal error -- no active exception spec"); - } - if (context().block instanceof RuleBlock) { - // Named rule - ((RuleBlock)context().block).addExceptionSpec(currentExceptionSpec); - } - else { - // It must be a plain-old alternative block - if (context().currentAlt().exceptionSpec != null) { - tool.error("Alternative already has an exception specification", grammar.getFilename(), context().block.getLine(), context().block.getColumn()); - } - else { - context().currentAlt().exceptionSpec = currentExceptionSpec; - } - } - currentExceptionSpec = null; - } - - /** Called at the end of processing a grammar */ - public void endGrammar() { - if (grammarError) { - abortGrammar(); - } - else { - super.endGrammar(); - } - } - - public void endRule(String rule) { - super.endRule(rule); - BlockContext ctx = (BlockContext)blocks.pop(); // remove scope - // record the start of this block in the ending node - ruleEnd.block = ctx.block; - ruleEnd.block.prepareForAnalysis(); - //System.out.println(ctx.block); - } - - public void endSubRule() { - super.endSubRule(); - nested--; - // remove subrule context from scope stack - BlockContext ctx = (BlockContext)blocks.pop(); - AlternativeBlock block = ctx.block; - - // If the subrule is marked with ~, check that it is - // a valid candidate for analysis - if ( - block.not && - !(block instanceof SynPredBlock) && - !(block instanceof ZeroOrMoreBlock) && - !(block instanceof OneOrMoreBlock) - ) { - if (!analyzer.subruleCanBeInverted(block, grammar instanceof LexerGrammar)) { - String newline = System.getProperty("line.separator"); - tool.error( - "This subrule cannot be inverted. Only subrules of the form:" + newline + - " (T1|T2|T3...) or" + newline + - " ('c1'|'c2'|'c3'...)" + newline + - "may be inverted (ranges are also allowed).", - grammar.getFilename(), - block.getLine(), block.getColumn() - ); - } - } - - // add the subrule as element if not a syn pred - if (block instanceof SynPredBlock) { - // record a reference to the recently-recognized syn pred in the - // enclosing block. - SynPredBlock synpred = (SynPredBlock)block; - context().block.hasASynPred = true; - context().currentAlt().synPred = synpred; - grammar.hasSyntacticPredicate = true; - synpred.removeTrackingOfRuleRefs(grammar); - } - else { - addElementToCurrentAlt(block); - } - ctx.blockEnd.block.prepareForAnalysis(); - } - - public void endTree() { - super.endTree(); - BlockContext ctx = (BlockContext)blocks.pop(); - addElementToCurrentAlt(ctx.block); // add new TreeElement to enclosing alt. - } - - /** Remember that a major error occured in the grammar */ - public void hasError() { - grammarError = true; - } - - private void labelElement(AlternativeElement el, Token label) { - if (label != null) { - // Does this label already exist? - for (int i = 0; i < ruleBlock.labeledElements.size(); i++) { - AlternativeElement altEl = (AlternativeElement)ruleBlock.labeledElements.elementAt(i); - String l = altEl.getLabel(); - if (l != null && l.equals(label.getText())) { - tool.error("Label '" + label.getText() + "' has already been defined", grammar.getFilename(), label.getLine(), label.getColumn()); - return; - } - } - // add this node to the list of labeled elements - el.setLabel(label.getText()); - ruleBlock.labeledElements.appendElement(el); - } - } - - public void noAutoGenSubRule() { - context().block.setAutoGen(false); - } - - public void oneOrMoreSubRule() { - if (context().block.not) { - tool.error("'~' cannot be applied to (...)* subrule", grammar.getFilename(), context().block.getLine(), context().block.getColumn()); - } - // create the right kind of object now that we know what that is - // and switch the list of alternatives. Adjust the stack of blocks. - // copy any init action also. - OneOrMoreBlock b = new OneOrMoreBlock(grammar); - setBlock(b, context().block); - BlockContext old = (BlockContext)blocks.pop(); // remove old scope; we want new type of subrule - blocks.push(new BlockContext()); - context().block = b; - context().blockEnd = old.blockEnd; - context().blockEnd.block = b; - } - - public void optionalSubRule() { - if (context().block.not) { - tool.error("'~' cannot be applied to (...)? subrule", grammar.getFilename(), context().block.getLine(), context().block.getColumn()); - } - // convert (X)? -> (X|) so that we can ignore optional blocks altogether! - // It already thinks that we have a simple subrule, just add option block. - beginAlt(false); - endAlt(); - } - - public void refAction(Token action) { - super.refAction(action); - context().block.hasAnAction = true; - addElementToCurrentAlt(new ActionElement(grammar, action)); - } - - public void setUserExceptions(String thr) { - ((RuleBlock)context().block).throwsSpec = thr; - } - - // Only called for rule blocks - public void refArgAction(Token action) { - ((RuleBlock)context().block).argAction = action.getText(); - } - - public void refCharLiteral(Token lit, Token label, boolean inverted, int autoGenType, boolean lastInRule) { - if (!(grammar instanceof LexerGrammar)) { - tool.error("Character literal only valid in lexer", grammar.getFilename(), lit.getLine(), lit.getColumn()); - return; - } - super.refCharLiteral(lit, label, inverted, autoGenType, lastInRule); - CharLiteralElement cl = new CharLiteralElement((LexerGrammar)grammar, lit, inverted, autoGenType); - - // Generate a warning for non-lowercase ASCII when case-insensitive - if ( - !((LexerGrammar)grammar).caseSensitive && cl.getType() < 128 && - Character.toLowerCase((char)cl.getType()) != (char)cl.getType() - ) { - tool.warning("Character literal must be lowercase when caseSensitive=false", grammar.getFilename(), lit.getLine(), lit.getColumn()); - } - - addElementToCurrentAlt(cl); - labelElement(cl, label); - - // if ignore option is set, must add an optional call to the specified rule. - String ignore = ruleBlock.getIgnoreRule(); - if (!lastInRule && ignore != null) { - addElementToCurrentAlt(createOptionalRuleRef(ignore, lit)); - } - } - - public void refCharRange(Token t1, Token t2, Token label, int autoGenType, boolean lastInRule) { - if (!(grammar instanceof LexerGrammar)) { - tool.error("Character range only valid in lexer", grammar.getFilename(), t1.getLine(), t1.getColumn()); - return; - } - int rangeMin = ANTLRLexer.tokenTypeForCharLiteral(t1.getText()); - int rangeMax = ANTLRLexer.tokenTypeForCharLiteral(t2.getText()); - if (rangeMax < rangeMin) { - tool.error("Malformed range.", grammar.getFilename(), t1.getLine(), t1.getColumn()); - return; - } - - // Generate a warning for non-lowercase ASCII when case-insensitive - if (!((LexerGrammar)grammar).caseSensitive) { - if (rangeMin < 128 && Character.toLowerCase((char)rangeMin) != (char)rangeMin) { - tool.warning("Character literal must be lowercase when caseSensitive=false", grammar.getFilename(), t1.getLine(), t1.getColumn()); - } - if (rangeMax < 128 && Character.toLowerCase((char)rangeMax) != (char)rangeMax) { - tool.warning("Character literal must be lowercase when caseSensitive=false", grammar.getFilename(), t2.getLine(), t2.getColumn()); - } - } - - super.refCharRange(t1, t2, label, autoGenType, lastInRule); - CharRangeElement cr = new CharRangeElement((LexerGrammar)grammar, t1, t2, autoGenType); - addElementToCurrentAlt(cr); - labelElement(cr, label); - - // if ignore option is set, must add an optional call to the specified rule. - String ignore = ruleBlock.getIgnoreRule(); - if (!lastInRule && ignore != null) { - addElementToCurrentAlt(createOptionalRuleRef(ignore, t1)); - } - } - - public void refTokensSpecElementOption(Token tok, - Token option, - Token value) { - /* - System.out.println("setting tokens spec option for "+tok.getText()); - System.out.println(option.getText()+","+value.getText()); - */ - TokenSymbol ts = (TokenSymbol) - grammar.tokenManager.getTokenSymbol(tok.getText()); - if (ts == null) { - tool.panic("cannot find " + tok.getText() + "in tokens {...}"); - } - if (option.getText().equals("AST")) { - ts.setASTNodeType(value.getText()); - } - else { - grammar.antlrTool.error("invalid tokens {...} element option:" + - option.getText(), - grammar.getFilename(), - option.getLine(), option.getColumn()); - } - } - - public void refElementOption(Token option, Token value) { - /* - System.out.println("setting option for "+context().currentElement()); - System.out.println(option.getText()+","+value.getText()); - */ - AlternativeElement e = context().currentElement(); - if (e instanceof StringLiteralElement || - e instanceof TokenRefElement || - e instanceof WildcardElement) { - ((GrammarAtom)e).setOption(option, value); - } - else { - tool.error("cannot use element option (" + option.getText() + - ") for this kind of element", - grammar.getFilename(), option.getLine(), option.getColumn()); - } - } - - /** Add an exception handler to an exception spec */ - public void refExceptionHandler(Token exTypeAndName, Token action) { - super.refExceptionHandler(exTypeAndName, action); - if (currentExceptionSpec == null) { - tool.panic("exception handler processing internal error"); - } - currentExceptionSpec.addHandler(new ExceptionHandler(exTypeAndName, action)); - } - - public void refInitAction(Token action) { - super.refAction(action); - context().block.setInitAction(action.getText()); - } - - public void refMemberAction(Token act) { - grammar.classMemberAction = act; - } - - public void refPreambleAction(Token act) { - super.refPreambleAction(act); - } - - // Only called for rule blocks - public void refReturnAction(Token returnAction) { - if (grammar instanceof LexerGrammar) { - String name = CodeGenerator.encodeLexerRuleName(((RuleBlock)context().block).getRuleName()); - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(name); - if (rs.access.equals("public")) { - tool.warning("public Lexical rules cannot specify return type", grammar.getFilename(), returnAction.getLine(), returnAction.getColumn()); - return; - } - } - ((RuleBlock)context().block).returnAction = returnAction.getText(); - } - - public void refRule(Token idAssign, - Token r, - Token label, - Token args, - int autoGenType) { - // Disallow parser rule references in the lexer - if (grammar instanceof LexerGrammar) { - // if (!Character.isUpperCase(r.getText().charAt(0))) { - if (r.type != ANTLRTokenTypes.TOKEN_REF) { - tool.error("Parser rule " + r.getText() + " referenced in lexer"); - return; - } - if (autoGenType == GrammarElement.AUTO_GEN_CARET) { - tool.error("AST specification ^ not allowed in lexer", grammar.getFilename(), r.getLine(), r.getColumn()); - } - } - - super.refRule(idAssign, r, label, args, autoGenType); - lastRuleRef = new RuleRefElement(grammar, r, autoGenType); - if (args != null) { - lastRuleRef.setArgs(args.getText()); - } - if (idAssign != null) { - lastRuleRef.setIdAssign(idAssign.getText()); - } - addElementToCurrentAlt(lastRuleRef); - - String id = r.getText(); - // if ( Character.isUpperCase(id.charAt(0)) ) { // lexer rule? - if (r.type == ANTLRTokenTypes.TOKEN_REF) { // lexer rule? - id = CodeGenerator.encodeLexerRuleName(id); - } - // update symbol table so it knows what nodes reference the rule. - RuleSymbol rs = (RuleSymbol)grammar.getSymbol(id); - rs.addReference(lastRuleRef); - labelElement(lastRuleRef, label); - } - - public void refSemPred(Token pred) { - //System.out.println("refSemPred "+pred.getText()); - super.refSemPred(pred); - //System.out.println("context().block: "+context().block); - if (context().currentAlt().atStart()) { - context().currentAlt().semPred = pred.getText(); - } - else { - ActionElement a = new ActionElement(grammar, pred); - a.isSemPred = true; - addElementToCurrentAlt(a); - } - //System.out.println("DONE refSemPred "+pred.getText()); - } - - public void refStringLiteral(Token lit, Token label, int autoGenType, boolean lastInRule) { - super.refStringLiteral(lit, label, autoGenType, lastInRule); - if (grammar instanceof TreeWalkerGrammar && autoGenType == GrammarElement.AUTO_GEN_CARET) { - tool.error("^ not allowed in here for tree-walker", grammar.getFilename(), lit.getLine(), lit.getColumn()); - } - StringLiteralElement sl = new StringLiteralElement(grammar, lit, autoGenType); - - // If case-insensitive, then check each char of the stirng literal - if (grammar instanceof LexerGrammar && !((LexerGrammar)grammar).caseSensitive) { - for (int i = 1; i < lit.getText().length() - 1; i++) { - char c = lit.getText().charAt(i); - if (c < 128 && Character.toLowerCase(c) != c) { - tool.warning("Characters of string literal must be lowercase when caseSensitive=false", grammar.getFilename(), lit.getLine(), lit.getColumn()); - break; - } - } - } - - addElementToCurrentAlt(sl); - labelElement(sl, label); - - // if ignore option is set, must add an optional call to the specified rule. - String ignore = ruleBlock.getIgnoreRule(); - if (!lastInRule && ignore != null) { - addElementToCurrentAlt(createOptionalRuleRef(ignore, lit)); - } - } - - public void refToken(Token idAssign, Token t, Token label, Token args, - boolean inverted, int autoGenType, boolean lastInRule) { - if (grammar instanceof LexerGrammar) { - // In lexer, token references are really rule references - if (autoGenType == GrammarElement.AUTO_GEN_CARET) { - tool.error("AST specification ^ not allowed in lexer", grammar.getFilename(), t.getLine(), t.getColumn()); - } - if (inverted) { - tool.error("~TOKEN is not allowed in lexer", grammar.getFilename(), t.getLine(), t.getColumn()); - } - refRule(idAssign, t, label, args, autoGenType); - - // if ignore option is set, must add an optional call to the specified token rule. - String ignore = ruleBlock.getIgnoreRule(); - if (!lastInRule && ignore != null) { - addElementToCurrentAlt(createOptionalRuleRef(ignore, t)); - } - } - else { - // Cannot have token ref args or assignment outside of lexer - if (idAssign != null) { - tool.error("Assignment from token reference only allowed in lexer", grammar.getFilename(), idAssign.getLine(), idAssign.getColumn()); - } - if (args != null) { - tool.error("Token reference arguments only allowed in lexer", grammar.getFilename(), args.getLine(), args.getColumn()); - } - super.refToken(idAssign, t, label, args, inverted, autoGenType, lastInRule); - TokenRefElement te = new TokenRefElement(grammar, t, inverted, autoGenType); - addElementToCurrentAlt(te); - labelElement(te, label); - } - } - - public void refTokenRange(Token t1, Token t2, Token label, int autoGenType, boolean lastInRule) { - if (grammar instanceof LexerGrammar) { - tool.error("Token range not allowed in lexer", grammar.getFilename(), t1.getLine(), t1.getColumn()); - return; - } - super.refTokenRange(t1, t2, label, autoGenType, lastInRule); - TokenRangeElement tr = new TokenRangeElement(grammar, t1, t2, autoGenType); - if (tr.end < tr.begin) { - tool.error("Malformed range.", grammar.getFilename(), t1.getLine(), t1.getColumn()); - return; - } - addElementToCurrentAlt(tr); - labelElement(tr, label); - } - - public void refTreeSpecifier(Token treeSpec) { - context().currentAlt().treeSpecifier = treeSpec; - } - - public void refWildcard(Token t, Token label, int autoGenType) { - super.refWildcard(t, label, autoGenType); - WildcardElement wc = new WildcardElement(grammar, t, autoGenType); - addElementToCurrentAlt(wc); - labelElement(wc, label); - } - - /** Get ready to process a new grammar */ - public void reset() { - super.reset(); - blocks = new LList(); - lastRuleRef = null; - ruleEnd = null; - ruleBlock = null; - nested = 0; - currentExceptionSpec = null; - grammarError = false; - } - - public void setArgOfRuleRef(Token argAction) { - super.setArgOfRuleRef(argAction); - lastRuleRef.setArgs(argAction.getText()); - } - - public static void setBlock(AlternativeBlock b, AlternativeBlock src) { - b.setAlternatives(src.getAlternatives()); - b.initAction = src.initAction; - //b.lookaheadDepth = src.lookaheadDepth; - b.label = src.label; - b.hasASynPred = src.hasASynPred; - b.hasAnAction = src.hasAnAction; - b.warnWhenFollowAmbig = src.warnWhenFollowAmbig; - b.generateAmbigWarnings = src.generateAmbigWarnings; - b.line = src.line; - b.greedy = src.greedy; - b.greedySet = src.greedySet; - } - - public void setRuleOption(Token key, Token value) { - //((RuleBlock)context().block).setOption(key, value); - ruleBlock.setOption(key, value); - } - - public void setSubruleOption(Token key, Token value) { - ((AlternativeBlock)context().block).setOption(key, value); - } - - public void synPred() { - if (context().block.not) { - tool.error("'~' cannot be applied to syntactic predicate", grammar.getFilename(), context().block.getLine(), context().block.getColumn()); - } - // create the right kind of object now that we know what that is - // and switch the list of alternatives. Adjust the stack of blocks. - // copy any init action also. - SynPredBlock b = new SynPredBlock(grammar); - setBlock(b, context().block); - BlockContext old = (BlockContext)blocks.pop(); // remove old scope; we want new type of subrule - blocks.push(new BlockContext()); - context().block = b; - context().blockEnd = old.blockEnd; - context().blockEnd.block = b; - } - - public void zeroOrMoreSubRule() { - if (context().block.not) { - tool.error("'~' cannot be applied to (...)+ subrule", grammar.getFilename(), context().block.getLine(), context().block.getColumn()); - } - // create the right kind of object now that we know what that is - // and switch the list of alternatives. Adjust the stack of blocks. - // copy any init action also. - ZeroOrMoreBlock b = new ZeroOrMoreBlock(grammar); - setBlock(b, context().block); - BlockContext old = (BlockContext)blocks.pop(); // remove old scope; we want new type of subrule - blocks.push(new BlockContext()); - context().block = b; - context().blockEnd = old.blockEnd; - context().blockEnd.block = b; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/MismatchedCharException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/MismatchedCharException.java --- glassfish/entity-persistence/src/java/persistence/antlr/MismatchedCharException.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/MismatchedCharException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,145 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.BitSet; - -public class MismatchedCharException extends RecognitionException { - // Types of chars - public static final int CHAR = 1; - public static final int NOT_CHAR = 2; - public static final int RANGE = 3; - public static final int NOT_RANGE = 4; - public static final int SET = 5; - public static final int NOT_SET = 6; - - // One of the above - public int mismatchType; - - // what was found on the input stream - public int foundChar; - - // For CHAR/NOT_CHAR and RANGE/NOT_RANGE - public int expecting; - - // For RANGE/NOT_RANGE (expecting is lower bound of range) - public int upper; - - // For SET/NOT_SET - public BitSet set; - - // who knows...they may want to ask scanner questions - public CharScanner scanner; - - /** - * MismatchedCharException constructor comment. - */ - public MismatchedCharException() { - super("Mismatched char"); - } - - // Expected range / not range - public MismatchedCharException(char c, char lower, char upper_, boolean matchNot, CharScanner scanner_) { - super("Mismatched char", scanner_.getFilename(), scanner_.getLine(), scanner_.getColumn()); - mismatchType = matchNot ? NOT_RANGE : RANGE; - foundChar = c; - expecting = lower; - upper = upper_; - scanner = scanner_; - } - - // Expected token / not token - public MismatchedCharException(char c, char expecting_, boolean matchNot, CharScanner scanner_) { - super("Mismatched char", scanner_.getFilename(), scanner_.getLine(), scanner_.getColumn()); - mismatchType = matchNot ? NOT_CHAR : CHAR; - foundChar = c; - expecting = expecting_; - scanner = scanner_; - } - - // Expected BitSet / not BitSet - public MismatchedCharException(char c, BitSet set_, boolean matchNot, CharScanner scanner_) { - super("Mismatched char", scanner_.getFilename(), scanner_.getLine(), scanner_.getColumn()); - mismatchType = matchNot ? NOT_SET : SET; - foundChar = c; - set = set_; - scanner = scanner_; - } - - /** - * Returns a clean error message (no line number/column information) - */ - public String getMessage() { - StringBuffer sb = new StringBuffer(); - - switch (mismatchType) { - case CHAR: - sb.append("expecting "); appendCharName(sb, expecting); - sb.append(", found "); appendCharName(sb, foundChar); - break; - case NOT_CHAR: - sb.append("expecting anything but '"); - appendCharName(sb, expecting); - sb.append("'; got it anyway"); - break; - case RANGE: - case NOT_RANGE: - sb.append("expecting token "); - if (mismatchType == NOT_RANGE) - sb.append("NOT "); - sb.append("in range: "); - appendCharName(sb, expecting); - sb.append(".."); - appendCharName(sb, upper); - sb.append(", found "); - appendCharName(sb, foundChar); - break; - case SET: - case NOT_SET: - sb.append("expecting " + (mismatchType == NOT_SET ? "NOT " : "") + "one of ("); - int[] elems = set.toArray(); - for (int i = 0; i < elems.length; i++) { - appendCharName(sb, elems[i]); - } - sb.append("), found "); - appendCharName(sb, foundChar); - break; - default : - sb.append(super.getMessage()); - break; - } - - return sb.toString(); - } - - /** Append a char to the msg buffer. If special, - * then show escaped version - */ - private void appendCharName(StringBuffer sb, int c) { - switch (c) { - case 65535 : - // 65535 = (char) -1 = EOF - sb.append("'<EOF>'"); - break; - case '\n' : - sb.append("'\\n'"); - break; - case '\r' : - sb.append("'\\r'"); - break; - case '\t' : - sb.append("'\\t'"); - break; - default : - sb.append('\''); - sb.append((char) c); - sb.append('\''); - break; - } - } -} - diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/MismatchedTokenException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/MismatchedTokenException.java --- glassfish/entity-persistence/src/java/persistence/antlr/MismatchedTokenException.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/MismatchedTokenException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,171 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.AST; - -public class MismatchedTokenException extends RecognitionException { - // Token names array for formatting - String[] tokenNames; - // The token that was encountered - public Token token; - // The offending AST node if tree walking - public AST node; - - String tokenText = null; // taken from node or token object - - // Types of tokens - public static final int TOKEN = 1; - public static final int NOT_TOKEN = 2; - public static final int RANGE = 3; - public static final int NOT_RANGE = 4; - public static final int SET = 5; - public static final int NOT_SET = 6; - // One of the above - public int mismatchType; - - // For TOKEN/NOT_TOKEN and RANGE/NOT_RANGE - public int expecting; - - // For RANGE/NOT_RANGE (expecting is lower bound of range) - public int upper; - - // For SET/NOT_SET - public BitSet set; - - /** Looking for AST wildcard, didn't find it */ - public MismatchedTokenException() { - super("Mismatched Token: expecting any AST node", "<AST>", -1, -1); - } - - // Expected range / not range - public MismatchedTokenException(String[] tokenNames_, AST node_, int lower, int upper_, boolean matchNot) { - super("Mismatched Token", "<AST>", node_==null? -1:node_.getLine(), node_==null? -1:node_.getColumn()); - tokenNames = tokenNames_; - node = node_; - if (node_ == null) { - tokenText = "<empty tree>"; - } - else { - tokenText = node_.toString(); - } - mismatchType = matchNot ? NOT_RANGE : RANGE; - expecting = lower; - upper = upper_; - } - - // Expected token / not token - public MismatchedTokenException(String[] tokenNames_, AST node_, int expecting_, boolean matchNot) { - super("Mismatched Token", "<AST>", node_==null? -1:node_.getLine(), node_==null? -1:node_.getColumn()); - tokenNames = tokenNames_; - node = node_; - if (node_ == null) { - tokenText = "<empty tree>"; - } - else { - tokenText = node_.toString(); - } - mismatchType = matchNot ? NOT_TOKEN : TOKEN; - expecting = expecting_; - } - - // Expected BitSet / not BitSet - public MismatchedTokenException(String[] tokenNames_, AST node_, BitSet set_, boolean matchNot) { - super("Mismatched Token", "<AST>", node_==null? -1:node_.getLine(), node_==null? -1:node_.getColumn()); - tokenNames = tokenNames_; - node = node_; - if (node_ == null) { - tokenText = "<empty tree>"; - } - else { - tokenText = node_.toString(); - } - mismatchType = matchNot ? NOT_SET : SET; - set = set_; - } - - // Expected range / not range - public MismatchedTokenException(String[] tokenNames_, Token token_, int lower, int upper_, boolean matchNot, String fileName_) { - super("Mismatched Token", fileName_, token_.getLine(), token_.getColumn()); - tokenNames = tokenNames_; - token = token_; - tokenText = token_.getText(); - mismatchType = matchNot ? NOT_RANGE : RANGE; - expecting = lower; - upper = upper_; - } - - // Expected token / not token - public MismatchedTokenException(String[] tokenNames_, Token token_, int expecting_, boolean matchNot, String fileName_) { - super("Mismatched Token", fileName_, token_.getLine(), token_.getColumn()); - tokenNames = tokenNames_; - token = token_; - tokenText = token_.getText(); - mismatchType = matchNot ? NOT_TOKEN : TOKEN; - expecting = expecting_; - } - - // Expected BitSet / not BitSet - public MismatchedTokenException(String[] tokenNames_, Token token_, BitSet set_, boolean matchNot, String fileName_) { - super("Mismatched Token", fileName_, token_.getLine(), token_.getColumn()); - tokenNames = tokenNames_; - token = token_; - tokenText = token_.getText(); - mismatchType = matchNot ? NOT_SET : SET; - set = set_; - } - - /** - * Returns a clean error message (no line number/column information) - */ - public String getMessage() { - StringBuffer sb = new StringBuffer(); - - switch (mismatchType) { - case TOKEN: - sb.append("expecting " + tokenName(expecting) + ", found '" + tokenText + "'"); - break; - case NOT_TOKEN: - sb.append("expecting anything but " + tokenName(expecting) + "; got it anyway"); - break; - case RANGE: - sb.append("expecting token in range: " + tokenName(expecting) + ".." + tokenName(upper) + ", found '" + tokenText + "'"); - break; - case NOT_RANGE: - sb.append("expecting token NOT in range: " + tokenName(expecting) + ".." + tokenName(upper) + ", found '" + tokenText + "'"); - break; - case SET: - case NOT_SET: - sb.append("expecting " + (mismatchType == NOT_SET ? "NOT " : "") + "one of ("); - int[] elems = set.toArray(); - for (int i = 0; i < elems.length; i++) { - sb.append(" "); - sb.append(tokenName(elems[i])); - } - sb.append("), found '" + tokenText + "'"); - break; - default : - sb.append(super.getMessage()); - break; - } - - return sb.toString(); - } - - private String tokenName(int tokenType) { - if (tokenType == Token.INVALID_TYPE) { - return "<Set of tokens>"; - } - else if (tokenType < 0 || tokenType >= tokenNames.length) { - return "<" + String.valueOf(tokenType) + ">"; - } - else { - return tokenNames[tokenType]; - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/NameSpace.java glassfish-gil/entity-persistence/src/java/persistence/antlr/NameSpace.java --- glassfish/entity-persistence/src/java/persistence/antlr/NameSpace.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/NameSpace.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,63 +0,0 @@ -package persistence.antlr; - -/** - * ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - * Container for a C++ namespace specification. Namespaces can be - * nested, so this contains a vector of all the nested names. - * - * @author David Wagner (JPL/Caltech) 8-12-00 - * - */ - -import java.util.Vector; -import java.util.Enumeration; -import java.io.PrintWriter; -import java.util.StringTokenizer; - -public class NameSpace { - private Vector names = new Vector(); - private String _name; - - public NameSpace(String name) { - _name = new String(name); - parse(name); - } - - public String getName() - { - return _name; - } - - /** - * Parse a C++ namespace declaration into seperate names - * splitting on :: We could easily parameterize this to make - * the delimiter a language-specific parameter, or use subclasses - * to support C++ namespaces versus java packages. -DAW - */ - protected void parse(String name) { - StringTokenizer tok = new StringTokenizer(name, "::"); - while (tok.hasMoreTokens()) - names.addElement(tok.nextToken()); - } - - /** - * Method to generate the required C++ namespace declarations - */ - void emitDeclarations(PrintWriter out) { - for (Enumeration n = names.elements(); n.hasMoreElements();) { - String s = (String)n.nextElement(); - out.println("ANTLR_BEGIN_NAMESPACE(" + s + ")"); - } - } - - /** - * Method to generate the required C++ namespace closures - */ - void emitClosures(PrintWriter out) { - for (int i = 0; i < names.size(); ++i) - out.println("ANTLR_END_NAMESPACE"); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/NoViableAltException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/NoViableAltException.java --- glassfish/entity-persistence/src/java/persistence/antlr/NoViableAltException.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/NoViableAltException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,39 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.AST; - -public class NoViableAltException extends RecognitionException { - public Token token; - public AST node; // handles parsing and treeparsing - - public NoViableAltException(AST t) { - super("NoViableAlt", "<AST>", t.getLine(), t.getColumn()); - node = t; - } - - public NoViableAltException(Token t, String fileName_) { - super("NoViableAlt", fileName_, t.getLine(), t.getColumn()); - token = t; - } - - /** - * Returns a clean error message (no line number/column information) - */ - public String getMessage() { - if (token != null) { - return "unexpected token: " + token.getText(); - } - - // must a tree parser error if token==null - if (node == TreeParser.ASTNULL) { - return "unexpected end of subtree"; - } - return "unexpected AST node: " + node.toString(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/NoViableAltForCharException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/NoViableAltForCharException.java --- glassfish/entity-persistence/src/java/persistence/antlr/NoViableAltForCharException.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/NoViableAltForCharException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,62 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public class NoViableAltForCharException extends RecognitionException { - public char foundChar; - - public NoViableAltForCharException(char c, CharScanner scanner) { - super("NoViableAlt", scanner.getFilename(), - scanner.getLine(), scanner.getColumn()); - foundChar = c; - } - - /** @deprecated As of ANTLR 2.7.2 use {@see #NoViableAltForCharException(char, String, int, int) } */ - public NoViableAltForCharException(char c, String fileName, int line) { - this(c, fileName, line, -1); - } - - public NoViableAltForCharException(char c, String fileName, int line, int column) { - super("NoViableAlt", fileName, line, column); - foundChar = c; - } - - /** - * Returns a clean error message (no line number/column information) - */ - public String getMessage() { - String mesg = "unexpected char: "; - - // I'm trying to mirror a change in the C++ stuff. - // But java seems to lack something isprint-ish.. - // so we do it manually. This is probably to restrictive. - - if ((foundChar >= ' ') && (foundChar <= '~')) { - mesg += '\''; - mesg += foundChar; - mesg += '\''; - } - else { - mesg += "0x"; - - int t = (int)foundChar >> 4; - - if (t < 10) - mesg += (char)(t | 0x30); - else - mesg += (char)(t + 0x37); - - t = (int)foundChar & 0xF; - - if (t < 10) - mesg += (char)(t | 0x30); - else - mesg += (char)(t + 0x37); - } - return mesg; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/OneOrMoreBlock.java glassfish-gil/entity-persistence/src/java/persistence/antlr/OneOrMoreBlock.java --- glassfish/entity-persistence/src/java/persistence/antlr/OneOrMoreBlock.java 2006-08-31 00:34:08.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/OneOrMoreBlock.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,30 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class OneOrMoreBlock extends BlockWithImpliedExitPath { - - public OneOrMoreBlock(Grammar g) { - super(g); - } - - public OneOrMoreBlock(Grammar g, Token start) { - super(g, start); - } - - public void generate() { - grammar.generator.gen(this); - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public String toString() { - return super.toString() + "+"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ParserGrammar.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ParserGrammar.java --- glassfish/entity-persistence/src/java/persistence/antlr/ParserGrammar.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ParserGrammar.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,98 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Hashtable; -import java.util.Enumeration; -import java.io.IOException; - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; - - -/** Parser-specific grammar subclass */ -class ParserGrammar extends Grammar { - - - ParserGrammar(String className_, Tool tool_, String superClass) { - super(className_, tool_, superClass); - } - - /** Top-level call to generate the code for this grammar */ - public void generate() throws IOException { - generator.gen(this); - } - - // Get name of class from which generated parser/lexer inherits - protected String getSuperClass() { - // if debugging, choose the debugging version of the parser - if (debuggingOutput) - return "debug.LLkDebuggingParser"; - return "LLkParser"; - } - - /**Process command line arguments. - * -trace have all rules call traceIn/traceOut - * -traceParser have parser rules call traceIn/traceOut - * -debug generate debugging output for parser debugger - */ - public void processArguments(String[] args) { - for (int i = 0; i < args.length; i++) { - if (args[i].equals("-trace")) { - traceRules = true; - antlrTool.setArgOK(i); - } - else if (args[i].equals("-traceParser")) { - traceRules = true; - antlrTool.setArgOK(i); - } - else if (args[i].equals("-debug")) { - debuggingOutput = true; - antlrTool.setArgOK(i); - } - } - } - - /** Set parser options -- performs action on the following options: - */ - public boolean setOption(String key, Token value) { - String s = value.getText(); - if (key.equals("buildAST")) { - if (s.equals("true")) { - buildAST = true; - } - else if (s.equals("false")) { - buildAST = false; - } - else { - antlrTool.error("buildAST option must be true or false", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("interactive")) { - if (s.equals("true")) { - interactive = true; - } - else if (s.equals("false")) { - interactive = false; - } - else { - antlrTool.error("interactive option must be true or false", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("ASTLabelType")) { - super.setOption(key, value); - return true; - } - if (super.setOption(key, value)) { - return true; - } - antlrTool.error("Invalid option: " + key, getFilename(), value.getLine(), value.getColumn()); - return false; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/Parser.java glassfish-gil/entity-persistence/src/java/persistence/antlr/Parser.java --- glassfish/entity-persistence/src/java/persistence/antlr/Parser.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/Parser.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,370 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.AST; -import persistence.antlr.collections.impl.ASTArray; - -/**A generic ANTLR parser (LL(k) for k>=1) containing a bunch of - * utility routines useful at any lookahead depth. We distinguish between - * the LL(1) and LL(k) parsers because of efficiency. This may not be - * necessary in the near future. - * - * Each parser object contains the state of the parse including a lookahead - * cache (the form of which is determined by the subclass), whether or - * not the parser is in guess mode, where tokens come from, etc... - * - * <p> - * During <b>guess</b> mode, the current lookahead token(s) and token type(s) - * cache must be saved because the token stream may not have been informed - * to save the token (via <tt>mark</tt>) before the <tt>try</tt> block. - * Guessing is started by: - * <ol> - * <li>saving the lookahead cache. - * <li>marking the current position in the TokenBuffer. - * <li>increasing the guessing level. - * </ol> - * - * After guessing, the parser state is restored by: - * <ol> - * <li>restoring the lookahead cache. - * <li>rewinding the TokenBuffer. - * <li>decreasing the guessing level. - * </ol> - * - * @see persistence.antlr.Token - * @see persistence.antlr.TokenBuffer - * @see persistence.antlr.Tokenizer - * @see persistence.antlr.LL1Parser - * @see persistence.antlr.LLkParser - */ - -import java.io.IOException; -import java.util.Hashtable; - -import persistence.antlr.debug.MessageListener; -import persistence.antlr.debug.ParserListener; -import persistence.antlr.debug.ParserMatchListener; -import persistence.antlr.debug.ParserTokenListener; -import persistence.antlr.debug.SemanticPredicateListener; -import persistence.antlr.debug.SyntacticPredicateListener; -import persistence.antlr.debug.TraceListener; - -public abstract class Parser { - protected ParserSharedInputState inputState; - - /** Nesting level of registered handlers */ - // protected int exceptionLevel = 0; - - /** Table of token type to token names */ - protected String[] tokenNames; - - /** AST return value for a rule is squirreled away here */ - protected AST returnAST; - - /** AST support code; parser delegates to this object. - * This is set during parser construction by default - * to either "new ASTFactory()" or a ctor that - * has a token type to class map for hetero nodes. - */ - protected ASTFactory astFactory = null; - - /** Constructed if any AST types specified in tokens{..}. - * Maps an Integer->Class object. - */ - protected Hashtable tokenTypeToASTClassMap = null; - - private boolean ignoreInvalidDebugCalls = false; - - /** Used to keep track of indentdepth for traceIn/Out */ - protected int traceDepth = 0; - - public Parser() { - this(new ParserSharedInputState()); - } - - public Parser(ParserSharedInputState state) { - inputState = state; - } - - /** If the user specifies a tokens{} section with heterogeneous - * AST node types, then ANTLR generates code to fill - * this mapping. - */ - public Hashtable getTokenTypeToASTClassMap() { - return tokenTypeToASTClassMap; - } - - public void addMessageListener(MessageListener l) { - if (!ignoreInvalidDebugCalls) - throw new IllegalArgumentException("addMessageListener() is only valid if parser built for debugging"); - } - - public void addParserListener(ParserListener l) { - if (!ignoreInvalidDebugCalls) - throw new IllegalArgumentException("addParserListener() is only valid if parser built for debugging"); - } - - public void addParserMatchListener(ParserMatchListener l) { - if (!ignoreInvalidDebugCalls) - throw new IllegalArgumentException("addParserMatchListener() is only valid if parser built for debugging"); - } - - public void addParserTokenListener(ParserTokenListener l) { - if (!ignoreInvalidDebugCalls) - throw new IllegalArgumentException("addParserTokenListener() is only valid if parser built for debugging"); - } - - public void addSemanticPredicateListener(SemanticPredicateListener l) { - if (!ignoreInvalidDebugCalls) - throw new IllegalArgumentException("addSemanticPredicateListener() is only valid if parser built for debugging"); - } - - public void addSyntacticPredicateListener(SyntacticPredicateListener l) { - if (!ignoreInvalidDebugCalls) - throw new IllegalArgumentException("addSyntacticPredicateListener() is only valid if parser built for debugging"); - } - - public void addTraceListener(TraceListener l) { - if (!ignoreInvalidDebugCalls) - throw new IllegalArgumentException("addTraceListener() is only valid if parser built for debugging"); - } - - /**Get another token object from the token stream */ - public abstract void consume() throws TokenStreamException; - - /** Consume tokens until one matches the given token */ - public void consumeUntil(int tokenType) throws TokenStreamException { - while (LA(1) != Token.EOF_TYPE && LA(1) != tokenType) { - consume(); - } - } - - /** Consume tokens until one matches the given token set */ - public void consumeUntil(BitSet set) throws TokenStreamException { - while (LA(1) != Token.EOF_TYPE && !set.member(LA(1))) { - consume(); - } - } - - protected void defaultDebuggingSetup(TokenStream lexer, TokenBuffer tokBuf) { - // by default, do nothing -- we're not debugging - } - - /** Get the AST return value squirreled away in the parser */ - public AST getAST() { - return returnAST; - } - - public ASTFactory getASTFactory() { - return astFactory; - } - - public String getFilename() { - return inputState.filename; - } - - public ParserSharedInputState getInputState() { - return inputState; - } - - public void setInputState(ParserSharedInputState state) { - inputState = state; - } - - public String getTokenName(int num) { - return tokenNames[num]; - } - - public String[] getTokenNames() { - return tokenNames; - } - - public boolean isDebugMode() { - return false; - } - - /** Return the token type of the ith token of lookahead where i=1 - * is the current token being examined by the parser (i.e., it - * has not been matched yet). - */ - public abstract int LA(int i) throws TokenStreamException; - - /**Return the ith token of lookahead */ - public abstract Token LT(int i) throws TokenStreamException; - - // Forwarded to TokenBuffer - public int mark() { - return inputState.input.mark(); - } - - /**Make sure current lookahead symbol matches token type <tt>t</tt>. - * Throw an exception upon mismatch, which is catch by either the - * error handler or by the syntactic predicate. - */ - public void match(int t) throws MismatchedTokenException, TokenStreamException { - if (LA(1) != t) - throw new MismatchedTokenException(tokenNames, LT(1), t, false, getFilename()); - else - // mark token as consumed -- fetch next token deferred until LA/LT - consume(); - } - - /**Make sure current lookahead symbol matches the given set - * Throw an exception upon mismatch, which is catch by either the - * error handler or by the syntactic predicate. - */ - public void match(BitSet b) throws MismatchedTokenException, TokenStreamException { - if (!b.member(LA(1))) - throw new MismatchedTokenException(tokenNames, LT(1), b, false, getFilename()); - else - // mark token as consumed -- fetch next token deferred until LA/LT - consume(); - } - - public void matchNot(int t) throws MismatchedTokenException, TokenStreamException { - if (LA(1) == t) - // Throws inverted-sense exception - throw new MismatchedTokenException(tokenNames, LT(1), t, true, getFilename()); - else - // mark token as consumed -- fetch next token deferred until LA/LT - consume(); - } - - /** @deprecated as of 2.7.2. This method calls System.exit() and writes - * directly to stderr, which is usually not appropriate when - * a parser is embedded into a larger application. Since the method is - * <code>static</code>, it cannot be overridden to avoid these problems. - * ANTLR no longer uses this method internally or in generated code. - */ - public static void panic() { - System.err.println("Parser: panic"); - System.exit(1); - } - - public void removeMessageListener(MessageListener l) { - if (!ignoreInvalidDebugCalls) - throw new RuntimeException("removeMessageListener() is only valid if parser built for debugging"); - } - - public void removeParserListener(ParserListener l) { - if (!ignoreInvalidDebugCalls) - throw new RuntimeException("removeParserListener() is only valid if parser built for debugging"); - } - - public void removeParserMatchListener(ParserMatchListener l) { - if (!ignoreInvalidDebugCalls) - throw new RuntimeException("removeParserMatchListener() is only valid if parser built for debugging"); - } - - public void removeParserTokenListener(ParserTokenListener l) { - if (!ignoreInvalidDebugCalls) - throw new RuntimeException("removeParserTokenListener() is only valid if parser built for debugging"); - } - - public void removeSemanticPredicateListener(SemanticPredicateListener l) { - if (!ignoreInvalidDebugCalls) - throw new IllegalArgumentException("removeSemanticPredicateListener() is only valid if parser built for debugging"); - } - - public void removeSyntacticPredicateListener(SyntacticPredicateListener l) { - if (!ignoreInvalidDebugCalls) - throw new IllegalArgumentException("removeSyntacticPredicateListener() is only valid if parser built for debugging"); - } - - public void removeTraceListener(TraceListener l) { - if (!ignoreInvalidDebugCalls) - throw new RuntimeException("removeTraceListener() is only valid if parser built for debugging"); - } - - /** Parser error-reporting function can be overridden in subclass */ - public void reportError(RecognitionException ex) { - System.err.println(ex); - } - - /** Parser error-reporting function can be overridden in subclass */ - public void reportError(String s) { - if (getFilename() == null) { - System.err.println("error: " + s); - } - else { - System.err.println(getFilename() + ": error: " + s); - } - } - - /** Parser warning-reporting function can be overridden in subclass */ - public void reportWarning(String s) { - if (getFilename() == null) { - System.err.println("warning: " + s); - } - else { - System.err.println(getFilename() + ": warning: " + s); - } - } - - public void rewind(int pos) { - inputState.input.rewind(pos); - } - - /** Specify an object with support code (shared by - * Parser and TreeParser. Normally, the programmer - * does not play with this, using setASTNodeType instead. - */ - public void setASTFactory(ASTFactory f) { - astFactory = f; - } - - public void setASTNodeClass(String cl) { - astFactory.setASTNodeType(cl); - } - - /** Specify the type of node to create during tree building; use setASTNodeClass now - * to be consistent with Token Object Type accessor. - * @deprecated since 2.7.1 - */ - public void setASTNodeType(String nodeType) { - setASTNodeClass(nodeType); - } - - public void setDebugMode(boolean debugMode) { - if (!ignoreInvalidDebugCalls) - throw new RuntimeException("setDebugMode() only valid if parser built for debugging"); - } - - public void setFilename(String f) { - inputState.filename = f; - } - - public void setIgnoreInvalidDebugCalls(boolean value) { - ignoreInvalidDebugCalls = value; - } - - /** Set or change the input token buffer */ - public void setTokenBuffer(TokenBuffer t) { - inputState.input = t; - } - - public void traceIndent() { - for (int i = 0; i < traceDepth; i++) - System.out.print(" "); - } - - public void traceIn(String rname) throws TokenStreamException { - traceDepth += 1; - traceIndent(); - System.out.println("> " + rname + "; LA(1)==" + LT(1).getText() + - ((inputState.guessing > 0)?" [guessing]":"")); - } - - public void traceOut(String rname) throws TokenStreamException { - traceIndent(); - System.out.println("< " + rname + "; LA(1)==" + LT(1).getText() + - ((inputState.guessing > 0)?" [guessing]":"")); - traceDepth -= 1; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ParserSharedInputState.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ParserSharedInputState.java --- glassfish/entity-persistence/src/java/persistence/antlr/ParserSharedInputState.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ParserSharedInputState.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,29 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** This object contains the data associated with an - * input stream of tokens. Multiple parsers - * share a single ParserSharedInputState to parse - * the same stream of tokens. - */ -public class ParserSharedInputState { - /** Where to get token objects */ - protected TokenBuffer input; - - /** Are we guessing (guessing>0)? */ - public int guessing = 0; - - /** What file (if known) caused the problem? */ - protected String filename; - - public void reset() { - guessing = 0; - filename = null; - input.reset(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ParseTree.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ParseTree.java --- glassfish/entity-persistence/src/java/persistence/antlr/ParseTree.java 2006-02-08 22:30:55.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ParseTree.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,51 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - */ - -import persistence.antlr.*; -import persistence.antlr.collections.AST; - -public abstract class ParseTree extends BaseAST { - - /** Walk parse tree and return requested number of derivation steps. - * If steps <= 0, return node text. If steps == 1, return derivation - * string at step. - */ - public String getLeftmostDerivationStep(int step) { - if ( step<=0 ) { - return toString(); - } - StringBuffer buf = new StringBuffer(2000); - getLeftmostDerivation(buf, step); - return buf.toString(); - } - - public String getLeftmostDerivation(int maxSteps) { - StringBuffer buf = new StringBuffer(2000); - buf.append(" "+this.toString()); - buf.append("\n"); - for (int d=1; d<maxSteps; d++) { - buf.append(" =>"); - buf.append(getLeftmostDerivationStep(d)); - buf.append("\n"); - } - return buf.toString(); - } - - /** Get derivation and return how many you did (less than requested for - * subtree roots. - */ - protected abstract int getLeftmostDerivation(StringBuffer buf, int step); - - // just satisfy BaseAST interface; unused as we manually create nodes - - public void initialize(int i, String s) { - } - public void initialize(AST ast) { - } - public void initialize(Token token) { - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ParseTreeRule.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ParseTreeRule.java --- glassfish/entity-persistence/src/java/persistence/antlr/ParseTreeRule.java 2006-02-08 22:30:55.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ParseTreeRule.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,69 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - */ - -import persistence.antlr.Token; -import persistence.antlr.collections.AST; - -public class ParseTreeRule extends ParseTree { - public static final int INVALID_ALT = -1; - - protected String ruleName; - protected int altNumber; // unused until I modify antlr to record this - - public ParseTreeRule(String ruleName) { - this(ruleName,INVALID_ALT); - } - - public ParseTreeRule(String ruleName, int altNumber) { - this.ruleName = ruleName; - this.altNumber = altNumber; - } - - public String getRuleName() { - return ruleName; - } - - /** Do a step-first walk, building up a buffer of tokens until - * you've reached a particular step and print out any rule subroots - * insteads of descending. - */ - protected int getLeftmostDerivation(StringBuffer buf, int step) { - int numReplacements = 0; - if ( step<=0 ) { - buf.append(' '); - buf.append(toString()); - return numReplacements; - } - AST child = getFirstChild(); - numReplacements = 1; - // walk child printing them out, descending into at most one - while ( child!=null ) { - if ( numReplacements>=step || child instanceof ParseTreeToken ) { - buf.append(' '); - buf.append(child.toString()); - } - else { - // descend for at least one more derivation; update count - int remainingReplacements = step-numReplacements; - int n = ((ParseTree)child).getLeftmostDerivation(buf, - remainingReplacements); - numReplacements += n; - } - child = child.getNextSibling(); - } - return numReplacements; - } - - public String toString() { - if ( altNumber==INVALID_ALT ) { - return '<'+ruleName+'>'; - } - else { - return '<'+ruleName+"["+altNumber+"]>"; - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ParseTreeToken.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ParseTreeToken.java --- glassfish/entity-persistence/src/java/persistence/antlr/ParseTreeToken.java 2006-02-08 22:30:55.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ParseTreeToken.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,30 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - */ - -import persistence.antlr.Token; -import persistence.antlr.collections.AST; - -public class ParseTreeToken extends ParseTree { - protected Token token; - - public ParseTreeToken(Token token) { - this.token = token; - } - - protected int getLeftmostDerivation(StringBuffer buf, int step) { - buf.append(' '); - buf.append(toString()); - return step; // did on replacements - } - - public String toString() { - if ( token!=null ) { - return token.getText(); - } - return "<missing token>"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/GrammarFile.java glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/GrammarFile.java --- glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/GrammarFile.java 2006-08-31 00:34:16.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/GrammarFile.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,88 +0,0 @@ -package persistence.antlr.preprocessor; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.IndexedVector; - -import java.util.Enumeration; -import java.io.*; - -/** Stores header action, grammar preamble, file options, and - * list of grammars in the file - */ -public class GrammarFile { - protected String fileName; - protected String headerAction = ""; - protected IndexedVector options; - protected IndexedVector grammars; - protected boolean expanded = false; // any grammars expanded within? - protected persistence.antlr.Tool tool; - - public GrammarFile(persistence.antlr.Tool tool, String f) { - fileName = f; - grammars = new IndexedVector(); - this.tool = tool; - } - - public void addGrammar(Grammar g) { - grammars.appendElement(g.getName(), g); - } - - public void generateExpandedFile() throws IOException { - if (!expanded) { - return; // don't generate if nothing got expanded - } - String expandedFileName = nameForExpandedGrammarFile(this.getName()); - - // create the new grammar file with expanded grammars - PrintWriter expF = tool.openOutputFile(expandedFileName); - expF.println(toString()); - expF.close(); - } - - public IndexedVector getGrammars() { - return grammars; - } - - public String getName() { - return fileName; - } - - public String nameForExpandedGrammarFile(String f) { - if (expanded) { - // strip path to original input, make expanded file in current dir - return "expanded" + tool.fileMinusPath(f); - } - else { - return f; - } - } - - public void setExpanded(boolean exp) { - expanded = exp; - } - - public void addHeaderAction(String a) { - headerAction += a + System.getProperty("line.separator"); - } - - public void setOptions(IndexedVector o) { - options = o; - } - - public String toString() { - String h = headerAction == null ? "" : headerAction; - String o = options == null ? "" : Hierarchy.optionsToString(options); - - StringBuffer s = new StringBuffer(10000); s.append(h); s.append(o); - for (Enumeration e = grammars.elements(); e.hasMoreElements();) { - Grammar g = (Grammar)e.nextElement(); - s.append(g.toString()); - } - return s.toString(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Grammar.java glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Grammar.java --- glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Grammar.java 2006-08-31 00:34:16.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Grammar.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,280 +0,0 @@ -package persistence.antlr.preprocessor; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.IndexedVector; - -import java.util.Hashtable; -import java.util.Enumeration; -import java.io.IOException; - -class Grammar { - protected String name; - protected String fileName; // where does it come from? - protected String superGrammar; // null if no super class - protected String type; // lexer? parser? tree parser? - protected IndexedVector rules; // text of rules as they were read in - protected IndexedVector options;// rule options - protected String tokenSection; // the tokens{} stuff - protected String preambleAction;// action right before grammar - protected String memberAction; // action inside grammar - protected Hierarchy hier; // hierarchy of grammars - protected boolean predefined = false; // one of the predefined grammars? - protected boolean alreadyExpanded = false; - protected boolean specifiedVocabulary = false; // found importVocab option? - - /** if not derived from another grammar, might still specify a non-ANTLR - * class to derive from like this "class T extends Parser(MyParserClass);" - */ - protected String superClass = null; - - protected String importVocab = null; - protected String exportVocab = null; - protected persistence.antlr.Tool antlrTool; - - public Grammar(persistence.antlr.Tool tool, String name, String superGrammar, IndexedVector rules) { - this.name = name; - this.superGrammar = superGrammar; - this.rules = rules; - this.antlrTool = tool; - } - - public void addOption(Option o) { - if (options == null) { // if not already there, create it - options = new IndexedVector(); - } - options.appendElement(o.getName(), o); - } - - public void addRule(Rule r) { - rules.appendElement(r.getName(), r); - } - - /** Copy all nonoverridden rules, vocabulary, and options into this grammar from - * supergrammar chain. The change is made in place; e.g., this grammar's vector - * of rules gets bigger. This has side-effects: all grammars on path to - * root of hierarchy are expanded also. - */ - public void expandInPlace() { - // if this grammar already expanded, just return - if (alreadyExpanded) { - return; - } - - // Expand super grammar first (unless it's a predefined or subgrammar of predefined) - Grammar superG = getSuperGrammar(); - if (superG == null) - return; // error (didn't provide superclass) - if (exportVocab == null) { - // if no exportVocab for this grammar, make it same as grammar name - exportVocab = getName(); - } - if (superG.isPredefined()) - return; // can't expand Lexer, Parser, ... - superG.expandInPlace(); - - // expand current grammar now. - alreadyExpanded = true; - // track whether a grammar file needed to have a grammar expanded - GrammarFile gf = hier.getFile(getFileName()); - gf.setExpanded(true); - - // Copy rules from supergrammar into this grammar - IndexedVector inhRules = superG.getRules(); - for (Enumeration e = inhRules.elements(); e.hasMoreElements();) { - Rule r = (Rule)e.nextElement(); - inherit(r, superG); - } - - // Copy options from supergrammar into this grammar - // Modify tokdef options so that they point to dir of enclosing grammar - IndexedVector inhOptions = superG.getOptions(); - if (inhOptions != null) { - for (Enumeration e = inhOptions.elements(); e.hasMoreElements();) { - Option o = (Option)e.nextElement(); - inherit(o, superG); - } - } - - // add an option to load the superGrammar's output vocab - if ((options != null && options.getElement("importVocab") == null) || options == null) { - // no importVocab found, add one that grabs superG's output vocab - Option inputV = new Option("importVocab", superG.exportVocab + ";", this); - addOption(inputV); - // copy output vocab file to current dir - String originatingGrFileName = superG.getFileName(); - String path = antlrTool.pathToFile(originatingGrFileName); - String superExportVocabFileName = path + superG.exportVocab + - persistence.antlr.CodeGenerator.TokenTypesFileSuffix + - persistence.antlr.CodeGenerator.TokenTypesFileExt; - String newImportVocabFileName = antlrTool.fileMinusPath(superExportVocabFileName); - if (path.equals("." + System.getProperty("file.separator"))) { - // don't copy tokdef file onto itself (must be current directory) - // System.out.println("importVocab file same dir; leaving as " + superExportVocabFileName); - } - else { - try { - antlrTool.copyFile(superExportVocabFileName, newImportVocabFileName); - } - catch (IOException io) { - antlrTool.toolError("cannot find/copy importVocab file " + superExportVocabFileName); - return; - } - } - } - - // copy member action from supergrammar into this grammar - inherit(superG.memberAction, superG); - } - - public String getFileName() { - return fileName; - } - - public String getName() { - return name; - } - - public IndexedVector getOptions() { - return options; - } - - public IndexedVector getRules() { - return rules; - } - - public Grammar getSuperGrammar() { - if (superGrammar == null) return null; - Grammar g = (Grammar)hier.getGrammar(superGrammar); - return g; - } - - public String getSuperGrammarName() { - return superGrammar; - } - - public String getType() { - return type; - } - - public void inherit(Option o, Grammar superG) { - // do NOT inherit importVocab/exportVocab options under any circumstances - if (o.getName().equals("importVocab") || - o.getName().equals("exportVocab")) { - return; - } - - Option overriddenOption = null; - if (options != null) { // do we even have options? - overriddenOption = (Option)options.getElement(o.getName()); - } - // if overridden, do not add to this grammar - if (overriddenOption == null) { // not overridden - addOption(o); // copy option into this grammar--not overridden - } - } - - public void inherit(Rule r, Grammar superG) { - // if overridden, do not add to this grammar - Rule overriddenRule = (Rule)rules.getElement(r.getName()); - if (overriddenRule != null) { - // rule is overridden in this grammar. - if (!overriddenRule.sameSignature(r)) { - // warn if different sig - antlrTool.warning("rule " + getName() + "." + overriddenRule.getName() + - " has different signature than " + - superG.getName() + "." + overriddenRule.getName()); - } - } - else { // not overridden, copy rule into this - addRule(r); - } - } - - public void inherit(String memberAction, Grammar superG) { - if (this.memberAction != null) return; // do nothing if already have member action - if (memberAction != null) { // don't have one here, use supergrammar's action - this.memberAction = memberAction; - } - } - - public boolean isPredefined() { - return predefined; - } - - public void setFileName(String f) { - fileName = f; - } - - public void setHierarchy(Hierarchy hier) { - this.hier = hier; - } - - public void setMemberAction(String a) { - memberAction = a; - } - - public void setOptions(IndexedVector options) { - this.options = options; - } - - public void setPreambleAction(String a) { - preambleAction = a; - } - - public void setPredefined(boolean b) { - predefined = b; - } - - public void setTokenSection(String tk) { - tokenSection = tk; - } - - public void setType(String t) { - type = t; - } - - public String toString() { - StringBuffer s = new StringBuffer(10000); - if (preambleAction != null) { - s.append(preambleAction); - } - if (superGrammar == null) { - return "class " + name + ";"; - } - if ( superClass!=null ) { - // replace with specified superclass not actual grammar - // user must make sure that the superclass derives from super grammar class - s.append("class " + name + " extends " + superClass + ";"); - } - else { - s.append("class " + name + " extends " + type + ";"); - } - s.append( - System.getProperty("line.separator") + - System.getProperty("line.separator")); - if (options != null) { - s.append(Hierarchy.optionsToString(options)); - } - if (tokenSection != null) { - s.append(tokenSection + "\n"); - } - if (memberAction != null) { - s.append(memberAction + System.getProperty("line.separator")); - } - for (int i = 0; i < rules.size(); i++) { - Rule r = (Rule)rules.elementAt(i); - if (!getName().equals(r.enclosingGrammar.getName())) { - s.append("// inherited from grammar " + r.enclosingGrammar.getName() + System.getProperty("line.separator")); - } - s.append(r + - System.getProperty("line.separator") + - System.getProperty("line.separator")); - } - return s.toString(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Hierarchy.java glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Hierarchy.java --- glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Hierarchy.java 2006-08-31 00:34:16.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Hierarchy.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,156 +0,0 @@ -package persistence.antlr.preprocessor; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.IndexedVector; - -import java.util.Hashtable; -import java.util.Enumeration; -import java.io.*; - -import persistence.antlr.*; -import persistence.antlr.preprocessor.Grammar; - -public class Hierarchy { - protected Grammar LexerRoot = null; - protected Grammar ParserRoot = null; - protected Grammar TreeParserRoot = null; - protected Hashtable symbols; // table of grammars - protected Hashtable files; // table of grammar files read in - protected persistence.antlr.Tool antlrTool; - - public Hierarchy(persistence.antlr.Tool tool) { - this.antlrTool = tool; - LexerRoot = new Grammar(tool, "Lexer", null, null); - ParserRoot = new Grammar(tool, "Parser", null, null); - TreeParserRoot = new Grammar(tool, "TreeParser", null, null); - symbols = new Hashtable(10); - files = new Hashtable(10); - - LexerRoot.setPredefined(true); - ParserRoot.setPredefined(true); - TreeParserRoot.setPredefined(true); - - symbols.put(LexerRoot.getName(), LexerRoot); - symbols.put(ParserRoot.getName(), ParserRoot); - symbols.put(TreeParserRoot.getName(), TreeParserRoot); - } - - public void addGrammar(Grammar gr) { - gr.setHierarchy(this); - // add grammar to hierarchy - symbols.put(gr.getName(), gr); - // add grammar to file. - GrammarFile f = getFile(gr.getFileName()); - f.addGrammar(gr); - } - - public void addGrammarFile(GrammarFile gf) { - files.put(gf.getName(), gf); - } - - public void expandGrammarsInFile(String fileName) { - GrammarFile f = getFile(fileName); - for (Enumeration e = f.getGrammars().elements(); e.hasMoreElements();) { - Grammar g = (Grammar)e.nextElement(); - g.expandInPlace(); - } - } - - public Grammar findRoot(Grammar g) { - if (g.getSuperGrammarName() == null) { // at root - return g; - } - // return root of super. - Grammar sg = g.getSuperGrammar(); - if (sg == null) return g; // return this grammar if super missing - return findRoot(sg); - } - - public GrammarFile getFile(String fileName) { - return (GrammarFile)files.get(fileName); - } - - public Grammar getGrammar(String gr) { - return (Grammar)symbols.get(gr); - } - - public static String optionsToString(IndexedVector options) { - String s = "options {" + System.getProperty("line.separator"); - for (Enumeration e = options.elements(); e.hasMoreElements();) { - s += (Option)e.nextElement() + System.getProperty("line.separator"); - } - s += "}" + - System.getProperty("line.separator") + - System.getProperty("line.separator"); - return s; - } - - public void readGrammarFile(String file) throws FileNotFoundException { - Reader grStream = new BufferedReader(new FileReader(file)); - addGrammarFile(new GrammarFile(antlrTool, file)); - - // Create the simplified grammar lexer/parser - PreprocessorLexer ppLexer = new PreprocessorLexer(grStream); - ppLexer.setFilename(file); - Preprocessor pp = new Preprocessor(ppLexer); - pp.setTool(antlrTool); - pp.setFilename(file); - - // populate the hierarchy with class(es) read in - try { - pp.grammarFile(this, file); - } - catch (TokenStreamException io) { - antlrTool.toolError("Token stream error reading grammar(s):\n" + io); - } - catch (ANTLRException se) { - antlrTool.toolError("error reading grammar(s):\n" + se); - } - } - - /** Return true if hierarchy is complete, false if not */ - public boolean verifyThatHierarchyIsComplete() { - boolean complete = true; - // Make a pass to ensure all grammars are defined - for (Enumeration e = symbols.elements(); e.hasMoreElements();) { - Grammar c = (Grammar)e.nextElement(); - if (c.getSuperGrammarName() == null) { - continue; // at root: ignore predefined roots - } - Grammar superG = c.getSuperGrammar(); - if (superG == null) { - antlrTool.toolError("grammar " + c.getSuperGrammarName() + " not defined"); - complete = false; - symbols.remove(c.getName()); // super not defined, kill sub - } - } - - if (!complete) return false; - - // Make another pass to set the 'type' field of each grammar - // This makes it easy later to ask a grammar what its type - // is w/o having to search hierarchy. - for (Enumeration e = symbols.elements(); e.hasMoreElements();) { - Grammar c = (Grammar)e.nextElement(); - if (c.getSuperGrammarName() == null) { - continue; // ignore predefined roots - } - c.setType(findRoot(c).getName()); - } - - return true; - } - - public persistence.antlr.Tool getTool() { - return antlrTool; - } - - public void setTool(persistence.antlr.Tool antlrTool) { - this.antlrTool = antlrTool; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Option.java glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Option.java --- glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Option.java 2006-08-31 00:34:16.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Option.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,49 +0,0 @@ -package persistence.antlr.preprocessor; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.Vector; - -class Option { - protected String name; - protected String rhs; - protected Grammar enclosingGrammar; - - public Option(String n, String rhs, Grammar gr) { - name = n; - this.rhs = rhs; - setEnclosingGrammar(gr); - } - - public Grammar getEnclosingGrammar() { - return enclosingGrammar; - } - - public String getName() { - return name; - } - - public String getRHS() { - return rhs; - } - - public void setEnclosingGrammar(Grammar g) { - enclosingGrammar = g; - } - - public void setName(String n) { - name = n; - } - - public void setRHS(String rhs) { - this.rhs = rhs; - } - - public String toString() { - return "\t" + name + "=" + rhs; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Preprocessor.java glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Preprocessor.java --- glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Preprocessor.java 2006-02-08 22:31:35.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Preprocessor.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,867 +0,0 @@ -// $ANTLR : "preproc.g" -> "Preprocessor.java"$ - -package persistence.antlr.preprocessor; - -import persistence.antlr.TokenBuffer; -import persistence.antlr.TokenStreamException; -import persistence.antlr.TokenStreamIOException; -import persistence.antlr.ANTLRException; -import persistence.antlr.LLkParser; -import persistence.antlr.Token; -import persistence.antlr.TokenStream; -import persistence.antlr.RecognitionException; -import persistence.antlr.NoViableAltException; -import persistence.antlr.MismatchedTokenException; -import persistence.antlr.SemanticException; -import persistence.antlr.ParserSharedInputState; -import persistence.antlr.collections.impl.BitSet; - -import persistence.antlr.collections.impl.IndexedVector; -import java.util.Hashtable; -import persistence.antlr.preprocessor.Grammar; - -public class Preprocessor extends persistence.antlr.LLkParser implements PreprocessorTokenTypes - { - - // This chunk of error reporting code provided by Brian Smith - - private persistence.antlr.Tool antlrTool; - - /** In order to make it so existing subclasses don't break, we won't require - * that the persistence.antlr.Tool instance be passed as a constructor element. Instead, - * the persistence.antlr.Tool instance should register itself via {@link #initTool(persistence.antlr.Tool)} - * @throws IllegalStateException if a tool has already been registered - * @since 2.7.2 - */ - public void setTool(persistence.antlr.Tool tool) { - if (antlrTool == null) { - antlrTool = tool; - } - else { - throw new IllegalStateException("persistence.antlr.Tool already registered"); - } - } - - /** @since 2.7.2 */ - protected persistence.antlr.Tool getTool() { - return antlrTool; - } - - /** Delegates the error message to the tool if any was registered via - * {@link #initTool(persistence.antlr.Tool)} - * @since 2.7.2 - */ - public void reportError(String s) { - if (getTool() != null) { - getTool().error(s, getFilename(), -1, -1); - } - else { - super.reportError(s); - } - } - - /** Delegates the error message to the tool if any was registered via - * {@link #initTool(persistence.antlr.Tool)} - * @since 2.7.2 - */ - public void reportError(RecognitionException e) { - if (getTool() != null) { - getTool().error(e.getErrorMessage(), e.getFilename(), e.getLine(), e.getColumn()); - } - else { - super.reportError(e); - } - } - - /** Delegates the warning message to the tool if any was registered via - * {@link #initTool(persistence.antlr.Tool)} - * @since 2.7.2 - */ - public void reportWarning(String s) { - if (getTool() != null) { - getTool().warning(s, getFilename(), -1, -1); - } - else { - super.reportWarning(s); - } - } - -protected Preprocessor(TokenBuffer tokenBuf, int k) { - super(tokenBuf,k); - tokenNames = _tokenNames; -} - -public Preprocessor(TokenBuffer tokenBuf) { - this(tokenBuf,1); -} - -protected Preprocessor(TokenStream lexer, int k) { - super(lexer,k); - tokenNames = _tokenNames; -} - -public Preprocessor(TokenStream lexer) { - this(lexer,1); -} - -public Preprocessor(ParserSharedInputState state) { - super(state,1); - tokenNames = _tokenNames; -} - - public final void grammarFile( - Hierarchy hier, String file - ) throws RecognitionException, TokenStreamException { - - Token hdr = null; - - Grammar gr; - IndexedVector opt=null; - - - try { // for error handling - { - _loop265: - do { - if ((LA(1)==HEADER_ACTION)) { - hdr = LT(1); - match(HEADER_ACTION); - hier.getFile(file).addHeaderAction(hdr.getText()); - } - else { - break _loop265; - } - - } while (true); - } - { - switch ( LA(1)) { - case OPTIONS_START: - { - opt=optionSpec(null); - break; - } - case EOF: - case ACTION: - case LITERAL_class: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - _loop268: - do { - if ((LA(1)==ACTION||LA(1)==LITERAL_class)) { - gr=class_def(file, hier); - - if ( gr!=null && opt!=null ) { - hier.getFile(file).setOptions(opt); - } - if ( gr!=null ) { - gr.setFileName(file); - hier.addGrammar(gr); - } - - } - else { - break _loop268; - } - - } while (true); - } - match(Token.EOF_TYPE); - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_0); - } - } - - public final IndexedVector optionSpec( - Grammar gr - ) throws RecognitionException, TokenStreamException { - IndexedVector options; - - Token op = null; - Token rhs = null; - - options = new IndexedVector(); - - - try { // for error handling - match(OPTIONS_START); - { - _loop280: - do { - if ((LA(1)==ID)) { - op = LT(1); - match(ID); - rhs = LT(1); - match(ASSIGN_RHS); - - Option newOp = new Option(op.getText(),rhs.getText(),gr); - options.appendElement(newOp.getName(),newOp); - if ( gr!=null && op.getText().equals("importVocab") ) { - gr.specifiedVocabulary = true; - gr.importVocab = rhs.getText(); - } - else if ( gr!=null && op.getText().equals("exportVocab") ) { - // don't want ';' included in outputVocab. - // This is heinously inconsistent! Ugh. - gr.exportVocab = rhs.getText().substring(0,rhs.getText().length()-1); - gr.exportVocab = gr.exportVocab.trim(); - } - - } - else { - break _loop280; - } - - } while (true); - } - match(RCURLY); - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_1); - } - return options; - } - - public final Grammar class_def( - String file, Hierarchy hier - ) throws RecognitionException, TokenStreamException { - Grammar gr; - - Token preamble = null; - Token sub = null; - Token sup = null; - Token tk = null; - Token memberA = null; - - gr=null; - IndexedVector rules = new IndexedVector(100); - IndexedVector classOptions = null; - String sc = null; - - - try { // for error handling - { - switch ( LA(1)) { - case ACTION: - { - preamble = LT(1); - match(ACTION); - break; - } - case LITERAL_class: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - match(LITERAL_class); - sub = LT(1); - match(ID); - match(LITERAL_extends); - sup = LT(1); - match(ID); - { - switch ( LA(1)) { - case SUBRULE_BLOCK: - { - sc=superClass(); - break; - } - case SEMI: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - match(SEMI); - - gr = (Grammar)hier.getGrammar(sub.getText()); - if ( gr!=null ) { - // antlr.Tool.toolError("redefinition of grammar "+gr.getName()+" ignored"); - gr=null; - throw new SemanticException("redefinition of grammar "+sub.getText(), file, sub.getLine(), sub.getColumn()); - } - else { - gr = new Grammar(hier.getTool(), sub.getText(), sup.getText(), rules); - gr.superClass=sc; - if ( preamble!=null ) { - gr.setPreambleAction(preamble.getText()); - } - } - - { - switch ( LA(1)) { - case OPTIONS_START: - { - classOptions=optionSpec(gr); - break; - } - case ACTION: - case ID: - case TOKENS_SPEC: - case LITERAL_protected: - case LITERAL_private: - case LITERAL_public: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - - if ( gr!=null ) { - gr.setOptions(classOptions); - } - - { - switch ( LA(1)) { - case TOKENS_SPEC: - { - tk = LT(1); - match(TOKENS_SPEC); - gr.setTokenSection(tk.getText()); - break; - } - case ACTION: - case ID: - case LITERAL_protected: - case LITERAL_private: - case LITERAL_public: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case ACTION: - { - memberA = LT(1); - match(ACTION); - gr.setMemberAction(memberA.getText()); - break; - } - case ID: - case LITERAL_protected: - case LITERAL_private: - case LITERAL_public: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - int _cnt277=0; - _loop277: - do { - if ((_tokenSet_2.member(LA(1)))) { - rule(gr); - } - else { - if ( _cnt277>=1 ) { break _loop277; } else {throw new NoViableAltException(LT(1), getFilename());} - } - - _cnt277++; - } while (true); - } - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_3); - } - return gr; - } - - public final String superClass() throws RecognitionException, TokenStreamException { - String sup; - - sup=LT(1).getText(); - - try { // for error handling - match(SUBRULE_BLOCK); - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_4); - } - return sup; - } - - public final void rule( - Grammar gr - ) throws RecognitionException, TokenStreamException { - - Token r = null; - Token arg = null; - Token ret = null; - Token init = null; - Token blk = null; - - IndexedVector o = null; // options for rule - String vis = null; - boolean bang=false; - String eg=null, thr=""; - - - try { // for error handling - { - switch ( LA(1)) { - case LITERAL_protected: - { - match(LITERAL_protected); - vis="protected"; - break; - } - case LITERAL_private: - { - match(LITERAL_private); - vis="private"; - break; - } - case LITERAL_public: - { - match(LITERAL_public); - vis="public"; - break; - } - case ID: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - r = LT(1); - match(ID); - { - switch ( LA(1)) { - case BANG: - { - match(BANG); - bang=true; - break; - } - case ACTION: - case OPTIONS_START: - case ARG_ACTION: - case LITERAL_returns: - case RULE_BLOCK: - case LITERAL_throws: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case ARG_ACTION: - { - arg = LT(1); - match(ARG_ACTION); - break; - } - case ACTION: - case OPTIONS_START: - case LITERAL_returns: - case RULE_BLOCK: - case LITERAL_throws: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case LITERAL_returns: - { - match(LITERAL_returns); - ret = LT(1); - match(ARG_ACTION); - break; - } - case ACTION: - case OPTIONS_START: - case RULE_BLOCK: - case LITERAL_throws: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case LITERAL_throws: - { - thr=throwsSpec(); - break; - } - case ACTION: - case OPTIONS_START: - case RULE_BLOCK: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case OPTIONS_START: - { - o=optionSpec(null); - break; - } - case ACTION: - case RULE_BLOCK: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - switch ( LA(1)) { - case ACTION: - { - init = LT(1); - match(ACTION); - break; - } - case RULE_BLOCK: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - blk = LT(1); - match(RULE_BLOCK); - eg=exceptionGroup(); - - String rtext = blk.getText()+eg; - Rule ppr = new Rule(r.getText(),rtext,o,gr); - ppr.setThrowsSpec(thr); - if ( arg!=null ) { - ppr.setArgs(arg.getText()); - } - if ( ret!=null ) { - ppr.setReturnValue(ret.getText()); - } - if ( init!=null ) { - ppr.setInitAction(init.getText()); - } - if ( bang ) { - ppr.setBang(); - } - ppr.setVisibility(vis); - if ( gr!=null ) { - gr.addRule(ppr); - } - - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_5); - } - } - - public final String throwsSpec() throws RecognitionException, TokenStreamException { - String t; - - Token a = null; - Token b = null; - t="throws "; - - try { // for error handling - match(LITERAL_throws); - a = LT(1); - match(ID); - t+=a.getText(); - { - _loop291: - do { - if ((LA(1)==COMMA)) { - match(COMMA); - b = LT(1); - match(ID); - t+=","+b.getText(); - } - else { - break _loop291; - } - - } while (true); - } - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_6); - } - return t; - } - - public final String exceptionGroup() throws RecognitionException, TokenStreamException { - String g; - - String e=null; g=""; - - try { // for error handling - { - _loop294: - do { - if ((LA(1)==LITERAL_exception)) { - e=exceptionSpec(); - g += e; - } - else { - break _loop294; - } - - } while (true); - } - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_5); - } - return g; - } - - public final String exceptionSpec() throws RecognitionException, TokenStreamException { - String es; - - Token aa = null; - String h=null; - es = System.getProperty("line.separator")+"exception "; - - - try { // for error handling - match(LITERAL_exception); - { - switch ( LA(1)) { - case ARG_ACTION: - { - aa = LT(1); - match(ARG_ACTION); - es += aa.getText(); - break; - } - case EOF: - case ACTION: - case LITERAL_class: - case ID: - case LITERAL_protected: - case LITERAL_private: - case LITERAL_public: - case LITERAL_exception: - case LITERAL_catch: - { - break; - } - default: - { - throw new NoViableAltException(LT(1), getFilename()); - } - } - } - { - _loop298: - do { - if ((LA(1)==LITERAL_catch)) { - h=exceptionHandler(); - es += h; - } - else { - break _loop298; - } - - } while (true); - } - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_7); - } - return es; - } - - public final String exceptionHandler() throws RecognitionException, TokenStreamException { - String h; - - Token a1 = null; - Token a2 = null; - h=null; - - try { // for error handling - match(LITERAL_catch); - a1 = LT(1); - match(ARG_ACTION); - a2 = LT(1); - match(ACTION); - h = System.getProperty("line.separator")+ - "catch "+a1.getText()+" "+a2.getText(); - } - catch (RecognitionException ex) { - reportError(ex); - consume(); - consumeUntil(_tokenSet_8); - } - return h; - } - - - public static final String[] _tokenNames = { - "<0>", - "EOF", - "<2>", - "NULL_TREE_LOOKAHEAD", - "\"tokens\"", - "HEADER_ACTION", - "SUBRULE_BLOCK", - "ACTION", - "\"class\"", - "ID", - "\"extends\"", - "SEMI", - "TOKENS_SPEC", - "OPTIONS_START", - "ASSIGN_RHS", - "RCURLY", - "\"protected\"", - "\"private\"", - "\"public\"", - "BANG", - "ARG_ACTION", - "\"returns\"", - "RULE_BLOCK", - "\"throws\"", - "COMMA", - "\"exception\"", - "\"catch\"", - "ALT", - "ELEMENT", - "LPAREN", - "RPAREN", - "ID_OR_KEYWORD", - "CURLY_BLOCK_SCARF", - "WS", - "NEWLINE", - "COMMENT", - "SL_COMMENT", - "ML_COMMENT", - "CHAR_LITERAL", - "STRING_LITERAL", - "ESC", - "DIGIT", - "XDIGIT" - }; - - private static final long[] mk_tokenSet_0() { - long[] data = { 2L, 0L}; - return data; - } - public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - private static final long[] mk_tokenSet_1() { - long[] data = { 4658050L, 0L}; - return data; - } - public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1()); - private static final long[] mk_tokenSet_2() { - long[] data = { 459264L, 0L}; - return data; - } - public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2()); - private static final long[] mk_tokenSet_3() { - long[] data = { 386L, 0L}; - return data; - } - public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3()); - private static final long[] mk_tokenSet_4() { - long[] data = { 2048L, 0L}; - return data; - } - public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4()); - private static final long[] mk_tokenSet_5() { - long[] data = { 459650L, 0L}; - return data; - } - public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5()); - private static final long[] mk_tokenSet_6() { - long[] data = { 4202624L, 0L}; - return data; - } - public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6()); - private static final long[] mk_tokenSet_7() { - long[] data = { 34014082L, 0L}; - return data; - } - public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7()); - private static final long[] mk_tokenSet_8() { - long[] data = { 101122946L, 0L}; - return data; - } - public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8()); - - } diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/PreprocessorLexer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/PreprocessorLexer.java --- glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/PreprocessorLexer.java 2006-02-08 22:31:35.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/PreprocessorLexer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,1388 +0,0 @@ -// $ANTLR : "preproc.g" -> "PreprocessorLexer.java"$ - -package persistence.antlr.preprocessor; - -import java.io.InputStream; -import persistence.antlr.TokenStreamException; -import persistence.antlr.TokenStreamIOException; -import persistence.antlr.TokenStreamRecognitionException; -import persistence.antlr.CharStreamException; -import persistence.antlr.CharStreamIOException; -import persistence.antlr.ANTLRException; -import java.io.Reader; -import java.util.Hashtable; -import persistence.antlr.CharScanner; -import persistence.antlr.InputBuffer; -import persistence.antlr.ByteBuffer; -import persistence.antlr.CharBuffer; -import persistence.antlr.Token; -import persistence.antlr.CommonToken; -import persistence.antlr.RecognitionException; -import persistence.antlr.NoViableAltForCharException; -import persistence.antlr.MismatchedCharException; -import persistence.antlr.TokenStream; -import persistence.antlr.ANTLRHashString; -import persistence.antlr.LexerSharedInputState; -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.SemanticException; - -public class PreprocessorLexer extends persistence.antlr.CharScanner implements PreprocessorTokenTypes, TokenStream - { -public PreprocessorLexer(InputStream in) { - this(new ByteBuffer(in)); -} -public PreprocessorLexer(Reader in) { - this(new CharBuffer(in)); -} -public PreprocessorLexer(InputBuffer ib) { - this(new LexerSharedInputState(ib)); -} -public PreprocessorLexer(LexerSharedInputState state) { - super(state); - caseSensitiveLiterals = true; - setCaseSensitive(true); - literals = new Hashtable(); - literals.put(new ANTLRHashString("public", this), new Integer(18)); - literals.put(new ANTLRHashString("class", this), new Integer(8)); - literals.put(new ANTLRHashString("throws", this), new Integer(23)); - literals.put(new ANTLRHashString("catch", this), new Integer(26)); - literals.put(new ANTLRHashString("private", this), new Integer(17)); - literals.put(new ANTLRHashString("extends", this), new Integer(10)); - literals.put(new ANTLRHashString("protected", this), new Integer(16)); - literals.put(new ANTLRHashString("returns", this), new Integer(21)); - literals.put(new ANTLRHashString("tokens", this), new Integer(4)); - literals.put(new ANTLRHashString("exception", this), new Integer(25)); -} - -public Token nextToken() throws TokenStreamException { - Token theRetToken=null; -tryAgain: - for (;;) { - Token _token = null; - int _ttype = Token.INVALID_TYPE; - resetText(); - try { // for char stream error handling - try { // for lexical error handling - switch ( LA(1)) { - case ':': - { - mRULE_BLOCK(true); - theRetToken=_returnToken; - break; - } - case '\t': case '\n': case '\r': case ' ': - { - mWS(true); - theRetToken=_returnToken; - break; - } - case '/': - { - mCOMMENT(true); - theRetToken=_returnToken; - break; - } - case '{': - { - mACTION(true); - theRetToken=_returnToken; - break; - } - case '"': - { - mSTRING_LITERAL(true); - theRetToken=_returnToken; - break; - } - case '\'': - { - mCHAR_LITERAL(true); - theRetToken=_returnToken; - break; - } - case '!': - { - mBANG(true); - theRetToken=_returnToken; - break; - } - case ';': - { - mSEMI(true); - theRetToken=_returnToken; - break; - } - case ',': - { - mCOMMA(true); - theRetToken=_returnToken; - break; - } - case '}': - { - mRCURLY(true); - theRetToken=_returnToken; - break; - } - case ')': - { - mRPAREN(true); - theRetToken=_returnToken; - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': case '_': case 'a': - case 'b': case 'c': case 'd': case 'e': - case 'f': case 'g': case 'h': case 'i': - case 'j': case 'k': case 'l': case 'm': - case 'n': case 'o': case 'p': case 'q': - case 'r': case 's': case 't': case 'u': - case 'v': case 'w': case 'x': case 'y': - case 'z': - { - mID_OR_KEYWORD(true); - theRetToken=_returnToken; - break; - } - case '=': - { - mASSIGN_RHS(true); - theRetToken=_returnToken; - break; - } - case '[': - { - mARG_ACTION(true); - theRetToken=_returnToken; - break; - } - default: - if ((LA(1)=='(') && (_tokenSet_0.member(LA(2)))) { - mSUBRULE_BLOCK(true); - theRetToken=_returnToken; - } - else if ((LA(1)=='(') && (true)) { - mLPAREN(true); - theRetToken=_returnToken; - } - else { - if (LA(1)==EOF_CHAR) {uponEOF(); _returnToken = makeToken(Token.EOF_TYPE);} - else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - } - if ( _returnToken==null ) continue tryAgain; // found SKIP token - _ttype = _returnToken.getType(); - _ttype = testLiteralsTable(_ttype); - _returnToken.setType(_ttype); - return _returnToken; - } - catch (RecognitionException e) { - throw new TokenStreamRecognitionException(e); - } - } - catch (CharStreamException cse) { - if ( cse instanceof CharStreamIOException ) { - throw new TokenStreamIOException(((CharStreamIOException)cse).io); - } - else { - throw new TokenStreamException(cse.getMessage()); - } - } - } -} - - public final void mRULE_BLOCK(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = RULE_BLOCK; - int _saveIndex; - - match(':'); - { - if ((_tokenSet_1.member(LA(1))) && (_tokenSet_2.member(LA(2)))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_2.member(LA(1))) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - mALT(false); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ';': case '|': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop306: - do { - if ((LA(1)=='|')) { - match('|'); - { - if ((_tokenSet_1.member(LA(1))) && (_tokenSet_2.member(LA(2)))) { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - } - else if ((_tokenSet_2.member(LA(1))) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - mALT(false); - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - _saveIndex=text.length(); - mWS(false); - text.setLength(_saveIndex); - break; - } - case ';': case '|': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - } - else { - break _loop306; - } - - } while (true); - } - match(';'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mWS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = WS; - int _saveIndex; - - { - int _cnt348=0; - _loop348: - do { - if ((LA(1)==' ') && (true)) { - match(' '); - } - else if ((LA(1)=='\t') && (true)) { - match('\t'); - } - else if ((LA(1)=='\n'||LA(1)=='\r') && (true)) { - mNEWLINE(false); - } - else { - if ( _cnt348>=1 ) { break _loop348; } else {throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt348++; - } while (true); - } - _ttype = Token.SKIP; - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mALT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ALT; - int _saveIndex; - - { - _loop317: - do { - if ((_tokenSet_3.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mELEMENT(false); - } - else { - break _loop317; - } - - } while (true); - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mSUBRULE_BLOCK(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = SUBRULE_BLOCK; - int _saveIndex; - - match('('); - { - if ((_tokenSet_1.member(LA(1))) && (_tokenSet_0.member(LA(2)))) { - mWS(false); - } - else if ((_tokenSet_0.member(LA(1))) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - mALT(false); - { - _loop312: - do { - if ((_tokenSet_4.member(LA(1))) && (_tokenSet_0.member(LA(2)))) { - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '|': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match('|'); - { - if ((_tokenSet_1.member(LA(1))) && (_tokenSet_0.member(LA(2)))) { - mWS(false); - } - else if ((_tokenSet_0.member(LA(1))) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - mALT(false); - } - else { - break _loop312; - } - - } while (true); - } - { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case ')': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - match(')'); - { - if ((LA(1)=='=') && (LA(2)=='>')) { - match("=>"); - } - else if ((LA(1)=='*') && (true)) { - match('*'); - } - else if ((LA(1)=='+') && (true)) { - match('+'); - } - else if ((LA(1)=='?') && (true)) { - match('?'); - } - else { - } - - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mELEMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ELEMENT; - int _saveIndex; - - switch ( LA(1)) { - case '/': - { - mCOMMENT(false); - break; - } - case '{': - { - mACTION(false); - break; - } - case '"': - { - mSTRING_LITERAL(false); - break; - } - case '\'': - { - mCHAR_LITERAL(false); - break; - } - case '(': - { - mSUBRULE_BLOCK(false); - break; - } - case '\n': case '\r': - { - mNEWLINE(false); - break; - } - default: - if ((_tokenSet_5.member(LA(1)))) { - { - match(_tokenSet_5); - } - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mCOMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = COMMENT; - int _saveIndex; - - { - if ((LA(1)=='/') && (LA(2)=='/')) { - mSL_COMMENT(false); - } - else if ((LA(1)=='/') && (LA(2)=='*')) { - mML_COMMENT(false); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - _ttype = Token.SKIP; - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mACTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ACTION; - int _saveIndex; - - match('{'); - { - _loop378: - do { - // nongreedy exit test - if ((LA(1)=='}') && (true)) break _loop378; - if ((LA(1)=='\n'||LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mNEWLINE(false); - } - else if ((LA(1)=='{') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mACTION(false); - } - else if ((LA(1)=='\'') && (_tokenSet_6.member(LA(2)))) { - mCHAR_LITERAL(false); - } - else if ((LA(1)=='/') && (LA(2)=='*'||LA(2)=='/')) { - mCOMMENT(false); - } - else if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mSTRING_LITERAL(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - matchNot(EOF_CHAR); - } - else { - break _loop378; - } - - } while (true); - } - match('}'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mSTRING_LITERAL(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = STRING_LITERAL; - int _saveIndex; - - match('"'); - { - _loop363: - do { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_7.member(LA(1)))) { - matchNot('"'); - } - else { - break _loop363; - } - - } while (true); - } - match('"'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mCHAR_LITERAL(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = CHAR_LITERAL; - int _saveIndex; - - match('\''); - { - if ((LA(1)=='\\')) { - mESC(false); - } - else if ((_tokenSet_8.member(LA(1)))) { - matchNot('\''); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - match('\''); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mNEWLINE(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = NEWLINE; - int _saveIndex; - - { - if ((LA(1)=='\r') && (LA(2)=='\n')) { - match('\r'); - match('\n'); - newline(); - } - else if ((LA(1)=='\r') && (true)) { - match('\r'); - newline(); - } - else if ((LA(1)=='\n')) { - match('\n'); - newline(); - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mBANG(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = BANG; - int _saveIndex; - - match('!'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mSEMI(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = SEMI; - int _saveIndex; - - match(';'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mCOMMA(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = COMMA; - int _saveIndex; - - match(','); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mRCURLY(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = RCURLY; - int _saveIndex; - - match('}'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mLPAREN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = LPAREN; - int _saveIndex; - - match('('); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mRPAREN(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = RPAREN; - int _saveIndex; - - match(')'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - -/** This rule picks off keywords in the lexer that need to be - * handled specially. For example, "header" is the start - * of the header action (used to distinguish between options - * block and an action). We do not want "header" to go back - * to the parser as a simple keyword...it must pick off - * the action afterwards. - */ - public final void mID_OR_KEYWORD(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ID_OR_KEYWORD; - int _saveIndex; - Token id=null; - - mID(true); - id=_returnToken; - _ttype = id.getType(); - { - if (((_tokenSet_9.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')))&&(id.getText().equals("header"))) { - { - if ((_tokenSet_1.member(LA(1))) && (_tokenSet_9.member(LA(2)))) { - mWS(false); - } - else if ((_tokenSet_9.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - { - switch ( LA(1)) { - case '"': - { - mSTRING_LITERAL(false); - break; - } - case '\t': case '\n': case '\r': case ' ': - case '/': case '{': - { - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop331: - do { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '/': - { - mCOMMENT(false); - break; - } - default: - { - break _loop331; - } - } - } while (true); - } - mACTION(false); - _ttype = HEADER_ACTION; - } - else if (((_tokenSet_10.member(LA(1))) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff')))&&(id.getText().equals("tokens"))) { - { - _loop333: - do { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '/': - { - mCOMMENT(false); - break; - } - default: - { - break _loop333; - } - } - } while (true); - } - mCURLY_BLOCK_SCARF(false); - _ttype = TOKENS_SPEC; - } - else if (((_tokenSet_10.member(LA(1))) && (true))&&(id.getText().equals("options"))) { - { - _loop335: - do { - switch ( LA(1)) { - case '\t': case '\n': case '\r': case ' ': - { - mWS(false); - break; - } - case '/': - { - mCOMMENT(false); - break; - } - default: - { - break _loop335; - } - } - } while (true); - } - match('{'); - _ttype = OPTIONS_START; - } - else { - } - - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mID(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ID; - int _saveIndex; - - { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '_': - { - match('_'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - { - _loop342: - do { - switch ( LA(1)) { - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': case 'g': case 'h': - case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': - case 'q': case 'r': case 's': case 't': - case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - { - matchRange('a','z'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': case 'G': case 'H': - case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': - case 'Q': case 'R': case 'S': case 'T': - case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - { - matchRange('A','Z'); - break; - } - case '_': - { - match('_'); - break; - } - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - matchRange('0','9'); - break; - } - default: - { - break _loop342; - } - } - } while (true); - } - _ttype = testLiteralsTable(new String(text.getBuffer(),_begin,text.length()-_begin),_ttype); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mCURLY_BLOCK_SCARF(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = CURLY_BLOCK_SCARF; - int _saveIndex; - - match('{'); - { - _loop338: - do { - // nongreedy exit test - if ((LA(1)=='}') && (true)) break _loop338; - if ((LA(1)=='\n'||LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mNEWLINE(false); - } - else if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mSTRING_LITERAL(false); - } - else if ((LA(1)=='\'') && (_tokenSet_6.member(LA(2)))) { - mCHAR_LITERAL(false); - } - else if ((LA(1)=='/') && (LA(2)=='*'||LA(2)=='/')) { - mCOMMENT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - matchNot(EOF_CHAR); - } - else { - break _loop338; - } - - } while (true); - } - match('}'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mASSIGN_RHS(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ASSIGN_RHS; - int _saveIndex; - - _saveIndex=text.length(); - match('='); - text.setLength(_saveIndex); - { - _loop345: - do { - // nongreedy exit test - if ((LA(1)==';') && (true)) break _loop345; - if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mSTRING_LITERAL(false); - } - else if ((LA(1)=='\'') && (_tokenSet_6.member(LA(2)))) { - mCHAR_LITERAL(false); - } - else if ((LA(1)=='\n'||LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mNEWLINE(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - matchNot(EOF_CHAR); - } - else { - break _loop345; - } - - } while (true); - } - match(';'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mSL_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = SL_COMMENT; - int _saveIndex; - - match("//"); - { - _loop355: - do { - // nongreedy exit test - if ((LA(1)=='\n'||LA(1)=='\r') && (true)) break _loop355; - if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - matchNot(EOF_CHAR); - } - else { - break _loop355; - } - - } while (true); - } - mNEWLINE(false); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mML_COMMENT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ML_COMMENT; - int _saveIndex; - - match("/*"); - { - _loop358: - do { - // nongreedy exit test - if ((LA(1)=='*') && (LA(2)=='/')) break _loop358; - if ((LA(1)=='\n'||LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mNEWLINE(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - matchNot(EOF_CHAR); - } - else { - break _loop358; - } - - } while (true); - } - match("*/"); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mESC(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ESC; - int _saveIndex; - - match('\\'); - { - switch ( LA(1)) { - case 'n': - { - match('n'); - break; - } - case 'r': - { - match('r'); - break; - } - case 't': - { - match('t'); - break; - } - case 'b': - { - match('b'); - break; - } - case 'f': - { - match('f'); - break; - } - case 'w': - { - match('w'); - break; - } - case 'a': - { - match('a'); - break; - } - case '"': - { - match('"'); - break; - } - case '\'': - { - match('\''); - break; - } - case '\\': - { - match('\\'); - break; - } - case '0': case '1': case '2': case '3': - { - { - matchRange('0','3'); - } - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mDIGIT(false); - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mDIGIT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - case '4': case '5': case '6': case '7': - { - { - matchRange('4','7'); - } - { - if (((LA(1) >= '0' && LA(1) <= '9')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mDIGIT(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && (true)) { - } - else { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - - } - break; - } - case 'u': - { - match('u'); - mXDIGIT(false); - mXDIGIT(false); - mXDIGIT(false); - mXDIGIT(false); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = DIGIT; - int _saveIndex; - - matchRange('0','9'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - protected final void mXDIGIT(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = XDIGIT; - int _saveIndex; - - switch ( LA(1)) { - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - case '8': case '9': - { - matchRange('0','9'); - break; - } - case 'a': case 'b': case 'c': case 'd': - case 'e': case 'f': - { - matchRange('a','f'); - break; - } - case 'A': case 'B': case 'C': case 'D': - case 'E': case 'F': - { - matchRange('A','F'); - break; - } - default: - { - throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn()); - } - } - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - public final void mARG_ACTION(boolean _createToken) throws RecognitionException, CharStreamException, TokenStreamException { - int _ttype; Token _token=null; int _begin=text.length(); - _ttype = ARG_ACTION; - int _saveIndex; - - match('['); - { - _loop375: - do { - // nongreedy exit test - if ((LA(1)==']') && (true)) break _loop375; - if ((LA(1)=='[') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mARG_ACTION(false); - } - else if ((LA(1)=='\n'||LA(1)=='\r') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mNEWLINE(false); - } - else if ((LA(1)=='\'') && (_tokenSet_6.member(LA(2)))) { - mCHAR_LITERAL(false); - } - else if ((LA(1)=='"') && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - mSTRING_LITERAL(false); - } - else if (((LA(1) >= '\u0003' && LA(1) <= '\u00ff')) && ((LA(2) >= '\u0003' && LA(2) <= '\u00ff'))) { - matchNot(EOF_CHAR); - } - else { - break _loop375; - } - - } while (true); - } - match(']'); - if ( _createToken && _token==null && _ttype!=Token.SKIP ) { - _token = makeToken(_ttype); - _token.setText(new String(text.getBuffer(), _begin, text.length()-_begin)); - } - _returnToken = _token; - } - - - private static final long[] mk_tokenSet_0() { - long[] data = new long[8]; - data[0]=-576460752303423496L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0()); - private static final long[] mk_tokenSet_1() { - long[] data = { 4294977024L, 0L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1()); - private static final long[] mk_tokenSet_2() { - long[] data = new long[8]; - data[0]=-2199023255560L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2()); - private static final long[] mk_tokenSet_3() { - long[] data = new long[8]; - data[0]=-576462951326679048L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3()); - private static final long[] mk_tokenSet_4() { - long[] data = { 4294977024L, 1152921504606846976L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4()); - private static final long[] mk_tokenSet_5() { - long[] data = new long[8]; - data[0]=-576605355262354440L; - data[1]=-576460752303423489L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5()); - private static final long[] mk_tokenSet_6() { - long[] data = new long[8]; - data[0]=-549755813896L; - for (int i = 1; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6()); - private static final long[] mk_tokenSet_7() { - long[] data = new long[8]; - data[0]=-17179869192L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7()); - private static final long[] mk_tokenSet_8() { - long[] data = new long[8]; - data[0]=-549755813896L; - data[1]=-268435457L; - for (int i = 2; i<=3; i++) { data[i]=-1L; } - return data; - } - public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8()); - private static final long[] mk_tokenSet_9() { - long[] data = { 140758963201536L, 576460752303423488L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_9 = new BitSet(mk_tokenSet_9()); - private static final long[] mk_tokenSet_10() { - long[] data = { 140741783332352L, 576460752303423488L, 0L, 0L, 0L}; - return data; - } - public static final BitSet _tokenSet_10 = new BitSet(mk_tokenSet_10()); - - } diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/PreprocessorTokenTypes.java glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/PreprocessorTokenTypes.java --- glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/PreprocessorTokenTypes.java 2006-02-08 22:31:36.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/PreprocessorTokenTypes.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,47 +0,0 @@ -// $ANTLR : "preproc.g" -> "Preprocessor.java"$ - -package persistence.antlr.preprocessor; - -public interface PreprocessorTokenTypes { - int EOF = 1; - int NULL_TREE_LOOKAHEAD = 3; - int LITERAL_tokens = 4; - int HEADER_ACTION = 5; - int SUBRULE_BLOCK = 6; - int ACTION = 7; - int LITERAL_class = 8; - int ID = 9; - int LITERAL_extends = 10; - int SEMI = 11; - int TOKENS_SPEC = 12; - int OPTIONS_START = 13; - int ASSIGN_RHS = 14; - int RCURLY = 15; - int LITERAL_protected = 16; - int LITERAL_private = 17; - int LITERAL_public = 18; - int BANG = 19; - int ARG_ACTION = 20; - int LITERAL_returns = 21; - int RULE_BLOCK = 22; - int LITERAL_throws = 23; - int COMMA = 24; - int LITERAL_exception = 25; - int LITERAL_catch = 26; - int ALT = 27; - int ELEMENT = 28; - int LPAREN = 29; - int RPAREN = 30; - int ID_OR_KEYWORD = 31; - int CURLY_BLOCK_SCARF = 32; - int WS = 33; - int NEWLINE = 34; - int COMMENT = 35; - int SL_COMMENT = 36; - int ML_COMMENT = 37; - int CHAR_LITERAL = 38; - int STRING_LITERAL = 39; - int ESC = 40; - int DIGIT = 41; - int XDIGIT = 42; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Rule.java glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Rule.java --- glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Rule.java 2006-08-31 00:34:16.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Rule.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,155 +0,0 @@ -package persistence.antlr.preprocessor; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.IndexedVector; - -import java.util.Hashtable; -import java.util.Enumeration; - -class Rule { - protected String name; - protected String block; - protected String args; - protected String returnValue; - protected String throwsSpec; - protected String initAction; - protected IndexedVector options; - protected String visibility; - protected Grammar enclosingGrammar; - protected boolean bang = false; - - public Rule(String n, String b, IndexedVector options, Grammar gr) { - name = n; - block = b; - this.options = options; - setEnclosingGrammar(gr); - } - - public String getArgs() { - return args; - } - - public boolean getBang() { - return bang; - } - - public String getName() { - return name; - } - - public String getReturnValue() { - return returnValue; - } - - public String getVisibility() { - return visibility; - } - - /** If 'rule' narrows the visible of 'this', return true; - * For example, 'this' is public and 'rule' is private, - * true is returned. You cannot narrow the vis. of - * a rule. - */ - public boolean narrowerVisibility(Rule rule) { - if (visibility.equals("public")) { - if (!rule.equals("public")) { - return true; // everything narrower than public - } - return false; - } - else if (visibility.equals("protected")) { - if (rule.equals("private")) { - return true; // private narrower than protected - } - return false; - } - else if (visibility.equals("private")) { - return false; // nothing is narrower than private - } - return false; - } - - /** Two rules have the same signature if they have: - * same name - * same return value - * same args - * I do a simple string compare now, but later - * the type could be pulled out so it is insensitive - * to names of args etc... - */ - public boolean sameSignature(Rule rule) { - boolean nSame = true; - boolean aSame = true; - boolean rSame = true; - - nSame = name.equals(rule.getName()); - if (args != null) { - aSame = args.equals(rule.getArgs()); - } - if (returnValue != null) { - rSame = returnValue.equals(rule.getReturnValue()); - } - return nSame && aSame && rSame; - } - - public void setArgs(String a) { - args = a; - } - - public void setBang() { - bang = true; - } - - public void setEnclosingGrammar(Grammar g) { - enclosingGrammar = g; - } - - public void setInitAction(String a) { - initAction = a; - } - - public void setOptions(IndexedVector options) { - this.options = options; - } - - public void setReturnValue(String ret) { - returnValue = ret; - } - - public void setThrowsSpec(String t) { - throwsSpec = t; - } - - public void setVisibility(String v) { - visibility = v; - } - - public String toString() { - String s = ""; - String retString = returnValue == null ? "" : "returns " + returnValue; - String argString = args == null ? "" : args; - String bang = getBang() ? "!" : ""; - - s += visibility == null ? "" : visibility + " "; - s += name + bang + argString + " " + retString + throwsSpec; - if (options != null) { - s += System.getProperty("line.separator") + - "options {" + - System.getProperty("line.separator"); - for (Enumeration e = options.elements(); e.hasMoreElements();) { - s += (Option)e.nextElement() + System.getProperty("line.separator"); - } - s += "}" + System.getProperty("line.separator"); - } - if (initAction != null) { - s += initAction + System.getProperty("line.separator"); - } - s += block; - return s; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Tool.java glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Tool.java --- glassfish/entity-persistence/src/java/persistence/antlr/preprocessor/Tool.java 2006-08-31 00:34:16.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/preprocessor/Tool.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,144 +0,0 @@ -package persistence.antlr.preprocessor; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.io.*; -import persistence.antlr.collections.impl.Vector; -import java.util.Enumeration; - -/** Tester for the preprocessor */ -public class Tool { - protected Hierarchy theHierarchy; - protected String grammarFileName; - protected String[] args; - protected int nargs; // how many args in new args list - protected Vector grammars; - protected persistence.antlr.Tool antlrTool; - - public Tool(persistence.antlr.Tool t, String[] args) { - antlrTool = t; - processArguments(args); - } - - public static void main(String[] args) { - persistence.antlr.Tool antlrTool = new persistence.antlr.Tool(); - Tool theTool = new Tool(antlrTool, args); - theTool.preprocess(); - String[] a = theTool.preprocessedArgList(); - for (int i = 0; i < a.length; i++) { - System.out.print(" " + a[i]); - } - System.out.println(); - } - - public boolean preprocess() { - if (grammarFileName == null) { - antlrTool.toolError("no grammar file specified"); - return false; - } - if (grammars != null) { - theHierarchy = new Hierarchy(antlrTool); - for (Enumeration e = grammars.elements(); e.hasMoreElements();) { - String f = (String)e.nextElement(); - try { - theHierarchy.readGrammarFile(f); - } - catch (FileNotFoundException fe) { - antlrTool.toolError("file " + f + " not found"); - return false; - } - } - } - - // do the actual inheritance stuff - boolean complete = theHierarchy.verifyThatHierarchyIsComplete(); - if (!complete) - return false; - theHierarchy.expandGrammarsInFile(grammarFileName); - GrammarFile gf = theHierarchy.getFile(grammarFileName); - String expandedFileName = gf.nameForExpandedGrammarFile(grammarFileName); - - // generate the output file if necessary - if (expandedFileName.equals(grammarFileName)) { - args[nargs++] = grammarFileName; // add to argument list - } - else { - try { - gf.generateExpandedFile(); // generate file to feed ANTLR - args[nargs++] = antlrTool.getOutputDirectory() + - System.getProperty("file.separator") + - expandedFileName; // add to argument list - } - catch (IOException io) { - antlrTool.toolError("cannot write expanded grammar file " + expandedFileName); - return false; - } - } - return true; - } - - /** create new arg list with correct length to pass to ANTLR */ - public String[] preprocessedArgList() { - String[] a = new String[nargs]; - System.arraycopy(args, 0, a, 0, nargs); - args = a; - return args; - } - - /** Process -glib options and grammar file. Create a new args list - * that does not contain the -glib option. The grammar file name - * might be modified and, hence, is not added yet to args list. - */ - private void processArguments(String[] incomingArgs) { - this.nargs = 0; - this.args = new String[incomingArgs.length]; - for (int i = 0; i < incomingArgs.length; i++) { - if ( incomingArgs[i].length() == 0 ) - { - antlrTool.warning("Zero length argument ignoring..."); - continue; - } - if (incomingArgs[i].equals("-glib")) { - // if on a pc and they use a '/', warn them - if (File.separator.equals("\\") && - incomingArgs[i].indexOf('/') != -1) { - antlrTool.warning("-glib cannot deal with '/' on a PC: use '\\'; ignoring..."); - } - else { - grammars = antlrTool.parseSeparatedList(incomingArgs[i + 1], ';'); - i++; - } - } - else if (incomingArgs[i].equals("-o")) { - args[this.nargs++] = incomingArgs[i]; - if (i + 1 >= incomingArgs.length) { - antlrTool.error("missing output directory with -o option; ignoring"); - } - else { - i++; - args[this.nargs++] = incomingArgs[i]; - antlrTool.setOutputDirectory(incomingArgs[i]); - } - } - else if (incomingArgs[i].charAt(0) == '-') { - args[this.nargs++] = incomingArgs[i]; - } - else { - // Must be the grammar file - grammarFileName = incomingArgs[i]; - if (grammars == null) { - grammars = new Vector(10); - } - grammars.appendElement(grammarFileName); // process it too - if ((i + 1) < incomingArgs.length) { - antlrTool.warning("grammar file must be last; ignoring other arguments..."); - break; - } - } - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/PreservingFileWriter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/PreservingFileWriter.java --- glassfish/entity-persistence/src/java/persistence/antlr/PreservingFileWriter.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/PreservingFileWriter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,137 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - * @author Ric Klaren <klaren@cs.utwente.nl> - */ - -import java.io.*; - -/** PreservingFileWriter only overwrites target if the new file is different. - Mainly added in order to prevent big and unnecessary recompiles in C++ - projects. - I/O is buffered. -*/ -public class PreservingFileWriter extends FileWriter { - protected File target_file; /// the file we intend to write to - protected File tmp_file; /// the tmp file we create at first - - public PreservingFileWriter(String file) throws IOException - { - super(file+".antlr.tmp"); - - // set up File thingy for target.. - target_file = new File(file); - - String parentdirname = target_file.getParent(); - if( parentdirname != null ) - { - File parentdir = new File(parentdirname); - - if (!parentdir.exists()) - throw new IOException("destination directory of '"+file+"' doesn't exist"); - if (!parentdir.canWrite()) - throw new IOException("destination directory of '"+file+"' isn't writeable"); - } - if( target_file.exists() && ! target_file.canWrite() ) - throw new IOException("cannot write to '"+file+"'"); - - // and for the temp file - tmp_file = new File(file+".antlr.tmp"); - // have it nuked at exit - // RK: this is broken on java 1.4 and - // is not compatible with java 1.1 (which is a big problem I'm told :) ) - // sigh. Any real language would do this in a destructor ;) ;) - // tmp_file.deleteOnExit(); - } - - /** Close the file and see if the actual target is different - * if so the target file is overwritten by the copy. If not we do nothing - */ - public void close() throws IOException - { - Reader source = null; - Writer target = null; - - try { - // close the tmp file so we can access it safely... - super.close(); - - char[] buffer = new char[1024]; - int cnt; - - // target_file != tmp_file so we have to compare and move it.. - if( target_file.length() == tmp_file.length() ) - { - // Do expensive read'n'compare - Reader tmp; - char[] buf2 = new char[1024]; - - source = new BufferedReader(new FileReader(tmp_file)); - tmp = new BufferedReader(new FileReader(target_file)); - int cnt1, cnt2; - boolean equal = true; - - while( equal ) - { - cnt1 = source.read(buffer,0,1024); - cnt2 = tmp.read(buf2,0,1024); - if( cnt1 != cnt2 ) - { - equal = false; - break; - } - if( cnt1 == -1 ) // EOF - break; - for( int i = 0; i < cnt1; i++ ) - { - if( buffer[i] != buf2[i] ) - { - equal = false; - break; - } - } - } - // clean up... - source.close(); - tmp.close(); - - source = tmp = null; - - if( equal ) - return; - } - - source = new BufferedReader(new FileReader(tmp_file)); - target = new BufferedWriter(new FileWriter(target_file)); - - while(true) - { - cnt = source.read(buffer,0,1024); - if( cnt == -1 ) - break; - target.write(buffer, 0, cnt ); - } - } - finally { - if( source != null ) - { - try { source.close(); } - catch( IOException e ) { ; } - } - if( target != null ) - { - try { target.close(); } - catch( IOException e ) { ; } - } - // RK: Now if I'm correct this should be called anytime. - if( tmp_file != null && tmp_file.exists() ) - { - tmp_file.delete(); - tmp_file = null; - } - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/RecognitionException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/RecognitionException.java --- glassfish/entity-persistence/src/java/persistence/antlr/RecognitionException.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/RecognitionException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,69 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public class RecognitionException extends ANTLRException { - public String fileName; // not used by treeparsers - public int line; - public int column; - - public RecognitionException() { - super("parsing error"); - fileName = null; - line = -1; - column = -1; - } - - /** - * RecognitionException constructor comment. - * @param s java.lang.String - */ - public RecognitionException(String s) { - super(s); - fileName = null; - line = -1; - column = -1; - } - - /** @deprecated As of ANTLR 2.7.2 use {@see #RecognitionException(char, String, int, int) } */ - public RecognitionException(String s, String fileName_, int line_) { - this(s, fileName_, line_, -1); - } - - /** - * RecognitionException constructor comment. - * @param s java.lang.String - */ - public RecognitionException(String s, String fileName_, int line_, int column_) { - super(s); - fileName = fileName_; - line = line_; - column = column_; - } - - public String getFilename() { - return fileName; - } - - public int getLine() { - return line; - } - - public int getColumn() { - return column; - } - - /** @deprecated As of ANTLR 2.7.0 */ - public String getErrorMessage() { - return getMessage(); - } - - public String toString() { - return FileLineFormatter.getFormatter(). - getFormatString(fileName, line, column) + getMessage(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/RuleBlock.java glassfish-gil/entity-persistence/src/java/persistence/antlr/RuleBlock.java --- glassfish/entity-persistence/src/java/persistence/antlr/RuleBlock.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/RuleBlock.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,210 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.Vector; - -import java.util.Hashtable; - -/**A list of alternatives and info contained in - * the rule definition. - */ -public class RuleBlock extends AlternativeBlock { - protected String ruleName; - protected String argAction = null; // string for rule arguments [...] - protected String throwsSpec = null; - protected String returnAction = null;// string for rule return type(s) <...> - protected RuleEndElement endNode; // which node ends this rule? - - // Generate literal-testing code for lexer rule? - protected boolean testLiterals = false; - - Vector labeledElements; // List of labeled elements found in this rule - // This is a list of AlternativeElement (or subclass) - - protected boolean[] lock; // for analysis; used to avoid infinite loops - // 1..k - protected Lookahead cache[];// Each rule can cache it's lookahead computation. - - // This cache contains an epsilon - // imaginary token if the FOLLOW is required. No - // FOLLOW information is cached here. - // The FIRST(rule) is stored in this cache; 1..k - // This set includes FIRST of all alts. - - Hashtable exceptionSpecs; // table of String-to-ExceptionSpec. - - // grammar-settable options - protected boolean defaultErrorHandler = true; - protected String ignoreRule = null; - - /** Construct a named rule. */ - public RuleBlock(Grammar g, String r) { - super(g); - ruleName = r; - labeledElements = new Vector(); - cache = new Lookahead[g.maxk + 1]; - exceptionSpecs = new Hashtable(); - setAutoGen(g instanceof ParserGrammar); - } - - /** Construct a named rule with line number information */ - public RuleBlock(Grammar g, String r, int line, boolean doAutoGen_) { - this(g, r); - this.line = line; - setAutoGen(doAutoGen_); - } - - public void addExceptionSpec(ExceptionSpec ex) { - if (findExceptionSpec(ex.label) != null) { - if (ex.label != null) { - grammar.antlrTool.error("Rule '" + ruleName + "' already has an exception handler for label: " + ex.label); - } - else { - grammar.antlrTool.error("Rule '" + ruleName + "' already has an exception handler"); - } - } - else { - exceptionSpecs.put((ex.label == null ? "" : ex.label.getText()), ex); - } - } - - public ExceptionSpec findExceptionSpec(Token label) { - return (ExceptionSpec)exceptionSpecs.get(label == null ? "" : label.getText()); - } - - public ExceptionSpec findExceptionSpec(String label) { - return (ExceptionSpec)exceptionSpecs.get(label == null ? "" : label); - } - - public void generate() { - grammar.generator.gen(this); - } - - public boolean getDefaultErrorHandler() { - return defaultErrorHandler; - } - - public RuleEndElement getEndElement() { - return endNode; - } - - public String getIgnoreRule() { - return ignoreRule; - } - - public String getRuleName() { - return ruleName; - } - - public boolean getTestLiterals() { - return testLiterals; - } - - public boolean isLexerAutoGenRule() { - return ruleName.equals("nextToken"); - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public void prepareForAnalysis() { - super.prepareForAnalysis(); - lock = new boolean[grammar.maxk + 1]; - } - - // rule option values - public void setDefaultErrorHandler(boolean value) { - defaultErrorHandler = value; - } - - public void setEndElement(RuleEndElement re) { - endNode = re; - } - - public void setOption(Token key, Token value) { - if (key.getText().equals("defaultErrorHandler")) { - if (value.getText().equals("true")) { - defaultErrorHandler = true; - } - else if (value.getText().equals("false")) { - defaultErrorHandler = false; - } - else { - grammar.antlrTool.error("Value for defaultErrorHandler must be true or false", grammar.getFilename(), key.getLine(), key.getColumn()); - } - } - else if (key.getText().equals("testLiterals")) { - if (!(grammar instanceof LexerGrammar)) { - grammar.antlrTool.error("testLiterals option only valid for lexer rules", grammar.getFilename(), key.getLine(), key.getColumn()); - } - else { - if (value.getText().equals("true")) { - testLiterals = true; - } - else if (value.getText().equals("false")) { - testLiterals = false; - } - else { - grammar.antlrTool.error("Value for testLiterals must be true or false", grammar.getFilename(), key.getLine(), key.getColumn()); - } - } - } - else if (key.getText().equals("ignore")) { - if (!(grammar instanceof LexerGrammar)) { - grammar.antlrTool.error("ignore option only valid for lexer rules", grammar.getFilename(), key.getLine(), key.getColumn()); - } - else { - ignoreRule = value.getText(); - } - } - else if (key.getText().equals("paraphrase")) { - if (!(grammar instanceof LexerGrammar)) { - grammar.antlrTool.error("paraphrase option only valid for lexer rules", grammar.getFilename(), key.getLine(), key.getColumn()); - } - else { - // find token def associated with this rule - TokenSymbol ts = grammar.tokenManager.getTokenSymbol(ruleName); - if (ts == null) { - grammar.antlrTool.panic("cannot find token associated with rule " + ruleName); - } - ts.setParaphrase(value.getText()); - } - } - else if (key.getText().equals("generateAmbigWarnings")) { - if (value.getText().equals("true")) { - generateAmbigWarnings = true; - } - else if (value.getText().equals("false")) { - generateAmbigWarnings = false; - } - else { - grammar.antlrTool.error("Value for generateAmbigWarnings must be true or false", grammar.getFilename(), key.getLine(), key.getColumn()); - } - } - else { - grammar.antlrTool.error("Invalid rule option: " + key.getText(), grammar.getFilename(), key.getLine(), key.getColumn()); - } - } - - public String toString() { - String s = " FOLLOW={"; - Lookahead cache[] = endNode.cache; - int k = grammar.maxk; - boolean allNull = true; - for (int j = 1; j <= k; j++) { - if (cache[j] == null) continue; - s += cache[j].toString(",", grammar.tokenManager.getVocabulary()); - allNull = false; - if (j < k && cache[j + 1] != null) s += ";"; - } - s += "}"; - if (allNull) s = ""; - return ruleName + ": " + super.toString() + " ;" + s; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/RuleEndElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/RuleEndElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/RuleEndElement.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/RuleEndElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,32 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**Contains a list of all places that reference - * this enclosing rule. Useful for FOLLOW computations. - */ -class RuleEndElement extends BlockEndElement { - protected Lookahead[] cache; // Each rule can cache it's lookahead computation. - // The FOLLOW(rule) is stored in this cache. - // 1..k - protected boolean noFOLLOW; - - - public RuleEndElement(Grammar g) { - super(g); - cache = new Lookahead[g.maxk + 1]; - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public String toString() { - //return " [RuleEnd]"; - return ""; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/RuleRefElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/RuleRefElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/RuleRefElement.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/RuleRefElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,72 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class RuleRefElement extends AlternativeElement { - protected String targetRule; // which rule is being called? - protected String args = null; // were any args passed to rule? - protected String idAssign = null; // is the return type assigned to a variable? - protected String label; - - - public RuleRefElement(Grammar g, Token t, int autoGenType_) { - super(g, t, autoGenType_); - targetRule = t.getText(); - // if ( Character.isUpperCase(targetRule.charAt(0)) ) { // lexer rule? - if (t.type == ANTLRTokenTypes.TOKEN_REF) { // lexer rule? - targetRule = CodeGenerator.encodeLexerRuleName(targetRule); - } - } - -// public RuleRefElement(Grammar g, String t, int line, int autoGenType_) { -// super(g, autoGenType_); -// targetRule = t; -// if ( Character.isUpperCase(targetRule.charAt(0)) ) { // lexer rule? -// targetRule = CodeGenerator.lexerRuleName(targetRule); -// } -// this.line = line; -// } - - public void generate() { - grammar.generator.gen(this); - } - - public String getArgs() { - return args; - } - - public String getIdAssign() { - return idAssign; - } - - public String getLabel() { - return label; - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public void setArgs(String a) { - args = a; - } - - public void setIdAssign(String id) { - idAssign = id; - } - - public void setLabel(String label_) { - label = label_; - } - - public String toString() { - if (args != null) - return " " + targetRule + args; - else - return " " + targetRule; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/RuleSymbol.java glassfish-gil/entity-persistence/src/java/persistence/antlr/RuleSymbol.java --- glassfish/entity-persistence/src/java/persistence/antlr/RuleSymbol.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/RuleSymbol.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,52 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.Vector; - -class RuleSymbol extends GrammarSymbol { - RuleBlock block; // list of alternatives - boolean defined; // has the rule been defined yet? - Vector references; // list of all nodes referencing this rule - // not strictly needed by generic symbol table - // but we will almost always analyze/gen code - String access; // access specifier for this rule - String comment; // A javadoc comment if any. - - public RuleSymbol(String r) { - super(r); - references = new Vector(); - } - - public void addReference(RuleRefElement e) { - references.appendElement(e); - } - - public RuleBlock getBlock() { - return block; - } - - public RuleRefElement getReference(int i) { - return (RuleRefElement)references.elementAt(i); - } - - public boolean isDefined() { - return defined; - } - - public int numReferences() { - return references.size(); - } - - public void setBlock(RuleBlock rb) { - block = rb; - } - - public void setDefined() { - defined = true; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/SemanticException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/SemanticException.java --- glassfish/entity-persistence/src/java/persistence/antlr/SemanticException.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/SemanticException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public class SemanticException extends RecognitionException { - public SemanticException(String s) { - super(s); - } - - /** @deprecated As of ANTLR 2.7.2 use {@see #SemanticException(char, String, int, int) } */ - public SemanticException(String s, String fileName, int line) { - this(s, fileName, line, -1); - } - - public SemanticException(String s, String fileName, int line, int column) { - super(s, fileName, line, column); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/SimpleTokenManager.java glassfish-gil/entity-persistence/src/java/persistence/antlr/SimpleTokenManager.java --- glassfish/entity-persistence/src/java/persistence/antlr/SimpleTokenManager.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/SimpleTokenManager.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,141 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.io.*; -import java.util.Hashtable; -import java.util.Enumeration; - -import persistence.antlr.collections.impl.Vector; - -class SimpleTokenManager implements TokenManager, Cloneable { - protected int maxToken = Token.MIN_USER_TYPE; - // Token vocabulary is Vector of String's - protected Vector vocabulary; - // Hash table is a mapping from Strings to TokenSymbol - private Hashtable table; - // the ANTLR tool - protected Tool antlrTool; - // Name of the token manager - protected String name; - - protected boolean readOnly = false; - - SimpleTokenManager(String name_, Tool tool_) { - antlrTool = tool_; - name = name_; - // Don't make a bigger vector than we need, because it will show up in output sets. - vocabulary = new Vector(1); - table = new Hashtable(); - - // define EOF symbol - TokenSymbol ts = new TokenSymbol("EOF"); - ts.setTokenType(Token.EOF_TYPE); - define(ts); - - // define <null-tree-lookahead> but only in the vocabulary vector - vocabulary.ensureCapacity(Token.NULL_TREE_LOOKAHEAD); - vocabulary.setElementAt("NULL_TREE_LOOKAHEAD", Token.NULL_TREE_LOOKAHEAD); - } - - public Object clone() { - SimpleTokenManager tm; - try { - tm = (SimpleTokenManager)super.clone(); - tm.vocabulary = (Vector)this.vocabulary.clone(); - tm.table = (Hashtable)this.table.clone(); - tm.maxToken = this.maxToken; - tm.antlrTool = this.antlrTool; - tm.name = this.name; - } - catch (CloneNotSupportedException e) { - antlrTool.panic("cannot clone token manager"); - return null; - } - return tm; - } - - /** define a token */ - public void define(TokenSymbol ts) { - // Add the symbol to the vocabulary vector - vocabulary.ensureCapacity(ts.getTokenType()); - vocabulary.setElementAt(ts.getId(), ts.getTokenType()); - // add the symbol to the hash table - mapToTokenSymbol(ts.getId(), ts); - } - - /** Simple token manager doesn't have a name -- must be set externally */ - public String getName() { - return name; - } - - /** Get a token symbol by index */ - public String getTokenStringAt(int idx) { - return (String)vocabulary.elementAt(idx); - } - - /** Get the TokenSymbol for a string */ - public TokenSymbol getTokenSymbol(String sym) { - return (TokenSymbol)table.get(sym); - } - - /** Get a token symbol by index */ - public TokenSymbol getTokenSymbolAt(int idx) { - return getTokenSymbol(getTokenStringAt(idx)); - } - - /** Get an enumerator over the symbol table */ - public Enumeration getTokenSymbolElements() { - return table.elements(); - } - - public Enumeration getTokenSymbolKeys() { - return table.keys(); - } - - /** Get the token vocabulary (read-only). - * @return A Vector of TokenSymbol - */ - public Vector getVocabulary() { - return vocabulary; - } - - /** Simple token manager is not read-only */ - public boolean isReadOnly() { - return false; - } - - /** Map a label or string to an existing token symbol */ - public void mapToTokenSymbol(String name, TokenSymbol sym) { - // System.out.println("mapToTokenSymbol("+name+","+sym+")"); - table.put(name, sym); - } - - /** Get the highest token type in use */ - public int maxTokenType() { - return maxToken - 1; - } - - /** Get the next unused token type */ - public int nextTokenType() { - return maxToken++; - } - - /** Set the name of the token manager */ - public void setName(String name_) { - name = name_; - } - - public void setReadOnly(boolean ro) { - readOnly = ro; - } - - /** Is a token symbol defined? */ - public boolean tokenDefined(String symbol) { - return table.containsKey(symbol); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/StringLiteralElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/StringLiteralElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/StringLiteralElement.java 2006-08-31 00:34:09.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/StringLiteralElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,64 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class StringLiteralElement extends GrammarAtom { - // atomText with quotes stripped and escape codes processed - protected String processedAtomText; - - - public StringLiteralElement(Grammar g, Token t, int autoGenType) { - super(g, t, autoGenType); - if (!(g instanceof LexerGrammar)) { - // lexer does not have token types for string literals - TokenSymbol ts = grammar.tokenManager.getTokenSymbol(atomText); - if (ts == null) { - g.antlrTool.error("Undefined literal: " + atomText, grammar.getFilename(), t.getLine(), t.getColumn()); - } - else { - tokenType = ts.getTokenType(); - } - } - line = t.getLine(); - - // process the string literal text by removing quotes and escaping chars - // If a lexical grammar, add the characters to the char vocabulary - processedAtomText = new String(); - for (int i = 1; i < atomText.length() - 1; i++) { - char c = atomText.charAt(i); - if (c == '\\') { - if (i + 1 < atomText.length() - 1) { - i++; - c = atomText.charAt(i); - switch (c) { - case 'n': - c = '\n'; - break; - case 'r': - c = '\r'; - break; - case 't': - c = '\t'; - break; - } - } - } - if (g instanceof LexerGrammar) { - ((LexerGrammar)g).charVocabulary.add(c); - } - processedAtomText += c; - } - } - - public void generate() { - grammar.generator.gen(this); - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/StringLiteralSymbol.java glassfish-gil/entity-persistence/src/java/persistence/antlr/StringLiteralSymbol.java --- glassfish/entity-persistence/src/java/persistence/antlr/StringLiteralSymbol.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/StringLiteralSymbol.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class StringLiteralSymbol extends TokenSymbol { - protected String label; // was this string literal labeled? - - - public StringLiteralSymbol(String r) { - super(r); - } - - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/StringUtils.java glassfish-gil/entity-persistence/src/java/persistence/antlr/StringUtils.java --- glassfish/entity-persistence/src/java/persistence/antlr/StringUtils.java 2006-02-08 22:30:59.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/StringUtils.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,85 +0,0 @@ -package persistence.antlr; - -public class StringUtils { - /** General-purpose utility function for removing - * characters from back of string - * @param s The string to process - * @param c The character to remove - * @return The resulting string - */ - static public String stripBack(String s, char c) { - while (s.length() > 0 && s.charAt(s.length() - 1) == c) { - s = s.substring(0, s.length() - 1); - } - return s; - } - - /** General-purpose utility function for removing - * characters from back of string - * @param s The string to process - * @param remove A string containing the set of characters to remove - * @return The resulting string - */ - static public String stripBack(String s, String remove) { - boolean changed; - do { - changed = false; - for (int i = 0; i < remove.length(); i++) { - char c = remove.charAt(i); - while (s.length() > 0 && s.charAt(s.length() - 1) == c) { - changed = true; - s = s.substring(0, s.length() - 1); - } - } - } while (changed); - return s; - } - - /** General-purpose utility function for removing - * characters from front of string - * @param s The string to process - * @param c The character to remove - * @return The resulting string - */ - static public String stripFront(String s, char c) { - while (s.length() > 0 && s.charAt(0) == c) { - s = s.substring(1); - } - return s; - } - - /** General-purpose utility function for removing - * characters from front of string - * @param s The string to process - * @param remove A string containing the set of characters to remove - * @return The resulting string - */ - static public String stripFront(String s, String remove) { - boolean changed; - do { - changed = false; - for (int i = 0; i < remove.length(); i++) { - char c = remove.charAt(i); - while (s.length() > 0 && s.charAt(0) == c) { - changed = true; - s = s.substring(1); - } - } - } while (changed); - return s; - } - - /** General-purpose utility function for removing - * characters from the front and back of string - * @param s The string to process - * @param head exact string to strip from head - * @param tail exact string to strip from tail - * @return The resulting string - */ - public static String stripFrontBack(String src, String head, String tail) { - int h = src.indexOf(head); - int t = src.lastIndexOf(tail); - if (h == -1 || t == -1) return src; - return src.substring(h + 1, t); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/SynPredBlock.java glassfish-gil/entity-persistence/src/java/persistence/antlr/SynPredBlock.java --- glassfish/entity-persistence/src/java/persistence/antlr/SynPredBlock.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/SynPredBlock.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,30 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class SynPredBlock extends AlternativeBlock { - - public SynPredBlock(Grammar g) { - super(g); - } - - public SynPredBlock(Grammar g, Token start) { - super(g, start, false); - } - - public void generate() { - grammar.generator.gen(this); - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public String toString() { - return super.toString() + "=>"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenBuffer.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenBuffer.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenBuffer.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenBuffer.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,125 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**A Stream of Token objects fed to the parser from a Tokenizer that can - * be rewound via mark()/rewind() methods. - * <p> - * A dynamic array is used to buffer up all the input tokens. Normally, - * "k" tokens are stored in the buffer. More tokens may be stored during - * guess mode (testing syntactic predicate), or when LT(i>k) is referenced. - * Consumption of tokens is deferred. In other words, reading the next - * token is not done by conume(), but deferred until needed by LA or LT. - * <p> - * - * @see persistence.antlr.Token - * @see persistence.antlr.Tokenizer - * @see persistence.antlr.TokenQueue - */ - -import java.io.IOException; - -public class TokenBuffer { - - // Token source - protected TokenStream input; - - // Number of active markers - int nMarkers = 0; - - // Additional offset used when markers are active - int markerOffset = 0; - - // Number of calls to consume() since last LA() or LT() call - int numToConsume = 0; - - // Circular queue - TokenQueue queue; - - /** Create a token buffer */ - public TokenBuffer(TokenStream input_) { - input = input_; - queue = new TokenQueue(1); - } - - /** Reset the input buffer to empty state */ - public final void reset() { - nMarkers = 0; - markerOffset = 0; - numToConsume = 0; - queue.reset(); - } - - /** Mark another token for deferred consumption */ - public final void consume() { - numToConsume++; - } - - /** Ensure that the token buffer is sufficiently full */ - private final void fill(int amount) throws TokenStreamException { - syncConsume(); - // Fill the buffer sufficiently to hold needed tokens - while (queue.nbrEntries < amount + markerOffset) { - // Append the next token - queue.append(input.nextToken()); - } - } - - /** return the Tokenizer (needed by ParseView) */ - public TokenStream getInput() { - return input; - } - - /** Get a lookahead token value */ - public final int LA(int i) throws TokenStreamException { - fill(i); - return queue.elementAt(markerOffset + i - 1).type; - } - - /** Get a lookahead token */ - public final Token LT(int i) throws TokenStreamException { - fill(i); - return queue.elementAt(markerOffset + i - 1); - } - - /**Return an integer marker that can be used to rewind the buffer to - * its current state. - */ - public final int mark() { - syncConsume(); -//System.out.println("Marking at " + markerOffset); -//try { for (int i = 1; i <= 2; i++) { System.out.println("LA("+i+")=="+LT(i).getText()); } } catch (ScannerException e) {} - nMarkers++; - return markerOffset; - } - - /**Rewind the token buffer to a marker. - * @param mark Marker returned previously from mark() - */ - public final void rewind(int mark) { - syncConsume(); - markerOffset = mark; - nMarkers--; -//System.out.println("Rewinding to " + mark); -//try { for (int i = 1; i <= 2; i++) { System.out.println("LA("+i+")=="+LT(i).getText()); } } catch (ScannerException e) {} - } - - /** Sync up deferred consumption */ - private final void syncConsume() { - while (numToConsume > 0) { - if (nMarkers > 0) { - // guess mode -- leave leading tokens and bump offset. - markerOffset++; - } - else { - // normal mode -- remove first token - queue.removeFirst(); - } - numToConsume--; - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/Token.java glassfish-gil/entity-persistence/src/java/persistence/antlr/Token.java --- glassfish/entity-persistence/src/java/persistence/antlr/Token.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/Token.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,77 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** A token is minimally a token type. Subclasses can add the text matched - * for the token and line info. - */ -public class Token implements Cloneable { - // constants - public static final int MIN_USER_TYPE = 4; - public static final int NULL_TREE_LOOKAHEAD = 3; - public static final int INVALID_TYPE = 0; - public static final int EOF_TYPE = 1; - public static final int SKIP = -1; - - // each Token has at least a token type - int type = INVALID_TYPE; - - // the illegal token object - public static Token badToken = new Token(INVALID_TYPE, "<no text>"); - - public Token() { - } - - public Token(int t) { - type = t; - } - - public Token(int t, String txt) { - type = t; - setText(txt); - } - - public int getColumn() { - return 0; - } - - public int getLine() { - return 0; - } - - public String getFilename() { - return null; - } - - public void setFilename(String name) { - } - - public String getText() { - return "<no text>"; - } - - public void setText(String t) { - } - - public void setColumn(int c) { - } - - public void setLine(int l) { - } - - public int getType() { - return type; - } - - public void setType(int t) { - type = t; - } - - public String toString() { - return "[\"" + getText() + "\",<" + type + ">]"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenManager.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenManager.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenManager.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenManager.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,58 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Hashtable; -import java.util.Enumeration; - -import persistence.antlr.collections.impl.Vector; - -/** Interface that describes the set of defined tokens */ -interface TokenManager { - public Object clone(); - - /** define a token symbol */ - public void define(TokenSymbol ts); - - /** Get the name of the token manager */ - public String getName(); - - /** Get a token string by index */ - public String getTokenStringAt(int idx); - - /** Get the TokenSymbol for a string */ - public TokenSymbol getTokenSymbol(String sym); - - public TokenSymbol getTokenSymbolAt(int idx); - - /** Get an enumerator over the symbol table */ - public Enumeration getTokenSymbolElements(); - - public Enumeration getTokenSymbolKeys(); - - /** Get the token vocabulary (read-only). - * @return A Vector of Strings indexed by token type */ - public Vector getVocabulary(); - - /** Is this token manager read-only? */ - public boolean isReadOnly(); - - public void mapToTokenSymbol(String name, TokenSymbol sym); - - /** Get the highest token type in use */ - public int maxTokenType(); - - /** Get the next unused token type */ - public int nextTokenType(); - - public void setName(String n); - - public void setReadOnly(boolean ro); - - /** Is a token symbol defined? */ - public boolean tokenDefined(String symbol); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenQueue.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenQueue.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenQueue.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenQueue.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,95 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** A private circular buffer object used by the token buffer */ -class TokenQueue { - /** Physical circular buffer of tokens */ - private Token[] buffer; - /** buffer.length-1 for quick modulos */ - private int sizeLessOne; - /** physical index of front token */ - private int offset; - /** number of tokens in the queue */ - protected int nbrEntries; - - public TokenQueue(int minSize) { - // Find first power of 2 >= to requested size - int size; - if ( minSize<0 ) { - init(16); // pick some value for them - return; - } - // check for overflow - if ( minSize>=(Integer.MAX_VALUE/2) ) { - init(Integer.MAX_VALUE); // wow that's big. - return; - } - for (size = 2; size < minSize; size *= 2) { - ; - } - init(size); - } - - /** Add token to end of the queue - * @param tok The token to add - */ - public final void append(Token tok) { - if (nbrEntries == buffer.length) { - expand(); - } - buffer[(offset + nbrEntries) & sizeLessOne] = tok; - nbrEntries++; - } - - /** Fetch a token from the queue by index - * @param idx The index of the token to fetch, where zero is the token at the front of the queue - */ - public final Token elementAt(int idx) { - return buffer[(offset + idx) & sizeLessOne]; - } - - /** Expand the token buffer by doubling its capacity */ - private final void expand() { - Token[] newBuffer = new Token[buffer.length * 2]; - // Copy the contents to the new buffer - // Note that this will store the first logical item in the - // first physical array element. - for (int i = 0; i < buffer.length; i++) { - newBuffer[i] = elementAt(i); - } - // Re-initialize with new contents, keep old nbrEntries - buffer = newBuffer; - sizeLessOne = buffer.length - 1; - offset = 0; - } - - /** Initialize the queue. - * @param size The initial size of the queue - */ - private final void init(int size) { - // Allocate buffer - buffer = new Token[size]; - // Other initialization - sizeLessOne = size - 1; - offset = 0; - nbrEntries = 0; - } - - /** Clear the queue. Leaving the previous buffer alone. - */ - public final void reset() { - offset = 0; - nbrEntries = 0; - } - - /** Remove token from front of queue */ - public final void removeFirst() { - offset = (offset + 1) & sizeLessOne; - nbrEntries--; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenRangeElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenRangeElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenRangeElement.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenRangeElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,49 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class TokenRangeElement extends AlternativeElement { - String label; - protected int begin = Token.INVALID_TYPE; - protected int end = Token.INVALID_TYPE; - protected String beginText; - protected String endText; - - public TokenRangeElement(Grammar g, Token t1, Token t2, int autoGenType) { - super(g, t1, autoGenType); - begin = grammar.tokenManager.getTokenSymbol(t1.getText()).getTokenType(); - beginText = t1.getText(); - end = grammar.tokenManager.getTokenSymbol(t2.getText()).getTokenType(); - endText = t2.getText(); - line = t1.getLine(); - } - - public void generate() { - grammar.generator.gen(this); - } - - public String getLabel() { - return label; - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public void setLabel(String label_) { - label = label_; - } - - public String toString() { - if (label != null) { - return " " + label + ":" + beginText + ".." + endText; - } - else { - return " " + beginText + ".." + endText; - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenRefElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenRefElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenRefElement.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenRefElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,39 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class TokenRefElement extends GrammarAtom { - - public TokenRefElement(Grammar g, - Token t, - boolean inverted, - int autoGenType) { - super(g, t, autoGenType); - not = inverted; - TokenSymbol ts = grammar.tokenManager.getTokenSymbol(atomText); - if (ts == null) { - g.antlrTool.error("Undefined token symbol: " + - atomText, grammar.getFilename(), t.getLine(), t.getColumn()); - } - else { - tokenType = ts.getTokenType(); - // set the AST node type to whatever was set in tokens {...} - // section (if anything); - // Lafter, after this is created, the element option can set this. - setASTNodeType(ts.getASTNodeType()); - } - line = t.getLine(); - } - - public void generate() { - grammar.generator.gen(this); - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamBasicFilter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamBasicFilter.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamBasicFilter.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamBasicFilter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,42 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.BitSet; - -/** This object is a TokenStream that passes through all - * tokens except for those that you tell it to discard. - * There is no buffering of the tokens. - */ -public class TokenStreamBasicFilter implements TokenStream { - /** The set of token types to discard */ - protected BitSet discardMask; - - /** The input stream */ - protected TokenStream input; - - public TokenStreamBasicFilter(TokenStream input) { - this.input = input; - discardMask = new BitSet(); - } - - public void discard(int ttype) { - discardMask.add(ttype); - } - - public void discard(BitSet mask) { - discardMask = mask; - } - - public Token nextToken() throws TokenStreamException { - Token tok = input.nextToken(); - while (tok != null && discardMask.member(tok.getType())) { - tok = input.nextToken(); - } - return tok; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamException.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamException.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,19 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** - * Anything that goes wrong while generating a stream of tokens. - */ -public class TokenStreamException extends ANTLRException { - public TokenStreamException() { - } - - public TokenStreamException(String s) { - super(s); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamHiddenTokenFilter.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamHiddenTokenFilter.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamHiddenTokenFilter.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamHiddenTokenFilter.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,151 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.BitSet; - -/**This object filters a token stream coming from a lexer - * or another TokenStream so that only certain token channels - * get transmitted to the parser. - * - * Any of the channels can be filtered off as "hidden" channels whose - * tokens can be accessed from the parser. - */ -public class TokenStreamHiddenTokenFilter extends TokenStreamBasicFilter implements TokenStream { - // protected BitSet discardMask; - protected BitSet hideMask; - - protected CommonHiddenStreamToken nextMonitoredToken; - - /** track tail of hidden list emanating from previous - * monitored token - */ - protected CommonHiddenStreamToken lastHiddenToken; - - protected CommonHiddenStreamToken firstHidden = null; - - public TokenStreamHiddenTokenFilter(TokenStream input) { - super(input); - hideMask = new BitSet(); - } - - protected void consume() throws TokenStreamException { - nextMonitoredToken = (CommonHiddenStreamToken)input.nextToken(); - } - - private void consumeFirst() throws TokenStreamException { - consume(); // get first token of input stream - - // Handle situation where hidden or discarded tokens - // appear first in input stream - CommonHiddenStreamToken p = null; - // while hidden or discarded scarf tokens - while (hideMask.member(LA(1).getType()) || discardMask.member(LA(1).getType())) { - if (hideMask.member(LA(1).getType())) { - if (p == null) { - p = LA(1); - } - else { - p.setHiddenAfter(LA(1)); - LA(1).setHiddenBefore(p); // double-link - p = LA(1); - } - lastHiddenToken = p; - if (firstHidden == null) { - firstHidden = p; // record hidden token if first - } - } - consume(); - } - } - - public BitSet getDiscardMask() { - return discardMask; - } - - /** Return a ptr to the hidden token appearing immediately after - * token t in the input stream. - */ - public CommonHiddenStreamToken getHiddenAfter(CommonHiddenStreamToken t) { - return t.getHiddenAfter(); - } - - /** Return a ptr to the hidden token appearing immediately before - * token t in the input stream. - */ - public CommonHiddenStreamToken getHiddenBefore(CommonHiddenStreamToken t) { - return t.getHiddenBefore(); - } - - public BitSet getHideMask() { - return hideMask; - } - - /** Return the first hidden token if one appears - * before any monitored token. - */ - public CommonHiddenStreamToken getInitialHiddenToken() { - return firstHidden; - } - - public void hide(int m) { - hideMask.add(m); - } - - public void hide(BitSet mask) { - hideMask = mask; - } - - protected CommonHiddenStreamToken LA(int i) { - return nextMonitoredToken; - } - - /** Return the next monitored token. - * Test the token following the monitored token. - * If following is another monitored token, save it - * for the next invocation of nextToken (like a single - * lookahead token) and return it then. - * If following is unmonitored, nondiscarded (hidden) - * channel token, add it to the monitored token. - * - * Note: EOF must be a monitored Token. - */ - public Token nextToken() throws TokenStreamException { - // handle an initial condition; don't want to get lookahead - // token of this splitter until first call to nextToken - if (LA(1) == null) { - consumeFirst(); - } - - // we always consume hidden tokens after monitored, thus, - // upon entry LA(1) is a monitored token. - CommonHiddenStreamToken monitored = LA(1); - // point to hidden tokens found during last invocation - monitored.setHiddenBefore(lastHiddenToken); - lastHiddenToken = null; - - // Look for hidden tokens, hook them into list emanating - // from the monitored tokens. - consume(); - CommonHiddenStreamToken p = monitored; - // while hidden or discarded scarf tokens - while (hideMask.member(LA(1).getType()) || discardMask.member(LA(1).getType())) { - if (hideMask.member(LA(1).getType())) { - // attach the hidden token to the monitored in a chain - // link forwards - p.setHiddenAfter(LA(1)); - // link backwards - if (p != monitored) { //hidden cannot point to monitored tokens - LA(1).setHiddenBefore(p); - } - p = lastHiddenToken = LA(1); - } - consume(); - } - return monitored; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamIOException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamIOException.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamIOException.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamIOException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,25 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.io.IOException; - -/** - * Wraps an IOException in a TokenStreamException - */ -public class TokenStreamIOException extends TokenStreamException { - public IOException io; - - /** - * TokenStreamIOException constructor comment. - * @param s java.lang.String - */ - public TokenStreamIOException(IOException io) { - super(io.getMessage()); - this.io = io; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenStream.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStream.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenStream.java 2006-08-31 00:34:10.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStream.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,11 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -public interface TokenStream { - public Token nextToken() throws TokenStreamException; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamRecognitionException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamRecognitionException.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamRecognitionException.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamRecognitionException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** - * Wraps a RecognitionException in a TokenStreamException so you - * can pass it along. - */ -public class TokenStreamRecognitionException extends TokenStreamException { - public RecognitionException recog; - - public TokenStreamRecognitionException(RecognitionException re) { - super(re.getMessage()); - this.recog = re; - } - - public String toString() { - return recog.toString(); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamRetryException.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamRetryException.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamRetryException.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamRetryException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,17 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** - * Aborted recognition of current token. Try to get one again. - * Used by TokenStreamSelector.retry() to force nextToken() - * of stream to re-enter and retry. - */ -public class TokenStreamRetryException extends TokenStreamException { - public TokenStreamRetryException() { - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamRewriteEngine.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamRewriteEngine.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamRewriteEngine.java 2006-02-08 22:31:04.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamRewriteEngine.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,422 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - */ - -import persistence.antlr.collections.impl.BitSet; -import java.util.*; - -/** This token stream tracks the *entire* token stream coming from - * a lexer, but does not pass on the whitespace (or whatever else - * you want to discard) to the parser. - * - * This class can then be asked for the ith token in the input stream. - * Useful for dumping out the input stream exactly after doing some - * augmentation or other manipulations. Tokens are index from 0..n-1 - * - * You can insert stuff, replace, and delete chunks. Note that the - * operations are done lazily--only if you convert the buffer to a - * String. This is very efficient because you are not moving data around - * all the time. As the buffer of tokens is converted to strings, the - * toString() method(s) check to see if there is an operation at the - * current index. If so, the operation is done and then normal String - * rendering continues on the buffer. This is like having multiple Turing - * machine instruction streams (programs) operating on a single input tape. :) - * - * Since the operations are done lazily at toString-time, operations do not - * screw up the token index values. That is, an insert operation at token - * index i does not change the index values for tokens i+1..n-1. - * - * Because operations never actually alter the buffer, you may always get - * the original token stream back without undoing anything. Since - * the instructions are queued up, you can easily simulate transactions and - * roll back any changes if there is an error just by removing instructions. - * For example, - * - * TokenStreamRewriteEngine rewriteEngine = - * new TokenStreamRewriteEngine(lexer); - * JavaRecognizer parser = new JavaRecognizer(rewriteEngine); - * ... - * rewriteEngine.insertAfter("pass1", t, "foobar");} - * rewriteEngine.insertAfter("pass2", u, "start");} - * System.out.println(rewriteEngine.toString("pass1")); - * System.out.println(rewriteEngine.toString("pass2")); - * - * You can also have multiple "instruction streams" and get multiple - * rewrites from a single pass over the input. Just name the instruction - * streams and use that name again when printing the buffer. This could be - * useful for generating a C file and also its header file--all from the - * same buffer. - * - * If you don't use named rewrite streams, a "default" stream is used. - * - * Terence Parr, parrt@cs.usfca.edu - * University of San Francisco - * February 2004 - */ -public class TokenStreamRewriteEngine implements TokenStream { - public static final int MIN_TOKEN_INDEX = 0; - - static class RewriteOperation { - protected int index; - protected String text; - protected RewriteOperation(int index, String text) { - this.index = index; - this.text = text; - } - /** Execute the rewrite operation by possibly adding to the buffer. - * Return the index of the next token to operate on. - */ - public int execute(StringBuffer buf) { - return index; - } - } - - static class InsertBeforeOp extends RewriteOperation { - public InsertBeforeOp(int index, String text) { - super(index,text); - } - public int execute(StringBuffer buf) { - buf.append(text); - return index; - } - } - - static class ReplaceOp extends RewriteOperation { - protected int lastIndex; - public ReplaceOp(int from, int to, String text) { - super(from,text); - lastIndex = to; - } - public int execute(StringBuffer buf) { - if ( text!=null ) { - buf.append(text); - } - return lastIndex+1; - } - } - - static class DeleteOp extends ReplaceOp { - public DeleteOp(int from, int to) { - super(from, to, null); - } - } - - public static final String DEFAULT_PROGRAM_NAME = "default"; - public static final int PROGRAM_INIT_SIZE = 100; - - /** Track the incoming list of tokens */ - protected List tokens; - - /** You may have multiple, named streams of rewrite operations. - * I'm calling these things "programs." - * Maps String (name) -> rewrite (List) - */ - protected Map programs = null; - - /** Map String (program name) -> Integer index */ - protected Map lastRewriteTokenIndexes = null; - - /** track index of tokens */ - protected int index = MIN_TOKEN_INDEX; - - /** Who do we suck tokens from? */ - protected TokenStream stream; - - /** Which (whitespace) token(s) to throw out */ - protected BitSet discardMask = new BitSet(); - - public TokenStreamRewriteEngine(TokenStream upstream) { - this(upstream,1000); - } - - public TokenStreamRewriteEngine(TokenStream upstream, int initialSize) { - stream = upstream; - tokens = new ArrayList(initialSize); - programs = new HashMap(); - programs.put(DEFAULT_PROGRAM_NAME, - new ArrayList(PROGRAM_INIT_SIZE)); - lastRewriteTokenIndexes = new HashMap(); - } - - public Token nextToken() throws TokenStreamException { - TokenWithIndex t; - // suck tokens until end of stream or we find a non-discarded token - do { - t = (TokenWithIndex)stream.nextToken(); - if ( t!=null ) { - t.setIndex(index); // what is t's index in list? - if ( t.getType()!=Token.EOF_TYPE ) { - tokens.add(t); // track all tokens except EOF - } - index++; // move to next position - } - } while ( t!=null && discardMask.member(t.getType()) ); - return t; - } - - public void rollback(int instructionIndex) { - rollback(DEFAULT_PROGRAM_NAME, instructionIndex); - } - - /** Rollback the instruction stream for a program so that - * the indicated instruction (via instructionIndex) is no - * longer in the stream. UNTESTED! - */ - public void rollback(String programName, int instructionIndex) { - List is = (List)programs.get(programName); - if ( is!=null ) { - programs.put(programName, is.subList(MIN_TOKEN_INDEX,instructionIndex)); - } - } - - public void deleteProgram() { - deleteProgram(DEFAULT_PROGRAM_NAME); - } - - /** Reset the program so that no instructions exist */ - public void deleteProgram(String programName) { - rollback(programName, MIN_TOKEN_INDEX); - } - - /** If op.index > lastRewriteTokenIndexes, just add to the end. - * Otherwise, do linear */ - protected void addToSortedRewriteList(RewriteOperation op) { - addToSortedRewriteList(DEFAULT_PROGRAM_NAME, op); - } - - protected void addToSortedRewriteList(String programName, RewriteOperation op) { - List rewrites = getProgram(programName); - // if at or beyond last op's index, just append - if ( op.index>=getLastRewriteTokenIndex(programName) ) { - rewrites.add(op); // append to list of operations - // record the index of this operation for next time through - setLastRewriteTokenIndex(programName, op.index); - return; - } - // not after the last one, so must insert to ordered list - Comparator comparator = new Comparator() { - public int compare(Object o, Object o1) { - RewriteOperation a = (RewriteOperation)o; - RewriteOperation b = (RewriteOperation)o1; - if ( a.index<b.index ) return -1; - if ( a.index>b.index ) return 1; - return 0; - } - }; - int pos = Collections.binarySearch(rewrites, op, comparator); - if ( pos<0 ) { - rewrites.add(-pos-1, op); - } - } - - public void insertAfter(Token t, String text) { - insertAfter(DEFAULT_PROGRAM_NAME, t, text); - } - - public void insertAfter(int index, String text) { - insertAfter(DEFAULT_PROGRAM_NAME, index, text); - } - - public void insertAfter(String programName, Token t, String text) { - insertAfter(programName,((TokenWithIndex)t).getIndex(), text); - } - - public void insertAfter(String programName, int index, String text) { - // to insert after, just insert before next index (even if past end) - insertBefore(programName,index+1, text); - } - - public void insertBefore(Token t, String text) { - insertBefore(DEFAULT_PROGRAM_NAME, t, text); - } - - public void insertBefore(int index, String text) { - insertBefore(DEFAULT_PROGRAM_NAME, index, text); - } - - public void insertBefore(String programName, Token t, String text) { - insertBefore(programName, ((TokenWithIndex)t).getIndex(), text); - } - - public void insertBefore(String programName, int index, String text) { - addToSortedRewriteList(programName, new InsertBeforeOp(index,text)); - } - - public void replace(int index, String text) { - replace(DEFAULT_PROGRAM_NAME, index, index, text); - } - - public void replace(int from, int to, String text) { - replace(DEFAULT_PROGRAM_NAME, from, to, text); - } - - public void replace(Token indexT, String text) { - replace(DEFAULT_PROGRAM_NAME, indexT, indexT, text); - } - - public void replace(Token from, Token to, String text) { - replace(DEFAULT_PROGRAM_NAME, from, to, text); - } - - public void replace(String programName, int from, int to, String text) { - addToSortedRewriteList(new ReplaceOp(from, to, text)); - } - - public void replace(String programName, Token from, Token to, String text) { - replace(programName, - ((TokenWithIndex)from).getIndex(), - ((TokenWithIndex)to).getIndex(), - text); - } - - public void delete(int index) { - delete(DEFAULT_PROGRAM_NAME, index, index); - } - - public void delete(int from, int to) { - delete(DEFAULT_PROGRAM_NAME, from, to); - } - - public void delete(Token indexT) { - delete(DEFAULT_PROGRAM_NAME, indexT, indexT); - } - - public void delete(Token from, Token to) { - delete(DEFAULT_PROGRAM_NAME, from, to); - } - - public void delete(String programName, int from, int to) { - replace(programName,from,to,null); - } - - public void delete(String programName, Token from, Token to) { - replace(programName,from,to,null); - } - - public void discard(int ttype) { - discardMask.add(ttype); - } - - public TokenWithIndex getToken(int i) { - return (TokenWithIndex)tokens.get(i); - } - - public int getTokenStreamSize() { - return tokens.size(); - } - - public String toOriginalString() { - return toOriginalString(MIN_TOKEN_INDEX, getTokenStreamSize()-1); - } - - public String toOriginalString(int start, int end) { - StringBuffer buf = new StringBuffer(); - for (int i=start; i>=MIN_TOKEN_INDEX && i<=end && i<tokens.size(); i++) { - buf.append(getToken(i).getText()); - } - return buf.toString(); - } - - public String toString() { - return toString(MIN_TOKEN_INDEX, getTokenStreamSize()); - } - - public String toString(String programName) { - return toString(programName, MIN_TOKEN_INDEX, getTokenStreamSize()); - } - - public String toString(int start, int end) { - return toString(DEFAULT_PROGRAM_NAME, start, end); - } - - public String toString(String programName, int start, int end) { - List rewrites = (List)programs.get(programName); - if ( rewrites==null ) { - return null; // invalid program - } - StringBuffer buf = new StringBuffer(); - - /** Index of first rewrite we have not done */ - int rewriteOpIndex = 0; - - int tokenCursor=start; - while ( tokenCursor>=MIN_TOKEN_INDEX && - tokenCursor<=end && - tokenCursor<tokens.size() ) - { - if ( rewriteOpIndex<rewrites.size() ) { - RewriteOperation op = - (RewriteOperation)rewrites.get(rewriteOpIndex); - while ( tokenCursor==op.index && rewriteOpIndex<rewrites.size() ) { - /* - System.out.println("execute op "+rewriteOpIndex+ - " (type "+op.getClass().getName()+")" - +" at index "+op.index); - */ - tokenCursor = op.execute(buf); - rewriteOpIndex++; - if ( rewriteOpIndex<rewrites.size() ) { - op = (RewriteOperation)rewrites.get(rewriteOpIndex); - } - } - } - if ( tokenCursor<end ) { - buf.append(getToken(tokenCursor).getText()); - tokenCursor++; - } - } - // now see if there are operations (append) beyond last token index - for (int opi=rewriteOpIndex; opi<rewrites.size(); opi++) { - RewriteOperation op = - (RewriteOperation)rewrites.get(opi); - op.execute(buf); // must be insertions if after last token - } - - return buf.toString(); - } - - public String toDebugString() { - return toDebugString(MIN_TOKEN_INDEX, getTokenStreamSize()); - } - - public String toDebugString(int start, int end) { - StringBuffer buf = new StringBuffer(); - for (int i=start; i>=MIN_TOKEN_INDEX && i<=end && i<tokens.size(); i++) { - buf.append(getToken(i)); - } - return buf.toString(); - } - - public int getLastRewriteTokenIndex() { - return getLastRewriteTokenIndex(DEFAULT_PROGRAM_NAME); - } - - protected int getLastRewriteTokenIndex(String programName) { - Integer I = (Integer)lastRewriteTokenIndexes.get(programName); - if ( I==null ) { - return -1; - } - return I.intValue(); - } - - protected void setLastRewriteTokenIndex(String programName, int i) { - lastRewriteTokenIndexes.put(programName, new Integer(i)); - } - - protected List getProgram(String name) { - List is = (List)programs.get(name); - if ( is==null ) { - is = initializeProgram(name); - } - return is; - } - - private List initializeProgram(String name) { - List is = new ArrayList(PROGRAM_INIT_SIZE); - programs.put(name, is); - return is; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamSelector.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamSelector.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenStreamSelector.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenStreamSelector.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,106 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Hashtable; - -import persistence.antlr.collections.impl.LList; -import persistence.antlr.collections.Stack; - -import java.io.IOException; - -/** A token stream MUX (multiplexor) knows about n token streams - * and can multiplex them onto the same channel for use by token - * stream consumer like a parser. This is a way to have multiple - * lexers break up the same input stream for a single parser. - * Or, you can have multiple instances of the same lexer handle - * multiple input streams; this works great for includes. - */ -public class TokenStreamSelector implements TokenStream { - /** The set of inputs to the MUX */ - protected Hashtable inputStreamNames; - - /** The currently-selected token stream input */ - protected TokenStream input; - - /** Used to track stack of input streams */ - protected Stack streamStack = new LList(); - - public TokenStreamSelector() { - super(); - inputStreamNames = new Hashtable(); - } - - public void addInputStream(TokenStream stream, String key) { - inputStreamNames.put(key, stream); - } - - /** Return the stream from tokens are being pulled at - * the moment. - */ - public TokenStream getCurrentStream() { - return input; - } - - public TokenStream getStream(String sname) { - TokenStream stream = (TokenStream)inputStreamNames.get(sname); - if (stream == null) { - throw new IllegalArgumentException("TokenStream " + sname + " not found"); - } - return stream; - } - - public Token nextToken() throws TokenStreamException { - // return input.nextToken(); - // keep looking for a token until you don't - // get a retry exception. - for (; ;) { - try { - return input.nextToken(); - } - catch (TokenStreamRetryException r) { - // just retry "forever" - } - } - } - - public TokenStream pop() { - TokenStream stream = (TokenStream)streamStack.pop(); - select(stream); - return stream; - } - - public void push(TokenStream stream) { - streamStack.push(input); // save current stream - select(stream); - } - - public void push(String sname) { - streamStack.push(input); - select(sname); - } - - /** Abort recognition of current Token and try again. - * A stream can push a new stream (for include files - * for example, and then retry(), which will cause - * the current stream to abort back to this.nextToken(). - * this.nextToken() then asks for a token from the - * current stream, which is the new "substream." - */ - public void retry() throws TokenStreamRetryException { - throw new TokenStreamRetryException(); - } - - /** Set the stream without pushing old stream */ - public void select(TokenStream stream) { - input = stream; - } - - public void select(String sname) throws IllegalArgumentException { - input = getStream(sname); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenSymbol.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenSymbol.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenSymbol.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenSymbol.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,45 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class TokenSymbol extends GrammarSymbol { - protected int ttype; - /** describes what token matches in "human terms" */ - protected String paraphrase = null; - - /** Set to a value in the tokens {...} section */ - protected String ASTNodeType; - - public TokenSymbol(String r) { - super(r); - ttype = Token.INVALID_TYPE; - } - - public String getASTNodeType() { - return ASTNodeType; - } - - public void setASTNodeType(String type) { - ASTNodeType = type; - } - - public String getParaphrase() { - return paraphrase; - } - - public int getTokenType() { - return ttype; - } - - public void setParaphrase(String p) { - paraphrase = p; - } - - public void setTokenType(int t) { - ttype = t; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TokenWithIndex.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenWithIndex.java --- glassfish/entity-persistence/src/java/persistence/antlr/TokenWithIndex.java 2006-02-08 22:31:05.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TokenWithIndex.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,35 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - */ - -/** This token knows what index 0..n-1 it is from beginning of stream. - * Designed to work with TokenStreamRewriteEngine.java - */ -public class TokenWithIndex extends CommonToken { - /** Index into token array indicating position in input stream */ - int index; - - public TokenWithIndex() { - super(); - } - - public TokenWithIndex(int i, String t) { - super(i,t); - } - - public void setIndex(int i) { - index = i; - } - - public int getIndex() { - return index; - } - - public String toString() { - return "["+index+":\"" + getText() + "\",<" + getType() + ">,line=" + line + ",col=" + -col + "]\n"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ToolErrorHandler.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ToolErrorHandler.java --- glassfish/entity-persistence/src/java/persistence/antlr/ToolErrorHandler.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ToolErrorHandler.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,47 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import persistence.antlr.collections.impl.BitSet; - -interface ToolErrorHandler { - - - /** Issue a warning about ambiguity between a alternates - * @param blk The block being analyzed - * @param lexicalAnalysis true for lexical rule - * @param depth The depth of the ambiguity - * @param sets An array of bitsets containing the ambiguities - * @param altIdx1 The zero-based index of the first ambiguous alternative - * @param altIdx2 The zero-based index of the second ambiguous alternative - */ - public void warnAltAmbiguity( - Grammar grammar, - AlternativeBlock blk, - boolean lexicalAnalysis, - int depth, - Lookahead[] sets, - int altIdx1, - int altIdx2 - ); - - /** Issue a warning about ambiguity between an alternate and exit path. - * @param blk The block being analyzed - * @param lexicalAnalysis true for lexical rule - * @param depth The depth of the ambiguity - * @param sets An array of bitsets containing the ambiguities - * @param altIdx The zero-based index of the ambiguous alternative - */ - public void warnAltExitAmbiguity( - Grammar grammar, - BlockWithImpliedExitPath blk, - boolean lexicalAnalysis, - int depth, - Lookahead[] sets, - int altIdx - ); -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/Tool.java glassfish-gil/entity-persistence/src/java/persistence/antlr/Tool.java --- glassfish/entity-persistence/src/java/persistence/antlr/Tool.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/Tool.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,634 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.io.*; - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; -import persistence.antlr.PreservingFileWriter; -import persistence.antlr.Version; - -public class Tool { - public static String version = ""; - - /** Object that handles analysis errors */ - ToolErrorHandler errorHandler; - - /** Was there an error during parsing or analysis? */ - protected boolean hasError = false; - - /** Generate diagnostics? (vs code) */ - boolean genDiagnostics = false; - - /** Generate DocBook vs code? */ - boolean genDocBook = false; - - /** Generate HTML vs code? */ - boolean genHTML = false; - - /** Current output directory for generated files */ - protected static String outputDir = "."; - - // Grammar input - protected String grammarFile; - transient Reader f = new InputStreamReader(System.in); - // SAS: changed for proper text io - // transient DataInputStream in = null; - - protected static String literalsPrefix = "LITERAL_"; - protected static boolean upperCaseMangledLiterals = false; - - /** C++ file level options */ - protected NameSpace nameSpace = null; - protected String namespaceAntlr = null; - protected String namespaceStd = null; - protected boolean genHashLines = true; - protected boolean noConstructors = false; - - private BitSet cmdLineArgValid = new BitSet(); - - /** Construct a new Tool. */ - public Tool() { - errorHandler = new DefaultToolErrorHandler(this); - } - - public String getGrammarFile() { - return grammarFile; - } - - public boolean hasError() { - return hasError; - } - - public NameSpace getNameSpace() { - return nameSpace; - } - - public String getNamespaceStd() { - return namespaceStd; - } - - public String getNamespaceAntlr() { - return namespaceAntlr; - } - - public boolean getGenHashLines() { - return genHashLines; - } - - public String getLiteralsPrefix() { - return literalsPrefix; - } - - public boolean getUpperCaseMangledLiterals() { - return upperCaseMangledLiterals; - } - - public void setFileLineFormatter(FileLineFormatter formatter) { - FileLineFormatter.setFormatter(formatter); - } - - protected void checkForInvalidArguments(String[] args, BitSet cmdLineArgValid) { - // check for invalid command line args - for (int a = 0; a < args.length; a++) { - if (!cmdLineArgValid.member(a)) { - warning("invalid command-line argument: " + args[a] + "; ignored"); - } - } - } - - /** This example is from the book _Java in a Nutshell_ by David - * Flanagan. Written by David Flanagan. Copyright (c) 1996 - * O'Reilly & Associates. You may study, use, modify, and - * distribute this example for any purpose. This example is - * provided WITHOUT WARRANTY either expressed or implied. */ - public void copyFile(String source_name, String dest_name) - throws IOException { - File source_file = new File(source_name); - File destination_file = new File(dest_name); - Reader source = null; - Writer destination = null; - char[] buffer; - int bytes_read; - - try { - // First make sure the specified source file - // exists, is a file, and is readable. - if (!source_file.exists() || !source_file.isFile()) - throw new FileCopyException("FileCopy: no such source file: " + - source_name); - if (!source_file.canRead()) - throw new FileCopyException("FileCopy: source file " + - "is unreadable: " + source_name); - - // If the destination exists, make sure it is a writeable file - // and ask before overwriting it. If the destination doesn't - // exist, make sure the directory exists and is writeable. - if (destination_file.exists()) { - if (destination_file.isFile()) { - DataInputStream in = new DataInputStream(System.in); - String response; - - if (!destination_file.canWrite()) - throw new FileCopyException("FileCopy: destination " + - "file is unwriteable: " + dest_name); - /* - System.out.print("File " + dest_name + - " already exists. Overwrite? (Y/N): "); - System.out.flush(); - response = in.readLine(); - if (!response.equals("Y") && !response.equals("y")) - throw new FileCopyException("FileCopy: copy cancelled."); - */ - } - else { - throw new FileCopyException("FileCopy: destination " - + "is not a file: " + dest_name); - } - } - else { - File parentdir = parent(destination_file); - if (!parentdir.exists()) - throw new FileCopyException("FileCopy: destination " - + "directory doesn't exist: " + dest_name); - if (!parentdir.canWrite()) - throw new FileCopyException("FileCopy: destination " - + "directory is unwriteable: " + dest_name); - } - - // If we've gotten this far, then everything is okay; we can - // copy the file. - source = new BufferedReader(new FileReader(source_file)); - destination = new BufferedWriter(new FileWriter(destination_file)); - - buffer = new char[1024]; - while (true) { - bytes_read = source.read(buffer, 0, 1024); - if (bytes_read == -1) break; - destination.write(buffer, 0, bytes_read); - } - } - // No matter what happens, always close any streams we've opened. - finally { - if (source != null) { - try { - source.close(); - } - catch (IOException e) { - ; - } - } - if (destination != null) { - try { - destination.close(); - } - catch (IOException e) { - ; - } - } - } - } - - /** Perform processing on the grammar file. Can only be called - * from main() @param args The command-line arguments passed to - * main(). This wrapper does the System.exit for use with command-line. - */ - public void doEverythingWrapper(String[] args) { - int exitCode = doEverything(args); - System.exit(exitCode); - } - - /** Process args and have ANTLR do it's stuff without calling System.exit. - * Just return the result code. Makes it easy for ANT build tool. - */ - public int doEverything(String[] args) { - // run the preprocessor to handle inheritance first. - - // Start preprocessor. This strips generates an argument list - // without -glib options (inside preTool) - persistence.antlr.preprocessor.Tool preTool = new persistence.antlr.preprocessor.Tool(this, args); - - boolean preprocess_ok = preTool.preprocess(); - String[] modifiedArgs = preTool.preprocessedArgList(); - - // process arguments for the Tool - processArguments(modifiedArgs); - if (!preprocess_ok) { - return 1; - } - - f = getGrammarReader(); - - ANTLRLexer lexer = new ANTLRLexer(f); - TokenBuffer tokenBuf = new TokenBuffer(lexer); - LLkAnalyzer analyzer = new LLkAnalyzer(this); - MakeGrammar behavior = new MakeGrammar(this, args, analyzer); - - try { - ANTLRParser p = new ANTLRParser(tokenBuf, behavior, this); - p.setFilename(grammarFile); - p.grammar(); - if (hasError()) { - fatalError("Exiting due to errors."); - } - checkForInvalidArguments(modifiedArgs, cmdLineArgValid); - - // Create the right code generator according to the "language" option - CodeGenerator codeGen; - - // SAS: created getLanguage() method so subclass can override - // (necessary for VAJ interface) - String codeGenClassName = "persistence.antlr." + getLanguage(behavior) + "CodeGenerator"; - try { - Class codeGenClass = Class.forName(codeGenClassName); - codeGen = (CodeGenerator)codeGenClass.newInstance(); - codeGen.setBehavior(behavior); - codeGen.setAnalyzer(analyzer); - codeGen.setTool(this); - codeGen.gen(); - } - catch (ClassNotFoundException cnfe) { - panic("Cannot instantiate code-generator: " + codeGenClassName); - } - catch (InstantiationException ie) { - panic("Cannot instantiate code-generator: " + codeGenClassName); - } - catch (IllegalArgumentException ie) { - panic("Cannot instantiate code-generator: " + codeGenClassName); - } - catch (IllegalAccessException iae) { - panic("code-generator class '" + codeGenClassName + "' is not accessible"); - } - } - catch (RecognitionException pe) { - fatalError("Unhandled parser error: " + pe.getMessage()); - } - catch (TokenStreamException io) { - fatalError("TokenStreamException: " + io.getMessage()); - } - return 0; - } - - /** Issue an error - * @param s The message - */ - public void error(String s) { - hasError = true; - System.err.println("error: " + s); - } - - /** Issue an error with line number information - * @param s The message - * @param file The file that has the error (or null) - * @param line The grammar file line number on which the error occured (or -1) - * @param column The grammar file column number on which the error occured (or -1) - */ - public void error(String s, String file, int line, int column) { - hasError = true; - System.err.println(FileLineFormatter.getFormatter(). - getFormatString(file, line, column) + s); - } - - /** When we are 1.1 compatible... -public static Object factory2 (String p, Object[] initargs) { - Class c; - Object o = null; - try { - int argslen = initargs.length; - Class cl[] = new Class[argslen]; - for (int i=0;i<argslen;i++) { - cl[i] = Class.forName(initargs[i].getClass().getName()); - } - c = Class.forName (p); - Constructor con = c.getConstructor (cl); - o = con.newInstance (initargs); - } catch (Exception e) { - System.err.println ("Can't make a " + p); - } - return o; - } - */ - public Object factory(String p) { - Class c; - Object o = null; - try { - c = Class.forName(p);// get class def - o = c.newInstance(); // make a new one - } - catch (Exception e) { - // either class not found, - // class is interface/abstract, or - // class or initializer is not accessible. - warning("Can't create an object of type " + p); - return null; - } - return o; - } - - public String fileMinusPath(String f) { - String separator = System.getProperty("file.separator"); - int endOfPath = f.lastIndexOf(separator); - if (endOfPath == -1) { - return f; // no path found - } - return f.substring(endOfPath + 1); - } - - /** Determine the language used for this run of ANTLR - * This was made a method so the subclass can override it - */ - public String getLanguage(MakeGrammar behavior) { - if (genDiagnostics) { - return "Diagnostic"; - } - if (genHTML) { - return "HTML"; - } - if (genDocBook) { - return "DocBook"; - } - return behavior.language; - } - - public String getOutputDirectory() { - return outputDir; - } - - private static void help() { - System.err.println("usage: java persistence.antlr.Tool [args] file.g"); - System.err.println(" -o outputDir specify output directory where all output generated."); - System.err.println(" -glib superGrammar specify location of supergrammar file."); - System.err.println(" -debug launch the ParseView debugger upon parser invocation."); - System.err.println(" -html generate a html file from your grammar."); - System.err.println(" -docbook generate a docbook sgml file from your grammar."); - System.err.println(" -diagnostic generate a textfile with diagnostics."); - System.err.println(" -trace have all rules call traceIn/traceOut."); - System.err.println(" -traceLexer have lexer rules call traceIn/traceOut."); - System.err.println(" -traceParser have parser rules call traceIn/traceOut."); - System.err.println(" -traceTreeParser have tree parser rules call traceIn/traceOut."); - System.err.println(" -h|-help|--help this message"); - } - - public static void main(String[] args) { - System.err.println("ANTLR Parser Generator Version " + - Version.project_version + " 1989-2004 jGuru.com"); - version = Version.project_version; - - try { - if (args.length == 0) { - help(); - System.exit(1); - } - for (int i = 0; i < args.length; ++i) { - if (args[i].equals("-h") - || args[i].equals("-help") - || args[i].equals("--help") - ) { - help(); - System.exit(1); - } - } - - Tool theTool = new Tool(); - theTool.doEverything(args); - theTool = null; - } - catch (Exception e) { - System.err.println(System.getProperty("line.separator") + - System.getProperty("line.separator")); - System.err.println("#$%%*&@# internal error: " + e.toString()); - System.err.println("[complain to nearest government official"); - System.err.println(" or send hate-mail to parrt@jguru.com;"); - System.err.println(" please send stack trace with report.]" + - System.getProperty("line.separator")); - e.printStackTrace(); - } -System.exit(0); - } - - /** This method is used by all code generators to create new output - * files. If the outputDir set by -o is not present it will be created here. - */ - public PrintWriter openOutputFile(String f) throws IOException { - if( outputDir != "." ) { - File out_dir = new File(outputDir); - if( ! out_dir.exists() ) - out_dir.mkdirs(); - } - return new PrintWriter(new PreservingFileWriter(outputDir + System.getProperty("file.separator") + f)); - } - - public Reader getGrammarReader() { - Reader f = null; - try { - if (grammarFile != null) { - f = new BufferedReader(new FileReader(grammarFile)); - } - } - catch (IOException e) { - fatalError("cannot open grammar file " + grammarFile); - } - return f; - } - - /** @since 2.7.2 - */ - public void reportException(Exception e, String message) { - System.err.println(message == null ? e.getMessage() - : message + ": " + e.getMessage()); - } - - /** @since 2.7.2 - */ - public void reportProgress(String message) { - System.out.println(message); - } - - /** An error occured that should stop the Tool from doing any work. - * The default implementation currently exits (via - * {@link java.lang.System.exit(int)} after printing an error message to - * <var>stderr</var>. However, the tools should expect that a subclass - * will override this to throw an unchecked exception such as - * {@link java.lang.IllegalStateException} or another subclass of - * {@link java.lang.RuntimeException}. <em>If this method is overriden, - * <strong>it must never return normally</strong>; i.e. it must always - * throw an exception or call System.exit</em>. - * @since 2.7.2 - * @param s The message - */ - public void fatalError(String message) { - System.err.println(message); - System.exit(1); - } - - /** Issue an unknown fatal error. <em>If this method is overriden, - * <strong>it must never return normally</strong>; i.e. it must always - * throw an exception or call System.exit</em>. - * @deprecated as of 2.7.2 use {@link #fatalError(String)}. By default - * this method executes <code>fatalError("panic");</code>. - */ - public void panic() { - fatalError("panic"); - } - - /** Issue a fatal error message. <em>If this method is overriden, - * <strong>it must never return normally</strong>; i.e. it must always - * throw an exception or call System.exit</em>. - * @deprecated as of 2.7.2 use {@link #fatalError(String)}. By defaykt - * this method executes <code>fatalError("panic: " + s);</code>. - * @param s The message - */ - public void panic(String s) { - fatalError("panic: " + s); - } - - // File.getParent() can return null when the file is specified without - // a directory or is in the root directory. - // This method handles those cases. - public File parent(File f) { - String dirname = f.getParent(); - if (dirname == null) { - if (f.isAbsolute()) - return new File(File.separator); - else - return new File(System.getProperty("user.dir")); - } - return new File(dirname); - } - - /** Parse a list such as "f1.g;f2.g;..." and return a Vector - * of the elements. - */ - public static Vector parseSeparatedList(String list, char separator) { - java.util.StringTokenizer st = - new java.util.StringTokenizer(list, String.valueOf(separator)); - Vector v = new Vector(10); - while ( st.hasMoreTokens() ) { - v.appendElement(st.nextToken()); - } - if (v.size() == 0) return null; - return v; - } - - /** given a filename, strip off the directory prefix (if any) - * and return it. Return "./" if f has no dir prefix. - */ - public String pathToFile(String f) { - String separator = System.getProperty("file.separator"); - int endOfPath = f.lastIndexOf(separator); - if (endOfPath == -1) { - // no path, use current directory - return "." + System.getProperty("file.separator"); - } - return f.substring(0, endOfPath + 1); - } - - /** <p>Process the command-line arguments. Can only be called by Tool. - * A bitset is collected of all correct arguments via setArgOk.</p> - * @param args The command-line arguments passed to main() - * - */ - protected void processArguments(String[] args) { - for (int i = 0; i < args.length; i++) { - if (args[i].equals("-diagnostic")) { - genDiagnostics = true; - genHTML = false; - setArgOK(i); - } - else if (args[i].equals("-o")) { - setArgOK(i); - if (i + 1 >= args.length) { - error("missing output directory with -o option; ignoring"); - } - else { - i++; - setOutputDirectory(args[i]); - setArgOK(i); - } - } - else if (args[i].equals("-html")) { - genHTML = true; - genDiagnostics = false; - setArgOK(i); - } - else if (args[i].equals("-docbook")) { - genDocBook = true; - genDiagnostics = false; - setArgOK(i); - } - else { - if (args[i].charAt(0) != '-') { - // Must be the grammar file - grammarFile = args[i]; - setArgOK(i); - } - } - } - } - - public void setArgOK(int i) { - cmdLineArgValid.add(i); - } - - public void setOutputDirectory(String o) { - outputDir = o; - } - - /** Issue an error; used for general tool errors not for grammar stuff - * @param s The message - */ - public void toolError(String s) { - System.err.println("error: " + s); - } - - /** Issue a warning - * @param s the message - */ - public void warning(String s) { - System.err.println("warning: " + s); - } - - /** Issue a warning with line number information - * @param s The message - * @param file The file that has the warning (or null) - * @param line The grammar file line number on which the warning occured (or -1) - * @param column The grammar file line number on which the warning occured (or -1) - */ - public void warning(String s, String file, int line, int column) { - System.err.println(FileLineFormatter.getFormatter(). - getFormatString(file, line, column) + "warning:" + s); - } - - /** Issue a warning with line number information - * @param s The lines of the message - * @param file The file that has the warning - * @param line The grammar file line number on which the warning occured - */ - public void warning(String[] s, String file, int line, int column) { - if (s == null || s.length == 0) { - panic("bad multi-line message to Tool.warning"); - } - System.err.println(FileLineFormatter.getFormatter(). - getFormatString(file, line, column) + "warning:" + s[0]); - for (int i = 1; i < s.length; i++) { - System.err.println(FileLineFormatter.getFormatter(). - getFormatString(file, line, column) + " " + s[i]); - } - } - - /** - * Support C++ & C# namespaces (for now). - * C++: Add a nested namespace name to the current namespace. - * C# : Specify an enclosing namespace for the generated code. - * DAW: David Wagner -- C# support by kunle odutola - */ - public void setNameSpace(String name) { - if (null == nameSpace) - nameSpace = new NameSpace(StringUtils.stripFrontBack(name, "\"", "\"")); - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TreeBlockContext.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeBlockContext.java --- glassfish/entity-persistence/src/java/persistence/antlr/TreeBlockContext.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeBlockContext.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,34 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/**The context needed to add root,child elements to a Tree. There - * is only one alternative (i.e., a list of children). We subclass to - * specialize. MakeGrammar.addElementToCurrentAlt will work correctly - * now for either a block of alts or a Tree child list. - * - * The first time addAlternativeElement is called, it sets the root element - * rather than adding it to one of the alternative lists. Rather than have - * the grammar duplicate the rules for grammar atoms etc... we use the same - * grammar and same refToken behavior etc... We have to special case somewhere - * and here is where we do it. - */ -class TreeBlockContext extends BlockContext { - protected boolean nextElementIsRoot = true; - - - public void addAlternativeElement(AlternativeElement e) { - TreeElement tree = (TreeElement)block; - if (nextElementIsRoot) { - tree.root = (GrammarAtom)e; - nextElementIsRoot = false; - } - else { - super.addAlternativeElement(e); - } - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TreeElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/TreeElement.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,35 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** A TreeElement is a block with one alternative and a root node */ -class TreeElement extends AlternativeBlock { - GrammarAtom root; - - public TreeElement(Grammar g, Token start) { - super(g, start, false); - } - - public void generate() { - grammar.generator.gen(this); - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public String toString() { - String s = " #(" + root; - Alternative a = (Alternative)alternatives.elementAt(0); - AlternativeElement p = a.head; - while (p != null) { - s += p; - p = p.next; - } - return s + " )"; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TreeParser.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeParser.java --- glassfish/entity-persistence/src/java/persistence/antlr/TreeParser.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeParser.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,156 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.NoSuchElementException; - -import persistence.antlr.collections.AST; -import persistence.antlr.collections.impl.BitSet; - -public class TreeParser { - /** The AST Null object; the parsing cursor is set to this when - * it is found to be null. This way, we can test the - * token type of a node without having to have tests for null - * everywhere. - */ - public static ASTNULLType ASTNULL = new ASTNULLType(); - - /** Where did this rule leave off parsing; avoids a return parameter */ - protected AST _retTree; - - /** guessing nesting level; guessing==0 implies not guessing */ - // protected int guessing = 0; - - /** Nesting level of registered handlers */ - // protected int exceptionLevel = 0; - - protected TreeParserSharedInputState inputState; - - /** Table of token type to token names */ - protected String[] tokenNames; - - /** AST return value for a rule is squirreled away here */ - protected AST returnAST; - - /** AST support code; parser and treeparser delegate to this object */ - protected ASTFactory astFactory = new ASTFactory(); - - /** Used to keep track of indentdepth for traceIn/Out */ - protected int traceDepth = 0; - - public TreeParser() { - inputState = new TreeParserSharedInputState(); - } - - /** Get the AST return value squirreled away in the parser */ - public AST getAST() { - return returnAST; - } - - public ASTFactory getASTFactory() { - return astFactory; - } - - public String getTokenName(int num) { - return tokenNames[num]; - } - - public String[] getTokenNames() { - return tokenNames; - } - - protected void match(AST t, int ttype) throws MismatchedTokenException { - //System.out.println("match("+ttype+"); cursor is "+t); - if (t == null || t == ASTNULL || t.getType() != ttype) { - throw new MismatchedTokenException(getTokenNames(), t, ttype, false); - } - } - - /**Make sure current lookahead symbol matches the given set - * Throw an exception upon mismatch, which is catch by either the - * error handler or by the syntactic predicate. - */ - public void match(AST t, BitSet b) throws MismatchedTokenException { - if (t == null || t == ASTNULL || !b.member(t.getType())) { - throw new MismatchedTokenException(getTokenNames(), t, b, false); - } - } - - protected void matchNot(AST t, int ttype) throws MismatchedTokenException { - //System.out.println("match("+ttype+"); cursor is "+t); - if (t == null || t == ASTNULL || t.getType() == ttype) { - throw new MismatchedTokenException(getTokenNames(), t, ttype, true); - } - } - - /** @deprecated as of 2.7.2. This method calls System.exit() and writes - * directly to stderr, which is usually not appropriate when - * a parser is embedded into a larger application. Since the method is - * <code>static</code>, it cannot be overridden to avoid these problems. - * ANTLR no longer uses this method internally or in generated code. - */ - public static void panic() { - System.err.println("TreeWalker: panic"); - System.exit(1); - } - - /** Parser error-reporting function can be overridden in subclass */ - public void reportError(RecognitionException ex) { - System.err.println(ex.toString()); - } - - /** Parser error-reporting function can be overridden in subclass */ - public void reportError(String s) { - System.err.println("error: " + s); - } - - /** Parser warning-reporting function can be overridden in subclass */ - public void reportWarning(String s) { - System.err.println("warning: " + s); - } - - /** Specify an object with support code (shared by - * Parser and TreeParser. Normally, the programmer - * does not play with this, using setASTNodeType instead. - */ - public void setASTFactory(ASTFactory f) { - astFactory = f; - } - - /** Specify the type of node to create during tree building. - * @deprecated since 2.7.2 - */ - public void setASTNodeType(String nodeType) { - setASTNodeClass(nodeType); - } - - /** Specify the type of node to create during tree building */ - public void setASTNodeClass(String nodeType) { - astFactory.setASTNodeType(nodeType); - } - - public void traceIndent() { - for (int i = 0; i < traceDepth; i++) - System.out.print(" "); - } - - public void traceIn(String rname, AST t) { - traceDepth += 1; - traceIndent(); - System.out.println("> " + rname + - "(" + (t != null?t.toString():"null") + ")" + - ((inputState.guessing > 0)?" [guessing]":"")); - } - - public void traceOut(String rname, AST t) { - traceIndent(); - System.out.println("< " + rname + - "(" + (t != null?t.toString():"null") + ")" + - ((inputState.guessing > 0)?" [guessing]":"")); - traceDepth--; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TreeParserSharedInputState.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeParserSharedInputState.java --- glassfish/entity-persistence/src/java/persistence/antlr/TreeParserSharedInputState.java 2006-08-31 00:34:11.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeParserSharedInputState.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,18 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -/** This object contains the data associated with an - * input AST. Multiple parsers - * share a single TreeParserSharedInputState to parse - * the same tree or to have the parser walk multiple - * trees. - */ -public class TreeParserSharedInputState { - /** Are we guessing (guessing>0)? */ - public int guessing = 0; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TreeSpecifierNode.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeSpecifierNode.java --- glassfish/entity-persistence/src/java/persistence/antlr/TreeSpecifierNode.java 2006-08-31 00:34:12.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeSpecifierNode.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,47 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class TreeSpecifierNode { - private TreeSpecifierNode parent = null; - private TreeSpecifierNode firstChild = null; - private TreeSpecifierNode nextSibling = null; - private Token tok; - - - TreeSpecifierNode(Token tok_) { - tok = tok_; - } - - public TreeSpecifierNode getFirstChild() { - return firstChild; - } - - public TreeSpecifierNode getNextSibling() { - return nextSibling; - } - - // Accessors - public TreeSpecifierNode getParent() { - return parent; - } - - public Token getToken() { - return tok; - } - - public void setFirstChild(TreeSpecifierNode child) { - firstChild = child; - child.parent = this; - } - - // Structure-building - public void setNextSibling(TreeSpecifierNode sibling) { - nextSibling = sibling; - sibling.parent = parent; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/TreeWalkerGrammar.java glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeWalkerGrammar.java --- glassfish/entity-persistence/src/java/persistence/antlr/TreeWalkerGrammar.java 2006-08-31 00:34:12.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/TreeWalkerGrammar.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,84 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -import java.util.Hashtable; -import java.util.Enumeration; -import java.io.IOException; - -import persistence.antlr.collections.impl.BitSet; -import persistence.antlr.collections.impl.Vector; - - -/** Parser-specific grammar subclass */ -class TreeWalkerGrammar extends Grammar { - // true for transform mode - protected boolean transform = false; - - - TreeWalkerGrammar(String className_, Tool tool_, String superClass) { - super(className_, tool_, superClass); - } - - /** Top-level call to generate the code for this grammar */ - public void generate() throws IOException { - generator.gen(this); - } - - // Get name of class from which generated parser/lexer inherits - protected String getSuperClass() { - return "TreeParser"; - } - - /**Process command line arguments. - * -trace have all rules call traceIn/traceOut - * -traceParser have parser rules call traceIn/traceOut - * -debug generate debugging output for parser debugger - */ - public void processArguments(String[] args) { - for (int i = 0; i < args.length; i++) { - if (args[i].equals("-trace")) { - traceRules = true; - antlrTool.setArgOK(i); - } - else if (args[i].equals("-traceTreeParser")) { - traceRules = true; - antlrTool.setArgOK(i); - } -// else if ( args[i].equals("-debug") ) { -// debuggingOutput = true; -// superClass = "parseview.DebuggingTreeWalker"; -// Tool.setArgOK(i); -// } - } - } - - /** Set tree parser options */ - public boolean setOption(String key, Token value) { - if (key.equals("buildAST")) { - if (value.getText().equals("true")) { - buildAST = true; - } - else if (value.getText().equals("false")) { - buildAST = false; - } - else { - antlrTool.error("buildAST option must be true or false", getFilename(), value.getLine(), value.getColumn()); - } - return true; - } - if (key.equals("ASTLabelType")) { - super.setOption(key, value); - return true; - } - if (super.setOption(key, value)) { - return true; - } - antlrTool.error("Invalid option: " + key, getFilename(), value.getLine(), value.getColumn()); - return false; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/Version.java glassfish-gil/entity-persistence/src/java/persistence/antlr/Version.java --- glassfish/entity-persistence/src/java/persistence/antlr/Version.java 2006-02-08 22:31:07.000000000 +0100 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/Version.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -package persistence.antlr; - -public class Version { - public static final String version = "2"; - public static final String subversion = "7"; - public static final String patchlevel = "3"; - public static final String datestamp = "20040322"; - public static final String project_version = "2.7.3"; -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/WildcardElement.java glassfish-gil/entity-persistence/src/java/persistence/antlr/WildcardElement.java --- glassfish/entity-persistence/src/java/persistence/antlr/WildcardElement.java 2006-08-31 00:34:12.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/WildcardElement.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,38 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class WildcardElement extends GrammarAtom { - protected String label; - - public WildcardElement(Grammar g, Token t, int autoGenType) { - super(g, t, autoGenType); - line = t.getLine(); - } - - public void generate() { - grammar.generator.gen(this); - } - - public String getLabel() { - return label; - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public void setLabel(String label_) { - label = label_; - } - - public String toString() { - String s = " "; - if (label != null) s += label + ":"; - return s + "."; - } -} diff -Nru glassfish/entity-persistence/src/java/persistence/antlr/ZeroOrMoreBlock.java glassfish-gil/entity-persistence/src/java/persistence/antlr/ZeroOrMoreBlock.java --- glassfish/entity-persistence/src/java/persistence/antlr/ZeroOrMoreBlock.java 2006-08-31 00:34:12.000000000 +0200 +++ glassfish-gil/entity-persistence/src/java/persistence/antlr/ZeroOrMoreBlock.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,30 +0,0 @@ -package persistence.antlr; - -/* ANTLR Translator Generator - * Project led by Terence Parr at http://www.jGuru.com - * Software rights: http://www.antlr.org/license.html - * - */ - -class ZeroOrMoreBlock extends BlockWithImpliedExitPath { - - public ZeroOrMoreBlock(Grammar g) { - super(g); - } - - public ZeroOrMoreBlock(Grammar g, Token start) { - super(g, start); - } - - public void generate() { - grammar.generator.gen(this); - } - - public Lookahead look(int k) { - return grammar.theLLkAnalyzer.look(k, this); - } - - public String toString() { - return super.toString() + "*"; - } -} diff -Nru glassfish/entity-persistence/toplink-essentials-agent.pom glassfish-gil/entity-persistence/toplink-essentials-agent.pom --- glassfish/entity-persistence/toplink-essentials-agent.pom 2007-02-16 21:41:00.000000000 +0100 +++ glassfish-gil/entity-persistence/toplink-essentials-agent.pom 2012-05-24 17:50:02.000000000 +0200 @@ -3,4 +3,11 @@ <groupId>toplink.essentials</groupId> <artifactId>toplink-essentials-agent</artifactId> <version>@VERSION@</version> + <dependencies> + <dependency> + <groupId>toplink.essentials</groupId> + <artifactId>toplink-essentials</artifactId> + <version>@VERSION@</version> + </dependency> + </dependencies> </project> diff -Nru glassfish/entity-persistence/toplink-essentials.pom glassfish-gil/entity-persistence/toplink-essentials.pom --- glassfish/entity-persistence/toplink-essentials.pom 2007-02-16 21:41:00.000000000 +0100 +++ glassfish-gil/entity-persistence/toplink-essentials.pom 2012-05-24 17:49:57.000000000 +0200 @@ -9,5 +9,10 @@ <artifactId>persistence-api</artifactId> <version>1.0b</version> </dependency> + <dependency> + <groupId>antlr</groupId> + <artifactId>antlr</artifactId> + <version>2.7.6</version> + </dependency> </dependencies> </project>