LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

Но в синтаксисе с неявным блоком, while будет парситься как начало цикла с пред-условием.

не будет. в языках где блок неявный, парсинг блока делается формально функцией

some_result parse_block (LexTypeSet end_block_symbols);

и поскольку блок может заканчиваться разными символвами - end, }, until, else, case, default… и так далее (от грамматики зависит разумеется ) - то парсинг блока делается с конкретным набором символов, которые могут закончить данный блок.

если ты парсишь блок после «if cond then…» то будешь парсить блок с множеством стоп-символов {else_sy, elsif_sy, end_sy}, если после «case 100:» то будет множество - {case_sy, end_sy, else_sy}.

ты взял за основу компилятор какого-то клоуна, делаешь много чего не так как надо.

Исходная версия alysnix, :

Но в синтаксисе с неявным блоком, while будет парситься как начало цикла с пред-условием.

не будет. в языках где блок неявный, парсинг блока делается формально функцией

some_result parse_block (LexTypeSet end_block_symbols);

и поскольку блок может заканчиваться разными символвами - end, }, until, else, case, default… и так далее (от грамматики зависит разумеется ) - то парсинг блока делается с конкретным набором символов, которые могут закончить данный блок.

если ты парсишь блок после «if cond then…» то будешь парсить блок с множеством стоп-символов {else_sy, end_sy}, если после «case 100:» то будет множество - {case_sy, end_sy, else_sy}.

ты взял за основу компилятор какого-то клоуна, делаешь много чего не так как надо.