Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANTLR中的令牌之间没有空格_Antlr_Antlr3 - Fatal编程技术网

ANTLR中的令牌之间没有空格

ANTLR中的令牌之间没有空格,antlr,antlr3,Antlr,Antlr3,我正在写一个非常简单的C#文法子集作为练习 然而,我有一个规则,空白给我带来了一些麻烦 我想区分以下几点: int a; int? b; 其中第一个是“常规”int类型,第二个是可为null的int类型 然而,以我目前的语法,我无法解析这个 type : typeBase x='?' -> { x == null } typeBase -> ^('?' typeBase) ; typeBas

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

然而,我有一个规则,空白给我带来了一些麻烦

我想区分以下几点:

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?