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
   38   39   40   41   42   43   44   45   46   47