如何在ANTLR中处理中间带空格的字符串

时间:2017-11-20 10:52:02

标签: antlr

我想解析文件的以下行并分别识别学生姓名和年龄。

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                ;

请告知我应该如何改变我的语法。

请考虑这是为问题做好准备并阅读该名称,因为该应用程序的多个单词将不适用于实际。

1 个答案:

答案 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                ;