问题标签 [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.
compiler-construction - Haskell - 如何最好地表示编程语言的语法?
我一直在研究 Haskell,我很想在其中编写一个编译器(作为学习练习),因为它的许多固有特性可以很容易地应用于编译器(尤其是递归下降编译器)。
我无法完全理解的是如何以 Haskell-ian 方式表示语言的语法。我的第一个想法是使用递归数据类型定义,但我看不出如何使用它们来匹配语言中的关键字(“if”)。
非常感谢您的想法和建议,
皮特
parsing - Mgrammar 语法和变量声明
我敢肯定,我会被告知以另一种方式进行,但出于特定原因,必须以这种方式进行。如果没有,我就不会被卡住:-P
我正在使用的脚本语言必须接受这样定义的变量:
这是一个要求。我之前写了一个小语法,让我这样定义它们
但要求发生了变化。我的语法之前的样子是这样的
sType 的值是 System.String、Int32 等,然后是变量名,然后是表达式。然后我将其投影到 DeclareVar 节点并为其提供所需的参数,在代码中我将其解析为 XML,然后让 MGrammar 解析 XML 并很好地遍历我的 AST。由于他们希望能够在不声明类型的情况下执行变量,所以我有点坚持现在要做什么,即如何将没有声明类型的变量存储到适当的类中。任何帮助将不胜感激,希望这一切都有意义。
parsing - ANTLR 中的树解析器是什么,我是否被迫编写一个?
我正在为 ANTLR 中的一小部分 C 语言编写一个词法分析器/解析器,它将在 Java 环境中运行。我是语言语法领域的新手,在许多 ANTLR 教程中,他们创建了一个 AST - 抽象语法树,我是否被迫创建一个,为什么?
grammar - 在 EBNF 中定义语言
L
给出由字符组成的语言的 EBNF 规范,使得该语言中的句子具有a
以下形式b
c
到目前为止我所拥有的:
如果这是正确的,我仍然不确定如何生成Q
以及如何S
反向表示。
xml - 这个 XML 最简单/最清晰的 XSD 是什么?
对于这种 XML,最简单/最清晰的 XSD 样式是什么?(来自这个答案)
编辑我将我的示例 XSD 和说明移到了答案中。
c++ - 是否有 C++ 的语法解析器(类似于 python 的 yapps)?
我正在编写一种非常接近伪代码的实验性语言,目的是为了好玩并了解更多关于 C++ 的知识。问题之一是我需要解析一些语法,而我寻找一个好的 C++ 语法解析器的搜索没有成功(我找不到任何东西)。我想要完成的是:
我希望解析器返回一个包含类似于以下内容的地图:
基于我给它的一套规则。
如果我找不到任何有用的东西,我最终将不得不自己动手,但我想尽可能地避免重新发明轮子。
那么,这里有没有人知道生成 C++ 代码的好/健全的语法解析器?如果能被广泛使用就更好了。
谢谢!
language-agnostic - String.Format 中的适当文章 (a/an)
我正在寻找一种文化敏感的方式来在使用适当的文章 (a/an) 时将名词正确插入句子中。它可以使用 String.Format,或者如果在其他地方存在适当的方法来执行此操作,则可能使用其他方法。
例如:
基本句子:“您正在查看一个/一个 {0}”
这应该格式化为:“你在看胡萝卜”或“你在看鸡蛋”。
我目前正在通过手动检查要插入的单词的第一个字符然后手动插入“a”或“an”来执行此操作。但我担心当应用程序本地化为其他语言时,这可能会限制我。
是否有解决此问题的最佳实践?
解决方案:问题似乎很复杂,以至于不存在以我最初所说的方式解决此问题的实用程序或框架。似乎最好的解决方案(在我的情况下)是将文章与名词一起存储在数据库中,以便翻译人员可以拥有他们需要的控制级别。感谢所有的建议!
grammar - First & Follow Sets 检查简单语法
这是我在课堂测验中遇到的几个问题,只是想验证它们的正确性。语法:
1.) B 的跟随集包含 g 和 epsilon (T/F)?Ans: F. Follow 集合中没有 epsilon,对吗?(只有 $ aka 输入结束)
2.) 第一组 S 包含 d、f、g 和 epsilon (T/F)?Ans: T. 我说错了,因为我认为 First(S) = First(A),g 不是其中的一部分。谁是正确的?
antlr - ANTLR 相当于野牛 REJECT 动作?
我正在尝试解析一个Name=Value
对列表,其中值可以包含除空格以外的任何内容(即值可以包含等号)。
该名称仅限于通常的标识符字符。
问题是,“价值”标记匹配一切。例如,对于输入:
解析器会将整个输入与“值”标记匹配(并抛出一个MismatchedTokenException
)。
在bison中,有可能将状态分配给标记(或者这只是用于非终结符?),以便它们只有在显式转换到该状态后才变得“有资格”进行匹配。
编辑考虑一下,这在野牛中也不起作用-令牌拆分已经发生(在flex中);但是,我认为有一种方法可以REJECT
标记,迫使flex尝试次优匹配。
这是我的 ANTLR 语法。
grammar - MGrammar 和不止一种有效的解释
我认为我可能遇到的是悬空的 else 问题,但我不确定。我负责编写的语言需要支持多行 if 语句以及单行 ie
和
用我的语言对应
和
我还需要添加对 else-if 和 else's 的支持,两者都使用与上述相同的语法以及 begin's 和 end's。我花了一段时间试图让它工作并且我已经接近了,但是我现在使用的语法我得到了“这个输入有多个有效的解释......”错误。这是我正在使用的 MGrammar 代码:
这可能是第 10 个版本,因为我尝试了各种方法来使 if/else if/else 结构正常工作。
基本上,我的 Main 得到一个 StatementList,sIf 就是其中之一。sIf 尝试查找多行或单行 if 语句,后跟可选的 sElseIf(您不必有 else)。
我认为问题在于正则表达式编译器可能将 else if 视为 sElse 后跟 sIf 语句,而不是 sElseIf 语句。在预览模式下,它实际上完全按照我想要的方式绘制了树,所以如果有办法在我的 C# 应用程序中解析它时忽略此消息,那么我猜这也可以。