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