如何使用ANTLR语法从字符串中解析和拆分字母字符和数字

时间:2013-03-06 16:17:23

标签: antlr antlr3 antlrworks antlr2

我有一个语法分别解析字母字符和数字:

grammar Demo;

options
{
  language = C;
}

program : process+
        ;

process :  Alphanumeric {printf("\%s",$Alphanumeric.text->chars);}
        ;

Alphanumeric : (Alphabet | Number)+
             ;


fragment Alphabet : ('a'..'z')+
                  ;

fragment Number : ('0'..'9')+
                ;

假设输入为'a10'或'b10',printf语句将显示a10或b10,但我想要分割字母字符和数字,即a和10必须分开拆分,因为我需要'a'与其他字符串进行比较,并将数字('a'或'b'旁边的数字)保存到表格中。

准确地说,a10必须被拆分 - > a用于比较,10用于存储,我应该能够分别获取字母和数字。

如何定义这样的语法?

1 个答案:

答案 0 :(得分:1)

您需要单独向您的解析器公开AlphabetNumber,这意味着它们应该是词法分析器中的顶级规则(不是fragment规则)。因此,Alphanumeric也将成为解析器规则:

alphanumeric : (Alphabet | Number)+
             ;

Alphabet : ('a'..'z')+
         ;

Number : ('0'..'9')+
       ;