compiler-theory

    0热度

    1回答

    我想将一种简单的编程语言翻译成另一种编程语言。我只需要输出在语法上是有效的,因此代码生成部分可以放弃。 说,Python的一个子集到C.我觉得我可以欺骗一下,只是“复制粘贴”大部分代码,但是说我想将Python的列表/字符串拼接转换为C,然后它变得不平凡(对我来说,此刻)。 我一直到自顶向下的递归下降解析器(实际语法未决)。接下来我该做什么?我有一本龙书(第二版),但是在我现在所在的位置之前浏览,

    0热度

    1回答

    说我有: S -> A A -> B C A a | ϵ B -> k | ϵ C -> m 现在在初始状态S' -> S,我要去包括: S' -> .S 则S关闭: A -> .B C A a,A -> . 显然,关闭还包括B -> .k和B -> .。 但是由于B→ε是一种产品,我是否还必须在初始状态中包含C -> ,m?由于在A -> B C A a中,B可以是ε。 我只是想知道我

    0热度

    2回答

    您可以通过左分解消除模糊性吗? 例如,悬挂其他。 还是左保留只消除左递归? 谢谢。

    1热度

    1回答

    我有一些麻烦,在理解了编译阶段不同的错误之间的差异,比如这个程序: int main() { int x = 5; int x = 6; } 我的猜测是,这将无法在语义分析阶段,但我不某些(是否有可能在词法分析阶段失败,因为会生成(int x)的重复标记?) 感谢您的帮助。

    3热度

    1回答

    在阅读Guido's reasoning for not adding tail recursion elimination to Python,我炮制在Haskell几乎尾递归的这个例子: triangle :: Int -> Int triangle 0 = 0 triangle x = x + triangle (x - 1) 这当然不是一个尾调用,因为虽然递归呼叫本身处于“返回”状

    0热度

    1回答

    我似乎无法找到等价的LR语法: S→aSbS | bSaS | ε 其中我认为识别字符串与'b'相同的数字比'b'。 这将是一个解决方法?是否有可能找到和LR语法呢? 在此先感谢! 编辑: 我发现什么,我认为是等效的语法,但我一直没能证明这一点。 我想我需要证明原语法生成上面的语言,然后证明语言是为以下等价语法生成的。但我不知道该怎么做。我应该怎么做? S→aBS | bAS | ε B→b |

    2热度

    2回答

    我正在研究一些计算理论,正如所暗示的那样,这是非常理论的。 我可以很容易地从正则表达式转换为NFA到DFA,我可以理解。 但是由于所有的NFA都可以转换为DFA(我敢肯定)在UNIX中的grep命令使用正则表达式来确定匹配的字符串,最常用的有限自动机,DFA或NFA是什么?根据我的经验(不是很多),DFA在表示常规语言时通常要简单得多,而且也是确定性的,因此应该总是选择超过NFA。 NFA分支到多

    4热度

    3回答

    有时,程序的控制流中访问的变量的值不可能对其输出产生任何影响。例如: global var_1 global var_2 start program hello(var_3, var_4) if (var_2 < 0) then save-log-to-disk (var_1, var_3, var_4) end-if return ("Hello

    1热度

    2回答

    试想一下,我们有一个被赋予了一个Excel电子表格有三列,标记COND,X和Y COND = TRUE or FALSE (user input) X = if(COND == TRUE) then 0 else Y Y = if(COND == TRUE) then X else 1; 这些公式计算在Excel中完全正常,而Excel不生成循环依赖项错误。 我正在写一个编译器,试图将这些

    1热度

    2回答

    我正在编写一个Java编译器作为一个娱乐项目。但是,我注意到,当我们在命令行中编译文件时,例如“gcc example.c”,编译器能够在终端的工作目录中找到example.c而没有错误。编译器如何知道搜索example.c的目录? OS是否在编译器的目录中找到example.c?另外,我怎样才能在我的C程序中模拟这个动作,以便用户可以通过调用我的编译器,例如“compiler example.j