python – 空生产对PEG的作用是什么?
空生产规则
在lex-yacc LR自下而上解析器生成器(例如PLY)中很有用. 在什么情况下应该在PEG解析器中使用Empty产品,例如pyparsing? 最佳答案
BNF经常使用空作为替代,有效地使整个表达式可选:
这在pyparsing中是不必要的,因为pyparsing包含Optional类:
对于某些特定于pyparsing的目的,Empty确实派上用场了: 跳过空格 – pyparsing中的某些元素在开始解析之前不会跳过空格,例如CharsNotIn和restOfLine.如果你有一个简单的键值输入,其中键是带引号的字符串,值是引用字符串之后的所有内容,如下所示:
将其定义为:
会给你“Key 1的值”和“Key 2的值”作为值. Pyparsing的空白会跳过空格,因此将语法更改为:
将为您提供没有前导空格的值. 激活特定位置的解析操作 – 我使用empty作为originalTextFor中生成的表达式的一部分来放入开始和结束位置标记.空的解析操作用它们的位置值替换它们,然后originalTextFor的解析操作使用这些位置从输入字符串中切割原始文本. 小心使用空. empty始终匹配,但从不提前解析位置(跳过空格除外).所以:
将是一个无限循环.
因为MatchFirsts短路,所以永远不会匹配任何非空的替代品. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |