Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从antlr令牌生成代码_Java_Antlr_Token_Cobol - Fatal编程技术网

Java 从antlr令牌生成代码

Java 从antlr令牌生成代码,java,antlr,token,cobol,Java,Antlr,Token,Cobol,我们目前正在努力使用antlr生成新代码。我们有一个几乎可以识别所有东西的语法文件。现在,我们的问题是,我们希望能够使用生成的令牌再次创建代码来创建这个新文件 我们有一个包含令牌的.txt文件,如下所示: [@0,0:6=' ',<75>,channel=1,1:0] [@1,7:20='IDENTIFICATION',<6>,1:7] [@2,21:21=' ',<75>,channel=1,1:21] [@3,22:29='DIVISION',

我们目前正在努力使用antlr生成新代码。我们有一个几乎可以识别所有东西的语法文件。现在,我们的问题是,我们希望能够使用生成的令牌再次创建代码来创建这个新文件

我们有一个包含令牌的.txt文件,如下所示:

[@0,0:6='       ',<75>,channel=1,1:0]
[@1,7:20='IDENTIFICATION',<6>,1:7]
[@2,21:21=' ',<75>,channel=1,1:21]
[@3,22:29='DIVISION',<4>,1:22]
[@4,30:30='.',<3>,1:30]
[@5,31:40='\n       \t ',<75>,channel=1,1:31]
[@6,41:50='PROGRAM-ID',<16>,2:9]
[@7,51:51='.',<3>,2:19]
[@8,52:52=' ',<75>,channel=1,2:20]
[@9,53:59='testpro',<76>,2:21]
[@10,60:60='.',<3>,2:28]
[@11,61:70='\n       \t ',<75>,channel=1,2:29]
[@12,71:76='AUTHOR',<31>,3:9]
[@13,77:77='.',<3>,3:15]
或者是否有其他方法可以使用令牌创建旧代码


提前感谢Viktor,使lexer输出可移植的最直接的方法是将lexer的标记化输出序列化以用于传输和存储。您可以同样地序列化整个解析器生成的解析树。无论哪种情况,您都将捕获源输入的全文

lexer流对象的内在复杂性是单个类。解析树对象的复杂性也很小,只涉及少数标准类。因此,序列化和反序列化的复杂性几乎完全是解析源输入大小的线性函数

是一个简单易用、相对快速的Java对象序列化库


如果解析器正在生成已解析源输入的某种中间表示形式,您可以使用定义的记录序列化库(如Google)直接传输IR,以保存和还原IR模型实例。

迭代令牌并转储令牌文本?我们提出的一个解决方案是彻底查看上面显示的这个.txt文件,只需拆分相关数据并保存到一个新文件,该文件将成为我们的新代码。但问题是,还有其他方法可以做到这一点吗?因为这种方式不使用令牌。为什么要使用.txt文件呢?您可以直接从lexer获得令牌流。我们的想法是,解析和重建代码应该能够分为两个步骤,彼此独立。我们使用的示例代码非常庞大,需要花费一些时间来解析。然后,当解析完成时,我们希望能够保存解析,甚至将数据发送到另一台计算机或其他任何地方,并且能够在不再次解析代码的情况下重建代码。因此,我们需要将令牌保存到硬盘,并能够在同一台或另一台计算机上再次打开它。为什么不将COBOL代码从源代码复制到目标?OP已经有了存储令牌的方法。虽然这可能勾勒出更标准的方法,但他已经成功了。它没有回答OP的关键问题:如何从令牌中重新生成新代码。给出原始问题并澄清注释,令牌原始Q或解析输出注释的可移植性是一项要求,OP正在寻找一种替代方案,以替代使用其初始toString表示的令牌,OP认为这是有问题的,并要求提供替代方案。此外,从注释中,OP指出代码重新生成本身不是关键问题,但是能够在不重新解析的情况下重新构建解析树以准备重新生成是实际的关键问题。提供的答案准确、恰当地回答了OP的问题。