Compiler construction 有没有一种方法可以在/到PLY(pythonlex-yacc)中解析lex和yacc文件

Compiler construction 有没有一种方法可以在/到PLY(pythonlex-yacc)中解析lex和yacc文件,compiler-construction,yacc,lex,ply,Compiler Construction,Yacc,Lex,Ply,众所周知,PLY试图实现Lex和Yacc在Python中的功能。我想知道该库是否提供了一种方法来将.l(lex文件)或.y(yacc文件)本身解析/翻译/转换为PLY使用的语法定义 这就是我得到的语言的.l和.y文件的用例,我现在想用PLY解析用上述语言编写的文件,这样我就可以完全按照原始语言定义的方式处理标记。我不知道 语法规范非常相似,通常可以进行复制和粘贴。请注意,Ply解析器函数p.*对应于单个产品,而不是非终端;Ply允许您将两个产品组合成相同的动作功能,以防动作相同,但对于机械翻译,

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

这就是我得到的语言的.l和.y文件的用例,我现在想用PLY解析用上述语言编写的文件,这样我就可以完全按照原始语言定义的方式处理标记。

我不知道

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

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

由于Ply依赖于Python的正则表达式库,所以可能需要更改正则表达式,特别是在使用(f)lex宏定义的情况下。此外,在Ply中使用模式正则表达式变量会改变模式接受顺序;您可能希望在开始时避免这些。(即使使用图案功能,Ply也不会实现最大咀嚼,但至少可以控制验收顺序。)

与(F)lex不同,Ply不能优化大量正则表达式。在(F)lex scanner定义中,通常对每个关键字使用单独的模式,依靠scanner生成器生成高效的类似trie的状态机。Ply无法做到这一点,而且使用大量模式可能会对性能造成重大影响(尽管如此,词汇分析现在很少成为性能瓶颈)