使用PLY读取YACC文件(file.y)
Use PLY to read YACC file (file.y)
PLY 有一个有点复杂的系统来定义标记、词法、语法等,但我想使用已经存在的 Ruby 的 file - [=11= 创建一个解析树].
有没有办法在 PLY 中读取文件 parse.y
并为 Ruby 程序创建解析树?
简答:没有。
该文件包含 13,479 行;实际语法 769 行,包括 46 个中间规则操作 (MRA),因此有将近 13,000 行 C 代码必须在 Python 中重写才能重现功能。该功能包括词法分析器,它是大约一千行 C 代码加上支持函数。 (如果你觉得Ply定义词法分析的方法很复杂,等你尝试重现一个用C写的手写分析器吧:-))
我使用 bison 从该文件中提取了语法(尽管我不得不稍微编辑该文件以使 bison 不被它窒息;我不知道 Makefile 在该源存储库中的位置,但我想它包括一个预处理步骤,可以从 parse.y
) 中生成有效的野牛语法文件。所以你也可以这样做,并将结果用作 Ply 语法的基础。您也许可以自动构建语法,但我猜您仍然需要手工完成大量工作,并且如果您至少没有编写解析器的一些经验,那么工作是行不通的简单。 (不过,这可能具有教育意义。)
祝你项目顺利。
PLY 有一个有点复杂的系统来定义标记、词法、语法等,但我想使用已经存在的 Ruby 的 file - [=11= 创建一个解析树].
有没有办法在 PLY 中读取文件 parse.y
并为 Ruby 程序创建解析树?
简答:没有。
该文件包含 13,479 行;实际语法 769 行,包括 46 个中间规则操作 (MRA),因此有将近 13,000 行 C 代码必须在 Python 中重写才能重现功能。该功能包括词法分析器,它是大约一千行 C 代码加上支持函数。 (如果你觉得Ply定义词法分析的方法很复杂,等你尝试重现一个用C写的手写分析器吧:-))
我使用 bison 从该文件中提取了语法(尽管我不得不稍微编辑该文件以使 bison 不被它窒息;我不知道 Makefile 在该源存储库中的位置,但我想它包括一个预处理步骤,可以从 parse.y
) 中生成有效的野牛语法文件。所以你也可以这样做,并将结果用作 Ply 语法的基础。您也许可以自动构建语法,但我猜您仍然需要手工完成大量工作,并且如果您至少没有编写解析器的一些经验,那么工作是行不通的简单。 (不过,这可能具有教育意义。)
祝你项目顺利。