0

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

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

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

结果,该输入警告(200)禁用了替代项 2:/NameParser.g:27:25:决策可以匹配输入,例如“NAME COMMA SALUTATION NAME COMMA SALUTATION NAME {EOF, NAME, SALUTATION.. TITLE, NAMESEP}" 使用多种选择:1、2

结果,该输入警告(200)禁用了替代项2:/NameParser.g:27:25:决策可以匹配输入,例如“NAME {EOF,NAME,SALUTATION..TITLE,NAMESEP}”使用多种选择:1、2

结果,该输入警告(200)禁用了替代2:/NameParser.g:27:25:决策可以使用多个替代匹配输入,例如“NAME COMMA SALUTATION NAME {NAME,INITIAL}”:1 , 2

4

1 回答 1

1

firstlast 可以只匹配 NAME 或者可以匹配 NAME NAME 但它可以匹配 NAME 并让 NAME 在解析中匹配回来,如果它不属于 firstlast 然后是 name。这是一个让你开始的提示:)

于 2012-12-18T16:27:59.017 回答