【问题标题】:Bug in IDL parser in RedHawk IDERedHawk IDE 中 IDL 解析器中的错误
【发布时间】:2015-10-19 18:16:15
【问题描述】:

一些有效的 IDL 文件,构建为 IDL 项目并安装,但其部分或全部内容未出现在 SCA Explorer/Target SDR/IDL 存储库中。我相信用于在 IDL 存储库中构建树的 IDL 解析器与构建过程中使用的omniORB idl2cpp (omniidl) 不同,它会拒绝一些有效的 IDL。我发现的所有案例都使用先前定义的 const 值。例如,

const 算法 ALG_NONE = 0 const 算法 ALG_LPC = ALG_NONE + 3

第二行可以出现在同一个文件中,也可以出现在包含包含第一行的文件的文件中。

如果第二行不在同一个文件中,则接受包含第一行的文件,但包含第二行的文件将被拒绝,并且其内容不会出现在 IDL 存储库树中。似乎它拒绝作为赋值语句右侧的值出现的 const。然而,这些文件是有效的,并且被omniidl 接受为有效。但是它们不能在 RedHawk 中使用,因为它们不能被选择用于组件接口。

我对 RedHawk IDE 源或 Eclipse 插件不是很熟悉,因此无法找到指定解析器语法的位置。我看到“eclipsecorba”出现在插件列表中,所以我假设 RedHawk 正在使用 Eclipse CORBA 插件(又名 ECP),并且它的解析器是用于构建树的解析器。所以我怀疑解析器错误在那个包中,而不是在 RedHawk 添加的代码中。

任何人都可以确认这一点并建议我在 ECP 代码中查找的位置吗?我应该将此作为 ECP 错误报告给 SourceForge 上的 ECP 组吗?我不确定它有多活跃,因为最新版本似乎是 2008 年的。

【问题讨论】:

  • 这是一个基本类型的偶数情况:module Test { interface Bug { const long base = 0; // const long next = base + 1; // 拒绝 const long next = 1; const long another = 1 + 2; //ok // const long base2 = base; //被拒绝 }; };这是基本类型的偶数情况: module Test { interface Bug { const long base = 0; // 下面的代码构建但被 IDE 解析器拒绝 // const long next = base + 1; const long next = 1; const long another = 1 + 2; // 这被拒绝了 // const long base2 = base; }; };
  • 对不起。我仍然无法换行。这是基本类型的偶数情况:module Test { interface Bug { const long base = 0; // 下面的代码构建但被 IDE 解析器拒绝 // const long next = base + 1; const long next = 1; const long another = 1 + 2; // 这被拒绝 // const long base2 = base; }; };
  • 查看此线程的回复:http://stackoverflow.com/a/34133411/1311595

标签: eclipse-plugin corba idl redhawksdr


【解决方案1】:

这似乎是 IDL 编辑器中的一个错误,您拥有的 IDL 是合法的。建议您向 ECP 报告此问题,但鉴于该项目长期不活动,可能不会很快修复。我知道我们的一位Remedy IT 工程师为 Eclipse 创建了一个更现代的 IDL 编辑器,但由于缺乏资金,这项工作无法公开。

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多