Racket,brag:匹配令牌的val

时间:2018-01-22 15:58:20

标签: parsing racket

在用#lang brag编写的解析器中,是否可以匹配令牌的值而不是类型? 例如,我有一个令牌类型'WORD,它匹配任何单词字符集。因此令牌可以是(token 'WORD "some_word")。我的DSL的语法有一个规则,要求在某个地方使用特定的单词“start”,因此它应该在那个地方接受(token 'WORD "start")。但是我收到此错误;parser-non-terminals: start used as both token and non-terminal。 (不使用start作为非终端。)以下是我的brag代码:

#lang brag
program : sexpr* startt* layout
sexpr   : SEXPR

startt   : "start" WORD "[" WORD* "=>" sexpr "]"

layout  : elem*
elem    : info | text | sexpr
info    : "{" text "}"
text    : WORD*


;parser-non-terminals: start used as both token and non-terminal

1 个答案:

答案 0 :(得分:0)

#racket @ freenode,发现匹配的文字如“start”,“error”和“atok”会产生错误,这可能是brag或yacc中的错误。由于我还遇到其他困难,我会尝试另一个解析器生成器。否则,我可能会匹配一般的'WORD非终端并断言它在扩展器中等于“start”。