问题标签 [ply]
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.
python - Python:YACC 的问题
我正在使用 PLY 来解析以下句子:
“CS 2310 或同等经验”
所需的输出:
YACC 分词器符号:
(MISC_TEXT 旨在匹配其他术语未捕获的任何内容。)
解析器的一些相关规则:
不幸的是,这失败了:
我究竟做错了什么?我不完全了解如何设置优先规则。
另外,这是我的错误函数:
有没有办法查看解析器失败时正在尝试的规则?或者其他一些方法来让解析器打印出它的尝试规则?
UPDATE token_list()
只是一个辅助函数:
更新2:这是我想要发生的解析:
我添加了这个解析动作:
当我尝试构建解析器时,我得到以下输出:
如上所述,由于语法错误,解析仍然失败。
python - Python/YACC:解决移位/减少冲突
我正在使用 PLY。这是parser.out我的状态之一:
我想解决这个问题:
如何修复我的解析器文件以反映这一点?我是否需要通过回溯和尝试不同的规则来处理语法错误?
文档说:
然后使用这些值将数值优先级值和关联性方向附加到每个语法规则。这总是通过查看最右侧终端符号的优先级来确定。
如果规则没有终端怎么办?
更新:完整的语法:
python - 如何最好地解析一个简单的语法?
好的,所以我已经问了一些关于这个项目的小问题,但是我仍然对我提出的设计没有太大的信心,所以我要问一个更广泛的问题。
我正在解析课程目录的先决条件描述。描述几乎总是遵循某种形式,这让我觉得我可以解析其中的大部分。
从文本中,我想生成一个课程先决条件关系图。(在我解析数据之后,这部分会很容易。)
一些示例输入和输出:
如果整个描述只是一个课程,则直接输出。
如果课程是连体的(“和”),它们都在同一个列表中输出
如果课程不连贯(“或”),则它们位于单独的列表中
在这里,我们有“and”和“or”。
一个使它更容易的警告:似乎“and”/“or”短语的嵌套永远不会大于示例 3 中所示的。
做这个的最好方式是什么?我从 PLY 开始,但我不知道如何解决减少/减少冲突。PLY 的优点是很容易操纵每个解析规则生成的内容:
使用 PyParse,如何修改parseString()
. 我正在考虑以@Alex Martelli 的想法为基础,将状态保存在对象中并从中建立输出,但我不确定如何最好地完成。
例如,要处理“或”情况:
如何disjunctionCourses()
知道要分离哪些较小的短语?它得到的只是令牌,但到目前为止解析的内容都存储在 中result
,那么该函数如何判断其中的哪些数据result
对应于 的哪些元素token
?我想我可以搜索令牌,然后找到具有result
相同数据的元素,但这感觉很复杂......
此外,还有许多包含杂项文本的描述,例如:
但我解析该文本并不重要。
解决这个问题的更好方法是什么?
yacc - BNF:输入错误的非终结符
我正在为国际象棋代数符号开发 BNF,并遇到了一个有趣的案例,输入到错误的非终端。
我的开始 BNF 规则如下(请注意,这故意不包括 castling 或 notes):
piece
, start_position
, capture
, 和promotion
可以为空,因此允许像 'd4' 这样的移动。问题是,当输入这样的移动时,输入 ('d4') 被 采用start_position
,从而导致错误 b/c 没有更多的输入end_position
,不能为空。
显而易见的破解/解决方法是允许end_position
为空,然后检查我们是否有任何输入并采取相应的行动。
这确实有效,但我想知道是否有办法解决这个问题。如果导致整个表达式不匹配,输入是否可能不转到第一个匹配符号?
另一个问题是这是否是 BNF 的标准行为,还是我正在使用的 yaccer 的问题:PLY v 3.3。
尝试使用 flex/bison 并得到了同样的结果。所以它似乎并不特定于 PLY。
以下是完整性的所有相关规则:
python - yacc 无法减少(Python Lex-Yacc)
我正在尝试使用PLY (python implementation of yacc)yacc
编写一个相当简单的语法,并且在我想要减少标记字符串时遇到了麻烦。
我想解释一系列采用不同类型参数的命令。每种不同类型的论点都有不同的标记。出来的标记字符串lex
可能如下所示:
我想yacc
将这些行中的每一行简化为一个名为instruction
. 但是,yacc
拒绝停止减少最后一个参数 ( ) 之后的第一行,并由于意外标记STRARG
而生成语法错误。COMMAND
也就是说,不是减少COMMAND VARARG VARARG STRARG
到instruction
,而是再yacc
移动一次来获取COMMAND VARARG VARARG STRARG COMMAND
(从下一行拿起最后COMMAND
一个,不应该被阅读)。
我的yacc
代码部分如下所示:
我是否在我的规则规范中犯了一些明显的错误?这是我第一次使用lex
/ yacc
,所以我不会感到惊讶。
python - 用 PLY 解析 python
我正在尝试编写一个python解析器,在我看来它可以解析一个“if语句”,但它没有。它向我显示了“语法错误”消息。
有人可以告诉我我做错了什么吗?
提前致谢。
代码在这里:https ://github.com/narke/py2neko
我像这样修改了输入字符串:
输出是:
parsing - Ply Lex 解析问题
我使用 ply 作为我的 lex 解析器。我的规格如下:
当我尝试解析以下字符串时:
它给出以下输出:
它不识别令牌 THEN,而是将“hen”作为标识符。
有任何想法吗?
parsing - Ply:定义“c”语言规则时的问题
我正在尝试为 c 语言编写一个解析器,它能够处理表达式、赋值、if-else 和 while 循环。
这是我的规则:
表达式 -> 表达式 op 表达式
表达式 -> ID
表达式 -> NUMBER
语句 -> ID ASSIGN 表达式
语句 -> IF 表达式 THEN 语句
语句 -> WHILE 表达式 THEN 语句
大写字母中的所有内容都是令牌(终端符号)
解析字符串“while h<=0 then t=1”时,似乎将“h”视为表达式(使用规则表达式->ID)。因此,“WHILE 表达式 THEN 语句”中的表达式变为“h”。显然,我希望它考虑“h<=0”作为表达式(使用规则表达式 -> 表达式 op 表达式)。我如何确保发生这种情况?
python - 是否有用 PLY 编写的 Python(或子集)的语法或词法分析器和解析器?
是否有用 PLY 编写的 Python(或子集)的语法或词法分析器和解析器?
python - 空产品对 PEG 的作用是什么?
空生产规则
在 lex-yacc LR 自底向上解析器生成器(例如 PLY)中很有用。
在什么情况下应该在 PEG 解析器中使用 Empty 产生式,例如 pyparsing ?