Используйте переводы строк как разделитель операторов в грамматике Bison - PullRequest
0 голосов
/ 11 января 2020

Flex отправляет новые строки (один или несколько) в виде одного NEWLINE токена:

[\n]+                   { return NL; }

[ \r\t]+                { /* ignore whitespace */ }
.                       { /* ignore all other characters */ }

Вот что я пытаюсь достичь:

  • несколько операторов должны быть разделены либо NEWLINE, либо COMMA
statement, statement
- OR
statement
statement
  • Все остальные найденные NEWLINE должны игнорироваться (или, по крайней мере, не бросаться ошибка).
{
    statement
    statement
}
^ should still be correct (despite the leading and trailing newlines)

Вот мой Зубр код:

separator               :   NL
                        |   COMMA
                        ;

statement_section       :   statement_section separator statement
                        |   statement
                        ;

statements              :   NL statement_section
                        |   statement_section
                        ;

//==============================
// Entry point
//==============================

program                 :   statements                      { emitOp(END); }
                        ;

Есть идеи, как заставить эту работу работать правильно?

...