gpt4 book ai didi

parsing - ANTLR4 中上下文相关的空白处理

转载 作者:行者123 更新时间:2023-12-05 01:00:47 24 4
gpt4 key购买 nike

我正在尝试在 ANTLR4 中实现表达式/公式语言,但在处理空格时遇到问题。在大多数情况下,我不关心空格,所以我有“标准”词法分析器规则将它发送到 HIDDEN channel ,即

// Whitespace
WS
: ( ' ' | '\t' |'\r' | '\n' ) -> channel(HIDDEN)
;

但是,我有一个运算符,它前后都不允许有空格,而且我不知道如何在不更改 WS 词法分析器规则以将空格保留在默认 channel 中并具有显式 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 : [a-zA-Z_];
fragment LETTERORDIGIT : [a-zA-Z0-9_];

// Whitespace
WS
: ( ' ' | '\t' |'\r' | '\n' ) -> channel(HIDDEN)
;

就目前而言,这会解析 A OR B AND C.DA OR B AND C. D成功 - 我需要的是 .运算符不允许空格,因此第二个表达式无效。

最佳答案

您可以从其他 channel 获取 token ,如下所示:

variableExpression
: IDENTIFIER ( '.' {_input.get(_input.index() -1).getType() != WS}? IDENTIFIER )*
;
A OR B AND C.D可以,并且
A OR B AND C. D会打印错误

关于parsing - ANTLR4 中上下文相关的空白处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29010227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com