Python 我的EBNF逻辑错误吗?

Python 我的EBNF逻辑错误吗?,python,parsing,ebnf,Python,Parsing,Ebnf,我在Python程序中使用它来解析一些相当简单的语言学。它应该能够解析以下示例文本(每行分别): 我已经为上述内容编写了以下EBNF,但解析器一直在困扰我,即使是在“d6”的简单情况下: 我开始怀疑我的EBNF中的逻辑是否有错误 编辑:出于好奇,以下是最终EBNF的外观: roll := space,operations,space operations := function function := (dice,op,operations)/(grouping

我在Python程序中使用它来解析一些相当简单的语言学。它应该能够解析以下示例文本(每行分别):

我已经为上述内容编写了以下EBNF,但解析器一直在困扰我,即使是在“d6”的简单情况下:

我开始怀疑我的EBNF中的逻辑是否有错误

编辑:出于好奇,以下是最终EBNF的外观:

roll          := space,operations,space
operations    := function
function      := (dice,op,operations)/(grouping,op,operations)/dice/constant/grouping
constant      := number
grouping      := ('(',operations,')')/('{',dice,'}')/('[',operations,']')
dice          := number?,[dD],number
op            := space,[-+],space
space         := [ \t]*

您还没有定义编号,我在文档中也没有看到它是预定义的。

对不起,我应该发表评论,但是SimpleParse实际上有一个预定义的“编号”库,我已经包含了该库,所以这不应该是个问题。我要补充一点。我看到的另一件事是,您对
函数的分组有点奇怪。这是故意的吗?
number
不包括十六进制,是吗?如果它这样做,它将吃掉
d
。似乎
number
不包含十六进制。如果没有其他人可以帮忙,我所能建议的就是复制和简化,从一个语法开始,只针对最简单的情况,然后在每个阶段进行测试,直到生成完整的语法,看看错误出在哪里。祝你好运。这是一个关于十六进制的好问题。我没想到。我要做一些测试。就函数而言,我希望能够涵盖将其与操作配对并适当结束的几种不同情况。
# 'number' is already predefined in SimpleParse to parse exactly what you think it will parse
root          := roll
roll          := space,operations,space
operations    := function+
function      := ((dice,op,function)/(grouping,op,function)/(function,op,grouping))/(dice/grouping/constant) #just to clarify, the '/' is a FirstOf operator
constant      := number
grouping      := ([[(],operations,[])])/'{',dice,'}'
dice          := number?,[dD],number
op            := space,[-+],space
space         := [ \t]*
roll          := space,operations,space
operations    := function
function      := (dice,op,operations)/(grouping,op,operations)/dice/constant/grouping
constant      := number
grouping      := ('(',operations,')')/('{',dice,'}')/('[',operations,']')
dice          := number?,[dD],number
op            := space,[-+],space
space         := [ \t]*