Xtext我的语法中有些错误

时间:2015-08-13 16:40:51

标签: xtext

我是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')?;

请解释我为什么以及如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

你的语法很模糊。解析器在面对标识符时应该如何决定实际必须遵循的规则?一切都以标识符(ID)开头,后跟其他标识符。无法实际解析文本。

您可以考虑添加关键字以引入规则,例如    部分:      'section'name = ID a =消息

另请注意,self.btnTimeZone.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Center会产生一个收藏价值的功能,但至少+=没有任何意义。

请考虑遵循一些标准示例。 Lorenzo Bettini的书也是理解基本概念的宝贵信息来源。