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



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

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用于存储,我应该能够分别获取字母和数字。

如何为这样的东西定义语法?

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

alphanumeric : (Alphabet | Number)+
             ;
Alphabet : ('a'..'z')+
         ;
Number : ('0'..'9')+
       ;

最新更新