![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Реалізація LL(k) - синтаксичного аналізатора для відомих мов програмування.
1. Реалізувати функцію, котра для граматики обчислить множини , такі що:
LOCAL(S,A)={ L | S=>*xAw, L=FIRSTk(w) при відповідних x и w }
Інтерфейс виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
2. Реалізувати функцію, котра на основі множин перевіряє, чи є граматика LL(k)- граматикою (k > 1). Інтерфейс виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
3. Реалізувати функцію, котра на основі контексту +k
для кожної правої частини продукції виду A -> W (результат знаходиться в полі cont_llk для кожної продукції) будує таблицю управління для LL(1)- синтаксичного аналізатора. Інтерфейс виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
4. Реалізувати синтаксичний аналізатор для мови PL/0 методом магазинного автомата. Для управління роботою аналізатора скористайтеся таблицею управління для LL(1)-синтаксичного аналізатора. Інтерфейс виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
Як допоміжну функцію вводу лексем з текстового файлу PL/0-програми використайте лексичний аналізатор з PL/0 з наступною специфікацією:
extern char scaner_lexema[ ]; // текст виділеної лексеми
extern int lexema_code; // код лексем
int scaner_pl0(void).
Текст лексеми заноситься в поле scaner_lexema. Функція scaner_pl0 повертає код виділеної лексеми. Якщо досягли кінця вхідного файла, то функція scaner_pl0 повертає значення 0(нуль). По закінченню роботи синтаксичного аналізатора необхідно закрити вхідний файл при допомозі функції scaner_close().
5. Реалізувати синтаксичний аналізатор для мови PASCAL методом магазинного автомата. Для управління роботою аналізатора скористайтеся таблицею управління для LL(1)-синтаксичного аналізатора. Інтерфейс виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
Як допоміжну функцію вводу лексем з текстового файлу Pascal -програми використайте лексичний аналізатор з Pascal з наступною специфікацією:
extern char scaner_lexema[ ]; // текст виділеної лексеми
extern int lexema_code; // код лексем
int pascal_scaner(void).
Текст лексеми заноситься в поле scaner_lexema. Функція pascal_scaner() повертає код виділеної лексеми в поле lexema_code. Якщо досягли кінця вхідного файла, то функція pascal_scaner () повертає значення 0(нуль). По закінченню роботи синтаксичного аналізатора необхідно закрити вхідний файл при допомозі функції scaner_close().
6. Реалізувати синтаксичний аналізатор для мови PL/0 методом рекурсивного спуску. Для управління роботою аналізатора скористайтеся таблицею управління для LL(1)-синтаксичного аналізатора. Інтерфейс виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
Як допоміжну функцію вводу лексем з текстового файлу PL/0-програми використайте лексичний аналізатор з PL/0 з наступною специфікацією:
extern char scaner_lexema[ ]; // текст виділеної лексеми
extern int lexema_code; // код лексем
int scaner_pl0(void).
Текст лексеми заноситься в поле scaner_lexema. Функція scaner_pl0 повертає код виділеної лексеми. Якщо досягли кінця вхідного файла, то функція scaner_pl0 повертає значення 0(нуль). По закінченню роботи синтаксичного аналізатора необхідно закрити вхідний файл при допомозі функції scaner_close().
7. Реалізувати синтаксичний аналізатор для мови Pascal методом рекурсивного спуску. Для управління роботою аналізатора скористайтеся таблицею управління для LL(1)-синтаксичного аналізатора. Інтерфейс виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
Як допоміжну функцію вводу лексем з текстового файлу Pascal-програми використайте лексичний аналізатор з Pascal з наступною специфікацією:
extern char scaner_lexema[ ]; // текст виділеної лексеми
extern int lexema_code; // код лексем
int pascal_scaner(void).
Текст лексеми заноситься в поле scaner_lexema. Функція pascal_scaner() повертає код виділеної лексеми в поле lexema_code. Якщо досягли кінця вхідного файла, то функція pascal_scaner () повертає значення 0(нуль). По закінченню роботи синтаксичного аналізатора необхідно закрити вхідний файл при допомозі функції scaner_close().
8. Реалізувати методом магазинного синтаксичний аналізатор мови програмування С. Врахувати, що на вхід синтаксичного аналізатора поступає програма після обробки препроцесором. Інтерфейс виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
9. Реалізувати методом магазинного синтаксичний аналізатор мови програмування TURBO PASCAL 5.xx. Врахувати, що на вхід синтаксичного аналізатора поступає програма після обробки препроцесором. Інтерфейс виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
Дата публикования: 2015-04-06; Прочитано: 454 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!