2016-08-18 9 views
0

私はxtext文法を作成して警告があります(下記参照)。XTextはあいまいなANTLR文法を生成しましたが、その理由を理解していません。 文法に何が間違っていますか?XTextは曖昧さのない文法を生成します

よろしく、 ウラジミール

grammar com.idc.net.Validator with org.eclipse.xtext.common.Terminals 

generate validator "http://www.idc.com/net/Validator" 

Model: 
    netDescriptions+=NetDescription+; 

NetDescription: 
    descriptionPairs+=DescriptionPair+; 

DescriptionPair: 
    IPADDR | NETMASK | SPEED | MTU | TSO | GATEWAY | VLAN | ROUTER | SUBNET | NO_VLANS | VLAN; 
//List of numbers with 3 digit 
VLAN: 
    'VLAN_' name=ID '=' 
    value=IntList; 

IntList: 
    valueList+=INT+ | '"' valueList+=INT+ '"'; 

IPAddrList: 
    ipNum1=INT '.' ipNum2=INT '.' ipNum3=INT '.' ipNum4=INT; 

//List of numbers with 3 digit 
NO_VLANS: 
    'NO_VLANS_' name=ID '=' list+=IntList; 

SUBNET: 
    'SUBNET_' name=ID '=' list+=IPWithQuotes; 

ROUTER: 
    'ROUTER_' name=ID '=' list+=IPWithQuotes; 

GATEWAY: 
    'GATEWAY_' name=ID '=' list+=IPWithQuotes; 

MTU: 
    'MTU_' name=ID '=' val=IntWithQuotes; 

TSO: 
    'TSO_' name=ID '=' '"' value=ON_OFF '"'; 

ON_OFF: 
    'on' | 'off'; 

NETMASK: 
    'NETMASK_' name=ID '=' list+=IPWithQuotes; 

SPEED: 
    'SPEED_' name=ID '=' value=IntWithQuotes; 

IPADDR: 
    'IPADDR_' name=ID '=' list+=IPWithQuotes; 

IPWithQuotes: 
    IPAddrList | '"' IPAddrList '"'; 

IntWithQuotes: 
    value=INT | '"' value=INT ' 

「';

warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:132:2: Decision can match input such as "'SPEED_'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:132:2: Decision can match input such as "'GATEWAY_'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:132:2: Decision can match input such as "'VLAN_'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:132:2: Decision can match input such as "'IPADDR_'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:132:2: Decision can match input such as "'MTU_'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:132:2: Decision can match input such as "'TSO_'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:132:2: Decision can match input such as "'NO_VLANS_'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:132:2: Decision can match input such as "'NETMASK_'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:132:2: Decision can match input such as "'ROUTER_'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:132:2: Decision can match input such as "'SUBNET_'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:150:2: Decision can match input such as "'VLAN_' RULE_ID '=' RULE_INT" using multiple alternatives: 7, 11 
As a result, alternative(s) 11 were disabled for that input 
warning(200): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:150:2: Decision can match input such as "'VLAN_' RULE_ID '=' '"' RULE_INT '"'" using multiple alternatives: 7, 11 
As a result, alternative(s) 11 were disabled for that input 
error(201): ../com.idc.net.validator/src-gen/com/idc/net/parser/antlr/internal/InternalValidator.g:150:2: The following alternatives can never be matched: 11 

答えて

0

二つの問題

最初VLANがあるがリストに二度あることは

DescriptionPair: 
    IPADDR | NETMASK | SPEED | MTU | TSO | GATEWAY | VLAN | ROUTER | SUBNET | NO_VLANS; 
でなければなりませんので。その後、

あなたはどちらか

Model: 
    netDescriptions=NetDescription; 

NetDescription: 
    descriptionPairs+=DescriptionPair+; 

または

Model: 
    netDescriptions+=NetDescription+; 

NetDescription: 
    descriptionPairs=DescriptionPair; 
である必要があり、ここで

Model: 
    netDescriptions+=NetDescription+; 

NetDescription: 
    descriptionPairs+=DescriptionPair+; 

リストの問題のリストを持っています