2024-06-01 14:19:25 发布
网友
我试图用python解析以下源语言
print("hello")
我现在做的是
我希望它能打印Hello。但我发现了错误
Hello
Syntax err at 'print'
谁能帮我,我犯了什么错误? 谢谢
下面列出了您的代码中的所有内容:
导入语句。您没有正确导入模块。我不知道你是怎么做到的,但是导入这些模块的正确方法是
import ply.lex as lex import ply.yacc as yacc
指定了PRINT令牌,但没有为其定义规则。定义规则如下:
PRINT
print语句的语法规则应该指定标记名,而不是标记匹配的内容。在
def p_print(p): r'statement : PRINT LPAREN STRING RPAREN' ...
删除了reserved结构,它似乎没有任何作用。
reserved
修复这些错误后,我们有:
import ply.lex as lex import ply.yacc as yacc tokens =('LPAREN','RPAREN','STRING','PRINT') t_LPAREN ='\(' t_RPAREN = '\)' t_STRING = r'\".*?\"' t_PRINT = r'print' t_ignore = " \t" def p_print(p): 'statement : PRINT LPAREN STRING RPAREN' print(p[3]) def p_error(p): print("Syntax error at %s"%p.value) lex.lex() yacc.yacc() s ='print("Hello")' yacc.parse(s)
输出:
WARNING: No t_error rule is defined "Hello"
现在还可以,但是请为较大的程序定义一个t_error规则。在
t_error
下面列出了您的代码中的所有内容:
导入语句。您没有正确导入模块。我不知道你是怎么做到的,但是导入这些模块的正确方法是
指定了
^{2美元PRINT
令牌,但没有为其定义规则。定义规则如下:print语句的语法规则应该指定标记名,而不是标记匹配的内容。在
删除了
reserved
结构,它似乎没有任何作用。修复这些错误后,我们有:
输出:
现在还可以,但是请为较大的程序定义一个
t_error
规则。在相关问题 更多 >
编程相关推荐