gpt4 book ai didi

antlr - 在 antlr 中使一些解析器规则不区分大小写

转载 作者:行者123 更新时间:2023-12-02 06:05:23 34 4
gpt4 key购买 nike

我正在编写一个小型 csharp 控制台应用程序,它从控制台读取文本,进行一些操作并返回一个字符串。为此,我正在使用 Antlr。语法文件如下所示。

    grammar test;
options {

language = CSharp2;
output = AST;
}
start returns [String res]: expression EOF
{
$res=$expression.res;
} ;

expression returns [String res]
: Identifier {$res=$Identifier.text}
|Num {$res=$num.text;
|function {$res=function.res}
;

function: 'left' '( Identifier ')'{some code here}
| 'right' '( Identifier ')'{some code here}
|..........
;
Num : (Minus)?('0'..'9')+ ;
Identifier : ('a'..'z'|'A'..'Z'|'\\'|'/'|'_'|':'|';'|'?'|'.'|'0'..'9')('a'..'z'|'A'..'Z'|'\\'|'/'|'_'|':'|';'|'.'|'?'|'0'..'9')*;

我有几个这样的函数可以进行一些字符串操作。现在,我希望 Antlr 识别这些函数名称而不考虑大小写。目前,它只接受小写字母作为函数名称,例如 ..upper(asdf)。我无法在我的应用程序中将每个标记都转换为小写,因为它也会更改标识符的大小写。我怎样才能做到这一点?

最佳答案

只需定义适当的标记。所以,对于上面的代码:

function : Left  '(' Identifier ')' {some code here}
| ..........
;

Left : ('l'|'L')('e'|'E')('f'|'F')('t'|'T');

或者,如果你确定你想要像 lEfT 这样的情况:

function : Left  '(' Identifier ')' {some code here}
| ..........
;

Left : ('left'|'LEFT');

关于antlr - 在 antlr 中使一些解析器规则不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11375037/

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