我对nearly.js还是陌生的,根据该网站,我想知道与规则相比,分词器/词法分析器做了什么:
默认情况下,nearley将输入拆分为字符流。这称为无扫描仪解析。 令牌生成器将输入拆分为称为令牌的较大单位流。这发生在解析之前的单独阶段。例如,令牌生成器可能将
512 + 10
转换为["512", "+", "10"]
:注意它是如何删除空格并将多位数字组合成一个数字的。
那不是和:
Math -> Number _ "+" _ Number
Number -> [0-9]:+
我看不到词法分析器的目的是什么。我看到规则在这种情况下总是可用的,不需要词法分析器。
答案 0 :(得分:0)
摆弄它们之后,我发现使用了分词器,说我们有以下内容:
Keyword -> "if"|"else"
Identifier -> [a-zA-Z_]+
这是行不通的,如果我们尝试对其进行编译,则会得到语法不明确的内容,“ if”将同时作为关键字和标识符,令牌生成器进行匹配:
{
"keyword": /if|else/
"identifier": /[a-zA-Z_]+/
}
尝试编译这一点不会导致语法不明确,因为令牌生成器很聪明(至少在此示例中显示的是Moo)。