【问题标题】:XText generate unambigious grammarXText 生成明确的语法
【发布时间】:2016-12-25 19:38:23
【问题描述】:

我创建了 xtext 语法并有警告(见下文) 我知道 XText 生成了模棱两可的 ANTLR 语法,但不明白为什么。 那么,我的语法有什么问题?

问候, 弗拉基米尔

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

【问题讨论】:

    标签: xtext


    【解决方案1】:

    有两个问题

    第一个 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;
    

    【讨论】:

      猜你喜欢
      • 2017-07-12
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 2022-06-15
      • 2019-02-05
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多