KAREL OMI Versión 2.0 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"
| "sal-de-instruccion"
| 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