Теги grako ebnf на новой строке; Ингоринг пространства
Попытка сделать парсер с грако, чтобы разобрать что-то вроде
tag1: line1
line 2 ...
tag2: line1
line2
...
такие, что пробелы перед tag1 должны игнорироваться; но теги должны начинаться с новой строки.
Малый ebnf (x.ebnf)
START = DATA $;
DATA = piece:{PIECE}+ ;
PIECE = x | y;
sep = ":";
xtag = /^\s*x[^:]*/ sep;
ytag = /^\s*y[^:]*/ sep;
x = xtag val:userinput ;
y = ytag val:userinput ;
userfirstinput = /.*/;
userinput = firstline+:userfirstinput lines:{line}*;
line = !PIECE /.*/;
вход (тест):
x: First
y: liney
liney2 x: is not x
Начните:
python3 xparser.py -t test START
Ошибка:
grako.exceptions.FailedParse: test.event(1:1) no available options :
x: First
^
PIECE
DATA
START
Вопрос: почему?! Я ставлю ^\s*x, почему он не совпадает?
Спасибо за любую подсказку!