Дипломная работа: Программно методический комплекс для обучения процессу создания компиляторов

В дальнейшем мы будем работать с синтаксически-неориентированными алгоритмами, т.к. будем работать лишь с одним языком – учебный язык на основе языка Паскаль.

1.5 Грамматики

Грамматика языка программирования является формальным описанием его синтаксиса или формы, в которой записаны от­дельные предложения программы или вся программа. Грамматика не описывает семантику или значения различных предло­жений. Информация о семантике содержится в программах ге­нерации объектного кода. В качестве иллюстрации разницы между синтаксисом и семантикой рассмотрим два предложения:

I:=J+K

и

I:=X+Y

где Х и Y являются действительными переменными, aI, J, К — целыми переменными. Эти два предложения имеют оди­наковый синтаксис. Оба являются операторами присваивания, в которых присваиваемое значение определяется выражением, состоящим из двух имен переменных, разделенных оператором сложения. Однако семантика этих двух предложений совершен­но различна. Первое предложение говорит о том, что перемен­ные в выражении должны быть сложены с использованием целых арифметических операций, а результат сложения должен быть присвоен переменной I. Второе предложение задает сло­жение с плавающей точкой, результат которого должен быть преобразован в целое число перед присваиванием. Очевидно, эти два предложения будут скомпилированы в раз­личные последовательности машинных команд, хотя их грамматическое описание одинаково. Различия между ними про­явятся на этапе генерации объектного кода.

На рисунке 4 показаны БНФ грамматики, используемые в дипломном проекте. Подчеркнутые волнистой линией элементы могут опускаться (не использоваться).

1. <prog> ::= PROGRAM <prog-name> VAR <dec-list> BEGIN <stmt-list> END.

2. <prog-name> ::= id ;

3. <dec-list> ::= <dec> { ; <dec> } ;

4. <dec> ::= <id-list> : <type>

5. <type> ::= INTEGER | REAL | STRING

6. <id-list> ::= id { , id }

7. <stmt-list> ::= <stmt> { ; <stmt> } ;

8. <stmt> ::= <assign> | <for> | <read> | <write> | <while> | <repeat> | <if>

9. <assign> ::= id := <exp>

10. <exp> ::= <term> { + <term> | – <term> }

11. <term> ::= <factor> { * <factor> | DIV <factor> | / <factor> }

12. <factor> ::= id | int | real | <text-val> | (<exp>)

13. <read> ::= READ ( <id-list> )

14. <write> ::= WRITE ( <value> { , <value>} )

15. <for> ::= FOR <index-exp> DO <body>

16. <index-exp> ::= id := <exp> TO|DOWNTO <exp>

17. <body> ::= <stmt> | BEGIN <stmt-list> END

18. <value> ::= <id-list> | <text-val>

19. <text-val> ::= ′ <text> ′

20. <text> ::= string

21. <if> ::= IF <сравнение> THEN <body> ELSE <body>

22. <сравнение>::= <factor> <условие> <factor>

К-во Просмотров: 350
Бесплатно скачать Дипломная работа: Программно методический комплекс для обучения процессу создания компиляторов