问题标签 [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 投票
1 回答
2798 浏览

python - python:用 BNF 或 pyparsing 替换正则表达式

我正在解析一个相对简单的文本,其中每一行都描述了一个游戏单元。我对解析技术知之甚少,因此我使用了以下临时解决方案:

它工作正常,但我觉得我达到了正则表达式功能的极限。具体来说,在 Traits 的情况下,该值最终是一个字符串,我需要稍后将其拆分并转换为列表:例如,obj.Traits 在此代码中将设置为“Motorized Armored”,但在后来的功能改为('机动','装甲')。

我正在考虑将此代码转换为使用 EBNF 或 pyparsing 语法或类似的东西。我的目标是:

  • 让这段代码更整洁,更不容易出错
  • 避免使用值列表对案例进行丑陋的处理(我需要先在正则表达式中进行替换,然后对结果进行后处理以将字符串转换为列表)

您对使用什么以及如何重写代码有什么建议?

PS我跳过了代码的某些部分以避免混乱;如果我在此过程中引入了任何错误,抱歉 - 原始代码确实有效 :)

0 投票
2 回答
1955 浏览

java - 使用 EBNF 表达式解析代码块

我正在使用 CocoR 生成类似 java 的扫描仪/解析器:
我在创建 EBNF 表达式以匹配代码块时遇到了一些麻烦:

我假设一个代码块被两个众所周知的标记包围: <& 和 &> 示例:

如果我定义一个非终结符

如果两个符号内的代码包含“<”字符,则生成的编译器将不会处理它,从而产生语法错误。

有什么提示吗?

编辑:

为了简单起见,我省略了一些产品。
这是我对语法的实际实现。主要错误是,如果块中的代码包含符号“>”或“&”之一,它会失败。

0 投票
1 回答
120 浏览

ebnf - 为什么 EBNF 语句中有两个操作数?

有这个EBNF语法

为什么您可以选择在 4*+3.5= 中输入这样的内容?这句话甚至会在这个语法中吗?如果是的话,你怎么判断?

0 投票
3 回答
5654 浏览

json - 关于 EBNF 表示法和 JSON 的问题

最近我一直在研究解析器和语法以及它们是如何工作的。我正在阅读http://www.ietf.org/rfc/rfc4627.txt使用 EBNF 的 JSON 的形式语法。我对我对 BNF 和 EBNF 的理解非常有信心,但显然我仍然没有完全理解它。RFC 定义了一个 JSON 对象,如下所示:

我知道这里的意图是表示任何 JSON 对象都可以(可选地)有一个成员,然后是 0 个或多个(值分隔符,成员)对。我不明白为什么星号出现. (value-separator member)星号不是应该模仿正则表达式,以便它出现要重复 0 次或更多次的项目之后吗?JSON对象语法不应该这样写吗:

0 投票
1 回答
777 浏览

presentation - EBNF 演示示例?

任何人都知道用于电子媒体(即 HTML)的扩展巴科斯-瑙尔表格演示的好例子吗?

我正在寻找有关形式而非内容的建议——我希望使其尽可能具有可读性,以便轻松区分规则、终端和 EBNF 符号。

0 投票
2 回答
1097 浏览

java - EBNF / parboiled:如何将正则表达式翻译成 PEG?

这是一个特定于 parboiled 解析器框架和一般 BNF/PEG 的问题。

假设我有一个相当简单的正则表达式

表示伪 EBNF

您将如何在 EBNF 中定义非空格(一个或多个不是空格的字符)?

对于那些熟悉 Java parboiled 库的人,您如何实现定义非空白的规则?

0 投票
1 回答
1964 浏览

java - 将 EBNF 语法转换为上下文无关语法

我必须编写 JavaCUP 规范,并且已经获得了 EBNF 语法。但是,我不知道如何在两者之间转换。我听说过基本的想法,但我真的不明白我需要改变什么,什么是“终端”等等。

任何人都可以解释如何从一个转换到另一个,或者如果有什么地方我可以读到它?

0 投票
1 回答
823 浏览

context-free-grammar - JavaCUP - 如何将这行 EBNF 转换为 CFG 语法?

几天前我发布了关于将 EBNF 语法转换为 CFG 的帖子。好吧,我想我现在已经掌握了它,但我有点坚持这个特定的:

你会如何转换:

到CFG?

我在这里的尝试是去掉最后的 * (这意味着 0 或更多)并用递归的方式替换它。

0 投票
1 回答
509 浏览

antlr - 语句或退出语句的 ANTLR 语法

我在 ANTLR 语法中写下了以下语句:

如果我理解正确,(statement|exit)*则意味着我可以拥有 astatementexit statement. 那就是 ie statement_1 exit_1, or statement_1, or statement_1 statement_2, exit_1, 对吧?
我的解析器工作,除了没有声明。
例如:

这有效:

这也有效(否exit):

但这不起作用(否statement):

我的语法有什么问题吗?

0 投票
2 回答
666 浏览

c# - 如何定义“else”块?

这是我正在尝试的:

但我得到一个shift-reduce conflict. 我不太清楚为什么......如果可以的话,它不应该贪婪地抓住“其他”吗?不太确定如何定义 else 块,使其后面只能跟一个“if”块。

我认为带有一个节点和一个节点的if_else块节点是最佳的,因为当我尝试遍历 AST 时,我不必返回并检查前一个兄弟节点。ifelse

如果您需要查看更多语法...请告诉我。“块”基本上定义为{ blah }(之间的一堆语句{})。


尝试将其作为可选块:

也不喜欢这样。仍然抛出警告。