diff --git a/analyzers/calc.l b/analyzers/calc/calc.l similarity index 100% rename from analyzers/calc.l rename to analyzers/calc/calc.l diff --git a/analyzers/calc.y b/analyzers/calc/calc.y similarity index 100% rename from analyzers/calc.y rename to analyzers/calc/calc.y diff --git a/main.py b/main.py index 7679eff..eecde0b 100644 --- a/main.py +++ b/main.py @@ -1,20 +1,26 @@ import os import subprocess +# ЭТИ ПУТИ НАДО ЗАДАТЬ ВРУЧНУЮ +# АНАЛИЗАТОРЫ .l, .y ДОЛЖНЫ ИМЕТЬ ОДИНАКОВЫЙ basename +# И ЛЕЖАТЬ В ПАПАКЕ С ИМЕНЕМ basename +ANALYZERS_DIR = r'C:\Users\user\Desktop\УЧЕБА\6_СЕМ\КОМПИЛЯТОРЫ\flex_bison_test\analyzers\calc' +FLEX_EXE_PATH = r"C:\tools\win_flex_bison\win_flex.exe" +BISON_EXE_PATH = r"C:\tools\win_flex_bison\win_bison.exe" +# + def main(): - # Подготовка констант - FLEX_EXE_PATH = r"C:\tools\win_flex_bison\win_flex.exe" - BISON_EXE_PATH = r"C:\tools\win_flex_bison\win_bison.exe" - ANALYZER_NAME = f'calc' # basename .l, .y файлов - LEXICAL_ANALYZER_PATH = fr"analyzers\{ANALYZER_NAME}.l" - SYNTAXIC_ANALYZER_PATH = fr"analyzers\{ANALYZER_NAME}.y" + # Подготовка путей + analyzer_name = os.path.basename(ANALYZERS_DIR) + lexical_analyzer_path = fr"{ANALYZERS_DIR}\{analyzer_name}.l" + syntaxic_analyzer_path = fr"{ANALYZERS_DIR}\{analyzer_name}.y" # # Подготовка списка команд - cmds = [f'{FLEX_EXE_PATH} {LEXICAL_ANALYZER_PATH}', - f'{BISON_EXE_PATH} -d {SYNTAXIC_ANALYZER_PATH}', - f'gcc lex.yy.c {ANALYZER_NAME}.tab.c -o {ANALYZER_NAME}.exe'] + cmds = [f'{FLEX_EXE_PATH} {lexical_analyzer_path}', + f'{BISON_EXE_PATH} -d {syntaxic_analyzer_path}', + f'gcc lex.yy.c {analyzer_name}.tab.c -o {analyzer_name}.exe'] # # Исполнение команд @@ -26,10 +32,10 @@ def main(): print(f"\033[91mError during export: {e}\033[0m") # - # Очистка + # Очистка промежуточных файлов for path in ['lex.yy.c', - f'{ANALYZER_NAME}.tab.c', - f'{ANALYZER_NAME}.tab.h']: + f'{analyzer_name}.tab.c', + f'{analyzer_name}.tab.h']: os.remove(path) #