Pertanyaan Cara mengatasi kesalahan "paket yang dihasilkan mungkin tidak kosong"


Saya memiliki tata bahasa yang disebut leach.xtext dan ketika saya memasukkan ini ke Xtext di file saya myDsl.xtext Saya mendapatkan kesalahan berikut:

Paket 'leach' yang dihasilkan mungkin tidak kosong.

Dengan melihat contoh lain, mereka semua menambahkan beberapa "aturan" di awal file xtext yang kemudian menunjuk ke aturan asli pertama dalam tata bahasa. Tapi saya tidak mengerti cara melakukannya. Di bawah ini adalah seluruh tata bahasa, meskipun saya pikir hanya beberapa baris pertama yang harus relevan.

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 ')'; 

4
2018-03-14 04:38


asal


Jawaban:


Tata bahasa Anda tidak terlihat seperti tata bahasa Xtext valid yang wajar. Semua aturan Anda adalah aturan tipe data sehingga tidak ada jenis yang disimpulkan yang menghasilkan pesan kesalahan. Silakan lihat manual, terutama di bagian tentang tugas.

Tata bahasa Anda mungkin harus dimulai dengan sesuatu di bawah garis-garis ini:

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+=Ingredients '}')+ (def=Procdef) cook=Cook;
Cook  : 'Cook' name=ID ':' '{' instructions=Instructions serve=Serve ';' '}';

Ingredients : ingredients+=Ingredient ( ',' ingredients+=Ingredient)*;

Harap jangan bahwa aturan biasanya dimulai dengan huruf besar dan bahwa Anda harus menggunakan tugas, mis. = dan += untuk menghasilkan AST yang tepat dari input.


4
2018-03-14 09:06