问题标签 [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.

0 投票
4 回答
889 浏览

java - Java 注释的语法

是否有描述 Java 注释语法的 BNF 或 EBNF?

0 投票
3 回答
2898 浏览

grammar - 使用 EBNF 或 BNF 编写递归下降解析器更容易吗?

我有一个用于语法的 BNF 和 EBNF。BNF 显然更冗长。就使用 BNF 构建递归下降解析器而言,我有一个相当不错的主意;有很多资源。我无法找到将 EBNF 转换为递归下降解析器的资源。是因为难度更大吗?我记得在我的 CS 理论课程中,我们学习了 EBNF,但我们没有将它们转换为递归下降解析器。我们确实将 BNF 转换为递归下降解析器。

我问的原因是因为 EBNF 更紧凑。

从总体上看 EBNF,我注意到包含在{和之间的术语}可以转换为while循环。是否有其他指导方针或规则?

0 投票
6 回答
9589 浏览

syntax - BNF vs EBNF vs ABNF:选择哪个?

我想提出一种语言语法。我已经阅读了一些关于这三个的内容,并且看不到任何一个人能做到而另一个人不能做到的事情。有什么理由使用一个而不是另一个?还是只是偏好问题?

0 投票
3 回答
1367 浏览

parsing - 如何处理 EBNF 语法中不同标记中的重叠字符组?

我正在使用 LL(k) EBNF 语法来解析字符流。我需要三种不同类型的令牌:

前两个标记声明很好,因为它们不共享任何公共字符。

但是,第三个 ,message是无效的,因为某些字符串可能同时是numand message(例如"123"),而其他字符串可能既是 anident又是 a message(例如"Hello")。因此,分词器无法正确区分。

另一个例子是区分整数和实数。除非您要求所有实数至少有一位小数(意味着 1 需要编码为 1.0,这对我来说不是一个选项),否则我无法在语法中获得这两个数字之间差异的支持类型。我必须将所有值都表示为实数并在该点之后进行检查。这很好,但不是最理想的。我真正的问题是message令牌。我找不到解决方法。

所以问题是,我可以用 LL(k) EBNF 语法来做到这一点吗?我正在使用CoCo/R来生成解析器和扫描器。

如果我不能用 LL(k) EBNF 做到这一点,那么我还可以考虑哪些其他选择?

编辑这是我从 CoCo/R 得到的输出:

0 投票
3 回答
1163 浏览

grammar - 如何阅读 EBNF 语法中的替代词

我有一个 EBNF 语法,它有一些具有这种模式的规则:

以上等价于以下吗?

编辑

由于你们中的一些人观察到两个序列中的错误或歧义,我将给出一个具体的例子。SVG 规范提供了路径数据的语法。该语法有几个具有这种模式的生成器:

上面的可以改写成下面的吗?

0 投票
2 回答
881 浏览

language-agnostic - Turbo Pascal 的 BNF / EBNF(最好是 5.5 或更高版本,因为 OOP)?

你们有谁知道 Turbo Pascal 的 BNF 或 EBNF 是否在某处可用(合法!!)?

0 投票
1 回答
830 浏览

lexer - 为什么 ANTLR 中的 'a'..'z' 匹配 $ 或 £ 等通配符

当我运行以下语法时:

我给输入“?test”为什么antlr接受这个作为有效输入?我认为 ('a'..'z') 只会匹配小写字母中的字符?

0 投票
1 回答
3394 浏览

antlr - ANTLR,如何在 ANTLR 中转换 BNF、EBNF 数据?

我必须生成 CSV 数据的解析器。不知何故,我设法为 CSV 数据编写了 BNF、EBNF,但我不知道如何将其转换为 ANTLR 语法(这是一个解析器生成器)。例如,在 EBNF 中,我们编写:

但是当我在 ANTLR 中编写它来生成解析器时,它给出了一个错误并且不带括号。我不是ANTLR专家,有人可以帮忙吗?

0 投票
2 回答
3886 浏览

scala - 递归 bnf 的 Scala Parser Combinators 技巧?

我试图匹配这个语法:

我的 scala packrat 解析器组合器如下所示:

但这不起作用。要么它“匹配贪婪”并告诉我:

或者如果我将其更改|为 a|||我会得到一个 stackoverflow:

我有点理解为什么会出现错误;我能做些什么来解析像上面这样的语法?对我来说似乎并不深奥

编辑:基于http://scala-programming-language.1934581.n4.nabble.com/Packrat-parser-guidance-td1956908.html中引用的论文, 我发现我的程序实际上并没有使用新的 packrat 解析器。

IE。更改Parser[Any]PackratParser[Any]并使用lazy val而不是def

我将上面的内容重写为:

0 投票
1 回答
1492 浏览

python - 为类似markdown的语言实现解析器

我有类似于 markdown 和 SO 使用的标记语言。

旧版解析器基于正则表达式,维护起来完全是一场噩梦,因此我提出了自己的基于 EBNF 语法的解决方案,并通过 mxTextTools/SimpleParse 实现。

但是,一些可能相互包含的令牌存在问题,我看不出有一种“正确”的方法来做到这一点。

这是我的语法的一部分:

第一个问题是,扰流板、强和强调可以以任意顺序相互包含。以后我可能需要更多这样的内联标记。

我目前的解决方案只是为每个组合(inline_noast、inline_nostrong 等)创建单独的标记,但显然,随着标记元素数量的增加,此类组合的数量增长过快。

第二个问题是,这些强/强调的前瞻在某些不良标记__._.__*__.__...___._.____.__**___***(如大量随机放置的标记符号)的情况下表现非常糟糕。解析几 kb 的此类随机文本需要几分钟时间。

我的语法有问题还是我应该使用其他类型的解析器来完成这项任务?