0

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

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

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

4

1 回答 1

1

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

alphanumeric : (Alphabet | Number)+
             ;

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

Number : ('0'..'9')+
       ;
于 2013-03-06T18:34:54.827 回答