问题标签 [grammar]

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 投票
2 回答
8346 浏览

parsing - 解决 yacc/ocamlyacc 中的 reduce/reduce 冲突

我正在尝试解析 ocamlyacc 中的语法(与常规 yacc 几乎相同),它支持没有运算符的函数应用程序(如在 Ocaml 或 Haskell 中),以及二进制和一元运算符的正常分类。我遇到了与“-”运算符的减少/减少冲突,该运算符可用于减法和求反。这是我正在使用的语法示例:

问题是当你得到一个像“a - b”这样的表达式时,解析器不知道它是否应该被简化为“a(-b)”(b的否定,然后是应用程序)或“a - b”(减法)。减法减法是正确的。我如何解决冲突以支持该规则?

0 投票
4 回答
2636 浏览

c++ - C++ 模板歧义

我和一个朋友正在讨论 C++ 模板。他问我这应该怎么做:

main 中的最后一行有两个合理的解析。'b' 是模板参数还是b > (c)模板参数?

虽然编译它很简单,看看我们得到了什么,我们想知道是什么解决了歧义?

0 投票
5 回答
1160 浏览

grammar - 解析树和语法信息

有谁知道在哪里可以找到好的在线资源以及如何制作语法和解析树的示例?最好是介绍材料。对 n00b 友好的信息,我自己在 Google 上没有发现任何好处。

编辑:我在考虑理论,而不是特定的解析器软件。

0 投票
2 回答
4127 浏览

parsing - 是什么让 Ometa 与众不同?

Ometa是“一种新的面向对象的模式匹配语言”。我之前在 Oz 工具等语言中遇到过模式匹配,用于解析 Lexx/Yacc 或 Pyparsing 等语法。尽管查看示例代码、阅读讨论并与朋友交谈,但我仍然无法真正理解 Ometa 的特别之处(或者至少,为什么有些人认为它如此)。有什么解释吗?

0 投票
2 回答
6633 浏览

antlr - Antlr: Simplest way to recognize dates and numbers?

What is the simplest (shortest, fewest rules, and no warnings) way to parse both valid dates and numbers in the same grammar? My problem is that a lexer rule to match a valid month (1-12) will match any occurrence of 1-12. So if I just want to match a number, I need a parse rule like:

It only gets more complex when I add lexer rules for day and year. I want a parse rule for date like this:

I don't care if month,day & year are parse or lexer rules, just so long as I end up with the same tree structure. I also need to be able to recognize numbers elsewhere, e.g.:

0 投票
6 回答
10256 浏览

delphi - 寻找完整的 Delphi (object pascal) 语法

我需要一个完整的 Object Pascal 语法(最好是 Delphi 2009)。帮助文件提供了一些语法,但并未提供所有信息。所以我开始收集零散的信息。最近我将这些添加到或多或少完整的语法描述中(类似 EBNF)。

虽然它看起来很广泛,但仍然存在错误,而且我确信缺少部分(特别是在 .NET 语法中)。所以我在问 SO Delphi 社区。你有任何信息或者你能纠正错误吗?作为回报,我向社区提供了完整的语法。它可能会为您节省一些时间;-)。将来,我喜欢对其他语言(如 C#/C++/Java)做同样的事情。

我已经给出了语法描述:My Syntax sofar。或者,如果您喜欢文本版本。(XHTML 是从文本版本生成的)。

请注意,语法侧重于句法部分,因为词法部分并不是真正的问题。

更新

我有一个新版本的 Delphi 语法。.html 版本。它包括所有版本,包括 2009。棱镜扩展仍在待办事项列表中。而且我不确定我是否要把它们放在一起。

对于真正的纯粹主义者,它还包含完整的汇编代码(它不支持完整的 100% 的英特尔集,但仅遗漏了几条指令。)。

0 投票
6 回答
9426 浏览

grammar - 转变减少冲突

我在理解我知道没有歧义的语法的移位/减少冲突时遇到问题。该案例是 if else 类型之一,但它不是“悬空 else”问题,因为我有强制 END 子句分隔代码块。

这是 gppg 的语法(它是一个类似于 Bison 的编译器编译器......这不是回声):

这是冲突输出:

我已经切换了所有内容,并且我确实知道如何解决它,但是该解决方案涉及放弃“elseif”上的左递归以进行右递归。

我已经浏览了我在互联网上找到的关于这个问题的所有稀缺文档(我在最后发布了一些链接),但仍然没有找到一个优雅的解决方案。我知道 ANTLR,我现在不想考虑它。请将您的解决方案限制为 Yacc/Bison 解析器。

我会很欣赏优雅的解决方案,我设法通过消除 /* empty */ 规则和复制所有需要空列表的内容来做到这一点,但在我正在研究的更大的语法中,它最终就像“意大利面条语法综合症”一样。

以下是一些链接:

http://nitsan.org/~maratb/cs164/bison.html

http://compilers.iecc.com/comparch/article/98-01-079

GPPG,我正在使用的解析器

野牛手册

0 投票
51 回答
16440 浏览

nlp - 有人类可读的编程语言吗?

我的意思是,是否有一种具有人类风格编码的编码语言?例如:

我知道它不是那么有用,但是创建这样的语法会很有趣。

0 投票
9 回答
7689 浏览

singleton - 有没有一个名字意味着“不是单身”?

有没有一个名字意味着“不是单身”?

0 投票
6 回答
31933 浏览

c++ - 为什么不能用 LR(1) 解析器解析 C++?

我正在阅读解析器和解析器生成器,并在维基百科的 LR parsing -page 中找到了这个语句:

可以使用 LR 解析器的某些变体来解析许多编程语言。一个值得注意的例外是 C++。

为什么会这样?C++ 的哪些特殊属性导致无法使用 LR 解析器进行解析?

使用google,我只发现可以用LR(1)完美解析C,但C ++需要LR(∞)。