Skip to content

Gramáticas

hecoding edited this page Feb 21, 2017 · 24 revisions

Prototipos de Gramatica

1. Reactiva

<EXPR>::= IF ELSIF ELSE 
<IF>::= COND BLOCK
<ELSIF>::= COND BLOCK ELSIF | ELSIF | COND BLOCK 
<ELSE>::= BLOCK | 0
<BLOCK>::= ¿ACCION B? | ACCION | EXPR
<COND>::= CONDICIONAL | CONDICIONAL && CONDICIONAL | CONDICIONAL || CONDICIONAL | !CONDICIONAL

2. Con bucles

<BLOCK>::= ACCION B | ACCION | EXPR | WHILE
<EXPR>::= IF ELSIF ELSE
<IF>::= COND BLOCK
<ELSIF>::= COND BLOCK ELSIF | ELSIF | COND BLOCK 
<ELSE>::= BLOCK | 0
<COND>::= CONDICIONAL | CONDICIONAL && CONDICIONAL | CONDICIONAL || CONDICIONAL | !CONDICIONAL
<WHILE>::= COND BLOQUE

3. La gramática de la que se forjan los sueños

Una gramática reactiva, no ambigua, con ifs pero sin bucles.
Los < y > indican no terminales.
Un statement es o una función que devuelve un movimiento o un if.

<grammar> ::= <selection-statement>
<selection-statement> ::= if( <condition> ){ <statement> }
                        | if( <condition> ){ <statement> } else{ <statement> }
<statement> ::= <terminal-func>
              | <selection-statement>
<terminal-func> ::= todas las funciones de la API que devuelven MOVE
<condition> ::= <boolean-func>
              | <boolean-func> <boolean-operator> <boolean-func>
              | <number-func> <number-operator> <number>
<boolean-func> ::= <boolean-api>
                 | !<boolean-api>
<boolean-api> ::= todas las funciones de la API que devuelven booleano
<boolean-operator> ::= &&
                     | ||
<number-func> ::= todas las funciones de la API que devuelven número (int o double)
<number-operator> ::= ==
                    | !=
                    | <
                    | >
                    | <=
                    | >=
<number> ::= 0
           | <nonzero-digit><digit-sequence>
<digit-sequence> ::= ''
                   | <digit>
                   | <digit><digit-sequence>
<digit> ::= 0
          | <nonzero-digit>
<nonzero-digit> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Dudas
  • Quitamos el not en los operadores?
  • Quitamos <boolean-func> <boolean-operator> <boolean-func>?
Funciones de la API antes mencionadas

funciones de la API que devuelven MOVE



funciones de la API que devuelven booleano


todas las funciones de la API que devuelven número


funciones que devuelven Ghost

funciones que devuelven array (de enteros o de MOVE)


Referencias

https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of%20C%20in%20Backus-Naur%20form.htm
https://www.cs.uaf.edu/2013/spring/cs331/lectures/lec-2013_01_30-bnf.html
http://scg.unibe.ch/archive/masters/DeZa09a.pdf
https://gist.github.com/rns/85c6d18fb62065ae1617#file-ambiguous
https://cran.r-project.org/web/packages/gramEvol/vignettes/ge-intro.pdf
http://stackoverflow.com/questions/14013792/how-to-implement-backus-naur-form-in-python
http://stackoverflow.com/questions/4728073/what-is-the-difference-between-an-expression-and-a-statement-in-python