Мне нужно разобрать блок кода, который выглядит так:
* Block
| Line 1
| Line 2
| ...
Это легко сделать:
block : head lines;
head : '*' line;
lines : lines '|' line
| '|' line
;
Теперь мне интересно, как я могу добавить вложенные блоки, например:
* Block
| Line 1
| * Subblock
| | Line 1.1
| | ...
| Line 2
| ...
Можно ли это выразить как LALR
грамматику?
Я могу, конечно, проанализировать блоки верхнего уровня, а затем снова запустить свой анализатор, чтобы обработать каждый из этих блоков верхнего уровня. Однако я только изучаю эту тему, поэтому мне интересно избегать такого подхода.