Open pcschreiber1 opened 3 months ago
Wichtiger als die yacc
und used_procedures_and_classes
sind die Funktionen, welche mit p_*
beginnen. Wenn ich einen Parser erstelle, braucht dieser immer alle tokens
aus den Lexern und, sowie alle Funktionen. Eigentlich müsste ich überhaupt nicht jedesmal einen Parser erstellen, sondern könnte das in der Main Datei machen, aber dann kann ich nicht so einfach wechseln, welchen "Stand" ich testen möchte.
Den tatsächlichen Parser brauche ich im nächsten Schritt, also der nächsten Parser.Datei, nicht.
Welches file ist dann das, dass du brauchst? Nur seque_expr
?
Wäre dann nicht vielleicht eine Option einen "base_parser" anzulegen, von dem du immer importierst, bzw. dem du die Sachen übergeben kannst?
In dem bräuchtest du dann ja auch gar nicht vom lexer importieren. Allgemein würde ich auch sagen, da du lexer nur im "if name == 'main'" nutzt, sollte er auch nur dort importiert werden. Sprich
if __name__ == '__main__':
# import
from ..lexer.bool_expr import tokens, bool_lexer
env = {}
while True:
i=input("repl > ")
result = comp_parser.parse(input=i, lexer=comp_lexer)
print(i,"\n\t",result.eval(env))
Obwohl, ist nicht alles bei dir in den parser files dann nur zum "testen"? Dann sollte das eigentlich alles zusammen unter "if name == 'main'", damit man nicht irgendwas aus dem file importiert. Was meinst du?
@TimonSchreiber Ich versteh nicht ganz, wie die Parser zusammenhängen:
In
language/parser/comp_expr.py
wird alles von "parser/arit_expr.py" importiert. Nur um dieused_procedures_and_classes
undyacc
zu kriegen? 🤔Allgemein ist
*
import ein "code smell". Lieber nur das importieren, was du brauchst. Wenn du wirklich alles haben willst, dann lieber wie unten, dann ist klar wo die Sachen jeweils herkommen