首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyParsing解析变换

PyParsing解析变换
EN

Stack Overflow用户
提问于 2017-08-29 16:41:25
回答 1查看 121关注 0票数 1

我正在使用PyParsing为我的语言(N)制作一个解析器。语法如下:(name, type, value, next),其中next可以包含该语法本身的实例。我的问题是我得到了一个TypeError: unsupported operand type(s) for |: 'str' and 'str'错误。我看到了支持交互的PyParsing示例,如BNF表示法。

代码:

代码语言:javascript
复制
from pyparsing import *

leftcol = "["
rightcol = "]"
leftgro = "("
rightgro = ")"
sep = ","+ZeroOrMore(" ")
string = QuotedString('"')
intdigit = ("0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9")
number = intdigit + ZeroOrMore(intdigit)
none = Word("none")
value = number | string | collection
collection = leftcol + (value + ZeroOrMore(sep + value)) + rightcol
parser = leftgro + string + sep + string + sep + (value) + sep + (parser | none) + rightgro

print(parser.parseString("""

"""))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-29 19:44:44

"0"是一个普通的Python,而不是一个ParseElement,并且字符串没有任何|操作符的实现。要创建ParseElement,可以使用(例如) Literal("0")。用于|ParseElement操作符确实接受字符串参数,并隐式地将它们转换为Literal,这样您就可以编写:

代码语言:javascript
复制
intdigit = Literal("0") | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

但是一个更好的解决方案是更直接的:

代码语言:javascript
复制
number = Word("0123456789")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45944304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档