Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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
Python 分析带有大数组的C文件时,ANTLR最大递归深度超过错误_Python_C_Parsing_Antlr_Antlr4 - Fatal编程技术网

Python 分析带有大数组的C文件时,ANTLR最大递归深度超过错误

Python 分析带有大数组的C文件时,ANTLR最大递归深度超过错误,python,c,parsing,antlr,antlr4,Python,C,Parsing,Antlr,Antlr4,在使用ANTLR时,我看到的一个问题是,在使用大量数据对数组进行测试时,出现了最大递归深度错误 产生错误的文件内容如下所示: const unsigned char foo[]={ 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, 0,64,0,0,0,115,248,1,0,0,100,0,90,0,100,91, 90,1,100,92,90,2,101,2,101,1,23,0,90,3,100,4, 100,5,132,0,90,4,100,6,100,7,132,0,

在使用ANTLR时,我看到的一个问题是,在使用大量数据对数组进行测试时,出现了最大递归深度错误

产生错误的文件内容如下所示:

const unsigned char foo[]={
99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,
0,64,0,0,0,115,248,1,0,0,100,0,90,0,100,91,
90,1,100,92,90,2,101,2,101,1,23,0,90,3,100,4,
100,5,132,0,90,4,100,6,100,7,132,0,90,5,100,8,
100,9,132,0,90,6,100,10,100,11,132,0,90,7,100,12,
100,13,132,0,90,8,100,14,100,15,132,0,90,9,100,16,
100,17,132,0,90,10,100,18,100,19,132,0,90,11,100,20,
100,21,132,0,90,12,100,93,100,23,100,24,132,1,90,13,
101,14,101,13,106,15,131,1,90,16,100,25,106,17,100,26,
100,27,131,2,100,28,23,0,90,18,101,19,106,20,101,18,
100,27,131,2,90,21,100,29,90,22,100,30,90,23,100,31,
103,1,90,24,100,32,103,1,90,25,101,25,4,0,90,26,
90,27,100,94,100,33,100,34,156,1,100,35,100,36,132,3,
90,28,100,37,100,38,132,0,90,29,100,39,100,40,132,0,
90,30,100,41,100,42,132,0,90,31,100,43,100,44,132,0,
90,32,100,45,100,46,132,0,90,33,100,47,100,48,132,0,
90,34,100,95,100,49,100,50,132,1,90,35,100,96,100,51,
100,52,132,1,90,36,100,97,100,54,100,55,132,1,90,37,
...
};
单个文件包含一个数组,其中包含2432行数据,而没有其他内容。 分析数组时输出的错误为:

文件“./antlr4/tree/tree.py”,第147行,在walk中
自我行走(听众、孩子)
文件“./antl4/tree/tree.py”,第147行,在walk中
自我行走(听众、孩子)
文件“./antlr4/tree/tree.py”,第145行,在walk中
self.enterRule(侦听器,t)
文件“./antlr4/tree/tree.py”,第159行,在enterRule中
ctx.enterRule(侦听器)
文件“./Parser.py”,第14461行,在enterRule中
listener.enterInitializerlist(self)
运行时错误:超过最大递归深度
ANTLR版本=4.8

是否有人知道发生这种情况的原因,或者是否有任何针对该问题的建议/解决方案?我正在为ANTLR4使用Python绑定

我正在使用语法文件:

然后我会:

java-cp./etc/antlr-4.8-complete.jar org.antlr.v4.Tool-Dlanguage=Python2-o./src/autogen./grammars/C.g4-visitor
它生成我使用的以下文件

src/autogen/grammars/C.tokens
src/autogen/grammars/CLexer.py
src/autogen/grammars/CLexer.tokens
src/autogen/grammars/CListener.py
src/autogen/grammars/CParser.py
src/autogen/grammars/CVisitor.py

对于偶然发现这个问题的人:答案“隐藏”在kaby76提供的评论中:

初始值设定项列表
是递归的,而不是EBNF。这就是它爆炸的原因

这样做:

 initializerList
  : designation? initializer ( ',' designation? initializer)*
  ;

对于偶然发现这个问题的人:答案“隐藏”在kaby76提供的评论中:

初始值设定项列表
是递归的,而不是EBNF。这就是它爆炸的原因

这样做:

 initializerList
  : designation? initializer ( ',' designation? initializer)*
  ;

请提供您正在使用的语法的链接。不可能回答其他问题,也就是说,我们不知道是否使用递归规则来解析初始值设定项。我使用的是C.g4文件来源:我相信这是最新版本。
初始值设定项列表:名称?初始值设定项(“,”名称?初始值设定项)*是的,这个关闭得太快了,没有足够的时间来改进/澄清。我投了重新开放的票,但还需要2票……我同意巴特的观点,我当然更愿意在这里回答ANTLR的问题,而不是邮件列表。请给出你正在使用的语法的链接。不可能回答其他问题,也就是说,我们不知道是否使用递归规则来解析初始值设定项。我使用的是C.g4文件来源:我相信这是最新版本。
初始值设定项列表:名称?初始值设定项(“,”名称?初始值设定项)*是的,这个关闭得太快了,没有足够的时间来改进/澄清。我投了重新开放的票,但还需要2票……我同意巴特的观点,我当然更愿意在这里回答ANTLR的问题,而不是邮件列表。