无法使用 ideone 构建 PLY 词法分析器
Cannot build PLY lexer using ideone
我正在尝试为稍后要问的问题创建一个 MCVE,但我在使用在线 IDE 时遇到了问题,ideone。
下面 link 中的代码如果我 运行 在我的本地 Python 2.7 解释器中工作得很好:
然而,在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
什么会导致此错误?
非常感谢。
推测 ideone 使用 -OO
优化设置,删除所有文档字符串。因此,lex
模块在构建扫描器时无法找到文档字符串。在解析器中也会遇到类似的问题。
这是一个丑陋的解决方法:http://ideone.com/H5rxXK
PLY manual (see the next section -- 8. Using Python's Optimized Mode -- after the link; the "correct" link doesn't currently work because of an HTML error in the PLY manual). Unfortunately, it produces a different error 推荐了一个干净的解决方法,大概是 ideone 的文件系统虚拟化的结果。
我正在尝试为稍后要问的问题创建一个 MCVE,但我在使用在线 IDE 时遇到了问题,ideone。
下面 link 中的代码如果我 运行 在我的本地 Python 2.7 解释器中工作得很好:
然而,在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
什么会导致此错误?
非常感谢。
推测 ideone 使用 -OO
优化设置,删除所有文档字符串。因此,lex
模块在构建扫描器时无法找到文档字符串。在解析器中也会遇到类似的问题。
这是一个丑陋的解决方法:http://ideone.com/H5rxXK
PLY manual (see the next section -- 8. Using Python's Optimized Mode -- after the link; the "correct" link doesn't currently work because of an HTML error in the PLY manual). Unfortunately, it produces a different error 推荐了一个干净的解决方法,大概是 ideone 的文件系统虚拟化的结果。