Page 43 - 4625
P. 43
5.2. Блок лабораторних робіт № 2
Реалізація LL(k) - синтаксичного аналізатора для відомих
мов програмування.
1. Реалізувати функцію, котра для граматики обчислити
множини Local (S, A), такі що:
k
LOCAL(S,A)={L|S=>*xAw, L=FIRST (w) при відповід-
k
них x и w }. Інтерфейс виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
2. Реалізувати функцію, котра на основі множин Local (S,A)
k
перевіряє, чи є граматика LL(k)-граматикою (k > 1). Інтерфейс
виклику для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
3. Реалізувати функцію, котра на основі контексту First (W)
k
+ Follow (A) для кожної правої частини продукції виду A ->
k
k
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; // початок хеш-таблиці
42