主要观点:
- Janet 的 PEG 引擎受 REBOL Parse 模块和 LPeg 启发,包含用于基于解析表达式语法(PEG)解析文本和字节序列的库,且排除了正则表达式等其他解析工具。
- 介绍了 Janet PEG 引擎的实现,包括快速 PEG 概述、简单的 PEG 代码引擎、使操作符可变参数、添加递归和添加规则等方面。
- 给出了一些简单的 PEG 语法示例,如匹配 ISO 8601 格式日期的语法,以及通过不同方式实现的
match-peg
函数。
关键信息:
- PEG 形式主义源于 2004 年 Bryan Ford 的论文,其有序选择运算符
+
使 PEG 语法具有确定性。 match-peg
函数用于测试字符串是否匹配规则,通过不同的模式匹配规则来实现 PEG 匹配。- 可通过使操作符可变参数、添加递归和规则来扩展
match-peg
函数的功能。
重要细节:
- Janet 的 C API 和丰富的核心数据结构使其易于实现 PEG。
- 代码中的各种操作符如
"..."
(字符串字面量)、+
(选择运算符)、*
(序列运算符)、!
(布尔反转)等构成了 PEG 形式主义。 - 递归对于使 PEG 有用很重要,通过 Janet 表可以使递归语法更清晰。
- 可以添加如
:set
运算符来实现更复杂的匹配功能。 - 目前的
match-peg
函数存在一些不足,如缺少捕获、速度慢等,但是通用模式匹配函数的良好开端。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。