CONTEX (Материалы к контрольным работам), страница 2
Описание файла
Файл "CONTEX" внутри архива находится в следующих папках: Материалы к контрольным работам, Материалы (3), CONSCOMP. Документ из архива "Материалы к контрольным работам", который расположен в категории "". Всё это находится в предмете "конструирование компиляторов" из 6 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "CONTEX"
Текст 2 страницы из документа "CONTEX"
�¥à¥¬¥ ï V «®ª «¨§®¢ ¢ ⥫¥ ®¯¥à â®à ¨ ¯à®¡¥£ ¥â ¢á¥ § ç¥¨ï ¬®¦¥á⢠. …᫨ ¬®¦¥á⢮ 㯮à冷祮, â® í«¥¬¥âë ¯à®¡¥£ îâáï ¢ í⮬ ¯®à浪¥, ¥á«¨ ¥â - ¢ ¯à®¨§¢®«ì®¬ ¯®à浪¥.
‘। ¯à¥¤áâ ¢«ï¥â ᮡ®© ª«î祢®¥ ¬®¦¥á⢮ á ª«î箬 - ¨¬¥¥¬ ®¡ê¥ªâ . Š ¦¤ë© «®ª «ìë© ¬®¤ã«ì ¨¬¥¥â âਡãâ - ¬®¦¥á⢮ ¨¬¯®àâ¨à㥬ëå ®¡ê¥ªâ®¢ ¨ âਡãâ - ¬®¦¥á⢮ íªá¯®àâ¨à㥬ëå ®¡ê¥ªâ®¢. �ªá¯®àâ¨àã¥¬ë¥ ¬®¤ã«¥¬ ®¡ê¥ªâë ¢ ᮮ⢥âá⢨¨ á ¯à ¢¨« ¬¨ íªá¯®àâ ¢ª«îç îâáï ¢ ª®¬¯®¥âã á।ë, ¢ ª®â®àãî ¢å®¤¨â á ¬ ¬®¤ã«ì. �¨¦¥ ¯à¨¢¥¤¥ äà £¬¥â ®¯¨á ¨ï ª®â¥ªáâëå ãá«®¢¨© ï§ëª Œ®¤ã« -2 (¢ 䨣ãàë¥ áª®¡ª¨ § ª«îç¥ë ª®¬¬¥â ਨ).
ALPHABET
Prog:: Env : key Name set of Element.
�।®¯à¥¤¥«¥ ï ª®¬¯®¥â . ˆ¤¥â¨ä¨ª â®àë ¨¬¥îâ ⨯ Name.
Block :: Env : key Name set of Element;
Kind : boolean;
Pred : pointer to Block.
€à¨¡ãâ Kind à ¢¥ true ¤«ï ¯à®æ¥¤ãà ¨ false ¤«ï ¬®¤ã«¥©. Env - ¬®¦¥á⢮ ®¡ê¥¨© ¡«®ª . Pred - 㪠§ â¥«ì ®å¢ âë¢ î騩 ¡«®ª.
Mod_Head :: Entry : pointer to Element;
Imp_Set : set of Import_Pair;
Mode:boolean.
Imp_Set - ¬®¦¥á⢮ ¨¬¯®àâ¨à㥬ëå ¬®¤ã«¥¬ ®¡ê¥ªâ®¢; ⨯ Import_Pair - § ¯¨áì ¨§ ¤¢ãå ¯®«¥©: Imp_Name:Name - ¨¬ï ¨¬¯®àâ¨à㥬®£® ®¡ê¥ªâ , ¨ Name_Set:Set of Name - ᯨ᮪ ¨¬¯®àâ¨à㥬ëå ¨§ ¬®¤ã«ï ®¡ê¥ªâ®¢, ¥á«¨ ¨¬¯®àâ ª¢ «¨ä¨æ¨à®¢ ë©, ¨ Nil, ¥á«¨ ¥ª¢ «¨ä¨æ¨à®¢ ë©; Entry - 㪠§ â¥«ì ¢å®¤ ¤«ï ¬®¤ã«ï; Mode - ¯à¨§ ª ª¢ «¨ä¨æ¨à®¢ ®£® íªá¯®àâ .
Import :: Imp_Set : set of Name.
Imp_Set - ᯨ᮪ ª¢ «¨ä¨æ¨à®¢ ®£® ¨¬¯®àâ .
Export :: Mode:boolean.
Mode - ¯à¨§ ª ª¢ «¨ä¨æ¨à®¢ ®£® íªá¯®àâ .
From :: Qual : boolean; Name : NameType.
Qual :: Qual : boolean.
Ident_List :: Ident_Set : set of Name.
Type_Des :: Exit : pointer to Element.
Qual - ¯à¨§ ª ª¢ «¨ä¨æ¨à®¢ ®£® ¨¬¯®àâ ; Name - ¨¬ï ¬®¤ã«ï, ¨§ ª®â®à®£® ¤¥« ¥âáï ¨¬¯®àâ; Ident_Set - ᯨ᮪ ¨¤¥â¨ä¨ª â®à®¢; Exit - 㪠§ â¥«ì ®¯¨á ¨¥ ⨯ .
RULE
Declaration ::= 'procedure' Ident [ Formal_Param ] ';'
Block ';'
SEMANTICS
var Entry:pointer to Element;
Kind<5>:=true;
2:if Find(Val<2>,Env<Block>)<>Nil
then Error("Identifire declared twice");
end;
Entry:=Include(Val<2>,Env<Block>);
Entry@.Object:=ProcObject.
�®¬¥é¥¨¥ ¯à®æ¥¤ãàë; ¨é¥¬ ®¡ê¥ªâ á ¤ ë¬ ¨¬¥¥¬ ¢ ⥪ã饩 ª®¬¯®¥â¥; Entry - 㪠§ â¥«ì ¢å®¤ ¤«ï ¯à®æ¥¤ãàë. …᫨ ®¡ê¥ªâ á â ª¨¬ ¨¬¥¥¬ 㦥 ¥áâì, - ®è¨¡ª .
RULE
Declaration ::= 'module' Ident Mod_Head Block ';'
SEMANTICS
var M:Import_Pair;
V:Element;
if Find(Val<2>,Env<Block>)<>Nil
then Error("Identifire declared twice")
end;
Entry<3>:=Include(Val<2>,Env<Block>);
Entry<3>@.Object:=LocalModuleObject;
Kind<4>:=false;
3: for M in Imp_Set<3> do Inc_Imp(M,Env<4>);
end;
if (Mode<3>=NotQual) then
for V in Entry<3>@.Exp_Set do Export(V,Env<Block>);
end end.
�®¬¥é¥¨¥ ¬®¤ã«ï; ¨é¥¬ ®¡ê¥ªâ á ¤ ë¬ ¨¬¥¥¬ ¢ ⥪ã饩 ª®¬¯®¥â¥. …᫨ â ª®© 㦥 ¥áâì, - ®è¨¡ª . ‡ ®á¨¬ ¢ ⥪ãéãî ª®¬¯®¥âã áà¥¤ë ®¡ê¥ªâ-¬®¤ã«ì. Œ®¦¥á⢮ Imp_Set - íâ® ¬®¦¥á⢮ ¨¬¯®àâ¨à㥬ëå ¬®¤ã«¥¬ ®¡ê¥ªâ®¢. �«¥¬¥âë í⮣® ¬®¦¥á⢠- ¯ àë, ¯¥à¢ ï ª®¬¯®¥â ª®â®àëå - ¨¬ï ¨¬¯®àâ¨à㥬®£® ¬®¤ã«ï, ¢â®à ï - ᯨ᮪ ¨¬¯®àâ¨à㥬ëå ¨§ ¥£® ®¡ê¥ªâ®¢. …᫨ ¢â®à ï ª®¬¯®¥â Nil, â® ¨¬¯®àâ ¥ª¢ «¨ä¨æ¨à®¢ ë©. …᫨ ¨¬¯®àâ¨àã¥¬ë© ®¡ê¥ªâ M - ¬®¤ã«ì ¨ ¥á«¨ M ¨¬¯®àâ¨àã¥âáï ¥ª¢ «¨ä¨æ¨à®¢ ® (IMPORT M), â® ¯à®æ¥¤ãà Inc_Imp ¢ª«îç ¥â M ¢ á।ã ⥪ã饣® ¬®¤ã«ï; ¥á«¨ ¨¬¯®àâ ª¢ «¨ä¨æ¨à®¢ ë© (FROM M IMPORT ...), â® M ¨¬¥¥â ᯨ᮪ ¨¬¯®àâ ¨ ¯à®æ¥¤ãà Inc_Imp ¢ª«îç ¥â ¢ ⥪ãéãî ª®¬¯®¥âã ⥠íªá¯®àâ¨àã¥¬ë¥ ¨§ M ®¡ê¥ªâë, ª®â®àë¥ ¯¥à¥ç¨á«¥ë ¢ ᯨ᪥ ª¢ «¨ä¨æ¨à®¢ ®£® ¨¬¯®àâ ; ¥á«¨ ¯à¨ í⮬ ¨¬¯®àâ¨àã¥¬ë© ®¡ê¥ªâ - ¢ á¢®î ®ç¥à¥¤ì ¬®¤ã«ì, â® ¨§ M ४ãàᨢ® ¨¬¯®àâ¨àã¥âáï ¢á¥ ¥£® íªá¯®àâë¥ ®¡ê¥ªâë.
€âਡãâ Mode ¢ëç¨á«ï¥âáï ¢ ¯à ¢¨«¥ ¤«ï íªá¯®àâ ¨ ®¯à¥¤¥«ï¥â, ®áãé¥á⢫ï¥âáï «¨ ª¢ «¨ä¨æ¨à®¢ ë© íªá¯®àâ (EXPORT QUALIFIED ...) ¨«¨ ¥â (EXPORT ...). �à®æ¥¤ãà Export ¢ á«ãç ¥ ¥ª¢ «¨ä¨æ¨à®¢ ®£® íªá¯®àâ EXPORT A1,A2,... ¢á¥ ®¡ê¥ªâë íªá¯®à⮣® ᯨ᪠¬®¤ã«ï § ®á¨â ¢ ª®¬¯®¥âã á।ë, ®å¢ âë¢ îéãî ¬®¤ã«ì; ¥á«¨ Ai - ¬®¤ã«ì, ¥£® íªá¯®àâ ®¡à ¡ âë¢ ¥âáï ४ãàᨢ®; ¥á«¨ íªá¯®àâ ª¢ «¨ä¨æ¨à®¢ ë©, â® ¢ ®å¢ âë¢ îéãî ¬®¤ã«ì ª®¬¯®¥âã ¯®¯ ¤ ¥â ⮫쪮 á ¬ ¬®¤ã«ì ᮠᯨ᪮¬ íªá¯®àâ .
RULE
Block ::= [( Declaration )] [ Block_St_Seq ] 'end' Ident
SEMANTICS
0:Init(Env<0>);
Pred<0>:=@<Block>.
€âਡãâ Pred - 㪠§ â¥«ì ®å¢ âë¢ î騩 ¡«®ª.
RULE
Mod_Head ::= [ Priority ] ';' [ ( Import ) ] [ Export ]
SEMANTICS
4E: Mode<4>:=NotQual;
Entry<0>@.Mode:=Mode<4>;
Mode<0>:=Mode<4>;
0:Init(Imp_Set<0>).
ˆ¨æ¨ «¨§¨àã¥âáï ᯨ᮪ ¨¬¯®àâ . ’¨¯ íªá¯®àâ § ®á¨âáï ¢ ®¯¨á ¨¥ ¬®¤ã«ï.
RULE
Import ::= [ From ] 'import' ( Ident /',' ) ';'
SEMANTICS
var Tmp:Import_Pair;
0:Init(Imp_Set<0>);
1E: Qual<1>:=false;
3A:if Qual<1> then Include(Val<3>,Imp_Set<0>)
else Tmp.Name_Set:=Nil;
Tmp.Imp_Name:=Name<3>;
Include(Tmp,Imp_Set<Mod_Head>)
end;
if Qual<1> then
Tmp.Name_Set:=Imp_Set<0>;
Tmp.Imp_Name:=Name<1>;
Include(Tmp,Imp_Set<Mod_Head>)
end.
…᫨ ¨¬¯®àâ ª¢ «¨ä¨æ¨à®¢ ë©, â® Name<1> - ¨¬ï ¬®¤ã«ï, ¨§ ª®â®à®£® ¤¥« ¥âáï ¨¬¯®àâ. ‚ í⮬ á«ãç ¥ Imp_Set<0> - ¬®¦¥á⢮ ¨¬¯®àâ¨à㥬ëå ¨§ ¥£® ®¡ê¥ªâ®¢. ˆ¤¥â¨ä¨ª â®à ¢ª«îç ¥âáï ¢ ᯨ᮪ ¨¬¯®àâ ¨§ ¬®¤ã«ï, ¨ ç¥ ¨¤¥â¨ä¨ª â®à - ¨¬ï ¬®¤ã«ï ¨ ® ¢ª«îç ¥âáï ¢ ᯨ᮪ ¨¬¯®àâ¨à㥬ëå ¬®¤ã«¥©. …᫨ ¨¬¯®àâ ª¢ «¨ä¨æ¨à®¢ ë©, ¢ª«îç¨âì ¢ ᯨ᮪ ¨¬¯®àâ ¬®¤ã«ï ¢¥áì ᯨ᮪ ¨¬¯®àâ¨à㥬ëå ®¡ê¥ªâ®¢.
RULE
From ::= 'from' Ident
SEMANTICS
Qual<0>:=true;
Name<0>:=Val<2>.
RULE
Export ::= 'export' [ Qual ] ( Ident /',' )
SEMANTICS
0: Init(Entry<Mod_Head>@.Exp_Set);
2…: Mode<2>:=NotQual;
Mode<0>:=Mode<2>;
3A: Include(Val<3>,Entry<Mod_Head>@.Exp_Set).
‚ª«îç¨âì ¨¤¥â¨ä¨ª â®à ¢ íªá¯®àâë© á¯¨á®ª ¬®¤ã«ï; ¬®¦¥á⢮ íªá¯®àâ¨à㥬ëå ¬®¤ã«¥¬ ®¡ê¥ªâ®¢ § ®á¨âáï ¢ ¯®«¥ Exp_Set : Key Name Set Of Element ¢ â ¡«¨æ¥ ®¡ê¥ªâ®¢, ¯®áª®«ìªã ¯à¨ ¨á¯®«ì§®¢ ¨¨ ª¢ «¨ä¨æ¨à®¢ ®£® ¨¬¯®àâ ¨«¨ ®¡à 饨¨ M.V, £¤¥ M - ¨¬ï ¬®¤ã«ï, V - ¨¬ï íªá¯®àâ¨à㥬®£® ®¡ê¥ªâ , ¥®¡å®¤¨¬® ¨¬¥âì ¤®áâ㯠ª ᯨáªã ª¢ «¨ä¨æ¨à®¢ ®£® íªá¯®àâ .
RULE
Qual ::= 'qualified'
SEMANTICS
Qual<0>:=Qualified
RULE
Declaration ::= 'var' ( Var_Decl ).
RULE
Var_Decl ::= Ident_List ':' Type_Des ';'
SEMANTICS
var V:Name;
for V in Ident_Set<1> do
if (Find(V,Env<Block>)<>Nil)
then Error("Identifire declared twice")
end;
Include(V,Env<Block>);
V@.Object:=VarObject;
V@.Type:=Exit<3>;
end.
V - à ¡®ç ï ¯¥à¥¬¥ ï ¤«ï í«¥¬¥â®¢ ᯨ᪠. „«ï ª ¦¤®£® ¨¤¥â¨ä¨ª â®à ¨§ ¬®¦¥á⢠Ident_Set<1> áä®à¬¨à®¢ âì ®¡ê¥ªâ-¯¥à¥¬¥ãî ¢ ⥪ã饩 ª®¬¯®¥â¥ á।ë á ᮮ⢥âáâ¢ãî騬¨ å à ªâ¥à¨á⨪ ¬¨.
RULE
Ident_List ::= ( Ident /',' )
SEMANTICS
0:Init(Ident_Set<0>);
1A:Include(Val<1>,Ident_Set<0>).
RULE
Type_Des ::= Ident
SEMANTICS
var P:pointer to Block;
P:=Block@;
repeat
Exit<0>:=Find(Val<1>,P@.Env);
if P@.Kind then P:=P@.Pred
end;
until (Exit<0><>NIL)or(not P@.Kind);
if (Exit<0>=NIL)
then Exit<0>:=Find(Val<1>,Env<Prog>)
end;
if (Exit<0>=Nil) then Error("⨯ ¥ ©¤¥")
else if (Exit<0>@.Object<>TypeObject) then
Error("Not type object"); Exit<0>:=Nil;
end end.
� ¡®ç ï ¯¥à¥¬¥ ï P - 㪠§ â¥«ì ¡«¨¦ ©è¨© ®å¢ âë¢ î騩 ¡«®ª. �¥à¥å®¤ï ®â ¡«®ª ®â ¡«®ªã, ¨é¥¬ ®¡ê¥ªâ ¢ ¥£® á।¥. …᫨ ¥ 諨, â®, ¥á«¨ ¡«®ª - ¯à®æ¥¤ãà , ¯¥à¥©â¨ ª ®å¢ âë¢ î饩. …᫨ ¤®è«¨ ¤® £à ¨æë ¬®¤ã«ï, ¯®¯ëâ âìáï ©â¨ ®¡ê¥ªâ ¢ ¯à¥¤®¯à¥¤¥«¥®© ª®¬¯®¥â¥. …᫨ ®¡ê¥ªâ 諨, ¤® ã¡¥¤¨âìáï, çâ® ® - ⨯.
‡ ¢¨á¨¬®á⨠âਡã⮢ ¤¥à¥¢¥ à §¡®à ¯à¨¢¥¤¥ë à¨á. 6.5.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ ³
³ Block | Env<ÄÄÄÄÄÄÄÄ¿
³ ³ ³
³ ³ ³
³ Dec_List ³
³ ³ ³
³ ³ ³
³ Declaration ³
³ ³ \ ³
³ ³ \ ³
³ ³ Block ³
³ ÚÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄ>Env ³
v ³ ³ ³
ÚÄÄÄÄÄ> Imp_Set | Mod_Head | Exp_Set<Ä¿
³ ³ \ ³
³ ³ \ ³
³ Imp_List \ ³
³ ³ \ ³
³ ÚÄÄÄÄÄÄÄÄÄÄÁÄÄÄ¿ Export ³
³ ³ ³ ³ ³
³ Import Import ÃÄÄÄÄÄÄÄÄ¿ ³
³ /³ Imp_Set ³ ³ ³ ³
³ / ³ ^ ³ ³ ³ ³
³ From ³ ³ ³ Ident Ident ³
³ ³ ³ ³ ³ | | ³
³ ³ ³ ³ ³ v v ³
³<ÄÄIdent ³ ³ ³ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
³ ÚÄÄÄÄÁÄÄ¿ ³ ÚÄÄÄÄÁÄÄÄ¿
³ ³ ³ ³ ³ ³
³ Ident Ident ³ Ident Ident
³ | | ³ ³ ³
³ v v ³ ³ ³
³ ÄÄÄÄÄÄÄÄÄÄÄÙ v v
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
�¨á. 6.5