我试图编写语法,以便解析特定类型的输入文件。我从最基本的语法开始,但是guile在试图将模式与此语法匹配时,几乎融化了我的计算机。
我想知道我的语法是否有什么含糊不清的地方?下面是我试图解析的一个示例输入:
input.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*))jist是由包含变量的blocks组成的文件。(下一步是向该语法添加嵌套块。)
这个语法有什么特别的错误吗?
发布于 2020-04-09 18:21:52
我找到了不起作用的原因。显然,用于guile的PEG库不采用带有下划线的规则。在将所有规则(如block_header )更改为bheader之后,它起了作用。
发布于 2020-04-07 15:06:49
我不知道它为什么要锁定在您身上,但是您缺少一个SP来正确地解析该输入。
这是:
param <-- text SP EQ param_v SP应:
param <-- text SP EQ SP param_v SPhttps://stackoverflow.com/questions/60961598
复制相似问题