Antlr 动态结束目标语言功能的 token 捕获?

问题描述 投票:0回答:1

我有一个语法,允许以

@dialect(...)
的形式输入“本机”表达式。然而,根据“方言”值,我们将以不同的方式解析表达式的内部。让我举几个例子:

= @postgres(')'''--comment) + 2
= 3 + @mysql(`my ide)ntifier`) + 4

我想实际插入一个 custom 函数来确定我们应该根据我们所处的方言在哪里关闭括号。有没有办法做到这一点?我已经在下面以概念方式展示了我正在尝试执行的解析器:

grammar Native;

root: '=' expr ('+' expr)*;
expr: NUMBER | native_expr;
native_expr: '@' NATIVE_DIALECT '(' customJsFunctionToGetToEndOfToken();

NATIVE_DIALECT: ('postgres' | 'mysql');
NUMBER: [0-9]+;

customJsFunctionToGetToEndOfToken
会“吃掉”所有这些标记,并前进到
)
的结束字符。换句话说,操作本身将消耗字符来创建令牌。这可以在 ANTLR 中做到吗?如果是这样,我可以如何做到这一点的例子是什么?

parsing antlr lexer
1个回答
0
投票

换句话说,动作本身会消耗字符来创建令牌。这可以在 ANTLR 中做到吗?

不,这是不可能的。在解析器规则内,您无法影响标记的创建。但是,我在你的其他问题中的回答已经创建了正确的“右括号标记”,所以也许不再需要这个问题?

© www.soinside.com 2019 - 2024. All rights reserved.