【发布时间】:2011-05-20 11:24:44
【问题描述】:
我正在编写一个非常简单的 C# 语法子集作为练习。
但是,我有一个规则,其中空格给我带来了一些麻烦。
我想区分以下几点:
int a;
int? b;
第一个是“常规”int 类型,第二个是可为空的 int 类型。
但是,以我目前的语法,我无法解析这个。
type : typeBase x='?' -> { x == null } typeBase
-> ^('?' typeBase)
;
typeBase : 'int'
| 'float'
;
问题是,有了这些规则,它只适用于“?”之前的空格,如下所示:
int ? a;
我不想要的。
有什么想法吗?
【问题讨论】:
-
type中的重写规则不正确:您有两个重写规则,而应该有一个。另外,这个'?'不应该是可选的吗?现在,它必须始终包含'?'。 -
无论如何,如果没有重写规则,
int?和int ?都可以正确解析。