我想解析文件的以下行并分别识别学生姓名和年龄。
Student Tim Jonh (25)
Student Mack Woo (30)
年龄是一个数字,名称中间可能有也可能没有空格。我为上面创建了以下ANTLR语法。
但是,这会将名称解析为多个单词。但我想把它当作“Tim Jonh”或“Mack Woo”,中间的空间。也就是说,如果中间有2个空格,它应该按原样读取。
grammar school;
students : (student)* ;
student : 'Student' studentname '(' age ')' ;
studentname : (NAME)+ ;
age : INT ;
NAME : [a-zA-Z]+ ;
INT : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;
请告知我应该如何改变我的语法。
请考虑这是为问题做好准备并阅读该名称,因为该应用程序的多个单词将不适用于实际。
答案 0 :(得分:2)
grammar school;
students : (student)* ;
student : 'Student' studentname '(' age ')' ;
studentname : NAME ;
age : INT ;
NAME : WORD (WS WORD)* ;
fragment WORD : [a-zA-Z]+ ;
INT : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;