Почему pegjs не соответствует Expression, если __ не соответствует?Программа = __ / Выражение - PullRequest
0 голосов
/ 28 ноября 2018

Пример кода:

Program = __/Expression

Expression = .*

__ = [ \t\r\n]*
test is

2 * (3 + 4)
hahah hahhah
def hahah

На мой взгляд, pegjs во время совпадения с выражением, когда __ не совпадает?Но при этом появляется ошибка

Строка 1, столбец 1: Ожидается [ \t\r\n] или конец ввода, но "2" найдено.Ожидаемое поведение:

Я хочу знать, почему это не работает.И я, что знать, возможно ли получить все вызываемые функции в js использовать pegjs?

Фактическое поведение: Ошибка разбора: Строка 1, столбец 1: Ожидаемый [ \t\r\n] или конецввод, но "2" найдено.

1 Ответ

0 голосов
/ 28 ноября 2018

Это потому, что правило __ всегда совпадает, потому что оно соответствует пустому вводу.Вы можете подумать, что вы внутренне переписали грамматику следующим образом (это совершенно правильная грамматика, вы можете ввести ее в pegjs онлайн):

start = Program EOF

Program = __/Expression

Expression = .*

__ = [ \t\r\n]*
// EOF is ephemeral rule that match end of input, i.e. when nothing left in input
EOF = !.

Таким образом, вы ввели синтаксический анализ как:

<'__' matched>
<'Program' matched>
<'EOF' not matched
  =>backtrack to 'start'
  =>nothing alternatives on 'start'
  =>error
>2 * (3 + 4)
...