问题标签 [ebnf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 我的 EBNF 逻辑在这里错了吗?
我在 Python 程序中使用SimpleParse来解析一些相当简单的语言。它应该能够解析以下示例文本(每行单独):
我已经为上述内容编写了以下 EBNF,但解析器一直在我身上崩溃,即使在“d6”的简单情况下也是如此:
我开始怀疑我是否在某个地方弄错了我的 EBNF 中的逻辑。
编辑:对于好奇,这是最终的 EBNF 的样子:
ebnf - 用于 while 循环的 Forth 语言 EBNF 规则
是否有任何描述 Forth while 循环(或任何其他循环)的EBNF规则?
ebnf - Forth 语言 EBNF 规则,用于无限循环或 if 语句
是否有描述 Forth 无限循环或 if 语句的EBNF规则?
docbook - 如何从 EBNF 源文件开始在 Docbook 中获取铁路图(语法图)?
Docbook 5 显然支持 EBNF。但它不输出铁路图。是否可以使其输出铁路图(AKA语法图)?
xml - 可以自动将 ABNF 转换为 XML 吗?
是否可以自动将 ABNF 转换为 XML?特别是,我需要将用 ABNF 编写的语音识别语法转换为 XML。谢谢。
regex - 解释 RFC 2141 中 NID 的 BNF 语法
我无法理解RFC2141中的一些BNF语法。
线是<NID> ::= <let-num> [ 1,31<let-num-hyp> ]
。我认为这意味着它<NID>
是一个字符串的符号,受两个规则的约束:
- 字符串必须以任何
<let-num>
字符的单次出现开始。 - 此字符后面可能出现 0-31 次出现*的任何
<let-num-hyp>
字符。
我读对了吗?因为,如果我是,其中的一些含义有点令人困惑。
*相当于“可选,1-31 次出现
RFC2141<NID>
中(命名空间标识符)的完整 BNF 语法是:
bnf - 用于 LOGO 编程语言的 EBNF 或 BNF
有谁知道我在哪里可以获得LOGO编程语言的 BNF 或 EBNF?
regex - 零个或多个/一个或多个修饰符和回溯
我在我的PEG解析器中添加了零个或多个和一个或多个修饰符,这很简单,因为 PEG 中的回溯很少。早期的迭代永远不会重新考虑,所以一个简单的while
循环就足够了。
然而,在其他情况下,零个或多个和一个或多个修饰符确实需要回溯。例如,采用以下正则表达式:
这个表达式应该能够贪婪地匹配一个由 7 组成的字符串a
:有几种方法可以将 2 和 3 相加得到 7。但要做到这一点,重新考虑早期的迭代是必要的。例如,如果表达式a
第一次匹配 3 a
,第二次匹配 3,则只剩下一个a
,无法匹配。但是,回溯最后三个a
并匹配两个a
,然后匹配五个a
。然后最后两个a
也可以匹配(即3 + 2 + 2 = 7)。
幸运的是,正则表达式在匹配字符串后退出搜索。但是EBNF解析器呢?如果语法不明确,解析器将使用回溯查找所有可能的语法树!如果我们有生产
和一个由 7 组成的字符串a
,一个完全回溯的解析器将返回用 2 和 3 来表达 7 的所有可能方式。这只是针对 7a
的:匹配一个稍长的字符串,并且N叉树的可能性会增长另一个层次。考虑N = 6:
恐怖的组合爆炸!
然而,真的会是这样吗?EBNF中对零个或多个修饰符和一个或多个修饰符没有限制吗?按照描述实现它们比while()
PEG 解析器的普通循环要多得多,所以我不得不怀疑......
c#-4.0 - 用于 F# 的 BNF 或 EBNF 解析器生成器中的 C# 语法
我正在寻找可以提供给 fsyacc 的 C# v4 的 BNF 语法,或者如果我找不到可以输出 F# 的基于 EBNF 的解析器生成器。
编辑: 我不想为 C# 编写解析器,而是为非常相似的语法编写实验性解析器,并且由于两种语法之间存在巨大的文字重叠,我发现从 C# 语法开始更容易,只需更改偏离的位. 然而,我发现的唯一 C#v4 语法是 EBNF
另一个答案是从 EBNF 到 BNF 的转换器
bnf - 将 BNF 转换为 EBNF - 没有递归的括号?
我需要将以下语法转换为 EBNF:
我目前取得的进展如下:
如果使用 EBNF,最好消除所有递归吗?有没有办法只使用<id>
in来完成它<expr>
?