我过去已经实现了递归下降和类似 PEG 的解析器,您可以在其中执行以下操作:
Path -> Segment+
Segment -> Slash Name
Segment -> /
Name -> /\w+/
Slash -> /
- where
Segment+
表示“匹配一个或多个Segment
” - 并且有一个普通的旧正则表达式用于匹配一个或多个单词字符
\w+
您通常如何使用 LR 语法/解析器完成同样的事情?我见过的所有 LR 解析器的例子都是非常基础的,比如解析1 + 2 * 3
, or (())()
,其中的模式非常简单,似乎不涉及“一个或多个”功能(或者零个或多个 with *
,或者可选 with ?
) . 您通常如何在 LR 解析器中做到这一点?
或者LR解析首先需要词法分析阶段(即LR解析器需要终端和非终端“令牌”)。希望有一种方法可以在没有这样两个阶段的情况下进行 LR 解析。LR 解析器的定义谈到了我一直在阅读的书籍/网站中的“输入字符”,但随后您会不经意/巧妙地看到如下一行:
语法的终端符号是词法扫描器在输入流中找到的多字符符号或“标记”。
它就像什么,扫描仪是从哪里来的。