lalr相关内容

用 C++ 生成 AST

我正在用 C++ 制作一个解释器,到目前为止我已经有了我的词法分析器来生成标记.问题是我不确定如何生成“遍历"解析树. 我正在考虑使用一组数组来制作我的解析树,但我不确定如何以正确的顺序将标记实际插入到解析树中. 我不确定是自上而下、从左到右还是自下而上、从右到左. 谁能给我一个简单的 LALR(1) 算法? 解决方案 我将在这里违背传统观点,并说您应该使用特定于自然语言 ..
发布时间:2021-11-26 17:53:19 C/C++开发

可以修改 ANTLR 语法文件以供 PLY 使用吗?

我想制作一个使用 PLY 解析 Javascript 文件的 python 程序,我没有找到任何实现 ECMAScript、使用 PLY 的 Javascript 规则的解析器的来源. 我唯一发现的是一些用于解析 javascript 和 ecmascript 的 ANTLR 语法文件:http://www.antlr.org/grammar/1153976512034/ecmascript ..
发布时间:2021-11-11 03:46:04 Python

LALR 解析器和前瞻

我无缘无故地实现了 LALR 解析表的自动构建.此解析器有两种风格,LALR(0) 和 LALR(1),其中数字表示前瞻量. 我对前瞻的含义感到困惑. 如果我的输入流是 'abc' 并且我有以下产品,我需要 0 次前瞻还是 1 次? P :== a E 同样的问题,但我无法通过仅查看输入中的“a"来提前选择正确的 P 产生式. P :== a b E|一个 我有额外的困 ..
发布时间:2021-06-14 19:41:10 其他开发

如何在(LA)LR解析器中获取标识符

(LA)LR 解析器的一个缺点是,reduce 只在规则的末尾处理.这是具有作用域变量(如 javascript)的编程语言中的一个问题. 示例: var a = 2;功能(一){一 = 4;} 参见上面的代码示例.解析器可能看起来像: program : 指令程序 {}|{};指令:命令{}|功能 {};命令:“var"标识符“="文字“;"{};函数 : "function" "( ..
发布时间:2021-06-14 19:39:31 C#/.NET

层切换/减少冲突:悬空其他和空的生产

我有很多冲突,其中大多数是由于运算符和关系运算符的优先级不同而引起的.但是我仍然面对一些我不知道如何解决它们的冲突.其中一些在下面.我怀疑也许应该为 stmtlist 做ε消除,但是说实话我不确定. 状态70: 状态70(27)块->LCB varlist.RCB列表(25)varlist->varlist.瓦尔德克(28)stmtlist->.stmt(29)stmtlist->.stm ..
发布时间:2021-04-23 20:02:13 其他开发

解决小转变减少冲突

我遇到了减少班次的冲突,并将其简化为几行: start:指令A;struction_A:instruction_A指令|;指令:返回"X"|返回|'X' '!'; 3:'X'上的移位/减少冲突(移位6,减少5)状态3指令:返回.'X'(4)指令:返回.(5)X档6$ end减少5回扣减少5 我的猜测是表达式 X!无法解析RETURN X!,因为当解析器到达"X"令牌时,它不知道是否应 ..
发布时间:2021-04-15 19:49:01 其他开发

如何解决转移/减少冲突?

我正在使用CUP创建论文所需的解析器.我的语法有移位/减少冲突.我有这个生产规则: command ::= IDENTIFIER | IDENTIFIER LPAREN parlist RPAREN; 我有这个警告: Warning : *** Shift/Reduce conflict found in state #3 between command ::= IDENTIFIE ..
发布时间:2020-11-20 04:51:40 其他开发

可以将ANTLR语法文件修改为供PLY使用吗?

我想制作一个使用PLY解析Javascript文件的python程序,但找不到任何实现ECMAScript的解析器源,即使用PLY的Javascript规则. 我发现的唯一东西是一些ANTLR语法文件,用于解析javascript和ecmascript: http://www.antlr.org/grammar/1153976512034/ecmascriptA3.g http://www. ..
发布时间:2020-06-29 20:56:29 Python

Lemon Parser:此规则不可简化

我正在尝试编写语法来分析模板语言,例如 jinja2 (或 twig ),但我无法成功解析switch-case语句. 让我展示所需的语法: {% switch username %} {% case "Jim" %} I want to say: {% case "Nik" %} Hello man! {% endcase % ..
发布时间:2020-05-25 01:55:45 其他开发

源代码解析和类似结构的类宏处理

TL; DR版本:是否有支持以下内容的解析器生成器:当某些规则被简化时(我假设LALR(1)解析器),则不执行归约操作,但解析器将退出并用其他代码替换输入使用此规则中的值并解析该代码.如果需要,请重复.因此,如果代码是"i ++"并且规则是"expr POST_INCR",则我可以做更多或更少的事情: expr POST_INCR -> "(tmp = expr; expr = expr + ..
发布时间:2020-05-25 01:45:24 Java开发

用C ++生成AST

我正在用C ++进行解释器,到目前为止,我已经有了我的词法分析器来生成令牌.问题是我不确定如何生成“遍历"解析树. 我当时正在考虑使用数组数组来创建分析树,但是我不确定如何以正确的顺序将标记实际插入到分析树中. 我不确定是否要自上而下,从左至右或自下而上,从右至左. 任何人都可以为我提供一种简单的LALR(1)算法吗? 解决方案 在这里,我将违背传统观点,并说您应该使用特 ..
发布时间:2020-05-25 01:01:56 C/C++开发

解析器的性能:PEG与LALR(1)或LL(k)

我已经看到一些主张,通常说来,优化的PEG解析器不能比优化的LALR(1)或LL(k)解析器快. (当然,解析的性能取决于特定的语法.) 我想知道PEG解析器是否有任何特定限制,无论是对一般语法还是对某些使它不如LALR(1)或PEG语法的子集有效的语法, LL(k)性能方面. 我特别对解析器生成器感兴趣,但是假设可以在任何特定情况下调整它们的输出以提高性能.我还假设解析器已经过优化, ..
发布时间:2020-05-25 01:00:51 其他开发

与LR解析器相比,LL解析器有什么优势?

与今天的解析器生成器工具相比,LL解析器相对于LR解析器具有什么优势,以保证其在今天的解析器生成工具中的相对流行? 根据维基百科,LR解析似乎比LL具有优势: LR解析比LL解析可以处理更大范围的语言,并且在错误报告方面也更好,即,当输入不尽快符合语法时,它可以检测语法错误.这与LL(k)(或更糟糕的是,LL(*)解析器)形成对比,后者可能由于回溯而将错误检测推迟到语法的不同分支,这通 ..
发布时间:2020-05-25 00:56:46 其他开发

语法分析器错误恢复可以自动引导吗?

我正在编写一个LALR解析器生成器作为宠物项目. 我正在使用紫色的龙书来帮助我进行设计,而我从中收集到的是解析器中有四种错误恢复方法: 紧急模式:开始转储输入符号,直到找到由编译器设计人员预先选择的符号 短语级恢复:将输入字符串修改为允许当前产量减少的内容 错误产生:通过将错误合并到语法中来预测错误 全局更正:短语级别恢复的方式更加复杂(据我了解) 其中两个需要修改输入字符 ..
发布时间:2020-05-25 00:30:35 其他开发

Packrat解析与LALR解析

许多网站指出,packrat解析器可以在线性时间内解析输入. 因此,乍一看,它们比由yacc或bison工具构造的LALR解析器要快. 我想知道在用普通输入(例如编程语言源文件)而不用任何理论输入进行测试时,packrat解析器的性能是否比LALR解析器的性能更好/更差. 任何人都可以解释这两种方法之间的主要区别. 谢谢! 解决方案 我不是packrat解析专家,但是您可以 ..
发布时间:2020-05-25 00:29:23 其他开发

LL(1),LR(1),LR(0),LALR(1)语法的示例?

在线上是否有很好的资源,其中包含一些主要解析算法(LL(1),LR(1),LR(0),LALR(1))的语法集合?我发现有许多属于这些家族的语法,但是我不知道有人在其中写了大量示例语法. 有人知道这样的资源吗? 解决方案 作者还具有一些测试语法,并将其与第二版的代码示例捆绑在一起,可以在注意:所有这些语法都很小(少于二十个规则),因为这显然是一本已出版的书. ..
发布时间:2020-05-25 00:28:35 其他开发

通过生产规则向LALR(1)语法添加错误检查以处理所有输入

我有一个表示表达式的语法.为了简单起见,它是: S -> E E -> T + E | T T -> P * T | P P -> a | (E) a,+,*,(和)是我字母表中的字母. 上述规则可以使用正确的运算顺序和关联性来生成包含括号,乘法和加法的有效算术表达式. 我的目标是接受每个字符串,其中包含0个或多个我的字母.这是我的限制条件: 语法必须“接受"所有包含0 ..
发布时间:2020-04-30 10:10:45 其他开发