Nearley分词器与规则

时间:2018-08-27 19:08:50

标签: definition nearley

我对nearly.js还是陌生的,根据该网站,我想知道与规则相比,分词器/词法分析器做了什么:

  

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

那不是和:

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

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

1 个答案:

答案 0 :(得分:0)

摆弄它们之后,我发现使用了分词器,说我们有以下内容:

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

这是行不通的,如果我们尝试对其进行编译,则会得到语法不明确的内容,“ if”将同时作为关键字标识符,令牌生成器进行匹配:

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

尝试编译这一点不会导致语法不明确,因为令牌生成器很聪明(至少在此示例中显示的是Moo)。