ANALIZADOR LÉXICO
DEFINICION DE LA GRAMATICA
G={VT,VN,S,R}
VT={1……9,a……z,2,1,0,4,=,raíz,(,)}
VN= {ecuación, asig, numeronulo, variable, segundo, primerO, terceroO, exp, numerodef, parentesisI, parentesisC, discrimante, Raiz}
R=
REGLAS GRAMATICALES
S -> ecuación asig numeronulo| ecuacion
ecuacion -> primerO operador segundoO operador tercerO | primerO operador segundo | primerO operador tercerO | primerO |operador ecuación |operador primeroO raíz discrimante |segundoO
primerO -> numero variable exp| variable exp
segundoO -> numero variable| variable | segudoO variable
tercerO -> numero | variable
discriminante -> parentesisI ecuacion operador ecuación parentesisC
numero -> 1……….9
variable -> a………z
exp -> 2 | 1
asig -> =
numeronulo -> 0
numerodef -> 4
operador -> + |- |/ | *
parentesisI -> (
parentesisC -> )
Raiz -> raiz
Ejemplo de la gramática
· 2x2+3x-4
ANALIZADOR SEMÁNTICO
S -> ecuación asig numeronulo | ecuación Print(ecuación.val asig.valex numeronulo.valex) Print(ecuación.val) |
ecuacion -> ecuación.val operador tercerO | primerO operador segundoO | primerO |operador ecuación |operador primeroO raíz discrimante |segundo ecuación.val = ecuación.val operador.valex terceroO.val ecuación.val =primero.val operador.valex segundo.val ecuación.val = operador.val ecuación.val ecuación.val = operador.valex primero.val raíz.valex discriminante.val ecuación.val = segundo.val |
primeroO -> numero variable exp| variable exp primero,val = numero.valex variable.valex exp.valex primero,val =variable.valex exp.val |
segundoO -> numero variable| variable | segudoO variable segundo.val = numero.valex variable.valex segundo.val =variable.valex segundo.val =segundo.val variable.valex |
tercerO -> numero | variable tercero.val= numero.val tercero.val= variable.val |
discriminante -> parentesisI ecuacion operador ecuación parentesisC discriminante.val= parentesisI.valex ecuación.val operador.valex ecuación.val parentesisC.valex |
numero -> 1……….9 numero.valex = 1.valex| 2.valex |3.valex|4.valex|5.valex|6.valex|7.valex 1 8.valex|9.valex variable -> a………z variable.valex= a.valex………….z.valex exp -> 2 exp.valex=2.valex asig -> = asig.valex = =.valex numeronulo -> 0 numeronulo.valex = 0.valex numerodef -> 4 numerodef.valex =4.valex operador -> + |- |/ | * operador.valex = +.valex | -.valex | /.valex | *.valex parentesisI -> ( parentesisI.valex = (.valex parentesisC -> ) parentesisC.valex = ).valex Raiz -> raíz Raíz.val=raíz.valex |