我有一个分别解析字母字符和数字的语法:
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用于存储,我应该能够分别获取字母和数字。
如何为这样的东西定义语法?
您需要分别向解析器公开Alphabet
和Number
,这意味着它们应该是词法分析器中的顶级规则(而不是fragment
规则)。因此,Alphanumeric
也将成为一个解析器规则:
alphanumeric : (Alphabet | Number)+
;
Alphabet : ('a'..'z')+
;
Number : ('0'..'9')+
;