KAREL OMI Versión 2011 por Cesar Cepeda
Para comentarios escriba a cesar@auronix.com

Revisado por

Eduardo Urias Barrientos AKA Wero Shinoda

Martín Ibarra Romero AKA El gran Tlatoani

 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

DeclaracionDePrototipo ::= "define-prototipo-instruccion" Identificador [ "(" Identificador ")" ]

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.

::=

{"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 | DeclaracionDePrototipo | 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