使用目标语言功能动态结束令牌捕获?

Antlr dynamic end of token capture with target-language function?

提问人:David542 提问时间:8/6/2023 最后编辑:David542 更新时间:8/6/2023 访问量:35

问:

我有一个语法,允许以 .但是,根据“方言”值,我们将以不同的方式解析表达式的内部。让我举几个例子:@dialect(...)

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

我想实际插入一个自定义函数,以确定我们应该根据我们使用的方言关闭括号的位置。有没有办法做到这一点?我已经在下面以概念性的方式展示了我正在尝试执行的解析器:

grammar Native;

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

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

将“吃掉”所有这些令牌,并前进到 .换言之,操作本身将使用字符来创建令牌。这在ANTLR中可以做到吗?如果是这样,我该如何做到这一点的例子是什么?customJsFunctionToGetToEndOfToken)

解析 ANTLR 词法分析器

评论


答:

1赞 Bart Kiers 8/6/2023 #1

换言之,操作本身将使用字符来创建令牌。这在ANTLR中可以做到吗?

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