问题标签 [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 中使用 ply 构建一个词法分析器。我有 2 个标记,称为 TkConjuncion(指逻辑与)和 TkDisjuncion(指逻辑与)。
两者的规则都写如下(还有其他规则,但不相关):
在哪里和\\\/
是。但是当我测试我的代码时,它说:\/
\/\\
/\
错误:规则“t_TkConjuncion”的正则表达式无效。不平衡括号
词法分析器将\\
读取为\
,因此它接受 t_TkDisjuncion,但我不明白为什么它不接受其他令牌。我一直在网上研究,但我一无所获。
关于为什么会发生这种情况的任何想法?
python - 如何处理 Python 中的逻辑表达式?
假设我得到了 ie 格式的逻辑表达式。AvBv~C->D
. 它由布尔元素和运算符组成,例如(v,~,->)
(析取,否定,暗示)。我需要存储这些表达式以及它们所包含的每个元素。此外,每个元素都应该有一个描述,所以我想我将不得不创建一个代表它们的类(带有字段representation
和description
即。element1.representation="A"
但element1.description="This is element A"
我不确定这是否是 pythonic 方式,也许是一个以名称和描述为列的二维数组将是一个更好的主意,因为名称都是独一无二的。
- 我应该使用哪种数据结构来存储这样的表达式?请注意,我需要存储不同类型的元素和运算符,然后能够将它们恢复为逻辑表达式并对它们进行操作。
- 我应该创建识别每个元素和运算符的方法来处理逻辑操作还是有更好的方法?也许使用像 Lex-Yacc 这样的解析器或其他处理这些的库?
如果我不太清楚,请原谅我,但我来自 Java,我无法在同一个数据结构中存储不同类型的元素。
python - 带有单引号、双引号或三引号的 Lex 字符串
我的目标是像 Python 那样解析字符串。
问题:如何编写一个 lex 来支持以下内容:
"string..."
'string...'
"""multi line string \n \n end"""
'''multi line string \n \n end'''
一些代码:
我目前的想法是创建4 个独特的状态来匹配 4 个不同的字符串情况,但我想知道是否有更好的方法。
谢谢你的帮助!
python - 将自顶向下语法规则转换为 BNF
我继承了一个 ANTLR 语法,现在我需要编写一个好的、旧的、类似 YACC/BISON 的解析器(具体来说,我将 PLY 用于 python)。有许多奇怪的规则,我现在正在努力解决以下问题:
目前,我只有第一部分的规则,即
PLY 规则:
我怎样才能把那件上衣变成真正适合 PLY 的东西?我需要合理的规则,这样我就可以为单个 expr、过程、变量构造一个 AST 节点,然后还可以为链接变量访问和链接调用构建一些节点。更糟糕的是还有“!” . 原始语法的创建者这样做是为了给予最高优先级的因式分解,但对于转换,这完全是痛苦的。
python-2.7 - 使用 PLY 匹配普通字符串
我正在使用PLY编写解析器。问题类似于这个如何编写正则表达式以匹配字符串文字,其中转义是引号字符的两倍?. 但是,我使用双引号来打开和关闭一个字符串。例如:
“我不知道“A”是什么”
我将普通的字符串词法分析器定义为:
我有另一个用于变量的词法分析器:
问题是我的词法分析器无法将“我不知道 \"A\" 是什么”识别为 NORMSTRING 标记。它返回错误
请让我知道为什么它不正确。
python - 在 Python 中使用 plyj 解析 Java 源代码
我正在尝试解析 Java 源代码以获取方法名称、它们的调用、变量名称等。我正在寻找 Python 中的预构建或可扩展模块并偶然发现了 plyj ( https://github.com/musiKk/plyj)。我想找出一个方法,然后获取该方法的代码并根据某些条件对其进行一些字符串处理。但我无法弄清楚它的用法,这个例子太模糊了。谁能指出一个很好的用法示例?
另外,如果您可以让我知道 antlr3 ( https://github.com/antlr/antlr3 ) 是否更有用(例如),因为我是这些模块的新手,不知道该使用哪个模块。我没有性能问题,我只想根据功能和易用性来比较它们。
谢谢!
python - 将 PLY 与 python -OO 一起使用?
我有一个应用程序启动的系统:
我无法更改应用程序的启动方式,但我可以完全控制应用程序。当使用PLY向应用程序添加解析器时,我被 -OO 删除了 PLY 所依赖的文档字符串这一事实所困扰。
在以 -OO 开头的应用程序中是否无法使用 PLY?有没有什么聪明的 Python 技巧可以用来解决这个问题?
我一直在考虑使用 Cython 来编译解析器模块。我不确定它是否可以完成,它会增加一层复杂性,所以在我走这条路之前,我会很感激任何其他想法。
python - 在简单的 PLY 解释器中解决 args 列表中的不确定性
我无法解决我认为应该是微不足道的事情。我修改了 PLY 的 calc 示例以包含一些函数调用,以及一个可以接受一个或多个表达式的参数列表(表达式是名称、数字或文字)。问题是我的实现是不确定的,有时多行参数正确,有时则不正确。
例如,我在运行时输入:
有时如果我运行它,它会产生这个:
其他时候我运行程序,它会产生这个(我想避免):
解析器两次都进入正确的规则(p_expression_number),但有时它选择了错误的东西。有一半时间它似乎只是简化为表达式(忽略逗号),然后抱怨它不理解下一个参数,即逗号。其他时候还好。
我该如何解决这个问题?我已经尝试了几件事,并且查找了示例,但我无法弄清楚。
这是我的代码:
python - 使用 PLY 用 Python 编写的语言会很慢吗?
我对创建自己的编程语言很感兴趣,我想使用 python。我的问题是,使用 PLY 库用 Python 编写的语言是否会比 CPython 慢得多,或者它们在程序执行速度方面是否大致相同?同样在性能方面,如果我在 C 中实现它会好多少?
谢谢,弗朗西斯
parsing - 我可以做些什么来避免在这个语法中回溯的需要吗?
我正在尝试为一种编程语言实现一个解释器,最后偶然发现了一个我需要回溯的情况,但是我的解析器生成器(ply,一个用 Python 编写的 lex&yacc 克隆)不允许这是涉及的规则:
错误发生在表单的语句中
其中 SomeGuy.SomeOtherGuy 将是存储类型的有效变量(类型是第一类对象)-并且该类型具有不带参数的构造函数
解析该表达式时发生的情况是解析器构造了一个 var_access_start = SomeGuy var_access_metcall = 。SomeOtherGuy ( ) 然后找到一个分号并以错误状态结束 - 我显然希望解析器回溯,并尝试构造一个表达式 = new typereference(SomeGuy .SomeOtherGuy) LPAREN empty_list RPAREN 然后事情会起作用,因为 ; 可以匹配 var 语句语法
但是,鉴于 PLY 不支持回溯,而且我绝对没有足够的解析器生成器经验来自己实际实现它——我可以对我的语法进行任何更改来解决这个问题吗?
我考虑过使用 -> 而不是 . 作为“方法调用”运算符,但我宁愿不改变语言只是为了安抚解析器。此外,我将方法作为“变量引用”的一种形式,因此您可以执行 myObject.someMethod().aChildOfTheResult[0].doSomeOtherThing(1,2,3).helloWorld() 但如果可以修改语法以实现同样的效果,这也对我有用
谢谢!