问题标签 [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 - PLY:快速解析一长串项目?
我正在使用一个相当简单的解析器PLY,我的规则之一采用以下形式:
输入文件通常是简单的thing
s 列表,因此解析本身并不复杂。然而,我的一些输入文件非常大(经常超过 100,000 行,在极端情况下超过 1,000,000)。在分析中(通过cProfile 和 pstats),运行时的大部分时间都被重复调用占用p_things
——大概是对列表中每个项目的调用things
。
有没有办法减少这个时间,或更有效的方式来构建这个规则?到目前为止,我看到的大多数答案(以及我发现的规范编译器信息)都将此方法列为构造可解析项列表的公认方法,无论长度如何。
python - 使用 PLY 解析 SQL 语句
我知道还有其他工具可以解析 SQL 语句,但出于教育目的,我正在推出自己的工具。我现在被我的语法卡住了。如果你能很快发现一个错误,请告诉我。
当我尝试解析像“SELECT a FROM b;”这样的语句时 我在 FROM 令牌处收到语法错误...非常感谢任何帮助!
(编辑)代码:
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
我所料。
有谁知道为什么存在这种差异?
python - Python PLY - 这个语法有问题吗?
我正在尝试将 Python PLY 用于简单的表达式解析器,但我无法让它工作。该代码可在 bitbucket 获得,但有问题的部分是:
首先,定义:
和
似乎是倒置的,给我结果:3-9 = 6 和 2 / 8 = 4。
其次,括号表达式factor: ( expr )
不起作用。特别是,部分:
不能正常工作。解析诸如(9+7)
raises 之类的表达式:
这些错误的根源是什么?
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 词法分析器拆分的情况下将其解析为“声明”类型的标记?
如果其中任何一个不清楚,请告诉我,我会尽力回答任何问题
谢谢,
皮特
python - Python PLY 解析器
我试图四处寻找这个问题的答案,但似乎找不到。我正在尝试使用 PLY 编写 Python 中的解析器作为一种组合语言。我的 BNF 的简化版本如下所示:
其中数字和字母就像 int 和 char。
Yacc 文档 ( http://www.dabeaz.com/ply/ply.html#ply_nn23 ) 仅显示简单算术表达式的语法,其中 p[0] 应该是很清楚的。
我的问题是我的 BNF 中的语句列表该怎么办?我有:
但我真的不知道下一步该放什么。任何帮助将不胜感激!
parsing - 如何让 YACC 类型的解析器停止在最短匹配输入上?
这是上下文:我有一个文件(或流),我想处理它的标题,停止,然后以不同的方式处理其余数据。也就是说,假设我有一个像BEGIN GOOD GOOD GOOD GOOD GOOD DONE JUNK JUNK JUNK JUNK ...
. 第一部分 ( BEGIN GOOD+ DONE
) 符合我的语法,我一看到就想停下来DONE
。
AFAIK、YACC 和朋友们想继续消费令牌直到没有更多,所以我必须编写更多的语法来匹配所有JUNK
. 有没有解决的办法?
我正在使用 PLY(Python 的 Lex 和 Yacc 实现),但我对这里的一般答案持开放态度。
python - 解析器 YACC 中的 EOF 错误
我正在尝试使用 Python PLY 库中提供的 yacc 解析器解析字符串。解析器本身很长,但我遇到的问题是它总是给我同样的错误,无论我输入什么样的字符串。错误是这样的:
yacc:输入中的解析错误。EOF
词法分析器运行完美,所以我认为解析器是问题所在。但我不明白这个错误,所以我什至不知道先去哪里解决这个问题
有任何想法吗?非常感谢你!
python - 使用 PLY Python 对求和运算符和有符号整数进行词法分析
如何构建原始表达式以区分求和运算符和有符号整数?我正在使用 PLY Python。
不幸的是,这没有用:
python - 词法分析器错误处理 PLY Python
t_error() 函数用于处理检测到非法字符时发生的词法错误。我的问题是:如何使用此功能获取有关错误的更具体信息?像错误类型,错误出现在哪个规则或部分等。