首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xtext语法错误“找不到[State]的类型”即使有这样的类型也会抛出

Xtext语法错误“找不到[State]的类型”即使有这样的类型也会抛出
EN

Stack Overflow用户
提问于 2019-01-26 18:40:23
回答 1查看 78关注 0票数 0

我有这样的语法:

代码语言:javascript
复制
StateMachine:
    declarations+=Declaration*;

Declaration:
    Transition |
    State;

Transition returns Declaration:
     "trans" label=ID ":" source=[State] "->" target=[State] ";" ;

State returns Declaration:
     "state" id=ID ";" ;

@Override
terminal WS: 
    (' ' | '\t' | '\n' | '\r')+;

@Override
terminal ID: 
    ( 'a' .. 'z'  |  'A' .. 'Z' ) ( 'a' .. 'z'  |  'A' .. 'Z'  |  '0' .. '9' )* ;

在转换规则中,当我尝试使用ref to State类型错误时,总是抛出“找不到State的类型”。当我不使用[]时,所以不是作为交叉引用,一切都很好。我该如何解决这种情况呢?这种语法会有什么问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-26 20:13:39

错误在这一行中:

代码语言:javascript
复制
"trans" label=ID ":" source=[State] "->" target=[State] ";" ;

在Xtext中,[Foo]意味着“对Foo类型实例的交叉引用”。Is并不意味着“对语法规则的引用”。由于下面这行代码,Xtext不会生成State类型:

代码语言:javascript
复制
State returns Declaration:

其中returns Declaration表示“规则State将返回类型Declaration”,因此不需要类型State

下面的语法可以解决这个问题:

代码语言:javascript
复制
StateMachine:
    declarations+=Declaration*;

Declaration:
    Transition |
    State;

Transition:
     "trans" label=ID ":" source=[State] "->" target=[State] ";" ;

State:
     "state" id=ID ";" ;

在这里,Xtext将为DeclarationTransitionState生成类型,其中TransitionState派生自Declaration

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54377601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档