我想创建(只是为了好玩)一个基于 LARK 的自定义 HTML 解析器。我希望它像浏览器中的解析器一样宽容,所以我为字符串定义了一个包罗万象的终端。我唯一的问题是,即使我已经定义了
STRING: /.+/
然后将其作为
start
的选项,它会错误地说,例如处理规则“STRING”时,{
尚未关闭,或者处理规则“STRING”时遇到未终止的字符串文字。将加号放在正则表达式的外部不会以任何方式改变行为。
我刚刚在我的变压器中发现了问题。
语法正确地将其捕获为“STRING”,但随后我的转换器只是对其进行
eval()
解释转义序列并删除引号。因为 Python 的 eval()
遵循 Python 的而不是我的语法,所以它引发了错误。在变压器中以不同的方式处理字符串可以消除错误。