Правило четвертого языка EBNF для бесконечного цикла или оператора if - PullRequest
3 голосов
/ 19 мая 2011

Существует ли правило EBNF , которое описывает бесконечный цикл Forth или оператор if?

Ответы [ 2 ]

4 голосов
/ 19 мая 2011

EBNF используется для описания синтаксиса . Цикл, являющийся бесконечным или иным образом, обычно не попадает в рамки того, что он описывает. Таким образом, вы будете искать в EBNF неопределенный цикл, который выглядит примерно так:

indefinite_loop ::= 'BEGIN' statements cond 'UNTIL'

Обычно cond - это то, что помещает 0 или 1 в стек, чтобы определить, продолжать ли цикл (0 означает продолжение цикла, 1 означает выход). Таким образом, если вы просто вставите 0 напрямую, цикл будет выполняться вечно:

: infinite_loop BEGIN do_whatever 0 UNTIL ;
1 голос
/ 01 октября 2015

Вы также можете использовать:

infinite_loop ::= 'BEGIN' statements 'AGAIN'

Слово AGAIN используется для безусловного перехода обратно к BEGIN.Например:

: main-loop BEGIN listen-for-event process-event AGAIN ;
...