我正在编写一个非常简单的C#语法子集作为练习。
但是,我有一条规则,即空白给我带来了一些麻烦。
我想区分以下内容:
int a;
int? b;
第一个是“常规”int类型,第二个是可空的int类型。
然而,根据我目前的语法,我无法解析它。
type : typeBase x='?' -> { x == null } typeBase
-> ^('?' typeBase)
;
typeBase : 'int'
| 'float'
;
事情就是这些规则,它只适用于'?'之前的空格,如下所示:
int ? a;
我不想要的。
有什么想法吗?
答案 0 :(得分:2)
1)你对空白的定义似乎有缺陷......你提出的语法应该接受“int?”和“int?”。也许你应该看看空白的定义。
2)如果你想禁止“int?a”你可以定义额外的令牌'int?'并'浮动?' ...通常你允许在每个标记之间出现空格,所以你必须把它作为一个标记。