忽略空格,但允许带有空格的文本
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 的顺序匹配。
我需要为这样的表达式编写一个简单的 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 的顺序匹配。