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

python - 子语言的优先级

我正在为一种由两种子语言组成的语言在 PLY 中编写解析器:“普通”表达式语言和类型注释语言。问题是它们共享一些标记,并且两种语言之间的优先级不同。

例如,在表达式语言中a | b, c应该等价于(a | b), c(并且与在 Python 中的含义相同),而在类型语言中应该等价于a | (b, c)( typea或 type b, c,即具有 typeb和 type成员的元组c)。

真正的问题比这要复杂一些,但基本上还是一样的。

在 PLY 中是否可以临时更改优先级?如果没有,我可以应用另一种解决方案吗?

0 投票
2 回答
300 浏览

python - 解析隐含与显式时间运算符

我一直在使用 ply 编写一个 LALR 解析器,并且在尝试解析乘法时遇到了不一致。

由于完整的解析器链接长达数千行,我不会在此处包含它,但我创建了一个简单的演示:

PLY 没有报告移位/减少冲突或减少/减少冲突,但我得到以下不一致:

这对我来说似乎很奇怪,因为显式和隐式时间规则具有相同的优先级。但我认为这可能是因为 PLY 为“times”令牌分配了优先级,因此将其转移到堆栈上,以支持使用 p_plus 规则减少表达式。我怎样才能解决这个问题?

编辑:更简单的演示。

0 投票
0 回答
193 浏览

python - Python PLY - 跳过生产规则

使用 PLY 时,是否可以跳过给定生产规则?(就像 lex 允许使用 obj.lexer.skip(1) 跳过某些标记一样)

例如:

如何才能做到这一点?

0 投票
2 回答
172 浏览

python - 有没有办法在 PLY 的语法中指出一个或多个?

我想写一个性质的语法规则:

其中{}表示 1 个或多个。

例如,Lua 的语法使用相同的语法:

这可能吗?这是否符合上下文无关语法?

0 投票
2 回答
199 浏览

python - 我的语法歧义在哪里?

我有以下模棱两可的语法,其中大写字母规则适用于简单的词汇标记:

我收到 8 个 shift/reduce 错误(使用 Python 2.7 和 PLY 时)。

歧义是我如何定义“一个或多个”的结果,例如。block : expression | expression block?

0 投票
2 回答
792 浏览

parsing - 如何解决我的 PLY 语法中的这种减少班次冲突?

我正在为编程语言编写语法,但我首先遇到了移位/减少问题。问题可以在状态中找到:

在进一步解释之前,我想澄清一下:

这是因为程序无法确定我是在调用函数还是将 ID 用作值(例如常量或变量)而导致移位/减少?

继续,有可能解决这个问题吗?我的语言目前不使用行分隔符(例如 C 中的“;”或 Python 中的“\n”)。解析器是 LALR(1)。

在函数调用或带有行分隔符的变量之间进行破译的最有效(向语法中添加最少规则)的方法是什么?

编辑:这是该状态的前瞻。

0 投票
1 回答
553 浏览

python - 为什么 Python 的 PLY 在 $end 标记处停止解析?

我在我的语法上运行 Python 的 PLY 库。它似乎可以编译,并且库不会提醒我任何 shift/reduce 或 reduce/reduce 错误。但是,在一个非常简单的示例上运行会引发错误。

挖掘parser.out文件显示错误发生在程序的最后:

其中状态 113 是:

据我所知,解析器应该减少到fn_def.

$end为什么到达令牌时不会发生reduce ?

(如果有帮助,我可以粘贴我的语法,虽然它可能有点长。)

语法

0 投票
1 回答
1905 浏览

python - 解析项多次出现导致的无限递归 YACC-PLY

我正在处理一个 Yacc(层层),我不知道如何在不使程序由于无限递归而崩溃的情况下使解析项出现更多次。假设我有:

注意: 问题类似于:Python PLY 零次或多次出现解析项,但提出的解决方案不起作用,我总是有无限递归。

0 投票
2 回答
1821 浏览

python - Reporting parse errors from PLY to caller of parser

So I've implemented a parser using PLY — but all the PLY documentation deals with parse and tokenization errors by printing out error messages. I'm wondering what the best way to implement non-fatal error-reporting is, at an API level, to the caller of the parser. Obviously the "non-fatal" restriction means exceptions are out — and it feels like I'd be misusing the warnings module for parse errors. Suggestions?

0 投票
1 回答
893 浏览

parsing - 如何在作品中编写kleene 闭包?

我正在使用 PLY 编写解析器。解析器所用的语言称为 s-lang,在该语言的语法中,我有以下产生式:

IdentList → IdentList ,标识符 ArrayBrackets*

我已经为 ArrayBrackets 编写了产品。我尝试将上述产品编写为

我有变量 COMMA 和 ID 的正则表达式。问题是当我包含星号时,出现以下错误:

我试图逃避明星,但它没有帮助 --- 我应该如何在作品中编写 Kleene 闭包?

[编辑]

在仔细检查了这个问题之后,我看到@GrijeshChauhan 说,给定一个非终结符 e。e 的 Kleene 闭包,即 e* 将由以下产生式给出

S → eS | ^

whereeS是 with 的连接,e并且S^null/empty/epsilon。我的问题是, e 必须是终端吗?我可以不应用相同的逻辑为非终结符生成新的产品吗,例如: