ANTLR中的令牌之间没有空格
我正在写一个非常简单的C#文法子集作为练习 然而,我有一个规则,空白给我带来了一些麻烦 我想区分以下几点:ANTLR中的令牌之间没有空格,antlr,antlr3,Antlr,Antlr3,我正在写一个非常简单的C#文法子集作为练习 然而,我有一个规则,空白给我带来了一些麻烦 我想区分以下几点: int a; int? b; 其中第一个是“常规”int类型,第二个是可为null的int类型 然而,以我目前的语法,我无法解析这个 type : typeBase x='?' -> { x == null } typeBase -> ^('?' typeBase) ; typeBas
int a;
int? b;
其中第一个是“常规”int类型,第二个是可为null的int类型
然而,以我目前的语法,我无法解析这个
type : typeBase x='?' -> { x == null } typeBase
-> ^('?' typeBase)
;
typeBase : 'int'
| 'float'
;
问题是,根据这些规则,它只适用于“?”之前的空格,如下所示:
int ? a;
这是我不想要的
有什么想法吗?1)你对空白的定义似乎有缺陷。。。您呈现的语法应该接受“int?”和“int?”。也许你应该看看空白的定义
2) 如果不允许“int?a”,可以定义额外的标记“int”和“float”。。。通常,您允许在每个标记之间显示空白,因此您必须将其设置为一个标记。type中的重写规则不正确:您有两个重写规则,其中应该有一个。另外,这个
“?”
不是可选的吗?现在,它必须始终包含一个“?”
。无论如何,如果没有重写规则,int?
和int?
都被正确解析。是的,如果类型和问号之间不允许有空格,那么定义额外的标记,如int?
,float?
等将是一种方法。并且#1是正确的:生成的解析器接受int?
和int?
。