我的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)
感谢您的帮助
答案 0 :(得分:0)
我认为最可能的解释是该错误是由Windows行结束\r\n
引起的。 \r
不在您要忽略的字符列表中,但没有规则处理它,因此会触发错误。
如果这是问题,最简单的解决方案是将\r
添加到t_ignore
。 (我认为同时拥有t_ignore
和t_ignore_WHITESPACES
没有任何意义,因此我建议你删除其中一个。)
但是,我无法重现您提供的错误输出。您帖子中的代码似乎没有任何可能输出字符串Error in '...
的函数,因此这可能只是粘贴代码的不同版本的输出结果。