python– 空生产对PEG的作用是什么?

python– 空生产对PEG的作用是什么?,第1张

概述空生产规则nonterminal -> epsilon 在lex-yacc LR自下而上解析器生成器(例如PLY)中很有用.在什么情况下应该在PEG解析器中使用Empty产品,例如pyparsing?最佳答案BNF经常使用空作为替代,有效地使整个表达式可选:leading_sign ::= + | - | empty integer ::= leadi

空生产规则

nonterminal -> epsilon

在lex-yacc LR自下而上解析器生成器(例如PLY)中很有用.

在什么情况下应该在PEG解析器中使用Empty产品,例如pyparsing?

最佳答案BNF经常使用空作为替代,有效地使整个表达式可选:

leading_sign ::= + | - | emptyinteger ::= leading_sign digit...

这在pyparsing中是不必要的,因为pyparsing包含Optional类:

# no empty requiredleading_sign = Optional(oneOf("+ -"))integer = leading_sign + Word(nums)

对于某些特定于pyparsing的目的,Empty确实派上用场了:

跳过空格 – pyparsing中的某些元素在开始解析之前不会跳过空格,例如Charsnotin和restOfline.如果你有一个简单的键值输入,其中键是带引号的字符串,值是引用字符串之后的所有内容,如下所示:

"Key 1" value of Key 1"Key 2" value of Key 2

将其定义为:

quotedString + restOfline

会给你“Key 1的值”和“Key 2的值”作为值. Pyparsing的空白会跳过空格,因此将语法更改为:

quotedString + empty + restOfline

将为您提供没有前导空格的值.

激活特定位置的解析 *** 作 – 我使用empty作为originalTextFor中生成的表达式的一部分来放入开始和结束位置标记.空的解析 *** 作用它们的位置值替换它们,然后originalTextFor的解析 *** 作使用这些位置从输入字符串中切割原始文本.

小心使用空. empty始终匹配,但从不提前解析位置(跳过空格除外).所以:

OneOrMore(empty)

将是一个无限循环.

empty | "A" | "B" | "C"

因为MatchFirsts短路,所以永远不会匹配任何非空的替代品. 总结

以上是内存溢出为你收集整理的python – 空生产对PEG的作用是什么?全部内容,希望文章能够帮你解决python – 空生产对PEG的作用是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存