gpt4 book ai didi

antlr - ANTLR 词法分析器中的特殊字符处理

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

我为字符串变量声明写了下面的语法。字符串的定义类似于单引号之间的任何内容,但必须有一种方法可以通过使用 $ 字母转义将单引号添加到字符串值。

grammar test;

options
{
language = Java;
}


tokens
{
VAR = 'VAR';
END_VAR = 'END_VAR';
}


var_declaration: VAR string_type_declaration END_VAR EOF;

string_type_declaration: identifier ':=' string;

identifier: ID;

string: STRING_VALUE;

STRING_VALUE: '\'' ('$\''|.)* '\'';

ID: LETTER+;

WSFULL:(' ') {$channel=HIDDEN;};

fragment LETTER: (('a'..'z') | ('A'..'Z'));

如果您尝试为 var_declaration 规则运行此代码,此语法将不起作用:

VAR A :='$12.2' END_VAR

我收到 MismatchedTokenException。

但这段代码适用于 string_type_declaration 规则:

A :='$12.2' 

最佳答案

您的 STRING_VALUE 未正确标记。在循环 ( ... )* 中,$ 后面需要一个单引号,但输入中的字符串 '$12.2' , $ 后没有引号。您应该使单引号成为可选的 ('$' '\''? | .)*。但是现在循环中的替代方法 . 也将匹配单引号:最好让它匹配除单引号和 $:

以外的任何内容
STRING_VALUE
: '\'' ( '$' '\''? | ~('$' | '\'') )* '\''
;

产生以下解析树:

enter image description here

关于antlr - ANTLR 词法分析器中的特殊字符处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362300/

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