===== Кейс 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 →]]