5 letter = 'a'..'z'|'a'..'Z';
7 name = letter (letter|digit)*;
8 nb = digit* '.' digit+ | digit+;
10 eol = #10 | #13 | #10 #13;
11 comment = '#' (Any-eol)* eol?;
13 blank = #9 | #10 | #13 | ' ' | comment;
19 file = problem | plan ;
21 problem = locations roads robots parcels goal;
22 locations = 'Locations' '{' [list:]location* '}';
23 location = name [x:]nb [y:]nb ';';
24 roads = 'Roads' '{' [list:]road* '}';
25 road = [orig:]name [dest:]name ';' ;
26 robots = 'Robots' '{' [list:]robot* '}';
27 robot = name [emplacement:]name ';';
28 parcels = 'Parcels' '{' [list:]parcel* '}';
29 parcel = name [emplacement:]name ';';
30 goal = 'Goals' '{' [list:]parcel* '}';
32 plan = 'SimplePlan' '{' [actions:]action* '}';
34 {load:} 'Load' '(' [robot:]name ',' [parcel:]name ')' ';' |
35 {unload:} 'Unload' '(' [robot:]name ',' [parcel:]name ')' ';' |
36 {drive:} 'Drive' '(' [robot:]name ',' [orig:]name ',' [dest:]name ')' ';' ;