Как определить правило для сопоставления с шаблоном несколько раз в PEG. js? - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь проанализировать файл, в котором шаблон можно увидеть несколько раз:

G04 hello world*
G04 foo bar*

Соответствующая PEG. js грамматика:

Comment
  = "G04" _ content:String* _ EOL
  {
    return content
  }

_ "whitespace"
  = [ \t\n\r]*

String
  = value:[a-zA-Z0-9.(): _-]+
  {
    return value.join('') 
  }

EOL
  = [*] _ 

Однако я получаю следующую ошибку:

Строка 2, столбец 1: ожидаемый конец ввода, но найдена буква "G".

Как сделать Я делаю это Comment правило для совпадения несколько раз?

1 Ответ

1 голос
/ 31 января 2020

Вы должны просто иметь возможность добавить новое правило запуска, которое соответствует нескольким Comment s:

Comments
  = Comment+

Comment
  = "G04" _ content:String* _ EOL
  {
    return content
  }

_ "whitespace"
  = [ \t\n\r]*

String
  = value:[a-zA-Z0-9.(): _-]+
  {
    return value.join('') 
  }

EOL
  = [*] _

Вывод:

[
   [
      "hello world"
   ],
   [
      "foo bar"
   ]
]
...