我是xtext的新手并且有一个(对我而言)大问题。 我写了一些代码,它不会编译。 我想制作一种空格感知语言。 这是我的代码:
Model:
(declarationsc+=Declaration);
Declaration:
Section;
// Start new section - Needs at least one message
Section:
(name+=ID) a+=Message;
// New Message - Needs indentation and at least one Signal or Struct
Message:
( name+=ID ((st+=Struct2) | (sig+=Signal)) )+;
// New Signal with indentation -> If Signal follows Message
Signal:
BEGIN
name+=ID (struc+=Struct)? (asf+=Signal2)? (struc+=Struct)?
END;
// New Signal without indentation -> If Struct contains no Signal
Signal2:
( name+=ID (struc+=Struct)?)+;
// New Struct without indentation -> Can follow a Signal
Struct:
( name+=ID (stru+=Struct2)? (st+=Signal)? (sk+=Signal2)?)+;
// New Struct with indentation -> If Struct follows Message
Struct2:
BEGIN
name+=ID (st+=Signal)? (ad+=Struct)? (sign+=Signal2)?
END;
// The following synthetic tokens are used for the indentation-aware blocks
terminal BEGIN:
'synthetic:BEGIN'; // increase indentation
terminal END:
'synthetic:END'; // decrease indentation
// Single line comment a
terminal SL_COMMENT:
'#' !('\n' | '\r')* ; // ('\r'? '\n')?;
请解释我为什么以及如何解决这个问题。
答案 0 :(得分:0)
你的语法很模糊。解析器在面对标识符时应该如何决定实际必须遵循的规则?一切都以标识符(ID)开头,后跟其他标识符。无法实际解析文本。
您可以考虑添加关键字以引入规则,例如 部分: 'section'name = ID a =消息
另请注意,self.btnTimeZone.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Center
会产生一个收藏价值的功能,但至少+=
没有任何意义。
请考虑遵循一些标准示例。 Lorenzo Bettini的书也是理解基本概念的宝贵信息来源。