- •2006 Оглавление:
- •1. Постановка задачи
- •Исходные данные:
- •2. Описание входного языка:
- •2.1. Описание синтаксиса входного языка
- •2.2. Описание семантики входного языка
- •Объявления и области действия
- •Оператор вывода
- •Оператор ввода
- •Зарезервированные функции
- •3. Описание этапа лексического анализа
- •3.1. Определение типов лексем
- •3.2. Определение синтаксиса лексем
- •3.3. Структуры данных
- •50 Таблица констант
- •3.5. Результаты работы лексического анализатора
- •4. Описание этапа синтаксического анализа:
- •4.1. Построение кс-грамматики входного языка
- •4.1.1. Определение программы
- •4.1.6. Подграмматика арифметических операций
- •4.2. Описание промежуточного языка (триады)
4. Описание этапа синтаксического анализа:
На этапе синтаксического анализа выполняется проверка синтаксической корректности исходной программы, представленной в виде потока токенов и совокупности таблиц, и преобразование её в некоторую внутреннюю форму, удобную в дальнейшем для генерации объектного кода.
4.1. Построение кс-грамматики входного языка
Для построения КС-грамматики входного языка необходимо:
Заменить металингвистические переменные БНФ обозначениями нетерминальных символов, используя короткие имена.
В качестве терминальных символов использовать токены.
Металингвистический символ ::= заменить символом –>
Заменить металингвистическую формулу с nальтернативами наnправил грамматики с одинаковым символом в левой части правила вывода.
Исключить металингвистические символы [,],{,}, включив в правила грамматикиcуe– правила и рекурсивные правила.
4.1.1. Определение программы
PRG Classes MClassClasses
4.1.2 Подграмматика описания классов
MClass PKG SRSM Imports CDef SRLCB MemDefs Main MemDefs SRRCB
Classes Class Classes
Classes ε
Class PKG SRSM Imports SRLCB MemDefs SRRCB
4.1.3 Подграмматика описания необходимой атрибутики классов
PKG KWPG Way
Imports Import SRSM Imports
Imports ε
Import KWIM Way SRPT ID
CDef KWCL ID
Way WayPart
Way Way SRSM WayPart
WayPart LLtr WayPartTail
WayPartTail LLtr
WayPartTail Cipher
WayPartTail ε
4.1.4 Подграмматика описания членов класса
MemDefs MemFunc MemDefs
MemDefs MemAtr MemDefs
MemDefs ε
MemFunc Type ID SRLP FuncArgs SRRP CBlock
Main KWVD KWMN SRLP KWS ID SRRP CBlock
MemAtr Type SimParam
MemAtr Type OprA
FuncArgs Type ID FuncArgsTail
FuncArgs ε
FuncArgsTail SRCA Type ID FuncArgsTail
FuncArgsTail ε
4.1.5. Подграмматика операторов
Opr NLOpr
Opr Label SRCN NLOpr
NLOpr OprA
NLOpr OprIn
NLOpr OprOut
NLOpr UseFunc
NLOpr OprCond
NLOpr OprWhile
NLOpr OprCondA
NLOpr OprGoto
ConstrOpr Opr
ConstrOpr CBlock
OprA SimParam AO Value
OprA SimParam AO Opr
OprA SimParam AO OprNew
OprIn KWRD SRLP SRRP
OprOut KWWR SRLP Value OutArgsTail SRRP
OutArgsTail SRCA Value OutArgsTail
OutArgsTail ε
UseFunc SimParam SRPT ID SRLP UseFuncArgs SRRP
UseFunc ID SRLP UseFuncArgs SRRP
UseFuncArgs Value OutArgsTail
UseFuncArgs ε
OprCond KWIF SRLP LogExp SRRP IfTail
IfTail ConstrOpr ElsePart
IfTail ε
ElsePart SRSM KWEL ConstrOpr
ElsePart ε
OprWhile KWWL SRLP LogExp SRRP WhileTail
WhileTail ConstrOpr
WhileTail ε
OprCondA SimParam AO LogExp SRQN Value SRCN Value
CBlock SRLCB CBlockBody SRRCB
CBlockBody OpnU SRSM CBlockBody
CBlockBody MemAtr SRSM CBlockBody
CBlockBody ConstrOpr SRSM CBlockBody
CBlockBody StrOpn SRSM CBlockBody
CBlockBody ε
OprNew KWNW Type SRLP UseFuncArgs SRRP
OprGoto KWGT Label