KAREL OMI Version 1.2 por Cesar Cepeda
Para comentarios escriba a cesar@auronix.com

Revisado por Eduardo Urias Barrientos AKA Wero Shinoda

 TUTORIAL DE KAREL

 

BNF para Karel: Sintaxis de Pascal

Traducido por Eric Alvarez Revisado por Joaquin López

(el simulador no ditingue mayúsculas/minúsculas)

DeclaracionDePrograma ::= "iniciar-programa"
       [ DeclaracionDeProcedimiento ";" ]...
       "inicia-ejecucion"
             ExpresionGeneral [ ";"
             ExpresionGeneral ]...
       "termina-ejecucion"
"finalizar-programa"
 EOF
DeclaracionDeProcedimiento ::= "define-nueva-instruccion" Identificador [ "(" Identificador ")" ] "como"
       Expresion
ExpresionGeneral ::= { Expresion | ExpresionVacia }
Expresion ::= {"apagate"
| "gira-izquierda"
| "avanza"
| "coge-zumbador"
| "deja-zumbador"
| ExpresionLlamada
| ExpresionSi
| ExpresionMientras
| ExpresionPara
| "inicio"
        ExpresionGeneral [ ";"
        ExpresionGeneral ]...
  "fin" }
ExpresionLlamada ::= Identificador [ "(" ExpresionEntera ")" ]
ExpresionSi ::= "si" Termino "entonces"
       Expresion
["sino"
       Expresion ]
ExpresionMientras ::= "mientras" Termino "hacer"
       Expresion
ExpresionPara ::= "repetir" ExpresionEntera "veces"
       Expresion
ExpresionVacia ::=
Termino ::= ClausulaY [ "o" ClausulaY ]...
ClausulaY ::= ClausulaNo [ "y" ClausulaNo ]...
ClausulaNo ::= [ "no" ] ClausulaAtomica
ClausulaAtomica ::= { "si-es-cero" "(" ExpresionEntera ")" | FuncionBooleana | "(" Termino ")" }
ExpresionEntera ::= { Decimal | Identificador | "precede" "(" ExpresionEntera ")" | "sucede" "(" ExpresionEntera ")" }
Identificador ::= Letra [ Letra | Digito | "-" ] ...
Decimal ::= { {"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"} [ Digito ] ...
| "0" }
Cadena ::= Cualquier cosa entre comillas en una única línea.
FuncionBooleana ::= {"frente-libre"
| "frente-bloqueado"
| "izquierda-libre"
| "izquierda-bloqueada"
| "derecha-libre"
| "derecha-bloqueada"
| "junto-a-zumbador"
| "no-junto-a-zumbador"
| "algun-zumbador-en-la mochila"
| "ningun-zumbador-en-la mochila"
| "orientado-al-norte"
| "orientado-al-sur"
| "orientado-al-este"
| "orientado-al-oeste"
| "no-orientado-al-norte"
| "no-orientado-al-sur"
| "no-orientado-al-este"
| "no-orientado-al-oeste"}
Digito ::= {"0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"}
Letra ::= Una letra del alfabeto
EOF ::= Marca de final de fichero.
                                               

Definiciones del Panel Instantaneo

ProgramaInstantaneo ::= ExpresionInstantanea [ ";"
ExpresionInstantanea ]...
EOF
ExpresionInstantanea ::= { DeclaracionDeMetodo | DeclaracionDeEnlace | ExpresionGeneral }


Comentarios

Están soportados los dos estilos de comentario en Pascal:
  • { Comentario en la misma línea }
  • (* Comentario en la misma línea *)

Están soportados los dos estilos de comentario en Java/C++:

  • /* Comentario en la misma línea */
  • // Comentario para el resto de línea

 


Final-de-página