
- •Теория языков программирования и методы трансляции
- •1. Языки и кризис программирования.
- •2. Математические методы описания языков программирования.
- •3. Основные понятия и определения.
- •1. S→ab→aAb→aaAb→aaaB→aaabB→aaabbB→aaabbbB→aaabbbb.
- •2. S→ab→AbB→AbbB→AbbbB→Abbbb→aAbbbb→aaAbbbb→aaabbbb
- •Load a mult b
- •4. Этапы построения транслятора.
- •5. Основные методы поиска ошибок в исходных текстах программ.
- •Устройство управления
- •6. Современное состояние и перспективы развития программирования трансляторов.
- •7. Лексический анализ. Интуитивный подход.
- •8. Классы лексем и их особенности.
- •9. Формирование таблиц лексем и построение дескрипторного текста исходной программы.
- •На основании составленных таблиц можно записать входной текст через введённые дескрипторы (дескрипторный текст):
- •10. Синтаксический анализ. Метод рекурсивного спуска.
- •11. Пример грамматики упрощенного языка Паскаль.
- •12. Пример программы на упрощенном Паскале.
- •Var sum, sumsq, I, value, mean, variance : integer;
- •13. Алгоритм синтаксического анализа по методу рекурсивного спуска.
- •Void read()
- •Void idlist()
- •Void assign()
- •15. Лексический анализ, регулярные грамматики и конечные автоматы.
- •17. Грамматики типа ll(k). Алгоритмы построения магазинных анализаторов.
- •18. Детерминированный синтаксический анализ сверху вниз.
- •19. Правила определения детерминированного мп-разпознавателя по ll(1) грамматике.
- •20. Заключение.
- •Литература
1. S→ab→aAb→aaAb→aaaB→aaabB→aaabbB→aaabbbB→aaabbbb.
2. S→ab→AbB→AbbB→AbbbB→Abbbb→aAbbbb→aaAbbbb→aaabbbb
В этих деревьях первые две вершины и последние совпадут, а все остальные будут различными.
Грамматики различаются на контекстно свободные (КС) и контекстные. Большинство языков программирования описываются КС грамматиками. В КС грамматиках в левой части каждой продукции только один нетерминальный символ. В контекстных грамматиках в левой части продукций символов более одного. В них замена символов зависит от их окружения – контекста. В КС грамматиках нетерминальные символы заменяются в соответствии с продукциями независимо от их расположения среди других символов.
Пример. Грамматический разбор арифметических выражений. Рассмотрим грамматику, описывающую арифметические выражения, содержащие переменные a,b,c, операции сложить, умножить, вычесть и разделить. А также допускающие круглые скобки.
В БНФ эта грамматика может быть описана следующим образом:
‹выражение› ::= ‹терм›|‹ выражение› +‹терм›|‹выражение› –‹терм›
‹терм›::= ‹множитель›|‹терм›*‹множитель›|‹терм›/‹множитель›
‹множитель›::= a|b|c|(‹выражение›)
Используя формальную нотацию КС грамматик и обозначая аксиому языка через E, запишем эти продукции по-другому:
E→ T|E+T|E – T
T→F|T*F|T/F
F→a|b|c|(E)
В этой нотации E,T,F - нетерминальные символы. Терминальные символы a, b, c, +, -, *, /, ( , ). Грамматика является однозначной, поскольку каждой сентенции, порождаемой этой грамматикой, соответствует единственное дерево вывода. Например, пусть дана сентенция a*b+c. Дерево вывода для неё будет иметь вид:
E
E
+ T
T
F
T
* F
c
F
b
a
Рис.3.3. Дерево грамматического разбора сентенции ab+c.
Листья дерева вывода или дерева грамматического разбора требуемая сентенция.
На основании дерева грамматического разбора транслятор построит другое дерево – семантическое, которое просто получается из дерева вывода.
Это дерево будет иметь вид:
+
*
c
a b
Рис.3.4 Семантическое дерево вычисления арифметического выражения.
После соответствующей обработки семантического дерева транслятор сгенерирует программу вычислений: