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

Ignore spaces, but allow text with spaces

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

{paramName=simple text} //correct
{ paramName = simple text} //correct
{bad param=text} //incorrect

前两个表达式几乎相等。区别在于参数名称前后的 space。第三个不正确,参数名称中不允许使用 spaces。我写一个语法:

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]) ;

因此,任务忽略参数名称周围的 spaces,但允许参数值中的 spaces。但是当我在规则 TEXT_WITH_SPACES 中添加 space 时,我的第二个表达式突出显示为 iccorrect.

screenshot

我能做什么?提前致谢!

忽略所有 space,但将它们视为 "end of word",并允许值中包含更多单词:

grammar Test;

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

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

更新:在值中保留 spaces:

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 匹配多个单词,它们之间只有 space,其他情况按 WORD 和 WS 的顺序匹配。