我想匹配一个常量,它基本上是一个全大写的字符串。
另外,我想匹配一个标识符,它可以包含小写和大写字母的混合。
Start
= Constant
/ Identifier
Identifier
= h:[A-Za-z_] t:[a-zA-Z0-9_]* { return { type: 'IDENTIFIER', value: h + t.join('') } }
Constant
= h:[A-Z] t:[A-Z_0-9]* { return { type: 'CONSTANT', value: h + t.join('') } }
问题是,当我尝试匹配时Asd
,它说:Line 1, column 2: Expected [A-Z_0-9] or end of input but "s" found.
它似乎符合常量规则,但即使失败也不会交换到标识符之一......
问题似乎是常量也是一个有效的标识符,但我无法找出打破歧义的规则,我认为如果常量匹配失败,它应该只尝试标识符规则......