AntLR有多种替代方案

时间:2012-12-18 15:35:22

标签: antlr antlr3

我想有一些相当基本的东西,我不理解。以下语法在我看来很简单。从规则'解析'开始,在我看来并不是很多可能是模棱两可的。但我得到下面列出的错误。如果有人甚至可能只是解释第一个有用的错误。

目的是解析简单的名字,如'先生约翰史密斯三世&简史密斯夫人或'史密斯,约翰'。

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

1 个答案:

答案 0 :(得分:1)

firstlast可以只匹配NAME或者可以匹配NAME NAME但它可以匹配NAME并让NAME在解析时匹配,如果它超出firstlast然后命名。这是一个让你开始的暗示:)