Antlr4 要分析相同的结构吗

Antlr4 要分析相同的结构吗,antlr4,Antlr4,我想让ANTLR4解析以下内容: FSM name type String state type State Relation name type String 我用的是这个语法: grammar Generator; classToGenerate: name=Name NL (attributes NL)+ classToGenerate| EOF; attributes: attribute=Name WS 'type' WS type=Name; Name:

我想让ANTLR4解析以下内容:

FSM
name type String
state type State
Relation
name type String
我用的是这个语法:

grammar Generator;

classToGenerate:
    name=Name NL
    (attributes NL)+
    classToGenerate| EOF;
attributes: attribute=Name WS 'type' WS type=Name;

Name:  ('A'..'Z' | 'a'..'z')+ ;

WS: (' ' | '\t')+;
NL:  '\r'? '\n';
我想成功阅读,我不知道为什么,但每次运行我的程序时,我都会出现以下错误:

line 6:18 no viable alternative at input '<EOF>'
第6:18行输入“”处无可行的替代方案

有什么问题吗?

尾随的
EOF
会把你搞砸。尝试创建一个与
EOF
标记匹配的单独规则,前面有一个或多个
classToGenerate
(我的示例中的
parse
规则):

你真的需要保留空格和换行符吗?你可以让lexer丢弃它们,这会让你的语法更容易阅读:

grammar Generator;

parse
 : classToGenerate+ EOF
 ;

classToGenerate
 : name=Name attributes+
 ;

attributes
 : attribute=Name 'type' type=Name
 ;

Name   : [a-zA-Z]+;
Spaces : [ \t\r\n] -> skip;

尾随的
EOF
会把你搞得一团糟。尝试创建一个与
EOF
标记匹配的单独规则,前面有一个或多个
classToGenerate
(我的示例中的
parse
规则):

你真的需要保留空格和换行符吗?你可以让lexer丢弃它们,这会让你的语法更容易阅读:

grammar Generator;

parse
 : classToGenerate+ EOF
 ;

classToGenerate
 : name=Name attributes+
 ;

attributes
 : attribute=Name 'type' type=Name
 ;

Name   : [a-zA-Z]+;
Spaces : [ \t\r\n] -> skip;

似乎有一个拼写错误:NL规则后面的字母i是的,
i
一定是一个拼写错误:我删除了它。似乎有一个拼写错误:NL规则后面的字母i是的,
i
一定是一个拼写错误:我删除了它。哦,谢谢,它现在读起来没有错误,但现在它停在这里:state type state它不解析其余的。这是:关系名称类型StringNo problem。如果你有新问题,请随意提出新问题。这些注释框不适合解释(或回答)您的问题。哦,谢谢,它现在读起来没有错误,但现在它停在这里:state类型state它不解析其余部分。这是:关系名称类型StringNo problem。如果你有新问题,请随意提出新问题。这些评论框不适合解释(或回答)您的问题。