1

这应该很简单,但我正在努力解决它。

我正在尝试获取带引号的字符串,包括字符串中的空格(空格和制表符),并将值记录在 CSharp 字符串中。但是,我也想忽略引用字符串之外包含的相同空格(通过词法分析器)。我包含了典型的 WS 词法分析器规则,但是 WS 规则会在我需要时取出空格(当它在带引号的字符串中时)。如果我从 WS 规则中删除 {channel=HIDDEN},我会丢失所有其他空格,并且必须在令牌之间的任何地方手动添加 WS。任何帮助将不胜感激!这是我的语法:

program returns [KeyValuePair<string, string> kvp]
    :
      ident=IDENT {kvp.Key = ident.Text;}
      '='
      quote=quoted_ident {kvp.Value = quote.ret;}
    ;

quoted_ident returns [string ret]
    :
      '"'
      (
        (ident=IDENT|ident=DOUBLE) {$ret += ident.Text;}
        |
        ws=WS {$ret += ws.Text;}
      )+
      '"'
    ;

WS :
    (
      ' '
      |
      '\t'
    )
    { $channel = HIDDEN; }
    ;

fragment DIGIT: '0'..'9';
fragment LETTER: ('a'..'z' | 'A'..'Z');
fragment DOT:'.';
DOUBLE : ((DIGIT)+(DOT(DIGIT)+)?)|(DOT(DIGIT)+);
IDENT : (LETTER|DIGIT|DOT|':'|'\''|'/'|'\\'|'_'|'@'|';'|'?'|'-'|'#'|'$'|'%'|'^'|'&'|'*')+; 

例子:

输入:'名称=“我的名字”'

kvp.Value '我的名字'的期望值

实际值“我的名字”

我想忽略引号外的所有空格和制表符,但在引号内捕获它们。

4

0 回答 0