syntax logoPlayer_syntax (logoPlayer_lexique) { rule { # Routine definition $PROGRAM$ @routineMap routineArray = {} !? routineArray $BEGIN$ !? routineArray $END$ $.$ } rule ?! @routineMap routineArray { repeat while !? routineArray end } rule ?! @routineMap ioRoutineArray { $ROUTINE$ $identifier$ ?let @lstring routineId $BEGIN$ !? ioRoutineArray $END$ [ !? ioRoutineArray insertKey !routineId ] } rule ?! @routineMap ioRoutineArray { repeat while !? ioRoutineArray end } rule ?! @routineMap ioRoutineArray { select or or !? ioRoutineArray end $;$ } rule { select or end } rule { $FORWARD$ $integer$ ?let @luint moveLen @instruction move = @forward.new { !moveLen } } rule { $ROTATE$ $integer$ ?let @luint moveAngle @instruction move = @rotate.new { !moveAngle } } rule { $PEN$ select $UP$ @instruction setPen = @penUp.new {} or $DOWN$ @instruction setPen = @penDown.new {} end } rule ?! @routineMap ioRoutineArray { $CALL$ $identifier$ ?let @lstring routineId [ ioRoutineArray searchKey !routineId ] } }