CentOS7下Python3.6环境Antlr4.13.0 ATNDeserializer报错求助
问题:Python回滚后Antlr4 Lexer加载失败,求CentOS7下干净安装方案及适配版本
我开发了一个以CSV为输入的简易编译器,之前用Antlr4开发。尝试把Python从3.6升级到3.11失败后回滚回3.6,之后Antlr4只能部分工作:语法文件能正常运行,grun可以成功读取输入文件,但构建整个项目时Lexer类触发如下错误:
Traceback (most recent call last): File "./rt2.py", line 21, in <module> from rt2Lexer import rt2Lexer File "/newvolume/mmcgrego/X/EDA/rt_a/rt2Lexer.py", line 151, in <module> class rt2Lexer(Lexer): File "/newvolume/mmcgrego/X/EDA/rt_a/rt2Lexer.py", line 153, in rt2Lexer atn = ATNDeserializer().deserialize(serializedATN()) File "/usr/local/lib/python3.6/site-packages/antlr4/atn/ATNDeserializer.py", line 60, in deserialize self.reset(data) File "/usr/local/lib/python3.6/site-packages/antlr4/atn/ATNDeserializer.py", line 90, in reset temp = [ adjust(c) for c in data ] File "/usr/local/lib/python3.6/site-packages/antlr4/atn/ATNDeserializer.py", line 90, in <listcomp> temp = [ adjust(c) for c in data ] File "/usr/local/lib/python3.6/site-packages/antlr4/atn/ATNDeserializer.py", line 88, in adjust v = ord(c) TypeError: ord() expected string of length 1, but int found
我已经试过重装Antlr4和Java,但问题依旧。请问如何在CentOS7环境下彻底干净地安装Antlr4与Python3.6?有没有合适的Antlr4旧版本可以尝试?
附:rt2语法文件
grammar rt2 ; // parser rules rt2Files : (rt2File)+ ; rt2File : (regHdr (regRow | emptyRow)+) | (blockHdr (blockRow | emptyRow)+) | (memHdr (memRow | emptyRow)+) ; regHdr : REG_NAME (',' regHdrField)+ NEWLINE ; regHdrField : ( REG_HDR_FIELD | field ); memHdr : MEM_NAME (',' memHdrField)+ NEWLINE ; memHdrField : ( MEM_HDR_FIELD | field ); blockHdr : BLOCK_NAME (',' blockHdrField)+ NEWLINE ; blockHdrField : (BLOCK_HDR_FIELD | field ); regRow : row ; blockRow : row ; memRow : row ; row : field (',' field)* (',' primtype)? (',' field)* NEWLINE ; emptyRow : (',')+ NEWLINE ; field : TEXT # text | STRING # string | # empty ; primtype : REGISTER | MEMORY | BLOCK ; // lexer rules BLOCK_HDR_FIELD : ('Component Name' |'Instance Name' |'Type' |'Address' ); MEM_HDR_FIELD : ('Memory Name' |'Memory Width' |'Memory Range' |'Memory Access' |'Memory Description' |'Memory Constraints' |'Channel Used' |'Channel Count'); REG_HDR_FIELD : ('Width' |'Access' |'Reset Value' |'Field Name' |'Field Offset' |'Field Width' |'Field is Reserved' |'Field is Covered' |'Register Description' |'Field Description' |'Export'); BLOCK_NAME : 'Block Name' ; REG_NAME : 'Register Name' ; MEM_NAME : 'Memory Name' ; REGISTER : 'register' ; MEMORY : 'memory' ; BLOCK : 'block' ; NEWLINE : '\r'? '\n'; TEXT : ~[, "]+ ; STRING : '"' ('""' | ~'"')* '"' ;
触发错误的Python驱动代码
#!/usr/bin/env python3 import io from antlr4 import * from rt2Lexer import * from rt2Parser import rt2Parser from rt2Listener import rt2Listener class DefPhase(rt2Listener): def __init__(self, output): super().__init__(output) pass def enterRt2Files(self, ctx): self.globals = GlobalScope(None) self.currentScope = self.globals if __name__ =='__main__': input_stream = FileStream('rt2.csv') lexer = rt2Lexer(input_stream) token_stream = CommonTokenStream(lexer) parser = rt2Parser(token_stream) tree = parser.rt2Files() walker = ParseTreeWalker()
待解析的CSV输入示例
,,,,,,,, Register Name,Width, Access,Reset Value,Field Name,Field Offset,Field Width,Register Description,Field Description ,,,,,,,, pl_output_ctrl,32,RW,0x0000_000C,TPG_EN,0,1,Pixel Link Test pattern control,1 : Enable the testpattern generator ,,,,,,,, Block Name,Component Name,Type,Address,,,,, ,,,,,,,, pl_control_block,pl_output_ctrl,register,0x000,,,,,
内容的提问来源于stack exchange,提问作者McG
相关产品推荐
相关产品推荐

