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