Page 41 - 4625
P. 41
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
9. Реалізувати алгоритм пошуку множини First (A) для
k
нетерміналів граматики. Надрукувати множини First (A) для
k
кожного нетермінала. Інтерфейс виклику для реалізації
функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
10. Побудувати LL(1)-граматику для мови програмування
С. Якщо виконати LL(1)-умову неможливо, то спробуйте для
деяких правил запропонувати LL(1)- умову. Інтерфейс викли-
ку для реалізації функції:
int prepr_std(q,r)
struct node *q; // список КС-правил
struct dnode *r; // початок хеш-таблиці
11. Реалізуйте допоміжні функції, які використовують для
побудови множин First (A);
k
функція побудови слова довжиною не більше k символів:
int newword(mult,dwor,wrk,len)
struct fdata **mult; // масив посилок на скінчені мови
short int *dwor; // масив поточна перестановка індексів
слів
short int wrk[]; // масив під результуюче слово
int len; // число множин, які перемножаться
функція побудови нової перестановки індексів для
словникових множин:
int setword(mult,max_dwor,dwor,len)
struct fdata **mult; // масив посилок на скінчені мови
int *max_dwor; // кількість слів у кожній словниковій
множині
int *dwor; // поточна перестановка індексів
int len; // число множин, які перемножаться
12. Реалізувати функцію, котра на основі контекстів
First (A)для кожного правила виду A -> W обчислити значення
i
k
First (W)- для кожної правої частини правила. Результат
k
40