java - 变量应该仅对 xtext 中的当前函数可见

标签 java eclipse eclipse-plugin eclipse-cdt xtext

我的输出文件:

reg1 {
field a field b
}

reg2 {
field c field d
}

FOREACH ( X IN reg1 ) {
X . a
}

FOREACH ( Y IN reg2 ) {

现在,如果我按 ctrl+space,我预计只会弹出 Y。但 X 和 Y 都弹出了。 如何将 X 限制为第一个 FOREACH 循环?在第一个 FOREACH 循环 X 之外,其值应该被删除。请有人建议我如何实现这个?

相关语法规则为:

Model:
entities+=Entity+
uses+=Use+
;
Entity:
name=ID "{"
attributes+=Attr+
"}"
;
Attr:
"field" name=ID
;
Use:
"FOREACH" var=conds "{"
varref=[cond] "." attr=[Attr]
"}"
;
conds:
"(" cond1=cond ")"
| "," cond2=cond
;
cond:
name=ID "IN" entity=[Entity]
;

范围提供者:

public class MyDslScopeProvider extends AbstractDeclarativeScopeProvider {
IScope scope_Use_attr(Use ctx , EReference ref) {
return Scopes.scopeFor(ctx.getVarref().getEntity().getAttributes());
}
}

最佳答案

您是否在范围实现中放置了断点?您为语法的 attr 但不为 varref 定义作用域实现。沿着这些思路添加一个实现就可以了。

IScope scope_Use_varref(Use ctx, EReference ref) {
  return Scopes.scopeFor(Collections.singleton(ctx.getVar().getCond1()));
}

另请注意,解析器规则 conds 似乎是假的。

关于java - 变量应该仅对 xtext 中的当前函数可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16185613/

相关文章:

java - 可以从命令行在 Eclipse 中启动 Java EE 服务器吗?

java - Maven Tycho 插件和 Eclipse Babel

具有方法调用的表达式中的 Java 后缀运算符优先级

eclipse - 如何使用 Eclipse 重构工具并通过 Subclipse 与 SVN 保持同步?

java - 避免每次在 spring 中检查 dto 处的非空和非空变量

java - Eclipse 不启动 (Ubuntu) : JVM terminated. 退出代码=2

java - Eclipse 插件 - 开关文件的监听器

java - 如何安装带有依赖项的eclipse插件(自行开发)?

java - 添加jobStream实例

java - 命令行参数