- Timestamp:
- Mar 28, 2008, 6:06:07 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
to-imperative/trunk/compiler/src/org/refal/plus/compiler/rfp_asail_tpp.rf
r3591 r3596 38 38 $func Namespace_Control e.qualifiers = e.namespace_control; 39 39 40 $func Expr_Ref_To_CPP e.ASAIL_Expr_Ref = e.CPP_Expr_Ref;40 $func Expr_Ref_To_CPP s.tvars_box e.ASAIL_Expr_Ref = e.CPP_Expr_Ref; 41 41 42 42 $func Expr_Int_To_CPP e.ASAIL_Expr_Int = e.CPP_Expr_Int; … … 56 56 $func Cond_To_CPP t.cond = e.CPP_Cond; 57 57 58 $func Infix_To_CPP s.func_for_converting_args_to_cpp s.op e.args = e.cpp_expr;58 $func Infix_To_CPP (e.box) s.func_for_converting_args_to_cpp s.op e.args = e.cpp_expr; 59 59 60 60 $func Trace_Enter e.name (e.args) = e.trace; … … 162 162 <MapIn &Rfp2Cpp (<Paren e.ress>)> :: e.ress, 163 163 <MapIn &Id 'tout Expr ' (e.ress)> :: e.ress, 164 <ASAIL_To_CPP e.body> :: e.body,165 164 <Extract_Qualifiers t.name> :: (e.qualifiers) e, 166 165 <Namespace_Control e.qualifiers> 167 166 ('tfun int '<Name_To_CPP "DECL-FUNC" t.name>' ('<Concat <Intersperse (', ') e.args e.ress>>') {' 168 (e.trace_enter e.bodye.trace_exit ('return 0;'))167 (e.trace_enter <ASAIL_To_CPP e.body> e.trace_exit ('return 0;')) 169 168 '}'); 170 169 (s.tag s.linkage t.name (e.args) (e.ress) e.body), … … 229 228 ('RF_FUNC_ERROR (unexpected_fail);'); 230 229 (LSPLIT e.expr (e.min) t.var1 t.var2) = 231 ('RF_lsplit (' <Expr_Ref_To_CPP e.expr> ', ' <Expr_Int_To_CPP e.min> ', ' 232 <Rfp2Cpp t.var1> ', ' <Rfp2Cpp t.var2> ');'); 230 <Box> :: s.tvars, 231 <Expr_Ref_To_CPP s.tvars e.expr> :: e.expr, 232 <Get s.tvars> ('RF_lsplit ('e.expr', ' <Expr_Int_To_CPP e.min>', ' 233 <Rfp2Cpp t.var1>', '<Rfp2Cpp t.var2>');'); 233 234 (RSPLIT e.expr (e.min) t.var1 t.var2) = 234 ('RF_rsplit (' <Expr_Ref_To_CPP e.expr> ', ' <Expr_Int_To_CPP e.min> ', ' 235 <Rfp2Cpp t.var1> ', ' <Rfp2Cpp t.var2 > ');'); 235 <Box> :: s.tvars, 236 <Expr_Ref_To_CPP s.tvars e.expr> :: e.expr, 237 <Get s.tvars> ('RF_rsplit ('e.expr', '<Expr_Int_To_CPP e.min>', ' 238 <Rfp2Cpp t.var1>', '<Rfp2Cpp t.var2 >');'); 236 239 (ASSIGN t.var e.expr), t.var : (INT e) = 237 240 (<Rfp2Cpp t.var> ' = ' <Expr_Int_To_CPP e.expr> ';'); 238 241 (ASSIGN t.var e.expr) = 239 (<Rfp2Cpp t.var> ' = ' <Expr_Ref_To_CPP e.expr> ';'); 242 <Box> :: s.tvars, 243 <Expr_Ref_To_CPP s.tvars e.expr> :: e.expr, 244 <Get s.tvars> (<Rfp2Cpp t.var> ' = 'e.expr';'); 240 245 (DECL t.var e.expr), t.var : (INT e) = 241 246 ('int ' <Rfp2Cpp t.var> ' = '<Expr_Int_To_CPP e.expr>';'); 242 247 (DECL s.type t.var) = 243 (' Expr ' <Rfp2Cpp t.var> ';');248 ('TExpr ' <Rfp2Cpp t.var> ';'); 244 249 (DECL s.type t.var e.expr) = 245 ('Expr ' <Rfp2Cpp t.var> ' ('<Expr_Ref_To_CPP e.expr>');'); 250 <Box> :: s.tvars, 251 <Expr_Ref_To_CPP s.tvars e.expr> :: e.expr, 252 <Get s.tvars> ('Expr ' <Rfp2Cpp t.var> ' ('e.expr');'); 246 253 (DROP t.var) = 247 254 (<Rfp2Cpp t.var> '.drop ();'); … … 251 258 ('goto ' <Rfp2Cpp (LABEL t.label)> ';'); 252 259 (ERROR e.expr) = 253 ('RF_ERROR (' <Expr_Ref_To_CPP e.expr> ');'); 260 <Box> :: s.tvars, 261 <Expr_Ref_To_CPP s.tvars e.expr> :: e.expr, 262 <Get s.tvars> ('RF_ERROR ('e.expr');'); 254 263 (CONSTEXPR IMPORT (e.name) (e.comment) e.expr) = 255 264 e.name : "org" "refal" "plus" "wrappers" e.n, … … 307 316 ('{' (<Trace_Exit e.full_name (e.ress)> ('return true;')) '}') 308 317 ('else RF_RETFAIL;'); 309 { 310 s.call : "TAILCALL?" = TAILCALL; 311 s.call; 312 } :: s.call, 313 ('RF_' s.call ' (' <Name_To_CPP "DECL-FUNC" t.name> ', ' 314 <Args_To_CPP () Exprs e.exprs> ', ' <Args_To_CPP () Vars e.ress> ');'); 318 //T/ { 319 //T/ s.call : "TAILCALL?" = TAILCALL; 320 //T/ s.call; 321 //T/ } :: s.call, 322 //T/ ('RF_' s.call ' (' <Name_To_CPP "DECL-FUNC" t.name> ', ' 323 //T/ <Args_To_CPP () Exprs e.exprs> ', ' <Args_To_CPP () Vars e.ress> ');'); 324 (<Name_To_CPP "DECL-FUNC" t.name>'(' 325 <Concat <Intersperse (', ') (<Args_To_CPP () Exprs e.exprs>) <MapIn &Rfp2Cpp (<Paren e.ress>)>>> 326 ');'); 315 327 }; 316 328 } :: e.cpp_item, … … 320 332 321 333 322 $func Term_Ref_To_CPP e = e;323 324 Expr_Ref_To_CPP {334 $func Term_Ref_To_CPP s.tvars e = e; 335 336 Expr_Ref_To_CPP s.tvars e.expr = e.expr : { 325 337 /*empty*/ = 'empty'; 326 term = <Term_Ref_To_CPP term>;327 expr = '(' <Infix_To_CPP &Term_Ref_To_CPP "+" <Paren expr>> ')';328 }; 329 330 Term_Ref_To_CPP {338 term = <Term_Ref_To_CPP s.tvars term>; 339 expr = '(' <Infix_To_CPP (s.tvars) &Term_Ref_To_CPP "+" <Paren expr>> ')'; 340 }; 341 342 Term_Ref_To_CPP s.tvars e.arg = e.arg : { 331 343 (PAREN e.expr) = 332 <Expr_Ref_To_CPP e.expr> ' ()';344 <Expr_Ref_To_CPP s.tvars e.expr> ' ()'; 333 345 (DEREF e.expr (e.pos)) = 334 'Expr (' <Expr_Ref_To_CPP e.expr> ', ' <Expr_Int_To_CPP e.pos> ')';346 'Expr (' <Expr_Ref_To_CPP s.tvars e.expr> ', ' <Expr_Int_To_CPP e.pos> ')'; 335 347 (SUBEXPR e.expr (e.pos) (e.len)) = 336 'Expr (' <Expr_Ref_To_CPP e.expr> ', '348 'Expr (' <Expr_Ref_To_CPP s.tvars e.expr> ', ' 337 349 <Expr_Int_To_CPP e.pos> ', ' <Expr_Int_To_CPP e.len> ')'; 338 350 (REF t.name) = <Name_To_CPP "DECL-OBJ" t.name>; … … 363 375 }; 364 376 (LENGTH e.expr) = 365 <Expr_Ref_To_CPP e.expr> '.get_len ()';377 <Expr_Ref_To_CPP <Box> e.expr> '.get_len ()'; 366 378 (MAX e.args) = 367 379 'pxx_max (' <Args_To_CPP () Ints e.args> ')'; … … 369 381 'pxx_min (' <Args_To_CPP () Ints e.args> ')'; 370 382 (INFIX s.op e.args) = 371 '(' <Infix_To_CPP &Expr_Int_To_CPP s.op e.args> ')';383 '(' <Infix_To_CPP () &Expr_Int_To_CPP s.op e.args> ')'; 372 384 (REF t.name) = <Name_To_CPP "DECL-OBJ" t.name>; 373 385 (s.var_tag t.name) = <Rfp2Cpp (s.var_tag t.name)>; 374 expr = '(' <Infix_To_CPP &Expr_Int_To_CPP "+" <Paren expr>> ')';386 expr = '(' <Infix_To_CPP () &Expr_Int_To_CPP "+" <Paren expr>> ')'; 375 387 }; 376 388 … … 381 393 <Args_To_CPP () Vars e.ress> ')'; 382 394 ("SYMBOL?" e.expr (e.pos)) = 383 <Expr_Ref_To_CPP e.expr> '.symbol_at (' <Expr_Int_To_CPP e.pos> ')';395 <Expr_Ref_To_CPP <Box> e.expr> '.symbol_at (' <Expr_Int_To_CPP e.pos> ')'; 384 396 ("FLAT-SUBEXPR?" e.expr (e.pos) (e.len)) = 385 <Expr_Ref_To_CPP e.expr> '.flat_at ('397 <Expr_Ref_To_CPP <Box> e.expr> '.flat_at (' 386 398 <Expr_Int_To_CPP e.pos> ', ' <Expr_Int_To_CPP e.len> ')'; 387 399 ("ITER-FAILS" e.expr) = 388 '!RF_iter(' <Expr_Ref_To_CPP e.expr> ')';400 '!RF_iter(' <Expr_Ref_To_CPP <Box> e.expr> ')'; 389 401 (EQ e.expr1 (e.expr2) (e.pos)) = 390 <Expr_Ref_To_CPP e.expr1> '.eq ('391 <Expr_Ref_To_CPP e.expr2> ', ' <Expr_Int_To_CPP e.pos> ')';402 <Expr_Ref_To_CPP <Box> e.expr1> '.eq (' 403 <Expr_Ref_To_CPP <Box> e.expr2> ', ' <Expr_Int_To_CPP e.pos> ')'; 392 404 ("TERM-EQ" e.expr1 (e.expr2) (e.pos)) = 393 <Expr_Ref_To_CPP e.expr1> '.term_eq (' 394 <Expr_Ref_To_CPP e.expr2> ', ' <Expr_Int_To_CPP e.pos> ')'; 405 '((Expr&)'<Term_Ref_To_CPP <Box> e.expr1>')[0] == ' 406 '((Expr&)'<Term_Ref_To_CPP <Box> e.expr2>')['<Expr_Int_To_CPP e.pos>']'; 407 //T/ <Expr_Ref_To_CPP <Box> e.expr1> '.term_eq (' 408 //T/ <Expr_Ref_To_CPP <Box> e.expr2> ', ' <Expr_Int_To_CPP e.pos> ')'; 395 409 (NOT t.cond) = 396 410 '!' <Cond_To_CPP t.cond>; 397 411 }; 398 412 399 Infix_To_CPP s.arg2cpp s.op e.args, {413 Infix_To_CPP (e.box) s.arg2cpp s.op e.args, { 400 414 e.args : (e.arg) e.rest = 401 <Apply s.arg2cpp e. arg> :: e.arg,402 <Infix_To_CPP s.arg2cpp s.op e.rest> :: e.rest,415 <Apply s.arg2cpp e.box e.arg> :: e.arg, 416 <Infix_To_CPP (e.box) s.arg2cpp s.op e.rest> :: e.rest, 403 417 { 404 418 e.arg : v, e.rest : v = e.arg ' ' s.op ' ' e.rest; … … 409 423 Step_To_CPP { 410 424 /*empty*/ = /*empty*/; 411 ("INC-ITER" e.expr) = 'RF_iter(' <Expr_Ref_To_CPP e.expr> ')++';412 ("DEC-ITER" e.expr) = 'RF_iter(' <Expr_Ref_To_CPP e.expr> ')--';425 ("INC-ITER" e.expr) = 'RF_iter(' <Expr_Ref_To_CPP <Box> e.expr> ')++'; 426 ("DEC-ITER" e.expr) = 'RF_iter(' <Expr_Ref_To_CPP <Box> e.expr> ')--'; 413 427 }; 414 428 … … 491 505 ( ) Vars (e.arg) = <Rfp2Cpp (e.arg)>; 492 506 (e.prefix) Exprs /*empty*/ = '/*void*/'; 493 (e.prefix) Exprs (e.arg) = <Expr_Ref_To_CPP e.arg>;507 (e.prefix) Exprs (e.arg) = <Expr_Ref_To_CPP <Box> e.arg>; 494 508 (e.prefix) s.tag e.args = 495 509 e.args () $iter { … … 501 515 s.tag : { 502 516 Vars = e.rest (e.cpp_args <Rfp2Cpp (e.arg)> e.comma); 503 Exprs = e.rest (e.cpp_args <Expr_Ref_To_CPP e.arg> e.comma);517 Exprs = e.rest (e.cpp_args <Expr_Ref_To_CPP <Box> e.arg> e.comma); 504 518 Ints = e.rest (e.cpp_args <Expr_Int_To_CPP e.arg> e.comma); 505 519 };
Note: See TracChangeset
for help on using the changeset viewer.