27得票2回答
C语言的无上下文文法

我正在为C语言编写解析器。我试图找到C语言所有上下文无关的推导列表,最好是使用BNF或类似方法进行表示。我相信这样的东西一定存在,但是在谷歌上搜索并没有给我带来太多收获。 阅读现有解析器/编译器的源代码已被证明比有所帮助更加令人困惑,因为我发现大部分现有解析器/编译器都比我正在构建的解析器更...

27得票2回答
将模糊的语法转换为明确的语法

我不明白如何从一个歧义语法派生出一个明确的语法?请参考此网站上的例子:例子。这个语法是如何被推导得出的,对我来说很困惑。 请问是否有人可以给我指导一下?

26得票2回答
Haskell中的谓词逻辑

我一直在使用以下数据结构来表示Haskell中的命题逻辑:data Prop = Pred String | Not Prop | And Prop Prop | Or Prop Prop | Impl Prop Prop |...

22得票4回答
LR(1) 项DFA - 计算展望符

我很难理解如何计算LR(1)项的展望符。假设我有以下文法:S -> AB A -> aAb | a B -> d LR(1) 项是带有向前看符号的 LR(0) 项。因此,对于状态 0,我们将得到以下 LR(0) 项:S -> .AB , {lookahead} A -...

19得票3回答
JavaScript是一种无上下文语言吗?

这篇关于浏览器如何工作的文章解释了CSS是上下文无关文法,而HTML则不是。但JavaScript呢?JavaScript是上下文无关的吗? 我正在学习CFG和正式证明,但离理解如何解决这个问题还有很长的路要走。有人知道JavaScript是上下文无关的还是不是吗?

18得票1回答
哪些文法可以使用递归下降算法而不需要回溯进行解析?

根据维基百科上的"递归下降分析器",不使用回溯的递归下降分析(即预测分析)仅适用于LL(k)文法。 在其他地方,我读到Lua的实现使用了这样的解析器。然而,该语言并不是LL(k)。事实上,Lua本质上是有歧义的: a = f(g)(h)[i] = 1 的意思是 a = f(g); (h)[i...

18得票3回答
乔姆斯基谱系和编程语言

我正在尝试学习与编程语言相关的某些Chomsky层次结构方面的内容,我还需要阅读《龙书》。 我已经了解到大多数编程语言可以被解析为上下文无关文法(CFG)。就计算能力而言,它等同于一个下推非确定性自动机。我的理解正确吗? 如果是这样,那么CFG如何包含无限制文法(UG),它是图灵完备的呢?...

17得票4回答
创建“无上下文语法”的技巧

我是CFG的新手,可以有人给我一些创建生成某种语言的CFG的提示吗? 例如: L = {a^m b^n | m >= n} 我得到的是: So -> a | aSo | aS1 | e S1 -> b | bS1 | e 但我认为这个区域是错误的,因为b的数量可能大于a的数量。

16得票1回答
这些语法和最小解析器怎么识别它?

我正在尝试学习如何制作编译器。为此,我阅读了很多关于上下文无关语言的资料。但是有一些问题我自己还无法理解。 由于这是我的第一个编译器,我不知道一些惯例。我提出的问题是为了构建一个解析器生成器,而不是编译器或词法分析器。有些问题可能很明显。 我阅读过的内容包括:自底向上解析、自顶向下解析、形...

16得票1回答
一个接受空集的语法规则是S->S。

这是一个家庭作业问题,我知道我的答案是错误的。我的回答是:S -> '' 意味着 S 产生空字符串。我知道空集和空字符串不是同一回事。根据我的教授,答案是:S -> S 现在,那个答案对我来说有点奇怪: 它永远不会终止。 它不是一门语言,而是缺少语言。 从严格的数学角度来看...