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