繁体   English   中英

有没有一种方法可以在PLY中解析lex和yacc文件(Python Lex-Yacc)

[英]Is there a way to parse lex and yacc files in/to PLY (Python Lex-Yacc)

众所周知,PLY试图实现Lex和Yacc在Python中所做的事情。 我想知道库是否提供了一种将.l(lex文件)或.y(yacc文件)本身解析/翻译/转换为PLY所使用的语法定义的方法。

这是用例,我有该语言的.l和.y文件,现在我想使用PLY解析以上述语言编写的文件,以便我可以按照原始语言定义所声明的那样完全处理标记成为。

从来没听说过。

语法规范足够相似,您通常可以复制和粘贴。 请注意,Ply解析器函数p_*对应于单个产品,而不是非终端产品; 如果动作相同,则Ply允许您将两个产品组合到同一个动作函数中,但是对于机械平移而言,最好是每个产品从一个功能开始,然后再进行优化。 还要注意,Ply没有实现默认操作$$ = $1 (以Ply术语表示p[0] = p[1] ),因此必须将它们明确化(在这种情况下,具有默认操作的所有生产都可以合并为一个解析器动作函数。)

层不执行规则中的动作; 如果您现有的yacc / bison解析器依赖于它们,则必须将其删除。 野牛的-v输出在这里很有用。

由于Ply依赖于Python的正则表达式库,因此可能需要更改正则表达式,尤其是如果它们使用(f)lex宏定义。 同样,在Ply中使用模式正则表达式变量会更改模式接受顺序; 您可能一开始就要避免这些。 (即使具有模式功能,Ply也不执行最大的限制,但至少可以控制接受顺序。)

与(F)lex不同,Ply无法优化大量正则表达式。 在(F)lex扫描器定义中,通常对每个关键字使用单独的模式,依靠扫描器生成器来产生实际上是高效的特里样状态机。 Ply无法做到这一点,并且使用大量模式可能会严重打击性能(尽管即使如此,词法分析现在也很少成为性能瓶颈。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM