Ожидается любой символ, кроме найденного конца ввода

Мой ввод - рекурсивная структура выглядит следующим образом (обратите внимание на пустую 2-ую строку):

xxx @ {} гггг @{ zzz @{} wwww }

грамматика, которую я вижу, прочитав ее, должна выглядеть так:

start = item+
item = thing / space
thing = '@{' item* '}'
space = (!'@' .)+

но то, что я получаю

Строка 2, столбец 1: ожидается "@{", "}" или любой другой символ, кроме конца ввода.

Что я делаю неправильно?

2 ответа

Я вообще не знаю колышек, но быстрый взгляд на документы говорит, что проблема в 4-м правиле - проблема. Онлайн-парсер успешно работает с:

start = item+
item = thing / space
thing = '@{' item* '}'
space = [ a-z]+

Это производит:

[
   [
      "x",
      "x",
      "x",
      " "
   ],
   [
      "@{",
      [],
      "}"
   ],
   [
      " ",
      "y",
      "y",
      "y",
      " "
   ],
   [
      "@{",
      [
         [
            " ",
            "z",
            "z",
            "z",
            " "
         ],
         [
            "@{",
            [],
            "}"
         ],
         [
            " ",
            "w",
            "w",
            "w",
            "w",
            " "
         ]
      ],
      "}"
   ]
]

Чтобы запустить его, я изменил код следующим образом:

start = item+
item = thing / space
thing = '@{' item* '}'
space =[^@}]+
Другие вопросы по тегам