【发布时间】:2020-04-07 21:59:38
【问题描述】:
我正在尝试编写语法,但我发现了一个问题,我不太确定如何“优雅地”解决。
问题是我将“bro”作为保留的指令关键字,它可以跟(或不跟)谓词语句。 IE:“bro_t”或“bro”。
现在,问题是当前 'bro_t' 与 ID 的定义匹配,而 'bro' 本身就是一个标记,显然 'bro_t' 比 'bro' 长,因此解析器将该语句与 ID 匹配并且解析失败。我提出的解决方案是同时保留“bro_t”和“bro_f”,但这对于整个指令集来说相对耗时。我正在研究的另一个解决方案是通配符运算符,但我真的不明白它们是否适用于此以及如何应用它们。
语法:
predicate
: '_t' '<' register '>' | '_f' '<' register '>' | ;
operation
: 'bro' predicate ;
ID: ('a' .. 'z' | 'A' .. 'Z' | '_') ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '.')* ;
【问题讨论】: