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: Лексический анализ

Задачи:

  1. Распознавание ключевых слов алгоритмов
  2. Поддержка операторов сравнения и логических операций
  3. Обработка структур управления

ЛР2: Синтаксический анализ

Задачи:

  1. Парсер псевдокода с поддержкой условий и циклов
  2. Построение AST алгоритма
  3. Валидация структуры блоков

ЛР3: Семантический анализ

Задачи:

  1. Проверка типов выражений
  2. Контроль областей видимости переменных
  3. Анализ корректности условий

ЛР4: Исполнение и проверка

Задачи:

  1. Интерпретация псевдокода
  2. Сравнение результатов с эталоном
  3. Генерация тестовых данных

Пример алгоритма

// Поиск максимального элемента
max = a[0];
i = 1;
while i < n {
    if a[i] > max {
        max = a[i];
    }
    i = i + 1;
}
print(max);

Педагогическое применение

Использование в школе:

  1. Автоматическая проверка алгоритмических задач
  2. Тренажер основ программирования
  3. Подготовка к ЕГЭ по информатике

← К списку | ← 008 | 010 →