You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 01:17:54