问题标签 [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 回答
825 浏览

python - PLY:C 解析器中的令牌转移问题

我正在使用 PLY 编写一个 C 解析器,最近遇到了一个问题。这段代码:

是正确的 C 代码,因为 my_type 被定义为之前使用的类型。我通过在解析器中填充类型符号表来处理它,词法分析器使用该表来区分类型和简单标识符。

但是,虽然类型声明规则以 SEMI(';' 标记)结尾,但 PLYmy_type在决定使用第一行完成之前将标记从第二行转移。因此,我没有机会将类型符号表中的更新传递给词法分析器,它会将 my_type 视为标识符而不是类型。

任何修复的想法?

完整代码位于:http ://code.google.com/p/pycparser/source/browse/trunk/src/c_parser.py 不知道如何从中创建一个更小的示例。

编辑:

问题解决了。请参阅下面的解决方案。

0 投票
5 回答
1832 浏览

python - 在 ply 的正则表达式中匹配 unicode

我正在匹配标识符,但现在我遇到了一个问题:我的标识符允许包含 unicode 字符。因此,旧的做事方式是不够的:

我的标记语言解析器中,我通过允许除我明确使用的字符之外的所有字符来匹配 unicode 字符,因为我的标记语言只有两个或三个我需要以这种方式转义的字符。

如何将所有 unicode 字符与 python 正则表达式和 ply 匹配?这也是一个好主意吗?

我想让人们在他们的程序中使用像 Ω » « ° foo² väli π 这样的标识符作为标识符(变量名等)。见鬼!如果可行,我希望人们可以用自己的语言编写程序!无论如何,如今在很多地方都支持 unicode,它应该传播开来。

编辑:python 正则表达式似乎无法识别 POSIX 字符类。

编辑:为了更好地解释我需要什么。我需要一个匹配所有 unicode 可打印字符但根本不匹配 ASCII 字符的正则表达式。

编辑: r"\w" 做了一些我想要的东西,但它不匹配« »,我还需要一个不匹配数字的正则表达式。

0 投票
4 回答
663 浏览

python - 使用 lex/yacc 标记剩余数据

原谅我,我对解析和 lex/yacc 完全陌生,我可能有点不知所措,但尽管如此:

我正在用 PLY 编写一个非常基本的计算器,但它的输入可能并不总是一个方程,我需要在解析时确定它是否是。输入的极端情况是可以完美地评估为方程,它可以很好地解析和计算,或者与方程完全不同,它解析失败并且也很好。

灰色区域是具有等式部分的输入,解析器将抓取并计算出这些部分。这不是我想要的——我需要能够判断字符串的某些部分是否没有被拾取和标记,这样我就可以抛出一个错误,但我不知道该怎么做。

有谁知道我如何定义,基本上,一个“抓住任何剩下的东西”令牌?还是有更好的方法可以处理这个问题?

0 投票
3 回答
1517 浏览

python - 一个带有 PLY 的解析器的几个词法分析器?

我正在尝试使用 PLY 为用于生成 linux 内核配置选项的 Kconfig 语言实现 python 解析器。

有一个名为 source 的关键字执行包含,所以我所做的是当词法分析器遇到这个关键字时,我更改词法分析器状态以创建一个新的词法分析器,它将对源文件进行 lex:

在其他地方我有这条线

这是解析器将调用的“主”或“根”词法分析器。

我的问题是我不知道如何告诉解析器使用不同的词法分析器或告诉“source_lexer”返回一些东西......

也许应该使用克隆功能......

谢谢

0 投票
1 回答
2492 浏览

parsing - 解决 LALR 解析器中的移位/减少冲突

我一直在使用 PLY 为我的语言构建解析器,但是我遇到了 shift/reduce 冲突,这给我带来了一些麻烦。我的语言具有语法 ala C++ 模板的泛型类型。所以现在我有这样的规则:

但是,我发现它无法解析:

(由于显而易见的原因,这是一个问题)。以下是调试输出:

如果需要更多我的解析器,我可以提供。谢谢。

编辑:向我建议的一种解决方案是使类型成为自己的令牌。这需要做一些工作,因为我的语言不使用预处理器,包括像 C/C++ 这样的系统,但是我认为它仍然是可能的,但是我更喜欢一个仅限于语法的解决方案。

0 投票
5 回答
182 浏览

python - 我应该使用 Lex 还是自制解决方案来解析公式?

我正在编写一个基于规则的小型“数学”引擎。我意识到这不清楚,所以我将提供一个小例子。

假设您有一些变量 a,它包含一个整数。您还可以将一些功能应用于该号码,即

  • sqr- 平方数
  • flp- 翻转数字的位
  • dec- 减少数字
  • inc- 增加数字

然后你可以说,do_formula(a, "2sqr+inc+flp")。如果 a 是 3,它会将它平方两次(81),增加它(82),然后翻转它的位(~82——如果处理有符号整数,我相信它是 -83)。

解析公式的最佳方法是什么?它相对简单,我正在考虑将所有操作码都设为 3 个字符……使用 Lex 会不会过大?我应该只写一个简单的自制解决方案还是完全使用其他东西?

我意识到上面的例子很愚蠢;我不是在构建一个可以做到这一点的计算器,但它说明了我想要做得足够好。

0 投票
6 回答
13540 浏览

python - md5 模块错误

我正在使用使用 md5 模块(以及其他)的旧版本 PLY:

...虽然脚本运行但并非没有此错误:

如何修复它以使错误消失?

谢谢

0 投票
4 回答
8799 浏览

python - 如何编写正则表达式以匹配字符串文字,其中转义符是引号字符的两倍?

我正在使用ply编写一个需要识别 FORTRAN 字符串文字的解析器。这些用单引号引起来,转义字符是双引号。IE

'I don''t understand what you mean'

是一个有效的转义 FORTRAN 字符串。

Ply 在正则表达式中接受输入。到目前为止,我的尝试不起作用,我不明白为什么。

t_STRING_LITERAL = r"'[^('')]*'"

有任何想法吗?

0 投票
3 回答
312 浏览

python - 如何在正则表达式中评估匹配的数字?- 使用 Ply 对 FORTRAN 'H' 编辑描述符进行词法分析

我正在使用Ply来解释 FORTRAN 格式字符串。我在编写正则表达式以匹配格式为“H”的编辑描述符时遇到问题

x H ccccc ...

其中x指定在“H”之后要读入的字符数

Ply 将标记与单个正则表达式匹配,但我无法使用正则表达式执行上述操作。我正在寻找类似的东西,

(\d+)[Hh].{\1}

where\1被解析为整数并作为正则表达式的一部分进行评估 - 但事实并非如此。

看来以后在同一个正则表达式中不可能使用匹配的数字,是这样吗?

有没有人有其他可能使用 Ply 的解决方案?

0 投票
2 回答
1073 浏览

python - Python PLY 解析项出现零次或多次

我正在使用 Python 和 PLY 来解析类似 LISP 的 S-Expressions,并且在解析函数调用时可以有零个或多个参数。我怎样才能把它放到 yacc 代码中。到目前为止,这是我的功能:

我需要用允许零个或多个 EXPR 的东西替换“[EXPR]”。我怎样才能做到这一点?