Lex上的新行出错 - Python

时间:2017-10-15 08:39:20

标签: python grammar lexical-analysis ply

我的PLY构建的词法分析器出了问题。

当我将for循环的代码传递给我的程序时,if(isset($_GET['omron_coupon_code'])){ $omron_coupon_code=$_GET['omron_coupon_code']; mysql_connect("localhost","root","") or die(mysql_error()); mysql_select_db("healcrdbxz"); $sql2=mysql_query("select * from coupon_master WHERE coupon_code='$omron_coupon_code'") or die(mysql_error()); //echo $sql2; if(mysql_num_rows($sql2)>0) { foreach ($_SESSION['cart'] as $value) { $sql32=mysql_query("select * from package_price WHERE package_id='".$value['package_id']."' and branch_id='".$value['branch']."'") or die(mysql_error()); while($packages32 = mysql_fetch_array($sql32)) { extract($packages32); $total_package_price=$offer_price; echo $total_package_price; } } } else echo "Invalid coupon"; } {之间的换行符无法识别。相反,即使存在}函数,也会报告错误。

该计划的输入是:

t_newline(t)

并且,程序的输出是

for(int i = 0 ; i < 5 ; i++){
}

代码是:

 1 . analizadorLexico.py
 2 . analizadorSintactico.py
 3 . parser.out
 4 . parsetab.py
 5 . prueba1.txt
 6 . cpp.py
 7 . ctokens.py
 8 . lex.py
 9 . yacc.py
 10 . ygen.py
 11 . __init__.py
 12 . lex.cpython-36.pyc
 13 . yacc.cpython-36.pyc
 14 . __init__.cpython-36.pyc
 15 . analizadorLexico.cpython-36.pyc
 16 . parsetab.cpython-36.pyc

File number: 5
5
Escogido el archivoprueba1.txt
LexToken(FOR,'FOR',1,0)
LexToken(PA,'(',1,3)
LexToken(INT,'INT',1,4)
LexToken(ID,'i',1,8)
LexToken(ASSIGN,'=',1,10)
LexToken(NUMBER,0,1,12)
LexToken(END,';',1,14)
LexToken(ID,'i',1,16)
LexToken(LT,'<',1,18)
LexToken(NUMBER,5,1,20)
LexToken(END,';',1,22)
LexToken(ID,'i',1,24)
LexToken(PLUS,'+',1,25)
LexToken(PLUS,'+',1,26)
LexToken(PC,')',1,27)
LexToken(CA,'{',1,28)
Error in '
'
LexToken(CC,'}',2,31)

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我认为最可能的解释是该错误是由Windows行结束\r\n引起的。 \r不在您要忽略的字符列表中,但没有规则处理它,因此会触发错误。

如果这是问题,最简单的解决方案是将\r添加到t_ignore。 (我认为同时拥有t_ignoret_ignore_WHITESPACES没有任何意义,因此我建议你删除其中一个。)

但是,我无法重现您提供的错误输出。您帖子中的代码似乎没有任何可能输出字符串Error in '...的函数,因此这可能只是粘贴代码的不同版本的输出结果。