Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Notación BNF
1
<cuerpo> ::= ’{’
[ <variables> ]
<sentencias>
’}’
<cuerpo func> ::= ’{’
[ <variables> ]
<sentencias>
return <expr > ;
’}’
<sentencias> ::= { <asignacion> | <incr decr > | <seleccion> | <iteracion> | <llamada proc> | <ent sal> }
<asignacion> ::= <cual ident> = <expr > ;
<incr decr > ::= ++ <cual ident> ;
| -- <cual ident> ;
| <cual ident> ( += | -= | *= | /= | %= ) <expr > ;
<seleccion> ::= <si> | <caso>
<iteracion> ::= <para> | <mientras> | <repetir >
<llamada proc> ::= <ident> ’(’ [ <expr > { , <expr > } ] ’)’ ;
<ent sal> ::= <leer > | <escribir >
<leer > ::= cin { ’>>’ <cual ident> } ;
<escribir > ::= cout { ’<<’ <expr > } ;
<si> ::= if ’(’ <exprbool > ’)’ ’{’
<sentencias>
{ ’}’ else if ’(’ <exprbool > ’)’ ’{’
<sentencias> }
[ ’}’ else ’{’
<sentencias> ]
’}’
<caso> ::= switch ’(’ <exprord > ’)’ ’{’
{ case <exprord cte
> : { case <exprord cte
>: }
<sentencias>
break ; }
[ default :
<sentencias>
break ; ]
’}’
<para> ::= for ’(’ [ <tipo> ] <asignacion> ; <exprbool > ; <incr decr > ’)’ ’{’
<sentencias>
’}’
<mientras> ::= while ’(’ <exprbool > ’)’ ’{’
<sentencias>
’}’
<repetir > ::= do ’{’
<sentencias>
’}’ while ’(’ <exprbool > ’)’ ;
2
<expr > ::= <expr and> { ’||’ <expr and> }
<expr and> ::= <expr rel> { && <expr rel> }
<expr rel> ::= <expr arit> [ ( > | >= | < | <= | = | ! = ) <expr arit> ]
<expr arit> ::= <termino> { ( + | - ) <termino> }
<termino> ::= <factor > { ( * | / | % ) <factor > }
<factor > ::= ’(’ <expr > ’)’ | ( - | ! )<factor > | <llamada func> | <conv tipo>
| <cual ident> | <numero> | <caracter cte> | <cadena cte> | true | false
<cual ident> ::= [ * ] <ident> { ’[’ <cual ident> ’]’ | .<ident> | ’− >’<ident> }
<llamada func> ::= <ident> ’(’ [ <expr > { , <expr > } ] ’)’
<conv tipo> ::= <tipo> ’(’ <expr > ’)’
Restricciones semánticas:
• <exprord cte
> una expresión evaluable en tiempo de compilación de tipo ordinal.