输入antlr没有可行的选择

时间:2015-03-24 19:58:31

标签: parsing python-3.x input antlr lexer

我必须使用ANTLR为Python执行词法分析器和解析器,但是当我使用此输入运行时: print 99出现此错误:"输入print99"没有可行的替代方案。 为什么要把所有的一起 我真的需要你的帮助。 我尝试了一切,我不知道什么是错的。

***This is my Lexer:***

lexer grammar LexerPython;

options {
    language=Python3;
}

fragment L : [a-z];
fragment D : [0-9];
NUM  : '0' | ([1-9] D*);
ID   :  L (L|D)*;

//PALABRAS RESERVADAS
DEF : 'def';

IF : 'if' ;

ELSE : 'else' ;

//INTEGER

//STRING

LEN : 'len' ;

RETURN : 'return' ;

PRINT : 'print' ;

WHILE : 'while' ;

INDENT : '\t' ;

DEDENT : 'dedent' ;

NEWLINE : '\r\n' ;

//SIMBOLOS NUMERICOS

SUMA : '+' ;

RESTA : '-' ;

MULTIPLICACION : '*' ;

DIVISION : '/' ;

MAYOR : '>' ;

MENOR : '<' ;

MAYOR_IGUAL : '>=' ;

MENOR_IGUAL : '<=' ;

IGUAL : '=' ;

IGUAL_IGUAL : '==' ;

//OTROS SIMBOLOS

COMA : ',' ;

DOS_PUNTOS : ':' ;

PARENTESIS_ABIERTO : '(' ;

PARENTESIS_CERRADO : ')' ;

CORCHETE_ABIERTO : '[' ;

CORCHETE_CERRADO : ']' ;

WS : ' '+ -> skip ;


***And this is my PARSER:***

program : statement (statement)* ;

statement : defstatement | ifstatement | returnstatement | printstatement | whilestatement | assignstatement | functioncallstatement ;

defstatement : DEF ID PARENTESIS_ABIERTO arglist PARENTESIS_CERRADO DOS_PUNTOS sequence ;

arglist : ID  (COMA ID)* ;

moreargs : ID ;

ifstatement : IF expression DOS_PUNTOS sequence ELSE DOS_PUNTOS sequence ;

whilestatement : WHILE expression DOS_PUNTOS sequence ;

returnstatement : RETURN expression NEWLINE ;

printstatement : PRINT expression NEWLINE ;

assignstatement : ID IGUAL expression NEWLINE ;

functioncallstatement : primitiveexpression PARENTESIS_ABIERTO expressionlist PARENTESIS_CERRADO NEWLINE ;

sequence : NEWLINE INDENT morestatements DEDENT ;

morestatements : statement  (statement)* ; 

expression : additionexpression comparison ;

comparison : (MENOR|MAYOR|MENOR_IGUAL|MAYOR_IGUAL|IGUAL_IGUAL) 

additionexpression (comparison)* ;

additionexpression : multiplicationexpression additionfactor ;

additionfactor : (SUMA|RESTA) multiplicationexpression (additionfactor)* ;

multiplicationexpression : elementexpression multiplicationfactor ;

multiplicationfactor : (MULTIPLICACION|DIVISION) elementexpression (multiplicationfactor)* ;

elementexpression : primitiveexpression elementaccess ;

elementaccess : CORCHETE_ABIERTO expression CORCHETE_CERRADO  (elementaccess)* ;

//functioncallexpression : primitiveexpression ( expressionlist ) ;

expressionlist : expression (COMA expression)* ;

moreexpressions : expression ;

primitiveexpression : NUM | ID | PARENTESIS_ABIERTO expression PARENTESIS_CERRADO | listexpression | LEN PARENTESIS_ABIERTO expression PARENTESIS_CERRADO | /*functioncallexpression*/ ;

listexpression : CORCHETE_ABIERTO expressionlist CORCHETE_CERRADO ;

0 个答案:

没有答案