gpt4 book ai didi

java - 初始化嵌套实体的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-02 09:55:46 24 4
gpt4 key购买 nike

带有 DSL 插件的 Eclipse,具有以下语法 (xtext)

AbstractStatement returns AbstractStatement:
IfStructureStatement | DeclarativeStatement | BreakStatement | EqualityStatement | SignalStatement;

Component returns Component:
LED_Panel | Switch | Timer | LED_Light;

Setup returns Setup:
{Setup}
'SETUP BEGIN'
( abstractstatement+=AbstractStatement ( "\r" abstractstatement+=AbstractStatement)* )?
'SETUP END';

DeclarativeStatement returns DeclarativeStatement:
{DeclarativeStatement}
'DECLARE'
( component+=[Component|EString] ( "," component+=[Component|EString])* )?
( variable+=[Variable|EString] ( "," variable+=[Variable|EString])* )?
( constant+=[Constant|EString] ( "," constant+=[Constant|EString])* )?";";

LED_Panel returns LED_Panel:
{LED_Panel}
'LED_PANEL'
ElementName=EString
('{'
'PanelWidth' PanelWidth=EInt
'PanelHeight' PanelHeight=EInt
'PanelText' PanelText=EString
'ON' '{' pin+=Pin ( "," pin+=Pin)* '}'
'}')?;

以及以下源文件:

SETUP BEGIN
DECLARE LED_PANEL p;
SETUP END

此代码给我错误“输入 LED_PANEL 不匹配”,需要“;”它的表现就像他无法识别组件 LED_PANEL

我希望他能够验证此代码。

最佳答案

在您的 DeclarativeStatement 规则中,您有 component+=[Component|EString]。这意味着“匹配 EString 标记;该标记应该是 Component 的名称(意味着 Component 类的实例)”。就解析器而言,这相当于 component+=EString - 事实上,它是一个交叉引用,只有在我们到达链接器时才会发挥作用。

这并不意味着“匹配组件”。如果这就是你想要的,你应该只写 component+=Component (或者更好的 components+=Component 因为列表应该有复数名称)。

交叉引用适用于您期望其他地方定义的内容的名称的情况。如果您期望整个事情,就不应该有交叉引用。

关于java - 初始化嵌套实体的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56023845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com