我可以指定一个特定的解析器规则来跳过空白吗?
Could I specify a particular parser rule to skip blanks?
g4:
WS: [\r\n \t] -> skip;
表示在某些特定情况下跳过所有blanks.But,我只是需要一些规则来在分析时跳过空白。
如何指定特定的解析器规则来跳过空白?感谢您的评论。
我更新问题:
g4:
WS: [\r\n \t] -> skip;
String:[a-zA-Z]+;
stringline:'"' String '"';
我的文字:
"aaaa bbbb"
如您所见,我需要将 "aaaa bbb" 识别为跳过空格下的 "stringline",我该怎么做?
解析器和词法分析器是独立的。你不能从解析器中引导你的词法分析器。因此,要么跳过所有白色space,要么不跳过,并且必须在每个规则(词法分析器+解析器)中显式处理它们。
如果确实需要这种特殊的 space 处理等,那么考虑一下您的解决方案可能会更好。重新定义您要解析的语言(如果您能够这样做)?
更新:
从您对问题的更改来看,您似乎在询问如何将 spaces 保留在字符串中,这就是为什么 Bart 建议创建一个特定的词法分析器规则,其中包括外部引号和可能的白色引号space在里面。但是,您应该将 WS 规则移到语法下方的某个位置,这样它就不会 "steal" whitespaces 与其他规则。通常 WS 规则是词法分析器语法中最后的规则之一(因为顺序在语法文件中很重要)。
g4:
WS: [\r\n \t] -> skip;
表示在某些特定情况下跳过所有blanks.But,我只是需要一些规则来在分析时跳过空白。
如何指定特定的解析器规则来跳过空白?感谢您的评论。
我更新问题:
g4:
WS: [\r\n \t] -> skip;
String:[a-zA-Z]+;
stringline:'"' String '"';
我的文字:
"aaaa bbbb"
如您所见,我需要将 "aaaa bbb" 识别为跳过空格下的 "stringline",我该怎么做?
解析器和词法分析器是独立的。你不能从解析器中引导你的词法分析器。因此,要么跳过所有白色space,要么不跳过,并且必须在每个规则(词法分析器+解析器)中显式处理它们。
如果确实需要这种特殊的 space 处理等,那么考虑一下您的解决方案可能会更好。重新定义您要解析的语言(如果您能够这样做)?
更新:
从您对问题的更改来看,您似乎在询问如何将 spaces 保留在字符串中,这就是为什么 Bart 建议创建一个特定的词法分析器规则,其中包括外部引号和可能的白色引号space在里面。但是,您应该将 WS 规则移到语法下方的某个位置,这样它就不会 "steal" whitespaces 与其他规则。通常 WS 规则是词法分析器语法中最后的规则之一(因为顺序在语法文件中很重要)。