2017-10-12 4 views
0

Ich möchte die semantische Prüfung für eine Sprache tun, und ich benutze ANTLR4, um Parser und Besucherklasse zu generieren. Ich habe jedoch ein Problem gefunden. Wenn ich diese Methode verwenden print(type(newList[0].expression()))
Ich werde eine Art wie diese <class 'IDILParser.IDILParser.IdenetExpressionContext'>
jedoch erhalten, wenn ich den Code unten ausführen, wird erhalte ich einen Fehler wie diese NameError: name 'IDILParser' is not defined
Darf ich fragen, wie dieses Problem zu beheben? Vielen Dank!Python Typ ist nicht definiert

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

Antwort

0

Sie haben from IDILParser import IDILParser, was bedeutet, das IDILParser im Code bereits bezieht sich acutally auf IDILParser.IDILParser. So

versuchen wegzunehmen, dass eine Schicht:

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

Btw, wenn Sie Zweifel haben, wenn Ihr Code als Modul ausgeführt wird oder als Skript (auch bekannt als relativ Importe funktionieren oder nicht), können Sie auch wie folgt vorgehen:

try: 
    from .IDILParser import IDILParser 
except ImportError: 
    from IDILParser import IDILParser 
+0

ich, dass die Art der newList [0] Ausdrucks überprüfen möchten() ist IDILParser.IdenetExpressionContext. Kann ich fragen, wie es geht? Danke! – FRANKfisher

+0

Haben Sie meinen Code von oben versucht? Beachten Sie, dass der erste ** IDILParser ** entfernt wird. – Jeronimo

+0

Haben Sie das Problem behoben? Ich habe ein ähnliches Problem. @ Jeronimo Ihre Lösung funktioniert nicht. "NameError", Name "IdilParser" ist nicht definiert. – user3142434

Verwandte Themen