函数声明的PLY分析错误

2024-06-01 14:19:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python解析以下源语言

print("hello")

我现在做的是

^{pr2}$

我希望它能打印Hello。但我发现了错误

Syntax err at 'print'

谁能帮我,我犯了什么错误? 谢谢


Tags: hello错误aterrprintsyntax源语言pr2
1条回答
网友
1楼 · 发布于 2024-06-01 14:19:25

下面列出了您的代码中的所有内容:

  1. 导入语句。您没有正确导入模块。我不知道你是怎么做到的,但是导入这些模块的正确方法是

    import ply.lex as lex
    import ply.yacc as yacc
    
  2. 指定了PRINT令牌,但没有为其定义规则。定义规则如下:

    ^{2美元
  3. print语句的语法规则应该指定标记名,而不是标记匹配的内容。在

    def p_print(p):
      r'statement : PRINT LPAREN STRING RPAREN'
      ...
    
  4. 删除了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规则。在

相关问题 更多 >