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: Síntaxis 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