===== Кейс 009: Проверка алгоритмов (gram:case-009) ===== === Общая информация === ^ Уровень сложности ^ 🟡 Средний ^ ^ Рекомендуемые языки ^ Python, Java ^ ^ Основные инструменты ^ ANTLR4 ^ ^ Предметная область ^ Информатика, алгоритмы ^ === Описание кейса === Система для проверки корректности алгоритмических решений учащихся: анализ псевдокода, валидация логики, контроль граничных условий. === Грамматика языка === // Лексемы NUMBER : [0-9]+ ID : [a-zA-Z_][a-zA-Z_0-9]* ASSIGN : '=' PLUS : '+' MINUS : '-' MUL : '*' DIV : '/' EQ : '==' NEQ : '!=' LT : '<' GT : '>' LEQ : '<=' GEQ : '>=' AND : '&&' OR : '||' NOT : '!' IF : 'if' ELSE : 'else' WHILE : 'while' FOR : 'for' IN : 'in' RANGE : 'range' PRINT : 'print' LBRACE : '{' RBRACE : '}' LPAREN : '(' RPAREN : ')' SEMI : ';' WS : [ \t\r\n]+ -> skip // Синтаксис program : statement+ statement : assignment | conditional | loop | output assignment : ID ASSIGN expression SEMI conditional : IF condition block (ELSE block)? loop : WHILE condition block | FOR ID IN RANGE LPAREN NUMBER COMMA NUMBER RPAREN block output : PRINT LPAREN expression RPAREN SEMI condition : expression (comparison expression)? comparison : EQ | NEQ | LT | GT | LEQ | GEQ expression : term ( (PLUS | MINUS) term )* term : factor ( (MUL | DIV) factor )* factor : NUMBER | ID | LPAREN expression RPAREN | string string : '"' ~["]* '"' block : LBRACE statement* RBRACE | statement === План лабораторных работ === ==== ЛР1: Лексический анализ ==== **Задачи:** - Распознавание ключевых слов алгоритмов - Поддержка операторов сравнения и логических операций - Обработка структур управления ==== ЛР2: Синтаксический анализ ==== **Задачи:** - Парсер псевдокода с поддержкой условий и циклов - Построение AST алгоритма - Валидация структуры блоков ==== ЛР3: Семантический анализ ==== **Задачи:** - Проверка типов выражений - Контроль областей видимости переменных - Анализ корректности условий ==== ЛР4: Исполнение и проверка ==== **Задачи:** - Интерпретация псевдокода - Сравнение результатов с эталоном - Генерация тестовых данных === Пример алгоритма === // Поиск максимального элемента max = a[0]; i = 1; while i < n { if a[i] > max { max = a[i]; } i = i + 1; } print(max); === Педагогическое применение === **Использование в школе:** - Автоматическая проверка алгоритмических задач - Тренажер основ программирования - Подготовка к ЕГЭ по информатике ---- [[gram:labs|← К списку]] | [[gram:case-008|← 008]] | [[gram:case-010|010 →]]