ANTLR中的令牌之间没有空格

时间:2011-05-20 11:24:45

标签: antlr antlr3

我正在编写一个非常简单的C#语法子集作为练习。

但是,我有一条规则,即空白给我带来了一些麻烦。

我想区分以下内容:

int a;
int? b;

第一个是“常规”int类型,第二个是可空的int类型。

然而,根据我目前的语法,我无法解析它。

type     : typeBase x='?'    -> { x == null } typeBase
                             -> ^('?' typeBase)
         ;

typeBase : 'int'
         | 'float'
         ;

事情就是这些规则,它只适用于'?'之前的空格,如下所示:

int ? a;

我不想要的。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

1)你对空白的定义似乎有缺陷......你提出的语法应该接受“int?”和“int?”。也许你应该看看空白的定义。

2)如果你想禁止“int?a”你可以定义额外的令牌'int?'并'浮动?' ...通常你允许在每个标记之间出现空格,所以你必须把它作为一个标记。