我想有一些相当基本的东西,我不理解。以下语法在我看来很简单。从规则'解析'开始,在我看来并不是很多可能是模棱两可的。但我得到下面列出的错误。如果有人甚至可能只是解释第一个有用的错误。
目的是解析简单的名字,如'先生约翰史密斯三世&简史密斯夫人或'史密斯,约翰'。
parse
: name+ EOF
;
// match Mr. John or Smith,
name
: NAMESEP? SALUTATION* NAME (firstlast | lastcommafirst)
;
// match Smith III
firstlast
: INITIAL? NAME+ COMMA? title*
;
// match John
lastcommafirst
: COMMA SALUTATION* NAME+ COMMA? title*
;
// match III
title
: TITLE COMMA?
;
警告(200):/ NameParser.g:23:16: 决策可以使用多个替代方案匹配输入,例如“NAME”:1,2
结果,对该输入禁用了备选方案2 警告(200):/ NameParser.g:27:25: 决定可以使用多种替代方案匹配输入,例如“NAME COMMA SALUTATION NAME COMMA SALUTATION NAME {EOF,NAME,SALUTATION..TITLE,NAMESEP}”:1,2
结果,对该输入禁用了备选方案2 警告(200):/ NameParser.g:27:25: 决策可以使用多个替代方案匹配输入,例如“NAME {EOF,NAME,SALUTATION..TITLE,NAMESEP}”:1,2
结果,对该输入禁用了备选方案2 警告(200):/ NameParser.g:27:25: 决策可以使用多个替代方案匹配输入,例如“NAME COMMA SALUTATION NAME {NAME,INITIAL}”:1,2
答案 0 :(得分:1)
firstlast可以只匹配NAME或者可以匹配NAME NAME但它可以匹配NAME并让NAME在解析时匹配,如果它超出firstlast然后命名。这是一个让你开始的暗示:)