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

How to handle strings with spaces in the middle in 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                ;

请指教我应该如何更改我的语法。

请考虑这是为问题准备的,将名称作为多个单词读入应用程序将不适用于实际情况。

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                ;