- •Содержание
- •1. Цель работы.
- •2. Краткое описание учебного языка, варианты заданий.
- •3. Расшифровка цифр варианта задания.
- •4. Пример праграммы
- •5. Регулярные выражения
- •6. Построить ка в форме матрицы:
- •7. Формальная грамматика
- •8. Примеры результатов работы Результат реализации лексического блока
- •Результат реализации синтаксичекого блока
- •Результат реализации генератора кода с переводом в язык абстрактной стековой машины
- •9. Список литературы
5. Регулярные выражения
<И> := < пБ><Ц>
<Буква> :=a|b|c...|x|y|z
< пБ>:=(буква)*
<Ц> :=0|1|2|3
<пЦ >:=(ц)*
<drop>:=.< пЦ >|e
<К> :=<знак>< пЦ ><drop>
<Знак >:=+|-|e
<Операнд>:=<ид>|< K>
<Сравнение> := >|<|>=|<=|==|!=
<var>:=int | float|char|bool|
<by>:=by
<do>:=do
<othewise >:= othewise
<switch>:=switch
<for>:=for
<from>:=from
<to> :=to
<step>:=step
<oper>:=+|*|/|-
6. Построить ка в форме матрицы:
Входные символы : {var,id, by, crav,do, const, op, ; ,=, othewise, switch, (, ), {, }, : , for, from, to,step ,+,*}
Состояния автомата:
-
S0 – Поступление “var”
-
S1 - Поступление “id”
-
S2 - Поступление “, ”
-
S3 - Поступление “;”
-
S4 - Поступление ключевого слова “by”
-
S5 - Поступление “crav”
-
S6 - Поступление ключевого слова “do”
-
S7 - Поступление “=”
-
S8 - Поступление “(”
-
S9 - Поступление “)”
-
S10 - Поступление “+”
-
S11 - Поступление “*”
-
S12 - Поступление ключевого слова “otherwise”
-
S13 - Поступление “{”
-
S14 - Поступление “}”
-
S15 - Поступление “const”
-
S16 - Поступление “:”
-
S17 - Поступление ключевого слова “for ”
-
S18- Поступление ключевого слова “from”
-
S19- Поступление ключевого слова “to ”
-
S20 - Поступление ключевого слова “step”
-
S21 - Поступление ключевого слова “switch ”
Построение КА в форме матрицы для описания лексического блока
7. Формальная грамматика
T={ var,id, by, crav,do, const, ; ,=, othewise, switch, (, ), {, }, : , for, from, to,step ,+,*}
P: V={Prog, telo, varop, ID, ifop, switchop, byop, forop, block, operand,B,opmult,som}
V0 = <Prog>
1) <Prog> -> <varop><telo>
2)<telo> -> <condop><telo>
-><forop><telo>
-><switchop><telo>
->e
3)<varop> -> var <ID> ;
->var <ID> ; <varop>
4)<ID> -> id | id, <ID>
5)condop -> by ( operan crav operan ) do <block>
->by ( operan crav operan ) do <block> otherwise <block>
6)Switchop -> switch (B) {<byop>}
Byop -> by const : <block>
-> by const : <block> <byop>
7)Forop -> for id from const to const <block>| for id from const to const step const <block>
8)<Block> -> id = <B> ;
->id = <B> ; <block>
9)<В> -> <В> <операция сложения> < оператор умножения>
-> <оператор умножения>
10)<оператор умножения>
-> <оператор умножения> <операция умножения> < сомножитель>
-> <оператор умножения> –> <сомножитель>
11)<сомножитель> -> (<В>)
-> <операнд>
8. Примеры результатов работы Результат реализации лексического блока
-
Входная цепочка
int ab2, d3; float c1;
bool xy4;
by(xy4==yes) do ab2 = 4;
otherwise c1=3 ;
switch (ab2) { by 1 : d3=4 * (c1 + 3); by 2 : c1 =(ab2 + 3) *3; }
for d3 from 0 to 3 ab2 = d3 * 1;
Tvar "int "
Tid "ab2"
Tzap ","
Tid "d3"
Ttochz ";"
Tvar "float"
Tid "c1"
Ttochz ";"
Tvar "bool"
Tid "xy4"
Ttochz ";"
Tby "by"
Tmotron "("
Tid "xy4"
Tcrav "=="
Tconst "yes"
Tdongtron ")"
Tdo "do"
Tid "ab2"
Tpris "="
Tconst "4"
Ttochz ";"
Totherwise "otherwise"
Tid "c1"
Tpris "="
Tconst "3"
Ttochz ";"
Tswitch "switch"
Tmotron "("
Tid "ab2"
Tdongtron ")"
Tmonhon "{"
Tby "by"
Tconst "1"
Tdvetoch ":"
Tid "d3"
Tpris "="
Tconst "4"
Tmult "*"
Tmotron "("
Tid "c1"
Tadd "+"
Tconst "3"
Tdongtron ")"
Ttochz ";"
Tby "by"
Tconst "2"
Tdvetoch ":"
Tid "c1"
Tpris "="
Tmotron "("
Tid "ab2"
Tadd "+"
Tconst "3"
Tdongtron ")"
Tmult "*"
Tconst "3"
Ttochz ";"
Tdongnhon "}"
Tfor "for"
Tid "d3"
Tfrom "from"
Tconst "0"
Tto "to"
Tconst "3"
Tid "ab2"
Tpris "="
Tid "d3"
Tmult "*"
Tconst "1"
Ttochz ";"