[antlr-interest] Re: generated code not compilable.
Terence Parr
parrt at jguru.com
Tue Oct 29 10:17:12 PST 2002
Oh. That's an easy one. Use latest download; 2.7.2 fixes that problem.
Ter
On Tuesday, October 29, 2002, at 09:55 AM, praveen_c wrote:
> Here is the nextToken() method that's generated. I numbered each
> line. Line 14 is invalid, the word "true" must be surrounded by ().
> Also line 23 gets an illegal start of the expression. Let me know if
> you need more info. There are a couple more identical things.
>
> 1 public Token nextToken() throws TokenStreamException {
> 2 Token theRetToken=null;
> 3 tryAgain:
> 4 for (;;) {
> 5 Token _token = null;
> 6 int _ttype = Token.INVALID_TYPE;
> 7 resetText();
> 8 try { // for char stream error handling
> 9 try { // for lexical error handling
> 10 if ((LA(1)=='<') && (LA(2)=='@')) {
> 11 mTAG(true);
> 12 theRetToken=_returnToken;
> 13 }
> 14 else if true {
> 15 mTEXT(true);
> 16 theRetToken=_returnToken;
> 17 }
> 18 else {
> 19 if (LA(1)==EOF_CHAR) {uponEOF
> (); _returnToken = makeToken(Token.EOF_TYPE);}
> 20 else {throw new
> NoViableAltForCharException((char)LA(1), getFilename(), getLine());}
> 21 }
> 22
> 23 if ( _returnToken==null ) continue
> tryAgain; // found SKIP token
> 24 _ttype = _returnToken.getType();
> 25 _returnToken.setType(_ttype);
> 26 return _returnToken;
> 27 }
> 28 catch (RecognitionException e) {
> 29 throw new
> TokenStreamRecognitionException(e);
> 30 }
> 31 }
> 32 catch (CharStreamException cse) {
> 33 if ( cse instanceof CharStreamIOException ) {
> 34 throw new TokenStreamIOException
> (((CharStreamIOException)cse).io);
> 35 }
> 36 else {
> 37 throw new TokenStreamException
> (cse.getMessage());
> 38 }
> 39 }
> 40 }
> 41 }
>
>
> --- In antlr-interest at y..., Terence Parr <parrt at j...> wrote:
>> What is the compilation error and where?
>>
>> Terence
>>
>> On Tuesday, October 29, 2002, at 08:36 AM, praveen_c wrote:
>>
>>> For some reason when I use the charVocabulary option in the
> following
>>> grammar, I get code that CANNOT be compiled. When I remove it, I
> get
>>> compilable code. Is there something wrong in the grammar?
>>>
>>> Any help would be greatly appreciated. Comments on the grammar are
>>> welcome.
>>>
>>> ---------------------------GRAMMAR FILE---------------------------
> ----
>>> header { package tom; }
>>>
>>> class SimpleParser extends Parser;
>>>
>>> template: (TEXT | TAG)+;
>>>
>>> class SimpleLexer extends Lexer;
>>> options {
>>> k=2;
>>> testLiterals=false;
>>> charVocabulary = '\3'..'\377' | '\u1000'..'\u1fff';
>>> }
>>>
>>> {
>>> public boolean isEndOfText() throws antlr.CharStreamException
> {
>>> char char1 = LA(1);
>>> if (char1 == '<') {
>>> char char2 = LA(2);
>>> if (char2 == '@') { // "<@"
>>> return true;
>>> } else if (char2 == '/') { // "</"
>>> //ignore any white space
>>> int i = forwardToNonWhiteSpace(3);
>>>
>>> if (
>>> (LA(i++) == 'l') &&
>>> (LA(i++) == 'o') &&
>>> (LA(i++) == 'o') &&
>>> (LA(i++) == 'p')
>>> ) {
>>>
>>> //match whitespace.
>>> i = forwardToNonWhiteSpace(i);
>>>
>>> if (LA(i++) == '>') { // "</loop>"
>>> return true;
>>> } else {
>>> return false;
>>> }
>>> } else {
>>> return false;
>>> }
>>> } else { // it began with '<' but doesn't have
> anything
>>> meaningful after that.
>>> return false;
>>> }
>>> } else if (char1 == EOF_CHAR) { //End-of-file reached,
> can't
>>> proceed further.
>>> return true;
>>> } else { //doesn't begin with '<', so it's a normal char,
> not
>>> a special one.
>>> return false;
>>> }
>>> }
>>>
>>> public int forwardToNonWhiteSpace(int i) throws
>>> antlr.CharStreamException {
>>> char c = LA(i);
>>> while ( (c==' ') || (c == '\t') || (c == '\n') ) {
>>> i++;
>>> c = LA(i);
>>> }
>>> return i;
>>> }
>>> }
>>>
>>> protected
>>> WS : ( ' ' | '\t' | '\n' )* ;
>>>
>>> TAG: (options
>>> {
>>> generateAmbigWarnings=false;
>>> }:
>>> "<@"
>>> (
>>> ("include") => INCLUDE { $setType(INCLUDE); }
> |
>>> ("loop") => LOOP { $setType(LOOP); } |
>>> TEXT
>>> )
>>> '>'
>>> );
>>>
>>> protected
>>> INCLUDE: "include" ;
>>>
>>> protected
>>> LOOP: "loop" ;
>>>
>>> protected
>>> END_LOOP: "</" LOOP '>';
>>>
>>> TEXT: (END_LOOP) => END_LOOP { $setType(END_LOOP); } |
>>> (
>>> options
>>> {
>>> generateAmbigWarnings=false;
>>> }:
>>> ( { !isEndOfText() }? . )*
>>> );
>>>
>>>
>>>
>>>
>>> Your use of Yahoo! Groups is subject to
>>> http://docs.yahoo.com/info/terms/
>>>
>>>
>> --
>> Co-founder, http://www.jguru.com
>> Creator, ANTLR Parser Generator: http://www.antlr.org
>> Lecturer in Comp. Sci., University of San Francisco
>
>
>
>
> Your use of Yahoo! Groups is subject to
> http://docs.yahoo.com/info/terms/
>
>
--
Co-founder, http://www.jguru.com
Creator, ANTLR Parser Generator: http://www.antlr.org
Lecturer in Comp. Sci., University of San Francisco
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list