gram:case-009
Table of Contents
Кейс 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);
Педагогическое применение
Использование в школе:
- Автоматическая проверка алгоритмических задач
- Тренажер основ программирования
- Подготовка к ЕГЭ по информатике
← К списку | ← 008 | 010 →
gram/case-009.txt · Last modified: by eugeneai
