首页 > 解决方案 > Nearley 标记器与规则

问题描述

根据网站,我对Near.js很陌生,我想知道与规则相比,标记器/词法分析器做了什么:

默认情况下,nearley 将输入拆分为字符流。这称为无扫描仪解析。标记器将输入拆分为称为标记的更大单元流。这发生在解析之前的单独阶段。例如,分词器可能会转换512 + 10["512", "+", "10"]:注意它是如何删除空格的,并将多位数字组合成一个数字。

那岂不是一样:

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

我不明白词法分析器的目的是什么。我看到在这种情况下规则总是可用的,并且不需要词法分析器。

标签: definitionnearley

解决方案


在摆弄它们之后,我发现了标记器的使用,比如说我们有以下内容:

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

这是行不通的,如果我们尝试编译它,我们会得到模棱两可的语法,“if”将被匹配为关键字标识符,但是一个标记器:

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

尝试编译它不会导致语法模棱两可,因为分词器很聪明(至少在这个例子中显示的是 Moo)。


推荐阅读