我想对一种语言进行语义检查,我使用ANTLR4来生成解析器和访问者类。但是我遇到了一个问题。如果我使用这种方法print(type(newList[0].expression()))
我会得到这样的类型<class 'IDILParser.IDILParser.IdenetExpressionContext'>
但是,如果我运行下面的代码,我会得到这样的错误NameError: name 'IDILParser' is not defined
我可以问如何解决这个问题吗?谢谢!
from antlr4 import *
if __name__ is not None and "." in __name__:
from .IDILParser import IDILParser
else:
from IDILParser import IDILParser
class IDILVisitor(ParseTreeVisitor):
def visitAssign(self, ctx:IDILParser.AssignContext):
if type(newList[0].expression()) is IDILParser.IDILParser.IdenetExpressionContext:
...
你确实from IDILParser import IDILParser
,这意味着代码中的IDILParser已经直接引用了IDILParser.IDILParser
。
所以试着去掉那一层:
if type(newList[0].expression()) is IDILParser.IdenetExpressionContext:
...
顺便说一句,当您不确定您的代码是作为模块还是脚本运行(也称为相对导入是否有效)时,您还可以执行以下操作:
try:
from .IDILParser import IDILParser
except ImportError:
from IDILParser import IDILParser