[antlr-interest] Translating LR to LL - Infinite recurrsion and Non-determinism error

Sharon Li hushlee83 at yahoo.com.sg
Mon Feb 10 16:42:38 PST 2003


Hi can someone pls help me solve this non-determinism error? I'm trying to translate LR to LL, encountered many infinite recurrsion and non-determinism errors. Any suggestions or advice?

class LParser extends Parser;

options { k=4; }

lsys : ("Lystem"|"lsystem") COLON (INTEGER) ;

ring : ("R"|"r") "ing" ("L"|"l") "system";
seed : ("Seed"|"seed") COLON INTEGER;
dLength : ("D"|"d") "erivation" ("L"|"l") "length" COLON INTEGER;
ignore : ("Ignore"|"ignore") COLON ;
consider : ("Consider"|"consider") COLON ;

operators : (OR | AND | EQUAL | NOTEQUAL | LT | GT | LE | GE | PLUS | MINUS | TIMES | DIVIDE | REM | POW) ; 

//lValue : "&" (NAME) ;
    
value : (INTEGER) ;

arrayRef: LBRACK (expression) RBRACK ;

arrayRefs : (arrayRef)+ ;

name : NAME (arrayRefs)* ; 

parameters : expression (COMMA expression)* ; 

functionName: "tan" | "sin" | "cos" | "atan" | "asin" | "acos" | "ran" | "nran" | "bran" | "biran" 
      | "srand" | "exp" | "log" | "floor" | "ceil" | "trunc" | "fabs" | "sign" | "inblob" | "stop"
      | "sqrt" | "printf" | "fprintf" | "fopen" | "fclose" | "fflush" | "fscanf" | "func" 
      | "play" | "funcX" | "funcY" | "funcZ" | "lfunc"
      ;
      
function : functionName LPAREN parameters RPAREN ;

expression: MINUS expression
     | NOT expression
     | (expression ((operators) | (question expression COLON)) expression) 
     | LPAREN expression RPAREN
     | "&" (NAME)
     | function
     | name
     | INTEGER
     ;
     
arrayDim : LBRACK expression RBRACK ;
arrayDims : (arrayDim)+;
arrayInitBlock : LBRACE parameters RBRACE ;
arrayDef: NAME arrayDims ("=" arrayInitBlock)* ; 
arrayDefs : (arrayDef) (COMMA arrayDef)* ;
arrayDefStatement : "array" arrayDefs SEMI ;

externalDef : (NAME)(arrayDims)* ("=" arrayInitBlock)* ;      
externalDefs : (externalDef) (COMMA externalDef)* ;
externalDefStatement : "external" externalDefs SEMI ;

defStatement: arrayDefStatement
      | externalDefStatement ;
defStatements : (defStatement)+;

defineBlock : LBRACE defStatements RBRACE;

defines : ("Define"|"define") COLON defineBlock;

block : LBRACE (expression) RBRACE;

startBlock : ("Start"|"start") COLON block;

endBlock : ("End"|"end") COLON block;

/*******lexer class *******************************/

class LLexer extends Lexer;

options{
 charVocabulary='\3'..'\377';
 k = 4;
}

protected ALPHA  : ( 'a'..'z' | 'A'..'Z' ); 

protected DIGIT : ('0'..'9') ;

//EXP : ('E'|'e') (SIGN)? (DIGIT)+;

INTEGER: (DIGIT)+ ;

NAME : (ALPHA) (ALPHA|DIGIT|UNDERSCORE)* ;

OR     : "||";
AND     : "&&";
EQUAL    : "==";
NOTEQUAL  : "!=";
GT     : '>';
LT     : '<';
LE     : "<=";
GE     : ">=";
PLUS     : '+'; 
MINUS    : '-';
DIVIDE   : '/';
TIMES    : '*';
POW     : '^';
REM     : '%';

/***/

COLON    : ':';
DOT     : '.';
COMMA    : ',';
SEMI    : ';';
QUESTION  : '?';
NOT     : '!';
UNDERSCORE : '_';
LPAREN   : '(';
RPAREN   : ')';
LBRACK   : '[';
RBRACK   : ']';
LCURLY   : '{';
RCURLY   : '}';
HEX     : '#'; 


 Yahoo! Travel
- Valentine surprise deals. Book now!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20030211/4cb228e7/attachment.html


More information about the antlr-interest mailing list