问题标签 [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 投票
3 回答
1706 浏览

python - PLY:快速解析一长串项目?

我正在使用一个相当简单的解析器PLY,我的规则之一采用以下形式:

输入文件通常是简单的things 列表,因此解析本身并不复杂。然而,我的一些输入文件非常大(经常超过 100,000 行,在极端情况下超过 1,000,000)。在分析中(通过cProfile 和 pstats),运行时的大部分时间都被重复调用占用p_things——大概是对列表中每个项目的调用things

有没有办法减少这个时间,或更有效的方式来构建这个规则?到目前为止,我看到的大多数答案(以及我发现的规范编译器信息)都将此方法列为构造可解析项列表的公认方法,无论长度如何。

0 投票
1 回答
2628 浏览

python - 使用 PLY 解析 SQL 语句

我知道还有其他工具可以解析 SQL 语句,但出于教育目的,我正在推出自己的工具。我现在被我的语法卡住了。如果你能很快发现一个错误,请告诉我。

当我尝试解析像“SELECT a FROM b;”这样的语句时 我在 FROM 令牌处收到语法错误...非常感谢任何帮助!

(编辑)代码:

0 投票
2 回答
1060 浏览

python - ply lexmatch 正则表达式与通常的 re 具有不同的组

我正在使用 ply 并注意到存储在 t.lex.lexmatch 中的令牌重新匹配与使用 re 模块以通常方式定义的 sre_pattern 之间存在奇怪的差异。group(x) 似乎偏离了 1。

我定义了一个简单的词法分析器来说明我所看到的行为:

(我收到关于 t_error 的警告,但现在忽略它。)现在我将一些输入输入到词法分析器中并获得一个令牌:

我得到一个LexToken(CHAR,<_sre.SRE_Match object at 0x100fb1eb8>,1,0). 我想看一个匹配对象:

所以现在我看一下这些组:

m.group()=>'h'正如我所料。

m.group(0)=>'h'正如我所料。

m.group(1)=> 'h',但我希望它没有这样的组。

将此与手动创建这样的正则表达式进行比较:

这给出了不同的组:

m2.group()='h'正如我所料。

m2.group(0)='h'正如我所料。

m2.group(1)正如IndexError: no such group我所料。

有谁知道为什么存在这种差异?

0 投票
1 回答
297 浏览

python - Python PLY - 这个语法有问题吗?

我正在尝试将 Python PLY 用于简单的表达式解析器,但我无法让它工作。该代码可在 bitbucket 获得,但有问题的部分是:

首先,定义:

似乎是倒置的,给我结果:3-9 = 6 和 2 / 8 = 4。

其次,括号表达式factor: ( expr )不起作用。特别是,部分:

不能正常工作。解析诸如(9+7)raises 之类的表达式:

这些错误的根源是什么?

0 投票
1 回答
706 浏览

python - 在 Python 中使用 PLY 的两个词标记

我正在编写一个编译器作为实验室练习的一部分,并选择使用 PLY 在 Python 中进行。我花了一些时间试图解决这个特殊的问题,但我的实验室助手也走到了死胡同。

在我必须编写的语言中,声明符用两个单词“was a”指定。例如:

x was a number and x became 5.

等于

int x; x = 5;

使用 PLY 解析时,我已将 'was a' 作为保留字

但是当我使用 PLY 词法分析器进行解析时,它会将 'was' 和 'a' 视为单独的标记

如何was a在没有 PLY 词法分析器拆分的情况下将其解析为“声明”类型的标记?

如果其中任何一个不清楚,请告诉我,我会尽力回答任何问题

谢谢,

皮特

0 投票
2 回答
4626 浏览

python - Python PLY 解析器

我试图四处寻找这个问题的答案,但似乎找不到。我正在尝试使用 PLY 编写 Python 中的解析器作为一种组合语言。我的 BNF 的简化版本如下所示:

其中数字和字母就像 int 和 char。

Yacc 文档 ( http://www.dabeaz.com/ply/ply.html#ply_nn23 ) 仅显示简单算术表达式的语法,其中 p[0] 应该是很清楚的。

我的问题是我的 BNF 中的语句列表该怎么办?我有:

但我真的不知道下一步该放什么。任何帮助将不胜感激!

0 投票
1 回答
317 浏览

parsing - 如何让 YACC 类型的解析器停止在最短匹配输入上?

这是上下文:我有一个文件(或流),我想处理它的标题,停止,然后以不同的方式处理其余数据。也就是说,假设我有一个像BEGIN GOOD GOOD GOOD GOOD GOOD DONE JUNK JUNK JUNK JUNK .... 第一部分 ( BEGIN GOOD+ DONE) 符合我的语法,我一看到就想停下来DONE

AFAIK、YACC 和朋友们想继续消费令牌直到没有更多,所以我必须编写更多的语法来匹配所有JUNK. 有没有解决的办法?

我正在使用 PLY(Python 的 Lex 和 Yacc 实现),但我对这里的一般答案持开放态度。

0 投票
1 回答
2448 浏览

python - 解析器 YACC 中的 EOF 错误

我正在尝试使用 Python PLY 库中提供的 yacc 解析器解析字符串。解析器本身很长,但我遇到的问题是它总是给我同样的错误,无论我输入什么样的字符串。错误是这样的:

yacc:输入中的解析错误。EOF

词法分析器运行完美,所以我认为解析器是问题所在。但我不明白这个错误,所以我什至不知道先去哪里解决这个问题

有任何想法吗?非常感谢你!

0 投票
2 回答
574 浏览

python - 使用 PLY Python 对求和运算符和有符号整数进行词法分析

如何构建原始表达式以区分求和运算符和有符号整数?我正在使用 PLY Python。

不幸的是,这没有用:

0 投票
3 回答
3089 浏览

python - 词法分析器错误处理 PLY Python

t_error() 函数用于处理检测到非法字符时发生的词法错误。我的问题是:如何使用此功能获取有关错误的更具体信息?像错误类型,错误出现在哪个规则或部分等。