scheme - PEG语法将计算机变成热板并且永远不会完成
问题描述
我正在尝试编写语法,以便解析特定类型的输入文件。我已经从最基本的语法开始,但是guile
在尝试将模式与该语法匹配时,我的电脑几乎崩溃了。
我想知道我的语法是否有歧义?这是我要解析的示例输入:
输入.txt
[HELLO]
var = 123
[]
这是我当前的脚本:
(use-modules (ice-9 peg))
(use-modules (ice-9 textual-ports))
(define *input*
(call-with-input-file
"test.txt" get-string-all))
(define-peg-string-patterns
"block <-- block_header param block_closer
block_header <-- LB text RB SP
block_closer <-- LB RB SP
param <-- text SP EQ param_v SP
param_v <-- NUM
text <-- [a-zA-Z]+
NUM <-- [0-9]+
EQ < '='
LB < '['
RB < ']'
SP < [ \t\n]*")
(peg:tree (match-pattern block *input*))
要点是文件由blocks
包含变量的文件组成。(下一步是向这个语法添加嵌套块。)
这个语法有什么特别的错误吗?
解决方案
我找到了它不起作用的原因。显然,用于 guile 的 PEG 库不采用名称中带有下划线的规则。在更改了所有规则之后block_header
,bheader
它就起作用了。