无法使用ideone构建PLY词法分析器

时间:2016-03-30 20:23:35

标签: python lex ply

我正在尝试为我稍后会问的一个问题创建一个MCVE,但是我遇到了一个我正在尝试使用的在线IDE的问题,想法。

如果我在我的本地Python 2.7解释器中运行它,下面链接中的代码可以正常工作:

http://ideone.com/DpALEU

然而,在ideone上,我得到的错误是:

ERROR: prog.py:282: No regular expression defined for rule 't_DIRECTIVE'
ERROR: prog.py:286: No regular expression defined for rule 't_REFERENCE'
ERROR: prog.py:291: No regular expression defined for rule 't_UNAME'
ERROR: prog.py:296: No regular expression defined for rule 't_USTRING'
ERROR: prog.py:301: No regular expression defined for rule 't_UFLOAT'
ERROR: prog.py:307: No regular expression defined for rule 't_HEX'
ERROR: prog.py:314: No regular expression defined for rule 't_INTEGER'
ERROR: prog.py:320: No regular expression defined for rule 't_COMMENT'
ERROR: prog.py:324: No regular expression defined for rule 't_ID'
ERROR: prog.py:330: No regular expression defined for rule 't_newline'
Traceback (most recent call last):
  File "prog.py", line 338, in <module>
  File "/usr/lib/python2.7/dist-packages/ply/lex.py", line 901, in lex
    raise SyntaxError("Can't build lexer")
SyntaxError: Can't build lexer

但是,我正在有效地定义我的规则。例如:

def t_REFERENCE(t):
    r'([a-zA-Z0-9_\-]+)\s*\'([a-zA-Z0-9_\-\.]+)\''
    return t

导致此错误的原因是什么?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

推测ideone使用-OO优化设置,该设置会删除所有文档字符串。因此,lex模块在​​想要构建扫描程序时无法找到文档字符串。解析器中会遇到类似的问题。

这是一个丑陋的解决方法:http://ideone.com/H5rxXK

PLY manual推荐一个干净的解决方法(参见下一节 - 8.使用Python的优化模式 - 链接后;“正确”链接不由于PLY手册中的HTML错误,目前正在工作。不幸的是,它产生a different error,可能是ideone文件系统虚拟化的结果。