eclipse - Ecore::EString: 可以在 Xtext 语法中使用吗?
问题描述
我从一个 ecore 模型生成了一个 Xtext 语法,我得到的语法如下:
generate myDsl "http://www.xtext.org/example/mydsl16/MyDsl"
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
WorldMap returns WorldMap:
'WorldMap'
'{'
'WorldMap' WorldMap=EString
'countrycorona' countrycorona+=CountryCorona ( "," countrycorona+=CountryCorona)*
'}';
CountryCorona returns CountryCorona:
'CountryCorona'
'{'
'CountryCorona' CountryCorona=EString
'population' population=EInt
'continent' continent=EString
'infectedPopulation' infectedPopulation=EInt
'zonelabel' zonelabel=zonelabelcolour
'}';
EString returns ecore::EString:
STRING | ID;
EInt returns ecore::EInt:
'-'? INT;
enum zonelabelcolour returns zonelabelcolour:
red = 'red' | orange = 'orange' | yellow = 'yellow' | green = 'green' | white = 'white';
我的问题是,当我尝试为此语法编写模型时,我通常使用 CTRL 空格来获取以下标记的建议。然而,在我写完 WorldMap { WorldMap 之后,我得到了
输入''没有可行的替代方案
此外,我没有得到下一个令牌应该是 EString 的建议。参考 Xtext 文档我应该能够使用这个 EString,但显然我不能。你知道可能是什么问题吗?
谢谢!
解决方案
Xtext 内容辅助不会对数据类型规则进行深入分析。因此,您必须自己在提案提供者中实施内容辅助规则,例如
public class MyDslProposalProvider extends AbstractMyDslProposalProvider {
@Override
public void complete_EString(EObject model, RuleCall ruleCall, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
acceptor.accept(createCompletionProposal("NiceID", context));
acceptor.accept(createCompletionProposal("\"NiceString\"", context));
}
}
推荐阅读
- ruby-on-rails - Rails 简单形式多值输入的最大长度
- c# - ASP.NET Core - Serilog 默认为记录器
- html - 如何在不接触 css 代码的情况下在文本字段中添加图标?
- c# - Azure Oauth 2 无法映射所有声明有效负载 jwt
- c# - 更改每个范围的默认命名选项
- r - 使用 Rcrawler 在 R 中进行 Web 爬网
- spring-boot - Spring Boot 安全性允许来自给定 IP 地址的请求
- java - 如何在 JPA 中查找重复项?
- powershell - Powershell - 比较两个漏洞扫描并将两个重复和差异输出到新的 csv
- html - 从其他内容制作单选按钮的最佳方法