Parsing 输入antlr没有可行的替代方案

Parsing 输入antlr没有可行的替代方案,parsing,python-3.x,input,antlr,lexer,Parsing,Python 3.x,Input,Antlr,Lexer,我必须使用ANTLR为Python做一个lexer和一个解析器,但是当我使用这个输入运行时: print 99出现此错误:“输入print99时没有可行的替代方案”。 为什么把这些放在一起?? 我真的需要你的帮助。 我什么都试过了,但我不知道哪里出了问题 ***This is my Lexer:*** lexer grammar LexerPython; options { language=Python3; } fragment L : [a-z]; fragment D : [

我必须使用ANTLR为Python做一个lexer和一个解析器,但是当我使用这个输入运行时: 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 ;
***这是我的Lexer:***
词缀语法;
选择权{
语言=蟒蛇3;
}
片段L:[a-z];
片段D:[0-9];
数字:“0”|([1-9]D*);
ID:L(L | D)*;
//帕拉布拉斯酒店
DEF:‘DEF’;
如果:‘如果’;
ELSE:‘ELSE’;
//整数
//串
蓝:‘蓝’;
RETURN:‘RETURN’;
打印:“打印”;
WHILE:‘WHILE’;
缩进:'\t';
DEDENT:“DEDENT”;
换行符:'\r\n';
//SIMBOLOS NUMERICOS
苏玛:“+”;
RESTA:'-';
乘法:'*';
分部:“/”;
市长:“>”;
MENOR:'=';

MENOR_IGUAL:'您的解析器不处理我可以看到的命令之间的空格。你只是跳过了所有空格,但是空格在命令之间很重要。我是怎么做到的??像这样,例如:printstation:PRINT“”表达式;像这样??它可能像:
ifstatement:IF-WS-expression-DOS\u-PUNTOS-sequence-WS-ELSE-DOS\u-PUNTOS-sequence。您已经定义了
WS
,所以不要跳过它,只需调整语法即可。你可能还需要一个可选的空格。不像你说的那样。抛出这个错误:在输入“print”时没有可行的替代方案。我的输入是打印“hello”,如果您自己编写了这段代码,您应该可以调整它以考虑空格。你自己解决吧。我不会为你解决这个问题;我在提建议。另一方面,因为这是针对Python3的,所以需要括号。例如:
print(“hello”)