Постановка завдання
Розробка алгоритму синтаксичного аналізу оператора виведення printf мови C + +. Розглянути теорію формальних граматик, принцип побудови графів, і потім розробити проект, засобами середовища програмування Builder C + +. br/>
Граматика мови
Граматикою G [Z] називається кінцеве непорожнє безліч правил виводу, безлічі термінальних символів (термінальний словник), безлічі нетермінальних символів і початкового символу Z, який повинен зустрічатися хоча б один раз в лівій частині правила виведення
Змістовна частина мови: [<Оператор>]: scanf ("% d", <Текст>);
. <Програма> -> <Оператор>
. <Оператор> -> printf ("% d" <Текст>)
. <Текст> -> Буква | Буква, <Текст>
. Буква -> a | b | c. | Z | Буква {"",,, &}
Правила автоматної граматики:
А: = <Оператор>
a: = printf: = (D: = pC)
C: = Буква | Цифра: = Буква: = b,: = (: = c {", &,,}
Автоматна граматика:
A -> aB-> dD-> pC-> b | b1C
Граф станів
На даному графі представлені стану нашої мови.
-А (початковий стан), яке переходить у стан В по ланцюжку a.
-Зі стану В можна перейти в стан D по ланцюжку d.
-Зі стану D переходимо в стан С по ланцюжку p.
-Зі стану З є два шляхи, за якими робимо перехід в стан С (петля) по ланцюжку b1, так само по ланцюжку b переходимо в кінцевий стан K.
В
. Класифікація Хомського
Класифікація Хомського включає в себе:
. Граматики нульового типу;
. Контекстно-залежні граматики (КЗ - граматики);
. Контекстно-вільні граматики;
. Автоматні або регулярні граматики. p align="justify"> алгоритм мову програмування оператор
Ця граматика, згідно класифікації Хомського, є автоматною, бо всі правила виведення відносяться до виду:
А -> Аb | a |/, a Є Vt, А, B Є Vn
Тест програми
В
Рис.1 - Інтерфейс програми
В
Рис.3 - Помилок немає
В
Рис.4 - одна помилка
В
Рис.5 - три помилки
І т.д.
Лістинг
// ---------------------------------------- -----------------------------------