我正在尝试在 ANTLR4 中实现表达式/公式语言,但在处理空格时遇到问题。在大多数情况下,我不关心空格,所以我有“标准”词法分析器规则将它发送到 HIDDEN 通道,即
// Whitespace
WS
: ( ' ' | '\t' |'\r' | '\n' ) -> channel(HIDDEN)
;
Run Code Online (Sandbox Code Playgroud)
但是,我有一个运算符,它之前或之后都不允许出现空格,而且我不知道如何在不更改 WS 词法分析器规则的情况下处理这种情况,以将空格保留在默认通道中,并且WS?在我的所有其他内容中都有明确的术语解析器规则(有很多)。
作为简化示例,我为虚构的谓词语言创建了以下语法:
grammar Logik;
/*
* Parser Rules
*/
ruleExpression
: orExpression
;
orExpression
: andExpression ( 'OR' andExpression)*
;
andExpression
: primaryExpression ( 'AND' primaryExpression)*
;
primaryExpression
: variableExpression
| '(' ruleExpression ')'
;
variableExpression
: IDENTIFIER ( '.' IDENTIFIER )*
;
/*
* Lexer Rules
*/
IDENTIFIER
: LETTER LETTERORDIGIT*
;
fragment LETTER …Run Code Online (Sandbox Code Playgroud)