logik2021/code/aussagenlogik/schema.py

31 lines
1006 B
Python
Raw Normal View History

2021-05-05 11:07:32 +02:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# IMPORTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
from __future__ import annotations;
from lark import Lark;
from aussagenlogik.syntaxbaum import SyntaxBaum;
2021-05-05 11:07:32 +02:00
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2021-05-06 12:44:29 +02:00
# GLOBALE KONSTANTEN
2021-05-05 11:07:32 +02:00
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# lexer durch LARK erzeugen
with open('grammars/grammar.lark', 'r') as fp:
2021-05-07 06:37:32 +02:00
grammar = ''.join(fp.readlines());
lexer = Lark(grammar, start='expr', regex=True);
2021-05-05 11:07:32 +02:00
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# METHODE: string -> Syntaxbaum
2021-05-05 11:07:32 +02:00
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def stringToSyntaxbaum(expr: str) -> SyntaxBaum:
2021-05-05 11:07:32 +02:00
try:
return SyntaxBaum(lexer.parse(expr));
2021-05-05 11:07:32 +02:00
except:
raise Exception('Ausdruck \033[1m{}\033[0m konnte nicht erkannt werden!'.format(expr));