История изменений
Исправление 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}.
ты взял за основу компилятор какого-то клоуна, делаешь много чего не так как надо.