close

Вход

Забыли?

вход по аккаунту

?

Трансляция фрагментов исходных текстов программ с использованием спецификаций синтаксиса и семантики языков программирования.

код для вставкиСкачать
??? 004.4'41
?. ?. ????, ?. ?. ????????
╩лрзкзшз ?кл?окмк ркрзбо
к збс?кк шт???нблк? ?? ?©у
шн. юб?ослзс??, 134, ╩?мшзрм, 664033, ?сррк?
Email: saukham@gmail.com, hmelnov@icc.ru
?????????? ?????????? ???????? ??????? ????????
? ?????????????? ???????????? ?????????? ? ?????????
?????? ????????????????
??????????????? ?????? ?????????????? ?????????? ?????????? ???????? ??????? ???????? ? ?????? ????????????? ????? ???????????????? ?? ??????. ??? ??????? ?????? ???????????? ???????????? ?????????? ?
????????? ?????? ????????????????. ??? ???????? ?????????? ??????????? ?????????? YACC, ??? ????????
????????? ???????? ??????????? ????????? ??????????? ????. ???????? ???????????, ??????????????? ?
?????? ??????, ???????? ??????, ??????????? ???????? ?????????? ????????? ????????????? ??? ???????? ????????? ?????????? ???????? ?? ????????????? ?????????? ? ????????? ???????? ???????????. ???????????
???????? ??? ??????????? ?????????? ????????????? ??????? ???????? ??????????? ???????? ????????? ??????????????? ?????????? ?????? ????????????????.
???????? ?????: ???????????? ??????????, ???????????? ??????????, ???????????? ?????????.
???????? ? ?????????? ??????
? ??????????? ?????????????? ?????????? ???????? ??????? ? ?????? ????? ???????????????? ?? ?????? ???????????? ??????? ??????????? ? ???? ???????, ????? ???????? ?????????? ?????????? ??????, ?. ?. ? 60-? ??. XX ?. ?????? ????????? ???? ?????? ????????? ??????, ??? ?? ??????? ??? ??????????? ??? ?????? ?? ?????????? ?? ??? ???. ????? ?? ??????? ?
??????????, ??????? ?????? ????????? ???????????, ?????? ???????? ???, ???????? ????,
??????? ??? ?? ???? ??????? ??? ???????????? ????????? ???????. ???????, ?????????? ?
?????? ????? ?? ?????? ????? ???????? ????? ?? ?????? ?????? ?????????? ????? ????????????????, ?? ??? ???? ???????? ???? ??????????????? ??? ????? ???????????????, ? ??????? ?
??? ??????????????, ? ????????? ?????????? ?? ???????????? ??? ?????????? ???????????
???? ???????. ??????? ????????????? ?????????? ??? ?????????? ?????: C ? ?????????,
Fortran ? C ([1]), Java ? JavaScript (GWT 1). ????????? ???????? ??????????????? ??????
???????? ???????? ?????? ?????????? ??? ??????? ??????????? ?????????? ??? ?????? ????
?????? 2.
????? ??????? CodeSX (Code Semantics eXplorer), ???????????? ?????? ?? ??????????? ???????? ????????? ?????? ??????, ???????? ?????????? ???????????? ??? ????????????? ????-
1
Google Web Toolkit. URL: https://developers.google.com/web-toolkit/
?????? ?. ?. ?????????? ? ???????????? ???????????????? ??????? ????????????? ??????????: ???. ?
????. ????. ????. ????????, 2005. 266 ?.
2
???? ?. ?., ???????? ?. ?. ?????????? ?????????? ???????? ??????? ???????? ? ?????????????? ???????????? ?????????? ? ????????? ?????? ???????????????? // ?????. ???????. ???. ??-??. ?????: ??????????????
??????????. 2013. ?. 11, ???. 3. ?. 53?62.
ISSN 1818-7900. ╛брзлкм у??. ?б?к?: ╩лыс?о??кслл?б зб?лснс?кк. 2013. ?со 11, ??тшрм 3
╘ ©. ц. ??ш?, ©. ?. ?обн╦лс?, 2013
54
©. ц. ??ш?, ©. ?. ?обн╦лс?
??? ????? ??????? ? ????????????? ???????? ??????? ????????. ???????????? ??????? ???????? ??? ???????????????, ?. ?. ????????????????? ?? ?? ?????????? ???? ????????????????, ?
?? ????? ????, ??????? ????? ???? ?????? ? ?????? ????????????? ???????.
??? ?????? ??????? ?? ????????????? ???????????? ?????????? ? ????????? ?????? ????????????????. ? ???????? ???????????? ?????????? ??????????? ?????????? YACC 3. ?????????? YACC ???????? ??????????? ????, ??????? ?? ?????????? ????? ????????????????,
?????????? ??????? ?????? ?? ???????????? ??? ?????????? ??????????? ????? (? ?????????
??? C, ?? ???? ?????? YACC ? ??? ?????? ??????), ?????????? ??? ??????????? (?????????? ?
???? ????????? ???? ?? ???????? ??????????). ??? ???? ????? ???????? ??????? ??????????,
??????????????? ??? ????????? ??????????????. ??????? ?????? ?? ????? ?????????? (??????????? ???) ????????? ????????, ??????????? ??? ?????? ???????????, ? ??? ????? ?????????? ????????? ???????? ???????????. ?????????? YACC ???? ??????? ??? ????????????? ? CodeSX ??-?? ?? ??????? ????????????: ??? ??????????? ?????? ????????????????
????? ????? ??????? ??????????, ??????? ???????? ? ??????????? ??? ?? ??????????.
? ??????? ?? YACC ? CodeSX ??? ?????? ?????????? ????? ?? ??????????? ????????? ???? ? ?????? ????? ???????? ?????????? ????????????? ???????????? ? ??? ??????????, ???
?????? ??????? ??????? ????? ????????? ?????????????? ?????? ??????? ?? ????????? ????? ????????????????. ??? ???? ? ????? ?????????? ????? ????? ??????????? ???????????
??? ??? ???????? ????????? ???????? ???????????. ??? ???????? ????????? ?????????????
????? ? CodeSX ?????????? ??????????? ????, ??????????? ?????????? ????? ??????????????
???????? ???????????, ??? ???????????? ? ????? ???????????? ??????????????? ??????, ???????????? ?? ???????????? ????, ??????????? ??????????????, ? ????? ????????? ??????????
???? ??? ???????????? ?????????? ?? ??????????????? ??????. ???? ???????? ????????? ?
CodeSX ???????????? ? ?????? ??????? ?? ???????????? ????? ????????????????. ? ?????????????? ???????????? ?????????? ? ????????? ????? ???????????????? ??????? CodeSX
????? ?????? ??? ????? ??????????? ? ??????? ????, ??????????? ?? ???? ????? [2]. ??? ????
???????????? ???????????? ? ?????? ???????????: ????????????? ???????? ??????????? ??
???? ?????? ?????? ? ??????? ?????????? ???????? ???????.
??? ??????? ?????? ?????????? ? ?????? (?????????) ????? ?? ?????? (???????) ????? ??????? ????????? ???????? ????????? ??????, ??????????? ????????? ????, ???????????????
?? ???????? ?????, ?????? ????? ?????????? ????????????? ??? ?? ??????? ????? ?? ???? ??????????. ??? ????????? ???? ??????? ???????????? ???????????? ?????????? ? ?????????
???????? ????? ? ???????? ???????????: ????? ???????, ??????????? ???????? ????????????? ????????, ????????? ?? ???????? ?????????, ? ???????????? ?? ??? ????? ?? ???????
?????. ?????????? ??????? ????? ???????? ????? ? ??????? ????? ??? ??????? ??? ???????????? ???????? ? ???????? ??????. ???? ?? ?????????? ??????? ??? ????????? ???????????
????????? ?? ?????????, ?? ????? ????????? ????????????? ?????????????? ?????????? ????????????? ???????????, ?. ?. ?? ????????????? ????? ????? ??????? ???????????, ??? ??????? ???????????? ??? ????? ???? ???????.
?????? ???????? ? ????????? ???????? ?????? ???????????????? ???????? ??????????
????? ?????????? ??????????. ???, ? C-???????? ?????? ?????????? ????? ???? ????????? ?
????? ?????, ? ? ????? ??????? ? ?????? ? ?????? ?????????. ??? ????????????? ???? ???????? ????????? ??????????? ???????? ????????? ???????? ????????? ?????????? ? ?????????? ?????????? ??????????.
?????? ?????? ????????? ?????? ???????????, ?????????? ??? ???????????? ???????????? ????????????? ??????? ? ?????????? ???????? ? ?????????????? ???????????? ?????????? ? ????????? ?????? ????????????????. ???????? ?? ??????? ???????? ???????? ?????????? ???????????? ??? ????????? ???? ? ???????????? ?????????? ????????????, ???????
????????? ??????? ??? ??????????? ?????? ????? ?????????.
?? ????? ????, ???????? ????? ??????? ???????????????? ?? ?????? ??????? ?? ????????
? ????? ??????????????: ???????? ?????????? ? ??????? ????? ????? ????????? ??? ??????????, ?????????????? ? ????????, ????????, ?????????????? ????????????, ????????, ???????? ??????, RTTI ? ?. ?. ??? ?????????? ????? ?????? ??????? ????????? ?????????????
?????????????????? ?????????? ? ??????? ??????????, ??????????? ????????????? ??????????? ????????????????. ???????? ?????? ?? ?????????? ? ?????? ?????? ? ????????
3
Johnson S. C. Yacc: Yet Another Compiler-Compiler. URL: http://dinosaur.compilertools.net/yacc/
???лрн??к? ы???облзс? кр?с?л?? збмрзс? т?с???оо
55
?????????????? ???????? ???????? ????????????? ???????????? ??????????????? ??????
????????????????.
? ????? ? ???? ? ?????? ??????????????? ?????? ???????????? ??????????? ??????? CodeSX
? ??????????????? ???????????; ??????????? ??????????? ??????????? ???????????? ????,
????? ??????? ?????????? ??????????, ??????????? ?????? ????????? ????????? ????; ??????????????? ?????? ????? ?????????????? ???????, ???????? ????????? ????; ??????????
??????? ?????? ??????? ?? ????????? ?????????? C-????????? ? ???????-????????? ?????.
???? ???????????? ???????
? ??????????? ??????? YACC-?????????? ???????? ? ????????? ? ?????????? ?????? ?????, ?? ??????? ?????????? Lex 4 ?????????? ??? ???????????? ???????????. ???? ????????????
??????? CodeSX ???????? ?? ?????? ?????????? ??????????? ???????????? Lex ? ?????????
???????????????? ????? ???????? ?????? ????????? ? ????? ??????, ???????? ?? ??????????
???????????? ??????? ????? ????????????????. ? ??????? ?? ????????????? ?????????? ??
???????????? ?????????? ???? ???????????. ? ?????? ????????? Lex ?????? ????????? ??
????? ??????????, ??????????? ???????????? ????? ?????????? ?????? ??????? ?? ????????
??????. ??? ????????????? Lex ??? ???????? ??????????? ??????? ????? ?? ????? C ? ??????????????? ?????? ? ????? ?????? ???????????. ? CodeSX ??? ???????? ??????????? ??
??????????? ?????????? ????? ? ????? ???? ????????? ? ????????? ??? ??????????? ???????? ???????????.
???? ???????????? ??????? ??????? ?? ?????????????? ???????????? ???????????, ?????????? ???????????? ? ??????????? ??????????? ?????????. ??????????? ?????????? ???????????? ????? ????????????????? ???????? ???????, ??????????? ???????? ???, ??????????
??? ? ???? ?????? ????????. ??????? ????????? ??? ????? ??? ??????????? ???????????
???????????? ??????????????? ? ?????? ?? ?????? ???????? ??????? ???????? ????? ????????????????. ??????? ????? ??? ???? ??????????? ??? ?????????? ??????????, ??? ???????
??????????? ????????? ?????????????? ????????, ??????? ?????? ????????? ??????????, ????? ????????? ?? ??????? ?????? ??????????????? ??????. ???? ????? ????????, ? ???? ???????, ???????????????? ???????????? ??????????? ?????????. ??????????, ????????
??????????? ?????????, ????????? ???????? ????? ???????????? ????????, ? ????? ????????? ??????????? ?????? ?????? ??????????? (?????????? ???????????? ????????? ???????????? ?????? ?????????? ????? ???????, ????? ? ?????? ??????? ?????????? ???????????
?????? ?????? ?????????? ?????????).
???????????? ???????????? ??????? ?????????? ?? ???????????? ??????????????? ??????? ? ????????? ???????????? ??????? ???????????????, ?? ???? ?? ????????? ?????????????? ????????????.
???? ??????????????? ???????
???? ??????????????? ???????, ? ???? ???????, ??????? ?? ?????????? ?????????????? ???????????? YACC ?, ??? ?? ??? ? ???? ???????????? ???????, ???????? ????????????? ?????????????? ??????????, ????????? ???????????? ??? ????? ??????????? ? ?????????? ??????????? ?????????. ???????????? ??????? ?????? ?????????? ??? ????????????? ??????
???????, ??? ????????? ???????? ?????????? ???? ??????????? ? ??????????? ????????? ???
?????????? ???????.
?????????????? ?????????? ???????????? ????? ???????? ??????? ? ?????????? ??????? ?
???????? ????????? ??????????? ?? ???????????? ??????????? ????? ???????????? ????????,
??????? ?? ??? ?????? ?????????????? ?????? ? ????????? ?? ?????????? ???, ??????????? ?
????????????? ????? ???????. ??????? ????????? ??? ???????? ???????? ??????????? ???????????? ?? ????????? LALR(1) [2], ??? ????????? ?????? ??????????? ????????? ???????
????? ??????????-????????? ????????? ?, ?????????????, ??????? ????? ??????? ???????????? ?????? ????????????????.
?????????? ???????? ????????????? ? ???? ?????? ?????? ??????, ??? ??????? ???????
?????????????? ???? ????, ???????????? ????????????? ?????? ???????. ?????? ????? ????
4
The Lex & Yacc Page. URL: http://dinosaur.compilertools.net/
56
©. ц. ??ш?, ©. ?. ?обн╦лс?
??????? ?? ?????????? ????????????? ??????. ????????? ????? ??????????? ???????????????
??? ??????? ???????????? ???????? ?????? ?? ???????????????? ???????, ?. ?. ??? ?????????? ??????????????? ??????, ????????? ? ??? ??????????? ??? ???????, ? ????????? ???????????? ??? ????????????? ??????????????? ? ?????????????? ???????? ? ????????? ????.
???????????? ? ???????? ?????? ??? ?????? ? ???????? ????? ??????????? ??????????????
?????? ???????? ??????????????? ?? ???????? ??????? ??????????. ? ???????? ???? ?????
??????????? ????? ?????????? ? ???????????? ??????????. ??? ???? ??? ???????? ?????? ?
????????? ?????? ? ??????? ????, ???????????? ??? ??????? ?? ??????????? ????????
(?. ?. ???????? ? ???????????? ???????? ? ?????? ?????), ????????? ?????? ? ??????, ???? ?
???? ?????? ?????-???? ??????????? ???. ? ????????? ?????? ?????? ????? ????? ???????????? ?? ???????????????? ????, ??? ????????? ?????????? ????????? ????? ?????? ??????.
??????????? ???????????? ????
??? ??? ???? ???????, ??????? ??????? ? ?????????? ?????????????? ???? ???? ?? ??????????? ?????. ???? ??? ????????? ????????? ???????? ??????, ?????????????? ?????????????? ? ????????????? ??????????? ? ?????????? ????. ?????? ????? ???? ??????? ??
?????????? ????????????? ??????, ?????? ?? ??????? ??????????? ?? ????? ???????
??????????. ?? ?????? ?????? ?????????? ????????? ????????????? ?????.
? Syntax ? ??????????? ?? ????? ???????????? ??????????????? ??????, ????? ????? ????,
??? ??? ??????????? ?????????????? ????. ? ?????? ????? ????????? ???????? ?????????????? ?? Yacc ?????? ??????????????? ??????????? (accept, abort, clearLookahead, errLab ?
errOk), ? ????? ?????????????? ?????????????? ???? ??????-???? ??????????.
? Matching ? ??????????? ?? ????? ????????????? ?????????????? ??????????? ? ??????????????. ??? ? ???? ?????? ??? ??? ? ?????????, ? ????? ????????????? ???????? ????? ??????????? ?????????? ?????????????? ????.
? Resolving ? ?????????? ?? ????? ?????????? ??????????????? ? ??????????? ????. ??? ?
????? ?????? ????????? ????????, ??????? ?????? ??????????? ??????????, ????? ??????????
????? ?????????? ??? ????? ?????????? ???????????? ??? ?????????.
? Generation ? ??????????? ?? ????? ????????? ??????????????? ????. ?????????? ? ????? ?????? ??? ???????? ?????????? ????? ????????? ??????????????? ??????????????? ???.
?????????? ????????? ?????? ?????????? ????????? ???????.
? ???????, ?? ???? ??????????? ??????????? ?????????????? ????????????, ???????????
????? Syntax ? Matching. ? ????? ?????? ????????? ??????????????? ?????? ??? ?????????? ??
??????? ? ?????, ?. ?. ????? ??????? ??????????, ???????? ╚????????? ???????╩, ?????
??????????? ????????? ? ??? ????? Syntax ? Matching ???? ????? ????????? ??????????.
? ?????, ????? ???? ??? ?????????????? ?????? ????????? ?????????, ?????????? ??? ????? ?? ????? ? ??????? ? ?????????? ????? Resolving, ?????? ?????? ????? ?????, ???? ??
???????? ??? ???????, ????? ???? ??????????? ?????????? ????? Resolving ???????? ?????????, ??? ????????? ????????? ???????? ??????????.
? ?? ????????? ?????, ????? ??????? ??? ??????????? ?????????? ?? ???????? ?????????, ???????? ?????????????? ????????????? ?? ??????? ?????. ??? ?????????? ??? ?????? ???????????? ????.
? ??????????? ???? ?????????? ? ????????? ???? ?? ??????????? ??????????????? ?????? ??? ???????? ?????. ?? ?????? ?????, ????? ?? ????? ? ???????, ?????????? ??????????
?????? Generation. ???? ??? ??????-?? ??????? ?? ?????? ???? ????, ?? ????????? ?? ????????? ???????? ????? ???? ????????? ?????? ????? ??????? ????? ??????.
????, ?????????????? ??? ???????? ???? ???? ????????, ????? C-???????? ????????? ?
???????????? ?????????? ??????????, ???????? ?????????, ??????? ?????????????? ????????
? ?????? ???????? ???????.
???? ?????????????? ???????
????? ???? ??? ???????? ??? ??? ???????? ?? ????????? ????????? ? ?? ??? ???? ????????? ?????????????? ??????, ???????? ???????? ???? ?????????????? ???????. ???? ???? ???????? ?? ?????????? ???????????? ?? ????? ????????????? ?????????, ??????? ? ??????????
????????????? ??????? ? ?????????????? ??????, ?? ??? ?? ?????? ?????????? ????????????.
???лрн??к? ы???облзс? кр?с?л?? збмрзс? т?с???оо
57
?? ????? ???????????, ? ??????? ?????? ???? ??????????? ?????????? ??????????????
????, ???????? ??????????? ??? ?????? Matching. ????????????? ??????????? ????? ?????
?????????, ??????? ???? ????? ???????? ?????????????? ?????????????. ????????, ????????????? ??????????? ╚?????????????? ????????╩ ????? ????? ????? ?????????, ??? ╚????????╩, ╚?????? ???????╩ ? ╚?????? ???????╩ (?????? ????????? ???????? ╚+╩ ? ╚?╩, ????????? ????????? ? ???????? ???????? ?????? ????????????? ???????????). ????? ???????, ??
?????? ????? ???????? ? ???????? ??????????? ?????? ?????????, ??????? ?????? ????? ????? ??????? ? ?????-?? ????? ? ?????? ??????????.
???????? ????? ????????? ??????. ????? ???? ????????? ??????????, ? ??????? ?????????? ??????????? expr, statement, statements ? lexem (???. 1), ? ?? ???? ??????????? ????????
????????? ?????:
A = 15 + 10 * (23 - 35);
B = ?A + 123;
????? ???? ????? ????? ???????? ? ?????????????? ??????, ?????????????? ?? ???. 2, ???????? ????? ???????????? ????????????? ??????, ?????????????? ?? ???. 3.
expr
: expr '+' expr {Matching: {$$ <-> new #Plus(first: #1, second: #3);}}
| expr '-' expr {Matching: {$$ <-> new #Minus(first: #1, second: #3);}}
| expr '*' expr {Matching: { $$ <-> new #Mult(first: #1, second: #3);}}
| expr '/' expr {Matching: { $$ <-> new #Div(first: #1, second: #3);}}
| '(' expr ')'{Matching: { $$ <-> #2; }}
| '-' expr {Matching: { $$ <-> new #UnaryMinus(first: #2); }} %prec UMINUS
| lexem {Matching: { $$ <-> #1; }};
statements
: statement {
Syntax: { $$.MarkAsList(element: $1); }
Matching: { $$ <-> new #List(element: #1); }
Generation: { WriteLine($1); }
}
| statements statement {
Syntax: { $$.MarkAsList(parent: $1, element: $2); }
Matching: { $$ <-> new #List(parent: #1, element: #2); }
Generation: {
Write($1);
WriteLine($3);
}};
statement : ID '=' expr ';'
{
Matching: { $$ <-> new #Assignment(id: #1, value: #3); }
Resolving: {
var %id = Context.Lookup(name: $1.lexVal);
if (%id == undefined)
Context.Add(
name: $1.Get(name: "value"),
val: new Variable(type: $1.Get(name: "value"))
);
}};
lexem
: NUM {Matching: { $$ <-> new #Literal(lexVal: $1.lexVal); }}
| ID {
Syntax: { $$.Set(value: $1.lexVal); }
Matching: { $$ <-> new #VariableAccess(lexVal: $1.lexVal); }
Resolving: {
var %id = Context.Lookup(name: $1.lexVal);
if (%id == undefined)
Error(message: "Undeclared identifier usage");
else
%id.RegisterUsage(target: ##);
}};
???. 1. ?????? ???????? ?????????? ? ????????? ?????????
58
©. ц. ??ш?, ©. ?. ?обн╦лс?
???. 2. ?????? ??????????????? ??????
???. 3. ?????? ?????? ?????????
?? ?????????????? ??????? ?????, ??? ?????????? ??????????????? ?????? ?????????? ?????????????, ?? ????????? ?????????? ? ???????????? (? ???????? ???????? ????? ??????????????? ?????? ??????????????? ???????????? ????? ???????????? ??????????). ??????????
?? ?????? ????? ????????? ?????? ??? ?????????????? ??????????? ??????? ? ????????, ???
???????? ? ?????? Syntax ???????????? ???? ????? ?????? ??? ??????????? statements.
? ??? ??? ?????????? ?????????????? ?????? ??? ????????? ?????????? ? ??? ??????? ??????? ??????? ????? Matching, ? ??????? ? ??????????, ????? ???? ??????????????? ?????? ????????? ?????????? ? ???????????. ???? ???? ???? ? ??????????? ???? ??????? ?? ???????????,
?? ?????????? ?? ????????? ???????? ?????????? ??????????????? ???? ? ????????????? ????? ??????? ???????? ?????? ????? ??????? ($$ <-> #1).
?????? ?????????????? ??????, ?? ?????? ?????????? ?? ????? ??????? ? ??????? ????
?????? Resolving ??????????? ?????????? ? ?????????? ???? ? ?????????? ? ?????????????
????????? ????????? (????????, ?????????? ? ????????). ?? ????????? ???? ??????????
???????????? ?????????? ???? ??????????????? ? ????????? ? ?????????? ?????? ?? ??????????, ????? ?????, ?? ????? ????????? ?????? ??????????, ??? ?????????? ??????????, ???????? ? ?. ?. ????????? ?????? ???????? ???????? ??????????, ??? ??? ??????????? ???????
?? ?????????????.
????? ????????? ?????????? ? ???????? ?????????? ????????? ??? ????, ????? ???????????
?????????? ????? ???????, ? ??????? ????????? ?????? ???????? ??? ??????????? ????? ?
????????? ?????????, ??? ????????? ????????? ??????????????. ????????, ? ????? Pascal
???лрн??к? ы???облзс? кр?с?л?? збмрзс? т?с???оо
59
?????????? ?????????? ????????? ?????? ? ?????? VAR, ???????????? ????? ????? ????????????, ????? ??? ? C-???????? ?????? ????????? ?????????? ????? ????? ? ?????? ???? ??
?? ??????? ?????????????.
? ??????????????? ??????? ????? ?????? ? ???????????, ??????????? ? ???????????
?????????? ???????? ? ?????? Resolving ???????????? ???? ??? ???????????? statement ?
lexem.
????????? ????
???? ????????? ???? ????????? ?????????? ??????????? ?? ????? ?????????????, ?????????? ?? ????? ?????????????? ???????, ????? ? ?????????????? ??????, ?? ??? ?? ??????
?????????? ????????????. ???????? ??? ? ??????? ?????? ? ?????????? ?? ???????? ??????? ??????????.
?? ?????? ????? ????????? ??????????????? ??? ????????: ??????? ???? ??????????????
??????, ??? ??? ???????? ????? ?????????????, ? ????????? ??????????? ???? ??????????????? ??????. ????????? ?????????? ? ????? ??????????????? ?????? ? ?????????? ??????????? ??????????.
?? ?????? ???? ??? ???????? ??????????? ??????????? ????? ???? ?????? ??????????, ?
??????? ???? ?????????? ????????? ? ????? ????? ??????? (???. 4). ????? ????????? ??????
??????????? ? ???????????. ??????? ????????????? ??? ???????, ?????????????? ???? ? ??????? ?????????????? ? ?????????????? ?????????????, ?? ???????????????? ??????? ???????????????. ????? ? ?????? ??????? ???????????? ?????????? ??? ???????, ???????????
????, ??????????????? ??????????????? ???????? (???? Matching ????? ??? ?$$ <-> new
#Name(params);?, ??? Name ? ??????? ????????????? ??????????? ? ????? ?????????? ????????????? ?????? ???????? ?????????). ????? ??? ? ??????? ?????????? ??? ?????????? ???????.
??????????? ????? ???????? ???????, ? ??????? ?? ?????????? ???????? ?????? ?????????????? ????: ? ??? ?????????????? ???? ??????????? ? ????????????? ?????, ??? ?????????????? ? ?????-?? ??? ???????? ????? (?. ?. ???? Matching ????? ??? ?$$ <-> #N?, ??? N ? ?????
???????? ? ?????? ????? ???????). ?????????? ??????? ?????? ??????????????? ???????????????, ? ??? ??????? ??????????? ?????? ????? ??????? ?????????? ???????????? ???????
????????????? ? ??????????? ??????????????? ????????????? ???????????.
??????????? (SN /*???? ?????????????? ??????*/, NT /*??????????*/):
RL.????????(); // ?????? ??????-??????????
?? ???? ???????? R ??? ????? ????? == NT:
???? (R ???????? SN ??? R ?????????? /* $$ <-> #N */) ??:
RL.????????(R);
RL.???????????({??????? ???????, ??????????? SN, ????? ??????????});
?? ???? ????????? R ?? RL:
???? R ?????????? ??
Res := ???????????(SN, R.????????????());
???? Res ?? nil ??:
??????? Res;
?????
RCS.????????(); //?????? ??????????????? ???????? ?????????????? ?????
RCS.????????(R.???????????????????????????????????????());
?? ???? CS ?? ???????? ????????? SN:
ChildIndex := R.???????????????????(CS);
Child := ???????????(CS, RCS[ChildIndex]);
???? (Child.???????()) ??
RCS[ChildIndex] := Child;
?????
????????? ????????? R;
Res := ?????????????????????????(???: R.??????????, ????: RCS);
??????? Res;
??????? nil;
????? ???????????;
???. 4. ????????? ????????? ????????????? ??????? ???? ?????????????? ??????.
????????? ╚???????????╩ ?????????? ??????????? ?????? ??? nil ??? ???????
60
©. ц. ??ш?, ©. ?. ?обн╦лс?
? ?????????? ?????????? ?????????????? ?????? (?? ???????????, ?? ????? ????????????
???????????), ??????????????? ???????????? ??????? ??????????. ????????? ???? ?? ?????? ?????? ? ??????????? ??????, ?????? ? ??? ???? ???? ????????? ?????. ? ?????????,
????? ?? ??????? ???????? ????????? ??????? ??????????, ???????? ??????? ?????????? ?
???????????? ??????? ?????. ?? ?????? ?????? ??? ???????? ???????? ??????????????
?????? Generation ???????????? ????.
???? ???????????? ???????? ???????? ?????? ?? ?????????????, ??? ??? ?????? ??????????? ??????? ????? ???????, ?. ?. ?????????????? ????? ???????? ??????? ??????????.
? ?????????? ??????????? ???????????? ???????????? ????????????? ?????????????? ????????????? ??????????? ??? ?????????? ???????????? ?????? ?????? ??????????. ????????, ??? ?????????? ? ??????? ????? ??????????? ??????????? ??? ????????? for ?? ?????
???? ??????????? ? ????????? ????? ????? ?????????????? ????????? ?, ? ???????? ?????,
???????????? ? ??? ? ?????? while.
??????? ?????? ???????????
? ???????? ????????? ??? ???????????? CodeSX ?????????????? ??? ????????? ?????
???????????????? (C-like ? P-like). ? ?????? ??????? ????? ????????? ????? C#, ? ??????
??????? ? ????? Pascal. ??? ???????????? ????????? ????????? ???? ????? ?????????? ???????? ??????? ? ?????? ????? ?? ?????? ??????????? ????????? ???? ?? ??? ?? ????? ??
??????????? ?????????.
?????????? ?????? ???? ?? C-like (???. 5). ????????? ?????????? ? C-like ????? ?? C-like
??? ????? ?????? ??????? ?? ???. 6, ? ????????? ?????????? ? C-like ????? ?? P-like ? ?? ???. 7.
??? ???????? ?????????? ??????????? ?????? ? P-like ?? C-like ????????? ?????????? ?????
??, ??? ??? ?????????????? C-like ? ?-like (??. ???. 6).
{
{
int a, b;
a = 10;
b = 22 + a * 12;
int c;
c = a+b*(19 - 23);
if (a > b) {
c = a*b;
int q;
q = 23 + c;
c = q - 1;
} else
c = a;
int a, b, c;
a = 10;
b = 22 + a * 12;
c = a + b * (19 - 23);
if (a > b) {
int q;
c = a * b;
q = 23 + c;
c = q - 1;
} else
c = a;
}
}
???. 5. ?????? ???? ?? C-like
???. 6. ????????? ?????????? ? ????? C-like ?? C-like
VAR a, b, c, q: int;
BEGIN
a := 10;
b := 22 + a * 12;
c := a + b * (19 - 23);
if a > b then
BEGIN
c := a * b;
q := 23 + c;
c := q - 1
END
else
c := a
END.
???. 7. ????????? ?????????? ? ????? C-like ?? P-like
???лрн??к? ы???облзс? кр?с?л?? збмрзс? т?с???оо
61
?? ?????? ????? ?????????? ???????? ??????????? ??????????? ???????? ??????????
???????? ?????????? ??????????, ??? ????? ?????????? ?? ??????? ?????????? a, b, c ? q.
????? ?????? ????????? ??????, ??? ? ????? P-like ???????????? ?????????? ??????????
???????? ?????????? ???????? ?????????, ? ??????????? ?????????? ?????????? ?????????
? ???????????? ?????:
file : declarations semicolons compound_statement DOT {
Syntax: { Accept(); }
Matching: { $$ <-> new #Program(code: #3, declarations: #1); }
Resolving: {
var %context = new LocalContext();
##.Set(context: %context);
Context.Push(context: %context);
$1.Process();
$3.Process();
Context.Pop();
}
Generation: { WriteLine($1, ";"); WriteLine($3, "."); }
} ;
? C-like ????? ???? ? ????????? ???????? ???????? ???? ??????????? ????????, ??????
?????????? ????????? ?????, ???????? ???????? ???????? ?????????? ?????????? ?? ?? ?????????????:
block
: '{' '}' {Matching: { $$ <-> new #Block(); } }
| '{' statement_list '}'
{ Matching: { $$ <-> new #Block(statements: #2); }
Resolving: {
var %context = new LocalContext();
##.Set(context: %context);
Context.Push(context: %context);
$2.Process();
Context.Pop();
}
Generation: {
WriteLine($1);
IncIndent();
WriteLine($2);
DecIndent();
Write($3);
} };
????? ???????, ??? ??????????? ?????????? ??? ????? P-like ??? ?????????? ?????????? ? ?????? ?????????, ? ??? C-like ????? ?????????? ?????????? ???????????? ? ?????? ?????? ????????? ?????, ???????????? ??????? ????????????? ???? ??????????.
??????????
?? ?????? ?????? ??????????? ??????????? ????????, ??????????? ??????????? ?????????? ????????? ???? ? ?????? ?????????? ????? ?? ?????? (??? ??????? ???????????? ???
?????, ???? ?? ??????? ????? ?? Pascal, ? ?????? ? ?? C) ? ??????????? ?????????? ???????????? ?? ??????????. ??????????? ?????? ???? ????? ??????????, ??? ?? ??? ? ??????????? ???????????, ?? ??????? ???????????????? ???????????.
???????????? ????????????? ????????????? ??????? ? ?????????? ???????????, ??????????? ?? ????????????? ???????????? ?????????? ? ????????? ????????? ?????? ???????????????? ??? ????????????? ???????? ???????????? ???? ??? ?????????? ????? ?????????? ????? ??????, ???????? ??????????? ????? ?????? ????????????: ??? ??????? ?? n
?????? ? ??????????? ?????????? ??????? ? ?????? ????????? ??????????? ?? n*(n ? 1)
????????????, ? ?????? n. ????? ???????, ?????????? ???????????? ?????? ?????, ???????????? ?? ????????? ? ??? ??????????, ????????? ?????????? ???? ???????????? ?????
????? ? ??? ?????????? ???????.
62
©. ц. ??ш?, ©. ?. ?обн╦лс?
?????????? ???????????? ???????????? ??????????????? ??????? ? ?????????? ???????? ?????????? ??????????, ??????????? ??????? ?????????? ?? ???????? ????????? ??????
? ??????? ?????????? ??????? ?? ???????? ????????? ?????? ????????????????.
?????? ??????????
1. A Fortran-to-C Converter / S. I. Feldman, D. M. Gay, M. W. Maimone, N. L. Schryer.
Comp. sci. tech. rep. ? 149. AT\&T Bell Laboratories. 26 p.
2. ???? ?. ?. ?????? ????????? ????????????? ???????? ???????? ??????? ???????? ??
?????? ?????????? ???????????? ?????????? ? ????????? // SIBECRYPT-12. ??????????
?????????? ??????????. ???????, 2012. ? 5 (????.). ?. 110?111.
3. ???????? ??., ??????? ?., ?????? ??. ???????? ? ?????? ?????????, ?????? ?
?????????? = Introduction to Automata Theory, Languages, and Computation. ?.: ???????,
2002. ??. 5: ??????????-????????? ?????????? ? ?????.
???????? ???????? ? ??????????? 03.06.2013
A. M. Saukh, A. E. Hmelnov
SOURCE CODE FRAGMENTS TRANSLATION BASED ON PROGRAMMING LANGUAGES SYNTAX
AND SEMANTICS SPECIFICATIONS
A problem of automatic source code fragments translation from one imperative language to another is considered in
this article. Formal specifications of syntax and semantics are used to solve it. Yacc grammars are used for syntax description and the special language is introduced to describe semantics of language constructions. The main result concerned in
this article is an approach to find matching textual representations of program fragments semantics using language syntax
and semantic specifications. It is supposed that involved languages and their semantics are close enough.
Keywords: Formal language translation, syntax specification, semantics specification.
References
1. A Fortran-to-C Converter / S. I. Feldman, D. M. Gay, M. W. Maimone, N. L. Schryer. Comp. sci. tech. rep. ? 149.
AT\&T Bell Laboratories. 26 p.
2. Sauh A. M. Analiz nekotoryh semanticheskih aspektov ishodnyh tekstov programm na osnove formalnyh specifikaciy sintaksisa i semantiki // SIBECRYPT-12. Prikladnaya diskretnaya matematika. Irkutsk, 2012. ? 5 (pril.).
S. 110?111.
3. Hopkroft Dzh., Motvani R., Ulman Dzh. Vvedenie v teoriu avtomatov, yazykov i vychisleniy = Introduction to
Automata Theory, Languages, and Computation. M.: Vilyams, 2002. Gl. 5: Kontekstno-svobodnye grammatiki i yazyki.
1/--страниц
Пожаловаться на содержимое документа