2017-10-12 10 views
0

言語のセマンティックチェックを行いたいのですが、ANTLR4を使用してパーサーとビジタークラスを生成します。しかし、私は問題に会った。私はこの方法print(type(newList[0].expression()))
を使用している場合 私は、私は以下のコードを実行した場合、私はこの問題を解決する方法を求めることができ、このNameError: name 'IDILParser' is not defined
のようなエラーが発生します、しかしこの<class 'IDILParser.IDILParser.IdenetExpressionContext'>
のようなタイプを得るのだろうか?ありがとう!Python Typeが定義されていません

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: 
     ... 

答えて

0

あなたはIDILParser.IDILParserを指し、すでにacutallyあなたのコード内でIDILParserを意味し、from IDILParser import IDILParserをしました。その1つの層を奪うしてみてください

だから:疑いで、あなたのコードはモジュールとしてまたはスクリプト(別名相対輸入が仕事をするか、しない)として実行されている場合とき

if type(newList[0].expression()) is IDILParser.IdenetExpressionContext: 
    ... 

ところで、あなたも可能性次の手順を実行します。

+0

newList [0] .expression()のタイプがIDILParser.IdenetExpressionContextであることを確認します。私はそれを行う方法を尋ねることはできますか?どうも! – FRANKfisher

+0

上記のコードを試しましたか?最初の** IDILParser **は削除されています。 – Jeronimo

+0

問題を解決しましたか?私にも同様の問題があります。 @ジェロニモあなたのソリューションは動作しません。 "NameError"、名前 'IdilParser'が定義されていません。 – user3142434

関連する問題