问题标签 [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.

0 投票
1 回答
784 浏览

python - Python:YACC 的问题

我正在使用 PLY 来解析以下句子:

“CS 2310 或同等经验”

所需的输出:

YACC 分词器符号:

(MISC_TEXT 旨在匹配其他术语未捕获的任何内容。)

解析器的一些相关规则:

不幸的是,这失败了:

我究竟做错了什么?我不完全了解如何设置优先规则。

另外,这是我的错误函数:

有没有办法查看解析器失败时正在尝试的规则?或者其他一些方法来让解析器打印出它的尝试规则?

UPDATE token_list()只是一个辅助函数:

更新2:这是我想要发生的解析:

我添加了这个解析动作:

当我尝试构建解析器时,我得到以下输出:

如上所述,由于语法错误,解析仍然失败。

0 投票
1 回答
2613 浏览

python - Python/YACC:解决移位/减少冲突

我正在使用 PLY。这是parser.out我的状态之一:

我想解决这个问题:

如何修复我的解析器文件以反映这一点?我是否需要通过回溯和尝试不同的规则来处理语法错误?

文档说:

然后使用这些值将数值优先级值和关联性方向附加到每个语法规则。这总是通过查看最右侧终端符号的优先级来确定。

如果规则没有终端怎么办?

更新:完整的语法:

0 投票
6 回答
36688 浏览

python - 如何最好地解析一个简单的语法?

好的,所以我已经问了一些关于这个项目的小问题,但是我仍然对我提出的设计没有太大的信心,所以我要问一个更广泛的问题。

我正在解析课程目录的先决条件描述。描述几乎总是遵循某种形式,这让我觉得我可以解析其中的大部分。

从文本中,我想生成一个课程先决条件关系图。(在我解析数据之后,这部分会很容易。)

一些示例输入和输出:

  1. 如果整个描述只是一个课程,则直接输出。

  2. 如果课程是连体的(“和”),它们都在同一个列表中输出

  3. 如果课程不连贯(“或”),则它们位于单独的列表中

  4. 在这里,我们有“and”和“or”。

一个使它更容易的警告:似乎“and”/“or”短语的嵌套永远不会大于示例 3 中所示的。

做这个的最好方式是什么?我从 PLY 开始,但我不知道如何解决减少/减少冲突。PLY 的优点是很容易操纵每个解析规则生成的内容:

使用 PyParse,如何修改parseString(). 我正在考虑以@Alex Martelli 的想法为基础,将状态保存在对象中并从中建立输出,但我不确定如何最好地完成。

例如,要处理“或”情况:

如何disjunctionCourses()知道要分离哪些较小的短语?它得到的只是令牌,但到目前为止解析的内容都存储在 中result,那么该函数如何判断其中的哪些数据result对应于 的哪些元素token?我想我可以搜索令牌,然后找到具有result相同数据的元素,但这感觉很复杂......

此外,还有许多包含杂项文本的描述,例如:

但我解析该文本并不重要。

解决这个问题的更好方法是什么?

0 投票
4 回答
593 浏览

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。

以下是完整性的所有相关规则:

0 投票
1 回答
740 浏览

python - yacc 无法减少(Python Lex-Yacc)

我正在尝试使用PLY (python implementation of yacc)yacc编写一个相当简单的语法,并且在我想要减少标记字符串时遇到了麻烦。

我想解释一系列采用不同类型参数的命令。每种不同类型的论点都有不同的标记。出来的标记字符串lex可能如下所示:

我想yacc将这些行中的每一行简化为一个名为instruction. 但是,yacc拒绝停止减少最后一个参数 ( ) 之后的第一行,并由于意外标记STRARG而生成语法错误。COMMAND

也就是说,不是减少COMMAND VARARG VARARG STRARGinstruction,而是再yacc移动一次来获取COMMAND VARARG VARARG STRARG COMMAND(从下一行拿起最后COMMAND一个,不应该被阅读)。

我的yacc代码部分如下所示:

我是否在我的规则规范中犯了一些明显的错误?这是我第一次使用lex/ yacc,所以我不会感到惊讶。

0 投票
1 回答
769 浏览

python - 用 PLY 解析 python

我正在尝试编写一个python解析器,在我看来它可以解析一个“if语句”,但它没有。它向我显示了“语法错误”消息。

有人可以告诉我我做错了什么吗?

提前致谢。

代码在这里:https ://github.com/narke/py2neko


我像这样修改了输入字符串:

输出是:

0 投票
2 回答
9671 浏览

parsing - Ply Lex 解析问题

我使用 ply 作为我的 lex 解析器。我的规格如下:

当我尝试解析以下字符串时:

它给出以下输出:

它不识别令牌 THEN,而是将“hen”作为标识符。

有任何想法吗?

0 投票
1 回答
1100 浏览

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 表达式)。我如何确保发生这种情况?

0 投票
2 回答
681 浏览

python - 是否有用 PLY 编写的 Python(或子集)的语法或词法分析器和解析器?

是否有用 PLY 编写的 Python(或子集)的语法或词法分析器和解析器?

0 投票
1 回答
381 浏览

python - 空产品对 PEG 的作用是什么?

空生产规则

在 lex-yacc LR 自底向上解析器生成器(例如 PLY)中很有用。

在什么情况下应该在 PEG 解析器中使用 Empty 产生式,例如 pyparsing ?