example1.cc

Go to the documentation of this file.
00001 /*
00002    The lestes compiler suite
00003    Copyright (C) 2002, 2003, 2004, 2005 Miroslav Tichy
00004    Copyright (C) 2002, 2003, 2004, 2005 Petr Zika
00005    Copyright (C) 2002, 2003, 2004, 2005 Vojtech Hala
00006    Copyright (C) 2002, 2003, 2004, 2005 Jiri Kosina
00007    Copyright (C) 2002, 2003, 2004, 2005 Pavel Sanda
00008    Copyright (C) 2002, 2003, 2004, 2005 Jan Zouhar
00009    Copyright (C) 2002, 2003, 2004, 2005 Rudolf Thomas
00010 
00011    This program is free software; you can redistribute it and/or modify
00012    it under the terms of the GNU General Public License as published by
00013    the Free Software Foundation; version 2 of the License.
00014 
00015    This program is distributed in the hope that it will be useful,
00016    but WITHOUT ANY WARRANTY; without even the implied warranty of
00017    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018    GNU General Public License for more details.
00019 
00020    See the full text of the GNU General Public License version 2, and
00021    the limitations in the file doc/LICENSE.
00022 
00023    By accepting the license the licensee waives any and all claims
00024    against the copyright holder(s) related in whole or in part to the
00025    work, its use, and/or the inability to use it.
00026  
00027  */
00028 #include <lestes/common.hh>
00029 
00030 #include <lestes/std/list.hh>
00031 #include <lestes/lang/cplus/sem/ss_misc.g.hh>
00032 #include <lestes/lang/cplus/sem/ss_declaration.g.hh>
00033 #include <lestes/lang/cplus/sem/ss_decl_name.g.hh>
00034 #include <lestes/lang/cplus/sem/ss_statement.g.hh>
00035 #include <lestes/lang/cplus/sem/ss_type.g.hh>
00036 #include <lestes/lang/cplus/sem/ss_type_builtin.g.hh>
00037 #include <lestes/lang/cplus/sem/ss_expression.g.hh>
00038 #include <lestes/lang/cplus/sem/ss_expr_binary_op.g.hh>
00039 #include <lestes/lang/cplus/sem/ss_expr_unary_op.g.hh>
00040 #include <lestes/lang/cplus/sem/ss_expr_funcall.g.hh>
00041 #include <lestes/lang/cplus/sem/ss_enums.g.hh>
00042 #include <lestes/lang/cplus/sem/ss_literal_info.g.hh>
00043 #include <lestes/lang/cplus/sem/or_or.g.hh>
00044 
00045 #include <lestes/backend/backend.g.hh>
00046 
00047 #include <lestes/std/dumper.hh>
00048 #include <lestes/msg/logger.hh>
00049 #include <fstream>
00050 #include <iostream>
00051 
00052 using namespace ::lestes::msg;
00053 
00054 package(lestes);
00055 package(lang);
00056 package(cplus);
00057 package(sem);
00058 
00059 
00060 using namespace ::lestes::std;
00061 
00062 extern void ss2pi_start(ptr< ss_translation_unit >);
00063 extern void summary_seq_points(ptr< ss_sp > x);
00064 int man(){
00065 
00066 //ptr<ss_compound_stmt> cmps1;// = ss_compound_stmt::create();
00067 
00068 ptr<ss_translation_unit> tu = ss_translation_unit::create( ss_decl_seq::root_instance() );
00069 
00070 #define NOINIT ss_decl_stmt::IK_DEFAULT_INITIALIZATION
00071 
00072 typedef  ::lestes::std::list< srp< ss_declaration > >  listdecl;
00073 typedef  ::lestes::std::list< srp< ss_type > >  listtype;
00074 typedef  ::lestes::std::list< srp< ss_statement > >  liststmt;
00075 typedef  ::lestes::std::list< srp< ss_label > >  listlbl;
00076 typedef  ::lestes::std::list< srp< ss_expression > >  listexpr;
00077 typedef  ::lestes::std::list< srp< ss_se > >  listse;
00078 typedef  ::lestes::std::list< srp< ss_sp > >  listsp;
00079 
00080 
00081 ptr<ss_sp> sp13= ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00082 ptr<ss_sp> sp12= ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00083 ptr<ss_sp> sp11= ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00084 ptr<ss_sp> sp10= ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00085 ptr<ss_sp> sp9 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,1);
00086 ptr<ss_sp> sp8 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,1);
00087 ptr<ss_sp> sp7 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00088 ptr<ss_sp> sp6 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00089 ptr<ss_sp> sp5 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00090 ptr<ss_sp> sp4 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00091 ptr<ss_sp> sp3 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00092 ptr<ss_sp> sp2 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00093 ptr<ss_sp> sp1 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00094 
00095 
00096 ptr<ss_decl_seq> ds1 = ss_decl_seq::root_instance();
00097 /* commented out by Rudo
00098 ptr<ss_decl_seq> ds1 = ss_decl_seq::create(
00099                 NULL,   //location
00100                 listdecl::create(),     //decl_seq
00101                 NULL,   //parent
00102                 NULL,   //compound
00103                 NULL,   //using dir
00104                 NULL    //declaration
00105         );
00106 */
00107 
00108 ptr<ss_compound_stmt> cs1 = ss_compound_stmt::root_instance();
00109 /* commented out by Rudo
00110 ptr<ss_compound_stmt> cs1 = ss_compound_stmt::create(
00111                 NULL,   //location
00112                 listlbl::create(),      //labels
00113                 NULL,   //parent
00114                 NULL,   //psp
00115                 NULL,   //nsp
00116                 listsp::create(),       //sps
00117                 NULL,   //decl
00118                 liststmt::create()      //statements
00119                         );
00120 */
00121                         
00122 ptr<ss_function_declaration> fd1 = ss_function_declaration::create(
00123         NULL,   //loc
00124         ss_declaration_time::create(0), //visible
00125         ss_declaration_time::create(0), //declt time
00126         NULL,   //name
00127         NULL,   //contain scope
00128         NULL,   //type
00129         NULL,   //linkage
00130         NULL,   //params
00131         NULL    //body
00132         //false,        //pure virtual
00133         //false,        //virtuality
00134         //false         //ellipsis
00135         );
00136 
00137 ptr<ss_ordinary_name> on1 = ss_ordinary_name::create(NULL,"main");
00138 
00139 ptr<ss_type> sint = ss_type_sint::instance();
00140 
00141 ptr<ss_function> tfun1 = ss_function::create(sint,listtype::create(),false);
00142 
00143 ptr<ss_decl_seq> ds3 = ss_decl_seq::create(NULL,listdecl::create(),ds1,NULL,NULL,NULL);
00144 
00145 ptr<ss_decl_seq> ds2 = ss_decl_seq::create(NULL,listdecl::create(),ds3,NULL,NULL,NULL);
00146 
00147 ptr<ss_compound_stmt> cs3 = ss_compound_stmt::create(NULL,listlbl::create(),cs1,NULL,NULL,listsp::create(),ds3,liststmt::create(),NULL);
00148 
00149 ptr<ss_compound_stmt> cs2 = ss_compound_stmt::create(NULL,listlbl::create(),cs3,sp1,sp7,listsp::create(),ds2,liststmt::create(),sp6);
00150 
00151 ptr<ss_decl_stmt> dst1 = ss_decl_stmt::create(NULL,listlbl::create(),cs2,sp2,sp3,listsp::create(),NULL,listexpr::create(),NOINIT);
00152 
00153 ptr<ss_object_declaration> od1 = ss_object_declaration::create(NULL,ss_declaration_time::create(0),ss_declaration_time::create(0),NULL,NULL,sint,NULL,ss_declaration_time::infinity(),NULL);
00154 
00155 ptr<ss_ordinary_name> on2 = ss_ordinary_name::create(NULL,"i");
00156 
00157 ptr<ss_expr_stmt> est1 = ss_expr_stmt::create(NULL,listlbl::create(),NULL,sp4,sp5,listsp::create(),NULL);
00158 
00159 ptr<ss_assign> as1 = ss_assign::create(NULL,sint,sp4,sp5,NULL,NULL);
00160 
00161 ptr<ss_se> ase1 = ss_se::create(NULL,NULL,sp4,sp5);
00162 
00163 ptr<ss_var_ref> var1 = ss_var_ref::create(NULL,sint,sp4,sp5,NULL);
00164 
00165 ptr<ss_literal_info> linfo1 = ss_integral_literal_info::create(sint,"1");
00166 
00167 ptr<ss_literal> lit1 = ss_literal::create(NULL,sint,sp4,sp5,NULL); 
00168 
00169 ptr<ss_decl_stmt> dst2 = ss_decl_stmt::create(NULL,listlbl::create(),cs1,NULL,NULL,listsp::create(),NULL,listexpr::create(),NOINIT);
00170 
00171 ptr< ss_se > fse2 = ss_se::create(NULL,NULL,sp8,sp9);
00172 
00173 ptr< ss_funcall > fc1 = ss_funcall::create(NULL,sint,sp8,sp9,listexpr::create(),NULL);
00174 
00175 ptr<ss_expr_stmt> est2 = ss_expr_stmt::create(NULL,listlbl::create(),cs2,sp6,sp7,listsp::create(),NULL);
00176 
00177 
00178 
00179 
00180 
00181 ptr<ss_decl_stmt> dst3 = ss_decl_stmt::create(NULL,listlbl::create(),cs3,NULL,NULL,listsp::create(),NULL,listexpr::create(),NOINIT);
00182 
00183 ptr< ss_parameter_declaration > dpar1 = ss_parameter_declaration::create(NULL,ss_declaration_time::create(0),ss_declaration_time::create(0),NULL,NULL,sint,NULL,ss_access_specifier::ACCESS_PUBLIC,ss_storage_class::ST_NONE,ss_declaration_time::infinity(),NULL,0);
00184 
00185 ptr< ss_ordinary_name > on3 = ss_ordinary_name::create(NULL,"j");
00186 
00187 ptr< ss_get > get1 = ss_get::create(NULL,sint,sp8,sp9,NULL);
00188 
00189 ptr< ss_var_ref > var2 = ss_var_ref::create(NULL,sint,sp6,sp8,NULL);
00190 
00191 ptr< ss_fake_declaration > fake1 = ss_fake_declaration::create(NULL,ss_declaration_time::create(0),ss_declaration_time::create(0),NULL,NULL,sint,NULL,ss_access_specifier::ACCESS_PUBLIC,ss_storage_class::ST_NONE,NULL);
00192 
00193 ptr< ss_compound_stmt_declaration > csd1 = ss_compound_stmt_declaration::create(NULL,ss_declaration_time::create(0),ss_declaration_time::create(0),NULL,NULL,NULL,NULL,cs2);
00194 
00195 
00196 ptr< ss_get > get2 = ss_get::create(NULL,sint,sp10,sp11,NULL);
00197 
00198 ptr< ss_var_ref > var3 = ss_var_ref::create(NULL,sint,sp10,sp11,NULL);
00199 
00200 ptr< ss_return > ret1 = ss_return::create(NULL,NULL,cs2,sp10,sp11,listsp::create(),NULL);
00201 
00202 ptr< ss_get > get3 = ss_get::create(NULL,sint,sp10,sp11,NULL);
00203 
00204 ptr< ss_var_ref > var4 = ss_var_ref::create(NULL,sint,sp10,sp11,NULL);
00205 
00206 ptr< ss_add > add1 = ss_add::create(NULL,sint,sp10,sp11,NULL,NULL);
00207 
00208 ptr< ss_linkage > link1 = ss_linkage::create("C",ss_linkage::LINKAGE_EXTERNAL);
00209 
00210 //**************************************************************************************************************************
00211 
00212 //Rudo: tu->global_scope_set(ds1);
00213 
00214 tfun1->params_get()->push_back(sint);
00215 
00216 ds1->contents_get()->push_back(fd1);
00217 //Rudo: ds1->compound_stmt_set(cs1);
00218 
00219 //Rudo: cs1->decl_seq_set(ds1);
00220 cs1->statements_get()->push_back(dst2);
00221 
00222 //Rudo: dst2->parent_set(cs1);
00223 dst2->decl_set(fd1);
00224 
00225 fd1->name_set(on1);
00226 fd1->type_set(tfun1);
00227 fd1->body_set(cs2);
00228 fd1->contained_in_set(ds1);
00229 fd1->parameters_set(ds3);
00230 fd1->linkage_set(link1);
00231 
00232 //Rudo: cs2->parent_set(cs1);
00233 //Rudo: cs2->decl_seq_set(ds2);
00234 cs2->statements_get()->push_back(dst1);
00235 cs2->statements_get()->push_back(est1);
00236 cs2->statements_get()->push_back(est2);
00237 cs2->statements_get()->push_back(ret1);
00238 
00239 
00240 //Rudo: ds2->parent_set(ds1);
00241 ds2->compound_stmt_set(cs2);
00242 ds2->contents_get()->push_back(fake1);
00243 ds2->contents_get()->push_back(od1);
00244 ds2->declared_by_set(csd1);
00245 
00246 //Rudo: dst1->parent_set(cs2);
00247 dst1->decl_set(od1);
00248 
00249 od1->contained_in_set(ds2);
00250 od1->name_set(on2);
00251 
00252 est1->expression_set(as1);
00253 est1->sequence_points_get()->push_back(sp4);
00254 est1->sequence_points_get()->push_back(sp5);
00255 
00256 as1->left_set(var1);
00257 as1->right_set(lit1);
00258 //as1->side_effect_set(ase1);
00259 
00260 ase1->from_set(as1);
00261 
00262 var1->var_decl_set(od1);
00263 
00264 lit1->value_set(linfo1);
00265 
00266 est2->expression_set(fc1);
00267 est2->sequence_points_get()->push_back(sp6);
00268 est2->sequence_points_get()->push_back(sp7);
00269 est2->sequence_points_get()->push_back(sp8);
00270 est2->sequence_points_get()->push_back(sp9);
00271 
00272 fc1->function_set(fd1);
00273 fc1->args_get()->push_back(get1);
00274 
00275 fse2->from_set(fc1);
00276 
00277 
00278 
00279 ds3->compound_stmt_set(cs3);
00280 ds3->contents_get()->push_back(dpar1);
00281 ds3->declared_by_set(fd1);
00282 
00283 cs3->statements_get()->push_back(dst3);
00284 
00285 dst3->decl_set(dpar1);
00286 
00287 dpar1->name_set(on3);
00288 dpar1->contained_in_set(ds3);
00289 
00290 get1->expr_set(var2);
00291 
00292 var2->var_decl_set(fake1);
00293 
00294 fake1->real_decl_set(dpar1);
00295 fake1->name_set(on3);
00296 fake1->contained_in_set(ds2);
00297 
00298 
00299 get2->expr_set(var3);
00300 
00301 var3->var_decl_set(fake1);
00302 
00303 ret1->result_set(add1);
00304 ret1->sequence_points_get()->push_back(sp10);
00305 ret1->sequence_points_get()->push_back(sp11);
00306 
00307 get3->expr_set(var4);
00308 
00309 var4->var_decl_set(fake1);
00310 
00311 add1->left_set(get2);
00312 add1->right_set(get3);
00313 
00314 
00315                   sp1->nsp_set(sp2);
00316 sp2->psp_set(sp1);sp2->nsp_set(sp3);
00317 sp3->psp_set(sp2);sp3->nsp_set(sp4);
00318 sp4->psp_set(sp3);sp4->nsp_set(sp5);sp4->nse_get()->push_back(ase1);
00319 sp5->psp_set(sp4);sp5->nsp_set(sp6);sp5->pse_get()->push_back(ase1);
00320 sp6->psp_set(sp5);sp6->nsp_set(sp7);
00321 sp7->psp_set(sp6);sp7->nsp_set(sp10);
00322 sp8->psp_set(sp6);sp8->nsp_set(sp9);sp8->nse_get()->push_back(fse2);
00323 sp9->psp_set(sp8);sp9->nsp_set(sp7);sp9->pse_get()->push_back(fse2);
00324 sp10->psp_set(sp7);sp10->nsp_set(sp11);
00325 sp11->psp_set(sp10);sp11->nsp_set(sp12);
00326 sp12->psp_set(sp11);sp12->nsp_set(sp13);
00327 sp13->psp_set(sp12);
00328 
00329 
00330 
00331                         //FIXME chybi vyplnene filedy ss.statement.sequence-points
00332 
00333 ::std::ofstream f("example1.xml");
00334 dumper::dump( f, tu );
00335 f.close();
00336 
00337 ss2pi_start(tu);
00338 summary_seq_points(sp1);
00339 lestes::backend::backend::create(::std::cout)->main();
00340 
00341 return 1;
00342 }//man
00343 
00344 
00345 end_package(sem);
00346 end_package(cplus);
00347 end_package(lang);
00348 end_package(lestes);
00349 
00350 
00351 int main(){
00352 
00353 #ifndef unchecked_pointers
00354 //CXXFLAGS+=-Dunchecked_pointers
00355 ::std::cerr<<"Example skipped, checked pointers set.\n";
00356 return 0;
00357 #endif
00358 
00359  logger::init("example1.log.cfg");
00360 
00361  lestes::lang::cplus::sem::man();
00362 }

Generated on Mon Feb 12 18:22:33 2007 for lestes by doxygen 1.5.1-20070107