Skip to content

Task11 - #10

Open
ns-58 wants to merge 8 commits into
mainfrom
Task11
Open

Task11#10
ns-58 wants to merge 8 commits into
mainfrom
Task11

Conversation

@ns-58

@ns-58 ns-58 commented Apr 20, 2026

Copy link
Copy Markdown
Owner
  • С использованием ANTLR реализовать синтаксический анализатор предложенного выше языка. А именно, реализовать функцию, которая принимает строку и возвращает дерево разбора.
  • Реализовать функцию, которая по дереву разбора возвращает количество узлов в нём. Для работы обязательно использовать механизмы обхода дерева, предоставляемые ANTLR.
  • Реализовать функцию, которая по дереву разбора строит ранее разобранную строку. Для работы обязательно использовать механизмы обхода дерева, предоставляемые ANTLR.
  • Расширить CI шагом генерации парсера по спецификации. Обратите внимание, что генерируемые по спецификации файлы не выкладываются в репозиторий.
    • Grammarinator, используемый нами для генерации тестов, подтягивает вместе с собой ANTLeRinator, который можно использовать для получения исполняемого файла ANTLR
    • Либо можно использовать более стандартные antlr4-tools

Требуемые функции:

# Второе поле показывает корректна ли строка (True, если корректна)
def program_to_tree(program: str) -> tuple[ParserRuleContext, bool]:
    pass

def nodes_count(tree: ParserRuleContext) -> int:
    pass

def tree_to_program(tree: ParserRuleContext) -> str:
    pass

@ns-58

ns-58 commented Apr 20, 2026

Copy link
Copy Markdown
Owner Author

@aartdem, готово к ревью

Comment thread project/QLang.g4 Outdated
@@ -0,0 +1,40 @@
grammar QLang;

prog: stmt* EOF ;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А зачем тут понадобился EOF? В условии не было

@ns-58 ns-58 Apr 21, 2026

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавил коммит без него, все работает. Но для обработки ошибок lexer-а пришлось добавить явно <EOF>?, чтобы строчки из тестов были валидными

Comment thread project/antlr.py Outdated
stream = CommonTokenStream(lexer)
parser = QLangParser(stream)
tree = parser.prog()
return (tree, parser.getNumberOfSyntaxErrors() == 0)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Думаю, тут в результате стоит еще и учитывать возможные ошибки lexer-а

@ns-58
ns-58 force-pushed the Task11 branch 4 times, most recently from e6ab65f to 4d8ddf1 Compare April 21, 2026 13:46
@ns-58
ns-58 requested a review from aartdem April 21, 2026 14:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants