Выводы по результатам выполнения курсовой работы
В результате выполнения курсовой работы по дисциплине “Разработка языковых процессоров” был получен компилятор входного языка типа ПАСКАЛЬ в код языка ассемблера TASM. Внешний вид готового приложения приведён ниже:
Данный компилятор функционально состоит из четырёх модулей (лексический анализатор, менеджер таблиц, синтаксический анализатор, генератор кода) и выполняет следующие действия:
разбор текста входной программы на лексемы;
заполнение таблиц лексем;
формирование потока токенов;
разбор цепочки токенов;
формирование внутреннего представления программы;
генерация кода ассемблера;
локализация лексических, синтаксических и семантических ошибок.
В качестве демонстрации работы компилятора был подробно разобран контрольный пример программы, демонстрирующей работу с терминалом. В процессе выполнения контрольной программы никаких ошибок выявлено не было.
В рамках обеспечения разработки компилятора было создано дополнительное программное средство, обеспечивающее анализ грамматик класса SLR(1), формирование заключения о принадлежности грамматики классу, построение управляющих таблиц синтаксического анализатора, формирование файлов, описывающих управляющие таблицы в выбранном языке программирования.
Приложения
Приложение 1
<?xml version="1.0" encoding="WINDOWS-1251" standalone="yes"?>
<FORMALGRAMMAR>
<TERMINALS>
<SYMBOL NAME = "TKN_AND" TYPE = "term" />
<SYMBOL NAME = "TKN_ASSIGN" TYPE = "term" />
<SYMBOL NAME = "TKN_BEGIN" TYPE = "term" />
<SYMBOL NAME = "TKN_BOOLEAN" TYPE = "term" />
<SYMBOL NAME = "TKN_BRACKET_CLOSE" TYPE = "term" />
<SYMBOL NAME = "TKN_BRACKET_OPEN" TYPE = "term" />
<SYMBOL NAME = "TKN_CHAR" TYPE = "term" />
<SYMBOL NAME = "TKN_COLON" TYPE = "term" />
<SYMBOL NAME = "TKN_ZPT" TYPE = "term" />
<SYMBOL NAME = "TKN_CONST" TYPE = "term" />
<SYMBOL NAME = "TKN_DO" TYPE = "term" />
<SYMBOL NAME = "TKN_ELSE" TYPE = "term" />
<SYMBOL NAME = "TKN_END" TYPE = "term" />
<SYMBOL NAME = "TKN_FALSE" TYPE = "term" />
<SYMBOL NAME = "TKN_FOR" TYPE = "term" />
<SYMBOL NAME = "TKN_ID" TYPE = "term" />
<SYMBOL NAME = "TKN_IF" TYPE = "term" />
<SYMBOL NAME = "TKN_INTEGER" TYPE = "term" />
<SYMBOL NAME = "TKN_LITER_CHAR" TYPE = "term" />
<SYMBOL NAME = "TKN_LITER_INT" TYPE = "term" />
<SYMBOL NAME = "TKN_LITER_REAL" TYPE = "term" />
<SYMBOL NAME = "TKN_LITER_STRING" TYPE = "term" />
<SYMBOL NAME = "TKN_MULT" TYPE = "term" />
<SYMBOL NAME = "TKN_NOT" TYPE = "term" />
<SYMBOL NAME = "TKN_OR" TYPE = "term" />
<SYMBOL NAME = "TKN_TOCHKA" TYPE = "term" />
<SYMBOL NAME = "TKN_PLUS" TYPE = "term" />
<SYMBOL NAME = "TKN_POP" TYPE = "term" />
<SYMBOL NAME = "TKN_PROGRAM" TYPE = "term" />
<SYMBOL NAME = "TKN_PUSH" TYPE = "term" />
<SYMBOL NAME = "TKN_READ" TYPE = "term" />
<SYMBOL NAME = "TKN_REAL" TYPE = "term" />
<SYMBOL NAME = "TKN_REL_EQUAL" TYPE = "term" />
<SYMBOL NAME = "TKN_REL_NOT_EQUAL" TYPE = "term" />
<SYMBOL NAME = "TKN_TOCHKA-ZPT" TYPE = "term" />
<SYMBOL NAME = "TKN_STACK" TYPE = "term" />
<SYMBOL NAME = "TKN_STRING" TYPE = "term" />
<SYMBOL NAME = "TKN_THEN" TYPE = "term" />
<SYMBOL NAME = "TKN_TO" TYPE = "term" />
<SYMBOL NAME = "TKN_TOP" TYPE = "term" />
<SYMBOL NAME = "TKN_TRUE" TYPE = "term" />
<SYMBOL NAME = "TKN_VAR" TYPE = "term" />
<SYMBOL NAME = "TKN_WHILE" TYPE = "term" />
<SYMBOL NAME = "TKN_WRITE" TYPE = "term" />
<SYMBOL NAME = "TKN_WRITELN" TYPE = "term" />
</TERMINALS>
<NONTERMINALS>
<SYMBOL NAME = "_Program" TYPE = "nterm" />
<SYMBOL NAME = "Assignment" TYPE = "nterm" />
<SYMBOL NAME = "ConstDecs" TYPE = "nterm" />
<SYMBOL NAME = "Declarations" TYPE = "nterm" />
<SYMBOL NAME = "DeclarationsConst" TYPE = "nterm" />
<SYMBOL NAME = "DeclarationSection" TYPE = "nterm" />
<SYMBOL NAME = "DeclarationsVar" TYPE = "nterm" />
<SYMBOL NAME = "ExprAtom" TYPE = "nterm" />
<SYMBOL NAME = "ExprConjunctor" TYPE = "nterm" />
<SYMBOL NAME = "ExprConstituent" TYPE = "nterm" />
<SYMBOL NAME = "ExprDisjunctor" TYPE = "nterm" />
<SYMBOL NAME = "Expression" TYPE = "nterm" />
<SYMBOL NAME = "ExprMultiplier" TYPE = "nterm" />
<SYMBOL NAME = "ExprRelation" TYPE = "nterm" />
<SYMBOL NAME = "ExprRelator" TYPE = "nterm" />
<SYMBOL NAME = "ForInit" TYPE = "nterm" />
<SYMBOL NAME = "Function" TYPE = "nterm" />
<SYMBOL NAME = "MatchedElse" TYPE = "nterm" />
<SYMBOL NAME = "MatchedThen" TYPE = "nterm" />
<SYMBOL NAME = "PartIf" TYPE = "nterm" />
<SYMBOL NAME = "PartIfMatched" TYPE = "nterm" />
<SYMBOL NAME = "Procedure" TYPE = "nterm" />
<SYMBOL NAME = "ProgName" TYPE = "nterm" />
<SYMBOL NAME = "SingleConstDec" TYPE = "nterm" />
<SYMBOL NAME = "SingleVarDec" TYPE = "nterm" />
<SYMBOL NAME = "Statement" TYPE = "nterm" />
<SYMBOL NAME = "StatementIO" TYPE = "nterm" />
<SYMBOL NAME = "StatementListNonEmpty" TYPE = "nterm" />
<SYMBOL NAME = "StatementMatched" TYPE = "nterm" />
<SYMBOL NAME = "StatementOther" TYPE = "nterm" />
<SYMBOL NAME = "StatementUnmatched" TYPE = "nterm" />
<SYMBOL NAME = "StructStatement" TYPE = "nterm" />
<SYMBOL NAME = "Type" TYPE = "nterm" />
<SYMBOL NAME = "UnmatchedElse" TYPE = "nterm" />
<SYMBOL NAME = "UnmatchedThen" TYPE = "nterm" />
<SYMBOL NAME = "VarDecs" TYPE = "nterm" />
<SYMBOL NAME = "WhileInit" TYPE = "nterm" />
<SYMBOL NAME = "WhileKeyword" TYPE = "nterm" />
</NONTERMINALS>
<PRODUCTIONS>
<PRODUCTION START = "_Program">
<SYMBOL NAME = "ProgName" TYPE = "nterm"/>
<SYMBOL NAME = "Declarations" TYPE = "nterm"/>
<SYMBOL NAME = "StructStatement" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_TOCHKA" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ProgName">
</PRODUCTION>
<PRODUCTION START = "ProgName">
<SYMBOL NAME = "TKN_PROGRAM" TYPE = "term"/>
<SYMBOL NAME = "TKN_ID" TYPE = "term"/>
<SYMBOL NAME = "TKN_TOCHKA-ZPT" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Declarations">
</PRODUCTION>
<PRODUCTION START = "Declarations">
<SYMBOL NAME = "Declarations" TYPE = "nterm"/>
<SYMBOL NAME = "DeclarationSection" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "DeclarationSection">
<SYMBOL NAME = "DeclarationsVar" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "DeclarationSection">
<SYMBOL NAME = "DeclarationsConst" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "DeclarationsConst">
<SYMBOL NAME = "TKN_CONST" TYPE = "term"/>
<SYMBOL NAME = "ConstDecs" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ConstDecs">
<SYMBOL NAME = "SingleConstDec" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ConstDecs">
<SYMBOL NAME = "ConstDecs" TYPE = "nterm"/>
<SYMBOL NAME = "SingleConstDec" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "SingleConstDec">
<SYMBOL NAME = "TKN_ID" TYPE = "term"/>
<SYMBOL NAME = "TKN_REL_EQUAL" TYPE = "term"/>
<SYMBOL NAME = "Expression" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_TOCHKA-ZPT" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "DeclarationsVar">
<SYMBOL NAME = "TKN_VAR" TYPE = "term"/>
<SYMBOL NAME = "VarDecs" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "VarDecs">
<SYMBOL NAME = "SingleVarDec" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "VarDecs">
<SYMBOL NAME = "VarDecs" TYPE = "nterm"/>
<SYMBOL NAME = "SingleVarDec" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "SingleVarDec">
<SYMBOL NAME = "TKN_ID" TYPE = "term"/>
<SYMBOL NAME = "TKN_COLON" TYPE = "term"/>
<SYMBOL NAME = "Type" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_TOCHKA-ZPT" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Type">
<SYMBOL NAME = "TKN_BOOLEAN" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Type">
<SYMBOL NAME = "TKN_CHAR" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Type">
<SYMBOL NAME = "TKN_INTEGER" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Type">
<SYMBOL NAME = "TKN_REAL" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Type">
<SYMBOL NAME = "TKN_STACK" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Type">
<SYMBOL NAME = "TKN_STRING" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Statement">
<SYMBOL NAME = "StatementMatched" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "Statement">
<SYMBOL NAME = "StatementUnmatched" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementMatched">
<SYMBOL NAME = "PartIfMatched" TYPE = "nterm"/>
<SYMBOL NAME = "MatchedElse" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementMatched">
<SYMBOL NAME = "StatementOther" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementUnmatched">
<SYMBOL NAME = "PartIf" TYPE = "nterm"/>
<SYMBOL NAME = "UnmatchedThen" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementUnmatched">
<SYMBOL NAME = "PartIfMatched" TYPE = "nterm"/>
<SYMBOL NAME = "UnmatchedElse" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "PartIf">
<SYMBOL NAME = "TKN_IF" TYPE = "term"/>
<SYMBOL NAME = "Expression" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "MatchedThen">
<SYMBOL NAME = "TKN_THEN" TYPE = "term"/>
<SYMBOL NAME = "StatementMatched" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "MatchedElse">
<SYMBOL NAME = "TKN_ELSE" TYPE = "term"/>
<SYMBOL NAME = "StatementMatched" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "UnmatchedThen">
<SYMBOL NAME = "TKN_THEN" TYPE = "term"/>
<SYMBOL NAME = "Statement" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "UnmatchedElse">
<SYMBOL NAME = "TKN_ELSE" TYPE = "term"/>
<SYMBOL NAME = "StatementUnmatched" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "Statement">
</PRODUCTION>
<PRODUCTION START = "StatementMatched">
<SYMBOL NAME = "ForInit" TYPE = "nterm"/>
<SYMBOL NAME = "StatementMatched" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementUnmatched">
<SYMBOL NAME = "ForInit" TYPE = "nterm"/>
<SYMBOL NAME = "StatementUnmatched" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "PartIfMatched">
<SYMBOL NAME = "PartIf" TYPE = "nterm"/>
<SYMBOL NAME = "MatchedThen" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementMatched">
<SYMBOL NAME = "WhileInit" TYPE = "nterm"/>
<SYMBOL NAME = "StatementMatched" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementUnmatched">
<SYMBOL NAME = "WhileInit" TYPE = "nterm"/>
<SYMBOL NAME = "StatementUnmatched" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementOther">
<SYMBOL NAME = "StructStatement" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementOther">
<SYMBOL NAME = "Assignment" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementOther">
<SYMBOL NAME = "StatementIO" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementOther">
<SYMBOL NAME = "Procedure" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StructStatement">
<SYMBOL NAME = "TKN_BEGIN" TYPE = "term"/>
<SYMBOL NAME = "StatementListNonEmpty" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_END" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "StatementListNonEmpty">
<SYMBOL NAME = "Statement" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementListNonEmpty">
<SYMBOL NAME = "StatementListNonEmpty" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_TOCHKA-ZPT" TYPE = "term"/>
<SYMBOL NAME = "Statement" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "Assignment">
<SYMBOL NAME = "TKN_ID" TYPE = "term"/>
<SYMBOL NAME = "TKN_ASSIGN" TYPE = "term"/>
<SYMBOL NAME = "Expression" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ForInit">
<SYMBOL NAME = "TKN_FOR" TYPE = "term"/>
<SYMBOL NAME = "TKN_ID" TYPE = "term"/>
<SYMBOL NAME = "TKN_ASSIGN" TYPE = "term"/>
<SYMBOL NAME = "Expression" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_TO" TYPE = "term"/>
<SYMBOL NAME = "Expression" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_DO" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "WhileInit">
<SYMBOL NAME = "WhileKeyword" TYPE = "nterm"/>
<SYMBOL NAME = "Expression" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_DO" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "WhileKeyword">
<SYMBOL NAME = "TKN_WHILE" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Expression">
<SYMBOL NAME = "Expression" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_OR" TYPE = "term"/>
<SYMBOL NAME = "ExprDisjunctor" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "Expression">
<SYMBOL NAME = "ExprDisjunctor" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprDisjunctor">
<SYMBOL NAME = "ExprDisjunctor" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_AND" TYPE = "term"/>
<SYMBOL NAME = "ExprConjunctor" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprDisjunctor">
<SYMBOL NAME = "ExprConjunctor" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprConjunctor">
<SYMBOL NAME = "ExprConjunctor" TYPE = "nterm"/>
<SYMBOL NAME = "ExprRelation" TYPE = "nterm"/>
<SYMBOL NAME = "ExprRelator" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprConjunctor">
<SYMBOL NAME = "ExprRelator" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprRelation">
<SYMBOL NAME = "TKN_REL_EQUAL" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ExprRelation">
<SYMBOL NAME = "TKN_REL_NOT_EQUAL" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ExprRelator">
<SYMBOL NAME = "ExprRelator" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_PLUS" TYPE = "term"/>
<SYMBOL NAME = "ExprConstituent" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprRelator">
<SYMBOL NAME = "ExprConstituent" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprConstituent">
<SYMBOL NAME = "ExprConstituent" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_MULT" TYPE = "term"/>
<SYMBOL NAME = "ExprMultiplier" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprConstituent">
<SYMBOL NAME = "ExprMultiplier" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprMultiplier">
<SYMBOL NAME = "TKN_BRACKET_OPEN" TYPE = "term"/>
<SYMBOL NAME = "Expression" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_BRACKET_CLOSE" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ExprMultiplier">
<SYMBOL NAME = "TKN_NOT" TYPE = "term"/>
<SYMBOL NAME = "ExprMultiplier" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprMultiplier">
<SYMBOL NAME = "TKN_PLUS" TYPE = "term"/>
<SYMBOL NAME = "ExprMultiplier" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprMultiplier">
<SYMBOL NAME = "ExprAtom" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "ExprAtom">
<SYMBOL NAME = "TKN_ID" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ExprAtom">
<SYMBOL NAME = "TKN_LITER_CHAR" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ExprAtom">
<SYMBOL NAME = "TKN_LITER_INT" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ExprAtom">
<SYMBOL NAME = "TKN_LITER_REAL" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ExprAtom">
<SYMBOL NAME = "TKN_LITER_STRING" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ExprAtom">
<SYMBOL NAME = "TKN_TRUE" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ExprAtom">
<SYMBOL NAME = "TKN_FALSE" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "ExprAtom">
<SYMBOL NAME = "Function" TYPE = "nterm"/>
</PRODUCTION>
<PRODUCTION START = "StatementIO">
<SYMBOL NAME = "TKN_READ" TYPE = "term"/>
<SYMBOL NAME = "TKN_BRACKET_OPEN" TYPE = "term"/>
<SYMBOL NAME = "TKN_ID" TYPE = "term"/>
<SYMBOL NAME = "TKN_BRACKET_CLOSE" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "StatementIO">
<SYMBOL NAME = "TKN_WRITE" TYPE = "term"/>
<SYMBOL NAME = "TKN_BRACKET_OPEN" TYPE = "term"/>
<SYMBOL NAME = "Expression" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_BRACKET_CLOSE" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "StatementIO">
<SYMBOL NAME = "TKN_WRITELN" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Procedure">
<SYMBOL NAME = "TKN_PUSH" TYPE = "term"/>
<SYMBOL NAME = "TKN_BRACKET_OPEN" TYPE = "term"/>
<SYMBOL NAME = "TKN_ID" TYPE = "term"/>
<SYMBOL NAME = "TKN_ZPT" TYPE = "term"/>
<SYMBOL NAME = "Expression" TYPE = "nterm"/>
<SYMBOL NAME = "TKN_BRACKET_CLOSE" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Function">
<SYMBOL NAME = "TKN_TOP" TYPE = "term"/>
<SYMBOL NAME = "TKN_BRACKET_OPEN" TYPE = "term"/>
<SYMBOL NAME = "TKN_ID" TYPE = "term"/>
<SYMBOL NAME = "TKN_BRACKET_CLOSE" TYPE = "term"/>
</PRODUCTION>
<PRODUCTION START = "Procedure">
<SYMBOL NAME = "TKN_POP" TYPE = "term"/>
<SYMBOL NAME = "TKN_BRACKET_OPEN" TYPE = "term"/>
<SYMBOL NAME = "TKN_ID" TYPE = "term"/>
<SYMBOL NAME = "TKN_BRACKET_CLOSE" TYPE = "term"/>
</PRODUCTION>
</PRODUCTIONS>
</FORMALGRAMMAR>
Приложение 2
// File generated by SLR(1)-Resolver for grammar PASCAL
#include "SyntaxAn.h"
#include "Tokens.h"
#define PASCAL_RulesCount 80
#define PASCAL_FCount 766
#define PASCAL_GCount 501
// Defining symbolics for nonterminals
#define START 0
#define _Program 1
#define Assignment 2
#define ConstDecs 3
#define Declarations 4
#define DeclarationsConst 5
#define DeclarationSection 6
#define DeclarationsVar 7
#define ExprAtom 8
#define ExprConjunctor 9
#define ExprConstituent 10
#define ExprDisjunctor 11
#define Expression 12
#define ExprMultiplier 13
#define ExprRelation 14
#define ExprRelator 15
#define ForInit 16
#define Function 17
#define MatchedElse 18
#define MatchedThen 19
#define PartIf 20
#define PartIfMatched 21
#define Procedure 22
#define ProgName 23
#define SingleConstDec 24
#define SingleVarDec 25
#define Statement 26
#define StatementIO 27
#define StatementListNonEmpty 28
#define StatementMatched 29
#define StatementOther 30
#define StatementUnmatched 31
#define StructStatement 32
#define Type 33
#define UnmatchedElse 34
#define UnmatchedThen 35
#define VarDecs 36
#define WhileInit 37
#define WhileKeyword 38
// Defining symbolics for automaton states
#define STATE_0 0
#define STATE_1 1
#define STATE_2 2
#define STATE_3 3
#define STATE_4 4
#define STATE_5 5
#define STATE_6 6
#define STATE_7 7
#define STATE_8 8
#define STATE_9 9
#define STATE_10 10
#define STATE_11 11
#define STATE_12 12
#define STATE_13 13
#define STATE_14 14
#define STATE_15 15
#define STATE_16 16
#define STATE_17 17
#define STATE_18 18
#define STATE_19 19
#define STATE_20 20
#define STATE_21 21
#define STATE_22 22
#define STATE_23 23
#define STATE_24 24
#define STATE_25 25
#define STATE_26 26
#define STATE_27 27
#define STATE_28 28
#define STATE_29 29
#define STATE_30 30
#define STATE_31 31
#define STATE_32 32
#define STATE_33 33
#define STATE_34 34
#define STATE_35 35
#define STATE_36 36
#define STATE_37 37
#define STATE_38 38
#define STATE_39 39
#define STATE_40 40
#define STATE_41 41
#define STATE_42 42
#define STATE_43 43
#define STATE_44 44
#define STATE_45 45
#define STATE_46 46
#define STATE_47 47
#define STATE_48 48
#define STATE_49 49
#define STATE_50 50
#define STATE_51 51
#define STATE_52 52
#define STATE_53 53
#define STATE_54 54
#define STATE_55 55
#define STATE_56 56
#define STATE_57 57
#define STATE_58 58
#define STATE_59 59
#define STATE_60 60
#define STATE_61 61
#define STATE_62 62
#define STATE_63 63
#define STATE_64 64
#define STATE_65 65
#define STATE_66 66
#define STATE_67 67
#define STATE_68 68
#define STATE_69 69
#define STATE_70 70
#define STATE_71 71
#define STATE_72 72
#define STATE_73 73
#define STATE_74 74
#define STATE_75 75
#define STATE_76 76
#define STATE_77 77
#define STATE_78 78
#define STATE_79 79
#define STATE_80 80
#define STATE_81 81
#define STATE_82 82
#define STATE_83 83
#define STATE_84 84
#define STATE_85 85
#define STATE_86 86
#define STATE_87 87
#define STATE_88 88
#define STATE_89 89
#define STATE_90 90
#define STATE_91 91
#define STATE_92 92
#define STATE_93 93
#define STATE_94 94
#define STATE_95 95
#define STATE_96 96
#define STATE_97 97
#define STATE_98 98
#define STATE_99 99
#define STATE_100 100
#define STATE_101 101
#define STATE_102 102
#define STATE_103 103
#define STATE_104 104
#define STATE_105 105
#define STATE_106 106
#define STATE_107 107
#define STATE_108 108
#define STATE_109 109
#define STATE_110 110
#define STATE_111 111
#define STATE_112 112
#define STATE_113 113
#define STATE_114 114
#define STATE_115 115
#define STATE_116 116
#define STATE_117 117
#define STATE_118 118
#define STATE_119 119
#define STATE_120 120
#define STATE_121 121
#define STATE_122 122
#define STATE_123 123
#define STATE_124 124
#define STATE_125 125
#define STATE_126 126
#define STATE_127 127
#define STATE_128 128
#define STATE_129 129
#define STATE_130 130
#define STATE_131 131
#define STATE_132 132
#define STATE_133 133
#define STATE_134 134
#define STATE_135 135
#define STATE_136 136
// Defining symbolics for grammar productions
#define _START___Program_ 0
#define __Program__ProgName_Declarations_StructStatement_TKN_TOCHKA_ 1
#define _ProgName__ 2
#define _ProgName__TKN_PROGRAM_TKN_ID_TKN_TOCHKA-ZPT_ 3
#define _Declarations__ 4
#define _Declarations__Declarations_DeclarationSection_ 5
#define _DeclarationSection__DeclarationsVar_ 6
#define _DeclarationSection__DeclarationsConst_ 7
#define _DeclarationsConst__TKN_CONST_ConstDecs_ 8
#define _ConstDecs__SingleConstDec_ 9
#define _ConstDecs__ConstDecs_SingleConstDec_ 10
#define _SingleConstDec__TKN_ID_TKN_REL_EQUAL_Expression_TKN_TOCHKA-ZPT_ 11
#define _DeclarationsVar__TKN_VAR_VarDecs_ 12
#define _VarDecs__SingleVarDec_ 13
#define _VarDecs__VarDecs_SingleVarDec_ 14
#define _SingleVarDec__TKN_ID_TKN_COLON_Type_TKN_TOCHKA-ZPT_ 15
#define _Type__TKN_BOOLEAN_ 16
#define _Type__TKN_CHAR_ 17
#define _Type__TKN_INTEGER_ 18
#define _Type__TKN_REAL_ 19
#define _Type__TKN_STACK_ 20
#define _Type__TKN_STRING_ 21
#define _Statement__StatementMatched_ 22
#define _Statement__StatementUnmatched_ 23
#define _StatementMatched__PartIfMatched_MatchedElse_ 24
#define _StatementMatched__StatementOther_ 25
#define _StatementUnmatched__PartIf_UnmatchedThen_ 26
#define _StatementUnmatched__PartIfMatched_UnmatchedElse_ 27
#define _PartIf__TKN_IF_Expression_ 28
#define _MatchedThen__TKN_THEN_StatementMatched_ 29
#define _MatchedElse__TKN_ELSE_StatementMatched_ 30
#define _UnmatchedThen__TKN_THEN_Statement_ 31
#define _UnmatchedElse__TKN_ELSE_StatementUnmatched_ 32
#define _Statement__ 33
#define _StatementMatched__ForInit_StatementMatched_ 34
#define _StatementUnmatched__ForInit_StatementUnmatched_ 35
#define _PartIfMatched__PartIf_MatchedThen_ 36
#define _StatementMatched__WhileInit_StatementMatched_ 37
#define _StatementUnmatched__WhileInit_StatementUnmatched_ 38
#define _StatementOther__StructStatement_ 39
#define _StatementOther__Assignment_ 40
#define _StatementOther__StatementIO_ 41
#define _StatementOther__Procedure_ 42
#define _StructStatement__TKN_BEGIN_StatementListNonEmpty_TKN_END_ 43
#define _StatementListNonEmpty__Statement_ 44
#define _StatementListNonEmpty__StatementListNonEmpty_TKN_TOCHKA-ZPT_Statement_ 45
#define _Assignment__TKN_ID_TKN_ASSIGN_Expression_ 46
#define _ForInit__TKN_FOR_TKN_ID_TKN_ASSIGN_Expression_TKN_TO_Expression_TKN_DO_ 47
#define _WhileInit__WhileKeyword_Expression_TKN_DO_ 48
#define _WhileKeyword__TKN_WHILE_ 49
#define _Expression__Expression_TKN_OR_ExprDisjunctor_ 50
#define _Expression__ExprDisjunctor_ 51
#define _ExprDisjunctor__ExprDisjunctor_TKN_AND_ExprConjunctor_ 52
#define _ExprDisjunctor__ExprConjunctor_ 53
#define _ExprConjunctor__ExprConjunctor_ExprRelation_ExprRelator_ 54
#define _ExprConjunctor__ExprRelator_ 55
#define _ExprRelation__TKN_REL_EQUAL_ 56
#define _ExprRelation__TKN_REL_NOT_EQUAL_ 57
#define _ExprRelator__ExprRelator_TKN_PLUS_ExprConstituent_ 58
#define _ExprRelator__ExprConstituent_ 59
#define _ExprConstituent__ExprConstituent_TKN_MULT_ExprMultiplier_ 60
#define _ExprConstituent__ExprMultiplier_ 61
#define _ExprMultiplier__TKN_BRACKET_OPEN_Expression_TKN_BRACKET_CLOSE_ 62
#define _ExprMultiplier__TKN_NOT_ExprMultiplier_ 63
#define _ExprMultiplier__TKN_PLUS_ExprMultiplier_ 64
#define _ExprMultiplier__ExprAtom_ 65
#define _ExprAtom__TKN_ID_ 66
#define _ExprAtom__TKN_LITER_CHAR_ 67
#define _ExprAtom__TKN_LITER_INT_ 68
#define _ExprAtom__TKN_LITER_REAL_ 69
#define _ExprAtom__TKN_LITER_STRING_ 70
#define _ExprAtom__TKN_TRUE_ 71
#define _ExprAtom__TKN_FALSE_ 72
#define _ExprAtom__Function_ 73
#define _StatementIO__TKN_READ_TKN_BRACKET_OPEN_TKN_ID_TKN_BRACKET_CLOSE_ 74
#define _StatementIO__TKN_WRITE_TKN_BRACKET_OPEN_Expression_TKN_BRACKET_CLOSE_ 75
#define _StatementIO__TKN_WRITELN_ 76
#define _Procedure__TKN_PUSH_TKN_BRACKET_OPEN_TKN_ID_TKN_ZPT_Expression_TKN_BRACKET_CLOSE_ 77
#define _Function__TKN_TOP_TKN_BRACKET_OPEN_TKN_ID_TKN_BRACKET_CLOSE_ 78
#define _Procedure__TKN_POP_TKN_BRACKET_OPEN_TKN_ID_TKN_BRACKET_CLOSE_ 79
// Defining external links
extern ENUM_TOKENS PASCAL_Terms[];
extern RuleInfo PASCAL_Rules[];
extern GInfo PASCAL_Goto[];
extern FInfo PASCAL_Action[];