ANTLR解析规则覆盖包含“结束”-Token的文本块

时间:2014-08-06 11:41:37

标签: parsing antlr

我想知道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;” (导致许多其他规则失败),我希望周围有一些人可以帮助我!

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容匹配所有内容,直到END;而不创建新的单个令牌来表示它。

'BEGIN'
(   ~'END'
|   'END' ~';'
)*
'END' ';'