我正在写一个C#语法的非常简单的子集作为练习。ANTLR中的标记之间没有空格
但是,我有一个规则,空白给我一些麻烦。
我要区分以下:
int a;
int? b;
当第一种是“正规”的int类型,第二个是一个可为空的int类型。
但是,用我目前的语法,我无法解析这个。
type : typeBase x='?' -> { x == null } typeBase
-> ^('?' typeBase)
;
typeBase : 'int'
| 'float'
;
的事情是,蒙山这些规则,它只能与前一个空白的作品,这样的“?”:
int ? a;
哪个我不想要的。
任何想法?
'type'中的重写规则不正确:您应该有两个重写规则。另外,不应该这个“?”是可选的吗?现在,它必须包含一个''?''。 – 2011-05-20 11:36:03
总之,如果没有重写规则,'int?'和'int?'都会被正确解析。 – 2011-05-20 11:53:17