Romaj ciferoj per Prologo 5 - gramatiko
Gramatikoj
Gramatikoj konsistas el predikatoj por analizi signarojn (pli ĝenerale listojn).
Oni uzas la operatoron --> por apartigi la kapon kaj la korpon de gramatika regulo. La kapo nomas
elementon de la gramatiko kaj la korpo listigas signarojn kaj aliajn elementojn de la gramtiko.
Ni komencu per iom naiva gramatiko pri romaj nombroj: nombroj povas esti unuopa cifero aŭ cifero sekvata de nombro. La ciferoj estas la konataj I, V, X ktp.
nombro --> cifero.
nombro --> cifero, nombro.
cifero --> "I".
cifero --> "V".
cifero --> "X".
cifero --> "L".
cifero --> "C".
cifero --> "X".
cifero --> "M".
Por apliki gramatikon al signaro oni uzas phrase/2, kies unua argumento estas
(la centra) elemento de la gramatiko (en nia kazo nombro) kaj la dua argumento estas
la analizenda signaro.
phrase(nombro,"MCMXCIV").
Se ni donas signaron kun nevalida signo, la analizo malsukcesas.
phrase(nombro,"VICO").
Nia gramatiko ja estas ankoraŭ tro naiva, ĉar ĝi ne konsideras la ordon de la ciferoj:
phrase(nombro,"VICI").
La gramatiko povas ankaŭ krei signarojn validajn laŭ ĝi:
phrase(nombro,L), atom_chars(R,L).
Nu, tiel la gramatiko ankoraŭ ne estas tute utila. En la sekva lekcio ni etendos ĝin do.