GRAMATICA REDUCIDA DE C PARA SER IMPLEMENTADA CON JFLAP:

 

        P                         S

<programa> ::= <inicio> 

 

       S                             m     (   )     {               G                     }

<inicio> ::= <tipo>  main’ ‘(‘ ‘)‘ ‘{‘  <grupo_sentencias>  ’}’ 

 

      G                                       T

 <grupo_sentencias> ::= <sentencia>  [‘;’{<sentencia> } ]*

      G                                       T G

      T                                       G

 

       T                                 D

<sentencia> ::= <declaración_var>

       T                                 A

|  <asignacion_simple>

       T                                 C

|  <ciclo>

       T                                 X

| <if>

       T                                 H

| <else>

       T                                 N

| <entrada_consola>  

       T                                 V

| <salida_consola>

 

       C                                 F

<ciclo> ::= <for>

       C                                 W

| <while>

       F                                 f  (  A  ;   Z ; K  ) { G  }

<for> ::= ‘for’ ‘(‘<asignacion_simple>  ‘;’ <condicion> ‘;’ [<inc>| <dec>] ‘)’

                               ‘{‘<grupo_sentencias>  }’

       F                                 f  (  A  ;   Z ; J  )  G ;

       K                                I + +

<inc> ::= <identificador> ‘++’

 

       J                                I - -

<dec> ::= <identificador> ‘--’

 

       W                          w ( Z )  {  G  }

<while> ::=while’ ‘(‘<condicion> ‘)’ ‘{‘<grupo_sentencias>  ’}’

 

       X                           i ( Z ) { G }

<if> ::=if’ ‘(‘ <condicion> ‘)’ ‘{‘<grupo_sentencias>  ’}’

       X                           i ( Z ) T 

               | if’ ‘(‘ <condicion> ‘)’ <sentencia>  

 

      H                         e f ( Z )  { G }

<else> ::=else’ ‘if’ ‘(‘ <condicion> ‘)’ ‘{‘<grupo_sentencias>  ’}’

      H                         e T

               | else’ <sentencia>  

      N                         p ( B ) ;

<salida_consola> ::=printf’ ‘(‘<opciones> ‘)’ ‘;’

 

      V                         g ( I ) ;

<entrada_consola> ::=gets’ ‘(‘<identificador> ‘)’ ‘;’

 

      B                               v I v

<opciones> ::= ‘”’  ‘<identificador>  ‘”’

 

      Z                                I  Y  I ;

<condicion> ::= <identificador>  <op_logico>  <identificador>  ‘;’

 

      D                                Q   I  ; 

<declaración_var> ::= <tipo> <identificador> ‘;’

 

     A                                I = I ;

<asignación_simple> ::=  <identificador> ‘=’ <identificador> ‘;’

     A                                I = U ;

| <identificador> ‘=’ <numero> ‘;’

      I                                E  R

<identificador> ::= <letra>  <resto> 

      I                                E

| <letra> 

      R                                E

<resto> ::=  <letra|>

     R                                O

 | <digito

     R                                E  R

| <letra>  <resto> 

     R                                O  R

| <digito>  <resto> 

 

    U                               O  

<numero> ::= <digito>

¨  U                               O U

                               | <digito><numero>

    Q                              d

<tipo> ::= ‘double’

    Q                              f

               | ‘float’

    Q                              l

               | ‘long’

    Q                              v

               | ‘void’

    Q                              c

               | ‘char’

    Q                              t

               | ‘int’

 

    Y                              <

<op_logico> :: ‘<’

    Y                              >

               | ‘>’

    Y                              ?

               |   ‘?’

   Y                              &&

               | ‘&&’

   Y                              ||

               |  ||

   Y                              ~

               | ‘~’ 

  Y                              !=

               |!=’

 

   E                              r

<letra> ::= a | b | c . . . | z | A | B | … | Z

 

     O                             1….

<dígito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6| 7 | 8 | 9

 

Referencias:

 

  1. JFLAP. https://www.jflap.org/