Gramatica De Lenguajes Formales
Para hacer la gramática con números romanos, hemos tenido en cuenta las reglas de construcción de los números romanos:
1º Si a la derecha de una cifra romana se escribe otra igual o menor, el valor de esta se suma a la anterior.
2º La cifra I colocada delante de la V o la X les resta una unidad, la X precediendo a la L o la C les resta diez unidades y la C delante de la D o la M les resta cien unidades.
3º En ningún número se puede poner una misma letra mas de tres veces seguidas.
4º Las letras V, L, y la D no pueden duplicarse porque otras letras (X, C, M) representan su valor duplicado.
5º Si entre dos cifras cualesquiera existe otra menor, esta restara su valor a la siguiente.
No se puede anteponer una I, a una C. …ver más…
Los no-terminales R, C, D y U tendrán asociado el atributo v de tipo entero. Este atributo servirá para calcular el valor decimal asociado. ii. Los no-terminales E, F y G tendrán asociado el atributo n de tipo entero. Este atributo servirá para contar el número de ocurrencias de los terminales c, x e i respectivamente, y participarán en el cálculo del valor decimal asociado.
Finalmente, las acciones semánticas quedan como
R ! CDU {R.v := C.v + D.v + U.v}
C ! E {C.v := 100 _ E.n}
C ! cd {C.v := 400}
C ! dE {C.v := 500 + 100 _ E.n}
C ! cm {C.v := 900}
E ! _ {E.n := 0}
E ! E1c {if E1.n = 3 then error else E.n := E1.n + 1}
D ! F {D.v := 10 _ F.n}
D ! xl {D.v := 40}
D ! lF {D.v := 50 + 10 _ F.n}
D ! xc {D.v := 90}
F ! _ {F.n := 0}
F ! F1x {if F1.n = 3 then error else F.n := F1.n + 1}
U ! G {U.v := G.n}
U ! iv {U.v := 4}
U ! vG {U.v := 5 + G.n}
U ! ix {U.v := 9}
G ! _ {G.n := 0}
G ! G1i {if G1.n = 3 then error else G.n := G1.n + 1} 5
A: O / I / II / III
B: IV / VA
C: IX
Los anteriores los empaquetamos en el grupo E (del 0* al 9) *el cero no existe en números romanos
F: X / XE
Todos los anteriores = Grupo G (0 al 19)
H: XG / XXG
Todos los anteriores = Grupo J (0 al 39)
K: XLE / LJ
Todos los anteriores = Grupo N (0 al 89)
P: XCE
Todos los anteriores = Grupo Q (0 al 99)