definition - Nearley 标记器与规则
问题描述
根据网站,我对Near.js很陌生,我想知道与规则相比,标记器/词法分析器做了什么:
默认情况下,nearley 将输入拆分为字符流。这称为无扫描仪解析。标记器将输入拆分为称为标记的更大单元流。这发生在解析之前的单独阶段。例如,分词器可能会转换
512 + 10
为["512", "+", "10"]
:注意它是如何删除空格的,并将多位数字组合成一个数字。
那岂不是一样:
Math -> Number _ "+" _ Number
Number -> [0-9]:+
我不明白词法分析器的目的是什么。我看到在这种情况下规则总是可用的,并且不需要词法分析器。
解决方案
在摆弄它们之后,我发现了标记器的使用,比如说我们有以下内容:
Keyword -> "if"|"else"
Identifier -> [a-zA-Z_]+
这是行不通的,如果我们尝试编译它,我们会得到模棱两可的语法,“if”将被匹配为关键字和标识符,但是一个标记器:
{
"keyword": /if|else/
"identifier": /[a-zA-Z_]+/
}
尝试编译它不会导致语法模棱两可,因为分词器很聪明(至少在这个例子中显示的是 Moo)。
推荐阅读
- php - PHP:如何随机选择最大概率值?
- python - 调整存储在数组中的所有图像的大小
- c# - Visual Studio SDK 获取类型修饰符信息 - 类型是抽象的还是内部的?
- python - 将数据从 HTML 插入到 Django 模板
- c# - 使用操作从任务更新 UI
- java - 这是否可以使用 Selenium 和 Java 来自动化 Angular Web 应用程序?
- asp.net-core - Protobuf 不工作 - Jetbrains Rider .NET Core 3.1
- pandas - 如何替换 dtype=K.floatx()?
- angular - 我们可以将 TestBed 用于带有 NativeScript 的服务吗?
- c++ - C++ 过程入口点 CLRCreateInstance 不能位于动态链接库 mscoree.dll 中