问题标签 [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 - python:用 BNF 或 pyparsing 替换正则表达式
我正在解析一个相对简单的文本,其中每一行都描述了一个游戏单元。我对解析技术知之甚少,因此我使用了以下临时解决方案:
它工作正常,但我觉得我达到了正则表达式功能的极限。具体来说,在 Traits 的情况下,该值最终是一个字符串,我需要稍后将其拆分并转换为列表:例如,obj.Traits 在此代码中将设置为“Motorized Armored”,但在后来的功能改为('机动','装甲')。
我正在考虑将此代码转换为使用 EBNF 或 pyparsing 语法或类似的东西。我的目标是:
- 让这段代码更整洁,更不容易出错
- 避免使用值列表对案例进行丑陋的处理(我需要先在正则表达式中进行替换,然后对结果进行后处理以将字符串转换为列表)
您对使用什么以及如何重写代码有什么建议?
PS我跳过了代码的某些部分以避免混乱;如果我在此过程中引入了任何错误,抱歉 - 原始代码确实有效 :)
java - 使用 EBNF 表达式解析代码块
我正在使用 CocoR 生成类似 java 的扫描仪/解析器:
我在创建 EBNF 表达式以匹配代码块时遇到了一些麻烦:
我假设一个代码块被两个众所周知的标记包围: <& 和 &> 示例:
如果我定义一个非终结符
如果两个符号内的代码包含“<”字符,则生成的编译器将不会处理它,从而产生语法错误。
有什么提示吗?
编辑:
为了简单起见,我省略了一些产品。
这是我对语法的实际实现。主要错误是,如果块中的代码包含符号“>”或“&”之一,它会失败。
ebnf - 为什么 EBNF 语句中有两个操作数?
有这个EBNF语法
为什么您可以选择在 4*+3.5= 中输入这样的内容?这句话甚至会在这个语法中吗?如果是的话,你怎么判断?
json - 关于 EBNF 表示法和 JSON 的问题
最近我一直在研究解析器和语法以及它们是如何工作的。我正在阅读http://www.ietf.org/rfc/rfc4627.txt使用 EBNF 的 JSON 的形式语法。我对我对 BNF 和 EBNF 的理解非常有信心,但显然我仍然没有完全理解它。RFC 定义了一个 JSON 对象,如下所示:
我知道这里的意图是表示任何 JSON 对象都可以(可选地)有一个成员,然后是 0 个或多个(值分隔符,成员)对。我不明白为什么星号出现在. (value-separator member)星号不是应该模仿正则表达式,以便它出现在要重复 0 次或更多次的项目之后吗?JSON对象语法不应该这样写吗:
presentation - EBNF 演示示例?
任何人都知道用于电子媒体(即 HTML)的扩展巴科斯-瑙尔表格演示的好例子吗?
我正在寻找有关形式而非内容的建议——我希望使其尽可能具有可读性,以便轻松区分规则、终端和 EBNF 符号。
java - EBNF / parboiled:如何将正则表达式翻译成 PEG?
这是一个特定于 parboiled 解析器框架和一般 BNF/PEG 的问题。
假设我有一个相当简单的正则表达式
表示伪 EBNF
您将如何在 EBNF 中定义非空格(一个或多个不是空格的字符)?
对于那些熟悉 Java parboiled 库的人,您如何实现定义非空白的规则?
java - 将 EBNF 语法转换为上下文无关语法
我必须编写 JavaCUP 规范,并且已经获得了 EBNF 语法。但是,我不知道如何在两者之间转换。我听说过基本的想法,但我真的不明白我需要改变什么,什么是“终端”等等。
任何人都可以解释如何从一个转换到另一个,或者如果有什么地方我可以读到它?
context-free-grammar - JavaCUP - 如何将这行 EBNF 转换为 CFG 语法?
几天前我发布了关于将 EBNF 语法转换为 CFG 的帖子。好吧,我想我现在已经掌握了它,但我有点坚持这个特定的:
你会如何转换:
到CFG?
我在这里的尝试是去掉最后的 * (这意味着 0 或更多)并用递归的方式替换它。
antlr - 语句或退出语句的 ANTLR 语法
我在 ANTLR 语法中写下了以下语句:
如果我理解正确,(statement|exit)*则意味着我可以拥有 astatement或exit statement. 那就是 ie statement_1 exit_1, or statement_1, or statement_1 statement_2, exit_1, 对吧?
我的解析器工作,除了没有声明。
例如:
这有效:
这也有效(否exit):
但这不起作用(否statement):
我的语法有什么问题吗?
c# - 如何定义“else”块?
这是我正在尝试的:
但我得到一个shift-reduce conflict. 我不太清楚为什么......如果可以的话,它不应该贪婪地抓住“其他”吗?不太确定如何定义 else 块,使其后面只能跟一个“if”块。
我认为带有一个节点和一个节点的if_else块节点是最佳的,因为当我尝试遍历 AST 时,我不必返回并检查前一个兄弟节点。ifelse
如果您需要查看更多语法...请告诉我。“块”基本上定义为{ blah }(之间的一堆语句{})。
尝试将其作为可选块:
也不喜欢这样。仍然抛出警告。