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 Java

Declaración de programa

::=

"class program { "
     [ Declaración de Método ] ...
     "program () "
      Bloque
"}"
 EOF

Declaración de método

::=

Tipo   Firma de método
       Bloque

Firma de método

::=

Identificador  Parámetro opcional

Parámetro opcional

::=

"(" [ Identificador ] ")"

Tipo

::=

{ "void " | "define" }f

Argumento vacío

::=

"(" ")"

Argumento opcional

::=

"(" [ Expresion entera ] ")"

Expresión

::=

( Bloque
| Expresión vacía
| Expresión if
| Expresión while
| Expresión iterate
| Expresión turnoff
| Expresión turnleft
| Expresión move
| Expresión pickbeeper
| Expresión putbeeper
| Expresión return
| Expresión de llamada )

Bloque

::=

"{" [ Expresión ] ... "}"

Expresión vacía

::=

";"

Expresión de llamada

::=

Identificador   Argumento opcional ";"

Expresión entera

::=

{ Decimal  
| Identificador
| "pred " "(" Expresión entera ")"
| "succ " "(" Expresión entera ")" }

Término

::=

Cláusula Y [ "||" Cláusula Y ] ...

Cláusula Y

::=

Cláusula No [ "&&" Cláusula No ] ...

Cláusula No

::=

[ "!" ] Cláusula Atómica

Cláusula atómica

::=

{ "iszero " "(" Expresión entera ")"
| Función Booleana
| Argumento vacío
| "(" Término ")" }

Expresión if

::=

"if " "(" Término ")" Expresión ["else " Expresión ]

Expresión while

::=

"while " "(" Término ")" Expresión

Expresión iterate

::=

"iterate " "(" Expresión entera ")" Expresión

Expresión turnoff

::=

"turnoff " Argumento vaciío ";"

Expresión turnleft

::=

"turnleft " Argumento vacío ";"

Expresión move

::=

"move " Argumento vacío ";"

Expresión pickbeeper

::=

"pickbeeper " Argumento vacío ";"

Expresión putbeeper

::=

"putbeeper " Argumento vacío ";"

Expresión return

::=

"return " Argumento vacío ";"

Identificador

::=

Letra [ Letra | Dígito | "-" ] ...

Decimal

::=

{{"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"} [ Dígito ] ...
| "0" }

Cadena

::=

Cualquier cosa entre comillas en una única línea

Función Booleana

::=

{"frontIsClear "
| "frontIsBlocked "
| "leftIsClear "
| "leftIsBlocked "
| "rightIsClear "
| "rightIsBlocked "
| "nextToABeeper "
| "notNextToABeeper "
| "anyBeepersInBeeperBag "
| "noBeepersInBeeperBag "
| "facingNorth "
| "facingSouth "
| "facingEast "
| "facingWest "
| "notFacingNorth "
| "notFacingSouth "
| "notFacingEast "
| "notFacingWest "}

Dígito

::=

{"0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"}

Letra

::=

Una letra del alfabeto

EOF

::=

Marca el final del fichero

Definición del panel instantáneo

Programa instantáneo

::=

[ Declaración de método
| Declaración de enlace
| Expresión  ] ...
 EOF


Comentarios

Están soportados los dos tipos de comentario de JAVA/C++:

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

Fin-de-página