|
Тема |
Re: Регулярен израз за калкулатор ? [re: Alex] |
|
Автор |
lndependent (crash) |
|
Публикувано | 21.01.02 18:05 |
|
|
с регулярен израз няма да стане, трябва ти контекстно-свободна граматика. Например граматиката на аритметичните изрази:
E -> T | E + T | E - T
T -> F | T * F | T / F
F -> 4ISLO | ID | ( E )
тук -> означава "поражда", | е знак за дизюнкция (ти си знаеш какво е), 4ISLO и ID се разпознават с регулярни изрази (и тях може да си ги измислиш, ако ти трябват).
Ако лявата рекурсия ти пречи (по метода на рекурсивното спускане влизаш в безкрай рекурсия и алгоритъма забива), я заменяш с итерация:
E -> T | T {+ T}[*] | T {- T}[*]
T -> F | F {* F}[*] | T {/ F}[*]
F -> 4ISLO | ID | ( E )
[*] е знака за празна итерация (звездичка-горен индекс в някои нотации), т.е. може да присъства 0 или повече пъти. така граматиката става разширена контекстно-свободна, но машинната реализация е детска работа.
Аз лично не ти препоръчвам LL(k) анализ. Прекалено сложно става да се строи таблица, изчерпваща всички двойки терминал-нетерминал и съответните им пораждания. Друг е въпросът, че грешките се хващат много лесно - директно от таблицата.
Ако ти трябва литература - "Транслатори и операционни системи" на Боян Янков, много е добра.
BTW да не би да пишеш курсова работа при доц. Бонев?
stoj, ta gledaj
|
| |
|
|
|