Antlr 忽略空格,但允许文本带有空格

Antlr 忽略空格,但允许文本带有空格,antlr,grammar,antlr4,Antlr,Grammar,Antlr4,我需要为以下表达式编写一个简单的antlr4语法: {paramName=simple text} //correct { paramName = simple text} //correct {bad param=text} //incorrect 前两个表达式几乎相等。区别在于参数名称前后有一个空格。第三个不正确,参数名称中不允许有空格。我写语法: grammar Test; prog : '{' paramName '=' paramValue '}' ; paramNam

我需要为以下表达式编写一个简单的antlr4语法:

{paramName=simple text} //correct
{ paramName = simple text} //correct
{bad param=text} //incorrect
前两个表达式几乎相等。区别在于参数名称前后有一个空格。第三个不正确,参数名称中不允许有空格。我写语法:

grammar Test;

prog       : '{' paramName '=' paramValue '}' ;
paramName  : PARAM_NAME ;
paramValue : TEXT_WITH_SPACES ;

PARAM_NAME       : [A-Za-zА-Яа-я_] [A-Za-zА-Яа-я_0-9]* ;
TEXT_WITH_SPACES : (LETTERS_EN|' ')+ ;
WS               : [ ]+ -> skip;

fragment LETTERS_EN       : ([A-Za-z]) ;
因此,任务是忽略参数名称周围的空格,但在参数值中允许空格。但当我在规则文本_中添加一个带有_空格的空格时,我的第二个表达式将高亮显示为icorrect


我能做什么?提前谢谢你

< P>忽略所有空格,但认为它们是“词尾”,并允许更多的单词在值:

grammar Test;

prog       : '{' paramName '=' paramValue '}' ;
paramName  : WORD ;
paramValue : WORD+ ;

WORD       : [A-Za-zА-Яа-я_] [A-Za-zА-Яа-я_0-9]* ;
WS         : [ ]+ -> skip;
grammar Test;

prog       : '{' paramName '=' paramValue '}' ;
paramName  : WORD ;
paramValue : WORD | MULTIWORD ;

MULTIWORD  : WORD ((' ')+ WORD)* ;
WORD       : [A-Za-zА-Яа-я_] [A-Za-zА-Яа-я_0-9]* ;
WS         : [ ]+ -> skip;

更新:要在值中保留空格,请执行以下操作:

grammar Test;

prog       : '{' paramName '=' paramValue '}' ;
paramName  : WORD ;
paramValue : WORD+ ;

WORD       : [A-Za-zА-Яа-я_] [A-Za-zА-Яа-я_0-9]* ;
WS         : [ ]+ -> skip;
grammar Test;

prog       : '{' paramName '=' paramValue '}' ;
paramName  : WORD ;
paramValue : WORD | MULTIWORD ;

MULTIWORD  : WORD ((' ')+ WORD)* ;
WORD       : [A-Za-zА-Яа-я_] [A-Za-zА-Яа-я_0-9]* ;
WS         : [ ]+ -> skip;

这是基于
MULTIWORD
匹配多个单词,单词之间只有空格,而其他情况则通过单词和WS的顺序进行匹配。

然后我们丢失了所有额外的空格值:例如“我的短语在短语和单词之间有多个空格”(此处为“无法写入”)在这种情况下,您可能不需要使用多个单词比单个单词长的事实,即将多个单词作为一个标记进行匹配,并允许paramValue为单个单词或多个单词标记。哇,这似乎是正确的,让我做一些测试,然后再将其标记为答案,但我们需要交换位置multiword和WORDyeah,我们在第一个单词前面的paramValue中去掉了所有空格,但这是可以接受的。非常感谢。