Nearley Tokenizer против правил - PullRequest
       42

Nearley Tokenizer против правил

0 голосов
/ 27 августа 2018

Я довольно новичок в Почти.js , и я хотел бы знать, что токенизаторы / лексеры делают по сравнению с правилами, согласно веб-сайту:

По умолчанию nearley разбивает ввод на поток символов. Это называется анализом без сканера. Токенайзер разбивает входные данные на поток больших единиц, называемых токенами. Это происходит на отдельной стадии перед разбором. Например, токенизатор может преобразовать 512 + 10 в ["512", "+", "10"]: обратите внимание, как он удаляет пробелы, и объединяет многозначные числа в одно число.

Разве это не то же самое, что:

Math -> Number _ "+" _ Number
Number -> [0-9]:+

Я не понимаю, какова цель лексеров. Я вижу, что в этом случае правила всегда применимы и лексеры не нужны.

1 Ответ

0 голосов
/ 28 августа 2018

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

Keyword -> "if"|"else"
Identifier -> [a-zA-Z_]+

Это не сработает, если мы попробуем скомпилировать это, мы получим неоднозначную грамматику, "если" будет сопоставлено как ключевое слово , так и Идентификатор, однако токенизатор:

{
"keyword": /if|else/
"identifier": /[a-zA-Z_]+/
}

Попытка скомпилировать это не приведет к неоднозначной грамматике, потому что токенизаторы умны (по крайней мере, тот, который показан в этом примере, это Moo).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...