22938

Синтаксичний аналіз виразів

Лекция

Информатика, кибернетика и программирование

Мова в певному алфавіті основному символів – це слова записані за певними синтаксичними правилами. Синтаксичні правила подаються формулами БекусаНаура БНФ вигляду : ::= де позначає синтаксичне поняття а послідовність символів розширеного алфавіту. Вираз [] означає що послідовність символів входить або не входить в конструкцію. Синтаксичний аналізатор це програма що для заданої послідовності символів основного алфавіту розпізнає чи побудована вона у відповідності з синтаксичними правилами для даного поняття.

Русский

2013-08-04

31 KB

1 чел.

ЛАБОРАТОРНА РОБОТА  6

 

ТЕМА:  Синтаксичний аналіз виразів.

Мова в певному алфавіті (основному) символів – це слова, записані за певними синтаксичними правилами. Синтаксичні правила подаються формулами Бекуса-Наура (БНФ) вигляду :  <…> ::= ,  де  <…> - позначає синтаксичне поняття, а  - послідовність символів розширеного алфавіту. Розширений алфавіт – це основний  алфавіт, доповнений  синтаксичними поняттями та метасимволами - ‘|’, ‘[‘, ‘]’, ‘{‘, ‘}’, ‘(‘, ‘)’.  Метасимвол ‘|’ розділяє  альтернативні варіанти поняття. Вираз […] означає,  що послідовність символів входить або не входить  в конструкцію. Вираз {…} – що конструкція може повторюватись довільну кількість  раз (n>=0).  Кожному поняттю відповідає певна індуктивно визначена сукупність синтаксично правильних  слів в основному алфавіті. Означені синтаксичні правила у вигляді формул є не що іншим, як лінійною формою вже згадуваних СД Н.Вірта.  Синтаксичний аналізатор - це програма, що для заданої  послідовності символів основного алфавіту розпізнає, чи побудована вона  у відповідності з синтаксичними правилами для даного поняття. Говорять, що БНФ допускає  LА(1)-аналіз, якщо в кожній її формулі альтернативи  правої  частини розпочинаються з попарно різних символів основного алфавіту. Програма LА(1)-аналізатор  складається з сукупності рекурсивних функцій, що відповідають кожному  синтаксичному правилу і які викликають  одна одну у відповідності до правих частин своїх формул.

  

ЗАВДАННЯ

Побудувати синтаксичний аналізатор  для   поняття <хороший>:

<хороший> :: = x | [<хороший>{+<хороший>}]

Вхідна послідовність символів  вводиться з клавіатури. Основний алфавіт складають чотири символи: x , [], + .  БНФ складається з одного синтаксичного правила.  «Хорошими»  є , нпр., слова :   x (база індукції),  [x], [x+x]  і т.д. (за індуктивним переходом).  «Нехорошими» cловами - xx, [],  x+x  тощо.

/* LA(1)- аналізатор для поняття  <хороший> */

#include <stdio.h>

char ch; /* для читання символів  вхідного слова */

beautiful()

/* УВАГА! Перед викликом аналізатора  змінна ch  завжди містить  черговий  символ вхідного слова  !!! */

{ if (ch == ‘[‘) { ch=getchar();  beautiful();

                          while (ch==’+’) { ch=getchar();  beautiful();}

                            if  (ch != ‘]‘) { Err(1); /* обробка  помилкової ситуації :“Відсутня дужка ‘]’ ” */

                                                     

                                                     exit(1);} 

                                /* Заключна дужка ‘]’  є  і це означає, що   прочитано правильний варіант  альтернативи  */

                                  ch=getchar();  

                          } else  if (ch == ‘x‘)  ch=getchar();

                                                  else { Err(2); /* обробка  помилкової ситуації : Очікування  х  */

}

main ()

{  ch= getchar();

   beautiful();

   if (ch == EOF) printf (“Yes”)  

    else  Err(3); /* обробка  помилкової ситуації : Зайві символи в кінці слова   */

}

Еrr( int i)

{  switch (i) {

                          case 1:  printf (”\n Помилкова ситуація 1  ----   відсутня дужка ‘]’ “); break;

                          case 2:  printf (”\n Помилкова ситуація 2  ----   очікування  х’ ” ); break;

                          case 3:  printf (”\n Помилкова ситуація 3  ----    зайві символи в кінці слова “); break;

                      }

    exit(1);

}


 

А также другие работы, которые могут Вас заинтересовать

33243. Закон ома для магнитной цепи 12.92 KB
  Когда по катушке состоящей из до витков проходит ток I то он возбуждает магнитный поток Ф величина которого будет тем больше чем больше будет число ампервитков Iw. Произведение тока I на число витков w намагничивающая сила измеряется в амперах.
33244. Ферромагнитные материалы 13.25 KB
  Вращаясь вместе с ротором относительно статора поток в соответствии с законом электромагнитной индукции ЭМИ индуцирует в каждой фазе обмотки статора ЭДС . При замкнутой внешней цепи по обмоткам статора протекает ток нагрузки I который в свою очередь образует МДС статора . МДС создает магнитный поток реакции якоря и поток рассеяния аналогичный асинхронному двигателю который замыкается поперёк пазов статора и вокруг лобовых частей обмотки статора. Потоки и наводят в обмотке статора соответственно ЭДС и .
33245. Гистерезис 13.81 KB
  Электрические потери Рэл возникают в обмотках трансформатора и обусловлены их нагреванием при протекании по ним электрического тока. КПД трансформатора определяется как отношение активной мощности на выходе трансформатора к активной мощности на выходе первичной обмотки. КПД трансформатора зависит: 1 от конструкции трансформатора; 2 от степени загрузки трансформатора рис 4.9 Максимальный КПД будет у трансформатора с коэффициентом загрузки β = 045.
33246. Потенциал электростатического поля 13.32 KB
  Потенциал электростатического поля скалярная величина равная отношению потенциальной энергии заряда в поле к этому заряду: энергетическая характеристика поля в данной точке. Потенциал численно равен работе поля по перемещению единичного положительного заряда из данной точки электрического поля в бесконечность. Напряжение численно равно работе электростатического поля при перемещении единичного положительного заряда вдоль силовых линий этого поля.
33247. Зако́н Куло́на 13.12 KB
  μετρεω измеряю измерительный прибор предназначенный для определения мощности электрического тока или электромагнитного сигнала. В цепях постоянного тока мощность измеряют электро или ферродинамическим ваттметром. Мощность может быть также подсчитана перемножением значений тока и напряжения измеренных амперметром и вольтметром. В цепях однофазного тока измерение мощности может быть осуществлено электродинамическим ферродинамическим или индукционным ваттметром.
33248. Электри́ческое сопротивле́ние 13.23 KB
  Из систем многофазного тока наибольшее применение на практике получил трехфазный переменный ток.
33250. КЛАССИФИКАЦИЯ ЭЛЕКТРОИЗМЕРИТЕЛЬНЫХ ПРИБОРОВ 13.82 KB
  Пуск синхронных двигателей может быть осуществлен при помощи вспомогательного пускового двигателя или путем асинхронного пуска. Пуск синхронного двигателя при помощи вспомогательного двигателя. Если ротор синхронного двигателя с возбужденными полюсами развернуть другим вспомогательным двигателем до скорости вращения поля статора то магнитные полюсы статора взаимодействуя с полюсами ротора заставят ротор вращаться далее самостоятельно без посторонней помощи в такт с полем статора т.
33251. Приборы магнитоэлектрической системы 13.29 KB
  2Электрическая аппаратура применяемая в осветительных и силовых сетях для целей управления или защиты может быть классифицирована по различным признакам. В зависимости от природы явления которое положено в основу действия аппаратов их можно разделить на: аппараты ручного управления рубильники переключатели выключатели контроллеры действие которых происходит в результате механического воздействия на них внешних сил; электромагнитные аппараты магнитные пускатели контакторы электромагнитные реле работа которых основана на...