我想知道antlr解析规则是否有可能创建匹配包含endtoken的字符串的规则。我将通过使用sql-example来说明这一点:
CREATE FUNCTION UFHDBTBL.FH_LIEF_SPERR_SK(pidpack INTEGER)
...
BEGIN ATOMIC
DECLARE sperrsk VARCHAR(2000) DEFAULT '';--
DECLARE erster INTEGER DEFAULT 0;--
FOR satz AS
SELECT sk_name1
FROM UFHDBTBL.FH01TM21 psk, UFHDBTBL.FH01T61 lsk
WHERE psk.id_pack = pidpack
DO
IF erster = 1 THEN
SET sperrsk = sperrsk || '<br>';--
END IF ;--
SET sperrsk = sperrsk || LTRIM(RTRIM(satz.sk_name1));--
IF erster = 0 THEN
SET erster = 1;--
END IF ;--
END FOR;--
RETURN sperrsk;--
END;
目前,我尝试使用以下解析规则来匹配“BEGIN ATOMIC”和“END;”之间的所有内容:
'BEGIN' ~('END') 'END'
'BEGIN' .+? 'END'
'BEGIN' (~('END')|~(';'))* 'END'
(The last ; is contained in the "create function rule" so don't worry about it)
注意,该块包含标记“END”和“;”。因为我不想创建一个新的令牌“END;” (导致许多其他规则失败),我希望周围有一些人可以帮助我!
答案 0 :(得分:0)
您可以使用以下内容匹配所有内容,直到END;
而不创建新的单个令牌来表示它。
'BEGIN'
( ~'END'
| 'END' ~';'
)*
'END' ';'