我有以下语法:
LIST = LBRACE LISTBODY RBRACE
LISTBODY = ATOM | ATOM COMMA LISTBODY
ATOM = NUMBER | WORD
NUMBER = INTEGER
INTEGER = #'[-|+]{0,1}[ ]*(\\d)+'
WORD = #'[a-z]([a-zA-z0-9_])*'
LBRACE = '['
RBRACE = ']'
COMMA = ','
尝试解析[a,b]失败。如果我用RBRACE ='}'替换RBRACE =']',我可以解析[a,b}
我缺少哪些特别的东西?
答案 0 :(得分:1)
LBRACE
和RBRACE
的内容很好。
我想知道发生的事情并不是你可能认为正在发生的事情,即多个规则相互作用。您通常可以通过[:index n]
形式的错误来判断,其中n
是解析得到的距离。
INTEGER
是一个正则表达式,其中包含[
和]
,其间有空格。你能带走它们和空间*
,看看你怎么走?我知道他们应该在正则表达式中逃脱,但我仍然会尝试沿着这些方向进行实验。