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: