Compiler construction 如何从编译器中提取语法

Compiler construction 如何从编译器中提取语法,compiler-construction,grammar,context-free-grammar,finite-automata,Compiler Construction,Grammar,Context Free Grammar,Finite Automata,目前我们正在进行软件现代化项目,我们无法为PL1等过时语言的程序中的每个语句编写语法 如果不花费大量资源,就无法将PL/1编译器二进制代码反向工程为语法 获取PL/1手册(IBM提供)并使用它定义语法 如果您设法开始获取语法,您将发现PL/1非常难解析:它没有关键字。语言中的每个“关键字”也可以用作变量。这是合法的: IF BEGIN>END*PROCEDURE[PUT] THEN GOTO CALL; 传统的解析器生成器无法处理此问题 您将面临的另一个问题是PL/1的预处理

目前我们正在进行软件现代化项目,我们无法为PL1等过时语言的程序中的每个语句编写语法

如果不花费大量资源,就无法将PL/1编译器二进制代码反向工程为语法

获取PL/1手册(IBM提供)并使用它定义语法

如果您设法开始获取语法,您将发现PL/1非常难解析:它没有关键字。语言中的每个“关键字”也可以用作变量。这是合法的:

      IF BEGIN>END*PROCEDURE[PUT] THEN GOTO CALL;
传统的解析器生成器无法处理此问题

您将面临的另一个问题是PL/1的预处理器。在PL/1源代码中很少会遇到这些指令,但在大型软件系统(通常正在进行现代化的那种)中几乎总是如此


(在这里,完成了PL/1完整语法和前端。有关更多详细信息,请查看我的个人简历)。

如果不花费大量资源,您将无法将PL/1编译器二进制文件反向工程回语法

获取PL/1手册(IBM提供)并使用它定义语法

如果您设法开始获取语法,您将发现PL/1非常难解析:它没有关键字。语言中的每个“关键字”也可以用作变量。这是合法的:

      IF BEGIN>END*PROCEDURE[PUT] THEN GOTO CALL;
传统的解析器生成器无法处理此问题

您将面临的另一个问题是PL/1的预处理器。在PL/1源代码中很少会遇到这些指令,但在大型软件系统(通常正在进行现代化的那种)中几乎总是如此


(在这里,完成了PL/1完整语法和前端。有关更多详细信息,请查看我的个人简历)。

您可以在@Fumu7上找到PL/1语法:这看起来像是从IBM PL/1参考手册中衍生出来的(正如我所建议的)。它可能是一种参考语法;人们可能不想把它当作真正的语法。它没有解决关键字问题或预处理器问题,而且大约16岁,可能错过了“现代”PL/1的一些功能。您可以在@Fumu7上找到PL/1的语法:这看起来像是从IBM PL/1参考手册中派生出来的(正如我所建议的)。它可能是一种参考语法;人们可能不想把它当作真正的语法。它没有解决关键字问题或预处理器问题,而且大约16岁,可能遗漏了“现代”PL/1的一些特性。