首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PEG语法把计算机变成热板,永远不会完成。

PEG语法把计算机变成热板,永远不会完成。
EN

Stack Overflow用户
提问于 2020-03-31 23:46:14
回答 2查看 92关注 0票数 0

我试图编写语法,以便解析特定类型的输入文件。我从最基本的语法开始,但是guile在试图将模式与此语法匹配时,几乎融化了我的计算机。

我想知道我的语法是否有什么含糊不清的地方?下面是我试图解析的一个示例输入:

input.txt

代码语言:javascript
复制
[HELLO]
  var = 123
[]

下面是我现在的剧本:

代码语言:javascript
复制
(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组成的文件。(下一步是向该语法添加嵌套块。)

这个语法有什么特别的错误吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-09 18:21:52

我找到了不起作用的原因。显然,用于guile的PEG库不采用带有下划线的规则。在将所有规则(如block_header )更改为bheader之后,它起了作用。

票数 0
EN

Stack Overflow用户

发布于 2020-04-07 15:06:49

我不知道它为什么要锁定在您身上,但是您缺少一个SP来正确地解析该输入。

这是:

代码语言:javascript
复制
param <-- text SP EQ param_v SP

应:

代码语言:javascript
复制
param <-- text SP EQ SP param_v SP
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60961598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档