4
我有一个语法称为leach.xtext
,当我把这个成的Xtext在我的文件myDsl.xtext
我收到以下错误:如何解决“生成的包不能为空”的错误
Generated package 'leach' may not be empty.
通过查看其他的例子,他们都在xtext文件的开头添加了一些“规则”,然后指向语法中的第一条原始规则。但我不明白该怎么做。下面是整个语法,尽管我认为只有前几行应该是相关的。
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals
generate leach "http://www.xtext.org/example/mydsl/MyDsl" //error appears here..
start : ('Prepare' ':' '{' ingredients '}')+ (procdef) cook;
cook : 'Cook' ID ':' '{' instructions serve ';' '}';
ingredients : ingredient (',' ingredient)*;
ingredient : amount food;
quality : 'large' | 'sliced' | 'finelySliced' | 'chopped' | 'fresh' | 'grated' |
'ground' | 'unsalted' | 'fluffy' | 'goldenBrown' ;
amount : INT (unit);
unit : 'l' | 'ml' | 'cl' | 'oz' | 'g' | 'kg' | 'tesp' | 'tbsp';
temperature : INT heat;
heat : 'c' | 'f';
tlength : tunit '(' INT ')';
tunit : 'sec' | 'min';
hobheat : 'LOW' | 'MEDIUM' | 'HIGH';
hob : 'hob1' | 'hob2' | 'hob3' | 'hob4';
food : 'cookingApples' | 'sugar' | 'shortcrustPastry' | 'wensleydaleCheese' | 'whippedCream' |
'bacon' | 'redOnion' | 'doubleCream' | 'flatleatParsley' | 'parmesan' | 'greenSalad' |
'tomatoKetchup' | 'blackPepper' | 'goldenSyrup' | 'vanillaExtract' | 'brownSugar' | 'eggs' |
'pecanNuts' | 'lard' | 'vegetableOil' | 'butter' | 'readyPastry' | 'salt' | ID ;
instructions : (instruction);
instruction : 'if' '(' expr ')' '{' instructions '}' ('else' '{' instructions '}') |
whil '(' expr ')' '{' instructions '}' |
'do' '{' instructions '}' whil '(' expr ')' |
process ';' |
assign ';' |
cook;
whil : 'while' | 'until';
assign : 'set' varname '=' expr;
varname : '@' ID;
process : 'Preheat' '(' temperature ')' |
'AddToOven' '(' container ')' |
'Slice' '(' food ',' amount ')' |
'RemoveFromHeat' '(' container ')' |
'Drain' '(' container ')' |
'Grease' '(' container ',' food ')' |
'Layer' '(' container ',' food ')' |
'SetHeat' '(' ((hobheat ',' hob) | temperature) ')' |
'Whisk' '(' container ')' |
'Stir' '(' container ')' |
'AddTo' '(' container ',' food ',' amount ')' |
'PutOnHub' '(' container ',' hob ')' |
'Wait' '(' (expr | tlength)+ ')' |
'EmptyTo' '(' container ',' container ')' |
'MoveTo' '(' container ',' food ',' amount ')' |
'~' ID '(' (expr (',' expr)) ')' ;
procdef : 'function' ID '(' (expr (',' expr)) ')' block;
block : '{' instructions (retur)? '}';
serve : 'serve' (container | '@'ID);
retur : 'return' expr ';' ;
container : 'bowl' | 'saucePan' | 'fryingPan' | 'bakingTray' | 'pieDish' | 'plate';
expr : e1 ('~~' e1 |
'<' e1 |
'<=' e1 |
'>' e1 |
'>=' e1 |
'==' e1 |
'!=' e1)*;
e1 : e2 ('^' e2)*;
e2 : e3 ('|' e3)*;
e3 : e4 ('&' e4)*;
e4 : e5 ('+' e5 | '-' e5)*;
e5 : e6 ('*' e6 | '/' e6 | '&' e6)*;
e6 : ('!') e7;
e7 : e8 ('**' e7);
e8 : 'true' | 'false' | INT | quality | food | container | process | '(' expr ')';
您确定吗?因为它与我通过一些讲义呈现的非常相似。 – DSF 2013-03-15 02:32:52
是的,我很确定 - 我实现了EPackage推理和约束条件;-)你从哪里学习讲义? – 2013-03-15 08:26:31
哦,大声笑,没有和你争吵;) 这是从我的大学课程。你介意只写出他们应该在的前几行吗?谢谢 – DSF 2013-03-15 08:42:37