C) Описание символов действия

{new_cell} выделяет новую ячейку в таблице переменных,

 first2 не связывая ее с каким-либо именем

 last2

 cell

{make_lbl} генерирует уникальные имена для меток

 lbl

{new_INT} выделяет новую ячейку в таблице переменных,

 first1 связывая ее с идентификатором типа INT

 last1

 name

{new_FLOAT} выделяет новую ячейку в таблице переменных,

 first1 связывая ее с идентификатором типа FLOAT

last1

 name

{#(LABEL)#} cоздает атом-метку с заданным именем

 beg_lbl

{#(JMP_UP)#} создает атом-команду безусловного перехода

 beg_lbl1 на вышеопределенную метку с заданным именем

{#(JMP_DOWN)#} создает атом-команду безусловного перехода

 end_lbl1 на нижеописанную метку с заданным именем

{#(JMP_DOWN_FALSE)#} создает атом-команду условного перехода

 end_lbl1 на нижеописанную метку с заданным именем

 cond при нуле в заданной ячейке

{#(<)#} создает атом-команду '<'

 1op1

 2op

 dest

{#(>)#} создает атом-команду '>'

 1op1

 2op

 dest

{#(=)#} создает атом-команду присвоить содержимое

 source источника приемнику

 dest

{#(*)#} создает атом-команду '*'

 1op1

 2op

 dest

{#(+)#} создает атом-команду '+'

 1op1

 2op

 dest

D) Атрибутная грамматика в окончательном виде

<PROGRAM>::="main()"' { '<MAIN_BLOCK>'}' ¦

 first #key  #razd  first1  #razd ¦first1=first

 last  last1 ¦last=last1

<MAIN_BLOCK>::=$ ¦

 first ¦first=last

 last ¦

<MAIN_BLOCK>::=<DEF_VAR>

 first  first1 ¦first1=first

 last  last1 ¦last=last1

<DEF_VAR>::=<VAR> <CONTINUE> ¦first1=first

 first  first1  first2 ¦first2=last1

 last  last1  last2 ¦last=last2

<CONTINUE>::=<BLOCK>

 first  first1 ¦first1=first

 last  last1 ¦last=last1

<CONTINUE>::=$

 first ¦first=last

 last ¦

<BLOCK>::= '{' <BODY> '}'

 first  #razd  first1  #razd ¦first1=first

 last  last1 ¦last=last1

<BODY>::=<START> <CONT_BODY> ¦first1=first

 first  first1  first2 ¦first2=last1

 last  last1  last2 ¦last=last2

<START>::=<EQUATION> ‘;’

 first  first1  #razd ¦first1=first

 last  last1 ¦last=last1

<START>::=<FOR>

 first  first1 ¦first1=first

 last  last1 ¦last=last1

< CONT_BODY >::=$

 first ¦first=last

 last ¦

< CONT_BODY >::=<BODY>

 first  first1 ¦first1=first

 last  last1 ¦last=last1

//описание циклов и их условий

<FOR>::={make_lbl} <HEAD> <BLOCK>{#(JMP_UP)#}{#(LABEL)#} ‘;’

 first  lbl  first1  first2  beg_lbl1  end_lbl1  #razd

 last  last1  last2

 beg_lbl

 end_lbl

(beg_lbl1,beg_lbl)=lbl first1=first end_lbl1=end_lbl

first2=last1

last=last2

<HEAD>::= 'for ( ' <EQUATION> <CONT_HEAD> ¦ first1=first

 first  #key  first1  first2 ¦ first2=last1

 last  last1  last2 ¦ last=last2

 beg_lbl  beg_lbl1 ¦ beg_lbl1=beg_lbl

 end_lbl  end_lbl1 ¦ end_lbl=end_lbl1

<CONT_HEAD>::= ‘;’ {#(LABEL)#} <CONDITION2>{make_lbl} {#(JMP_DOWN_FALSE)#}

 first  #razd  beg_lbl1  first1  lbl  end_lbl1

 last  last1  cond

 beg_lbl  rslt

 end_lbl

<CCONT_HEAD> (continued)

 first2

 last2

(end_lbl1 , end_lbl )=lbl first1=first cond=rslt beg_lbl1=beg_lbl

first2=last1

last=last2

<CCONT_HEAD>::= ‘;’ <CONDITION3> ‘ )’ ¦first1=first

 first  #razd  first1  #razd ¦last=last1

 last  last1

<CONDITION2>::= <IDENTIFICATOR> <CONT_COND2>

 first #ID  first1 ¦first1=first

 last  last1 ¦last=last1

 rslt  1op ¦1op=#ID

 rslt1 ¦rslt=rslt1

<CONT_COND2>::= ‘>’ <CONSTANT>{new_cell}{#(>)#} ¦first1=first

 first  #op  #CONST first1  1op1 ¦ last=last1

 last  last1  2op ¦1op1=1op

 1op cell dest ¦2op=#CONST

 rslt ¦dest=cell

¦rslt=cell

<CONT_COND2>::= ‘<’ <CONSTANT>{new_cell}{#(<)#} ¦first1=first

 first  #op  #CONST first1  1op1 ¦ last=last1

 last  last1  2op ¦1op1=1op

 1op cell dest ¦2op=#CONST

 rslt ¦dest=cell

¦rslt=cell

<CONDITION3>::= <EQUATION> ‘;’ ¦first1=first

 first first1  #razd ¦last=last1

 last  last1

//описание присвоения и арифметических выражений

<EQUATION>::=<IDENTIFICATOR> ‘=’ <R_EQUATION>{#(=)#} ¦first1=first

 first  #ID  #OP  first1  source ¦source=rslt

 last  last1  dest ¦dest=#ID

 rslt ¦last=last1

<R_EQUATION>::= <IDENTIFICATOR> <CONT_R_EQUATION> ¦first1=first

 first  #ID  first1 ¦1op=#ID

 last  last1 ¦last=last1

 rslt  1op ¦rslt=rslt1

 rslt1 ¦

<R_EQUATION>::= <CONSTANT> < CONT_R_EQUATION > ¦first1=first

 first  #CONST  first1 ¦1op=#CONST

 last  last1 ¦last=last1

 rslt  1op ¦rslt=rslt1

 rslt1 ¦

< CONT_R_EQUATION >::=$ ¦

 first ¦last=first

 last ¦rslt=1op

 1op ¦

 rslt ¦

< CONT_R_EQUATION >::= ‘+’ <R_EQUATION>{ new_cell}{#(+)#} ¦first1=first

 first  #OP  first1  first2  1op1 ¦first2=last1

 last  last1  last2  2op ¦1op1=1op

 1op  rslt1  cell  dest ¦2op=rslt1

 rslt ¦dest=cell

¦rslt=cell

¦last=last2

< CONT_R_EQUATION >::= ‘*’ <R_EQUATION>{ new_cell}{#(*)#} ¦first1=first

 first  #OP  first1  first2  1op1 ¦first2=last1

 last  last1  last2  2op ¦1op1=1op

 1op  rslt1  cell  dest ¦2op=rslt1

 rslt ¦dest=cell

¦rslt=cell

¦last=last2

//описание блока объявления переменных

<VAR>::=<DEFINE_CONSTANT> <CONT_VAR> ¦first1=first

 first  first1  first2 ¦first2=last1

 last  last1  last2 ¦last=last2

<CONT_VAR>::=<VAR>

 first  first1 ¦first1=first

 last  last1 ¦last=last1

<CONT_VAR>::=$

 first ¦last=first

 last ¦

<DEFINE_CONSTANT >::="int " <LIST_IDENT_I> ‘;’

 first  #KEY  first1  #razd ¦first1=first

 last  last1 ¦last=last1

<DEFINE_CONSTANT >::="float " <LIST_IDENT_F> ‘;’

 first  #KEY  first1  #razd ¦first1=first

 last  last1 ¦last=last1

//списки объявляемых переменных определенного типа

<LIST_IDENT_I>::=<IDENTIFICATOR>{new_INT}<C_L_I_I> ¦first1=first

 first  #NAME  first1  first2 ¦name=#NAME

 last  last1  last2 ¦first2=last1

 name ¦last=last2

<C_L_I_I>::=$ ¦

 first ¦last=first

 last ¦

< C_L_I_I >::= ‘,’ < LIST_IDENT_I > ¦

 first  #RAZD first1 ¦first1=first

 last  last1 ¦last=last1

<LIST_IDENT_F>::=<IDENTIFICATOR>{new_FLOAT}<C_L_I_F> ¦first1=first

 first  #NAME  first1  first2 ¦name=#NAME

 last  last1  last2 ¦first2=last1

 name ¦last=last2

<C_L_I_F>::=$ ¦

 first ¦last=first

 last ¦

< C_L_I_F >::= ‘,’ < LIST_IDENT_F > ¦

 first  #RAZD first1 ¦first1=first

 last  last1 ¦last=last1

Соседние файлы в папке ARVIN
  • #
    01.05.20141.09 Mб8KURS-ARV.DOC
  • #
    01.05.2014776.53 Кб5TRY.BMP
  • #
    01.05.20142.16 Кб4ZZZ.BAK
  • #
    01.05.20141.37 Кб4ZZZ.GRM
  • #
    01.05.201411.11 Кб5ZZZ.TFN
  • #
    01.05.20142.16 Кб4ZZZ.TGR