Fwd: [Introspector-developers] Example SQL and XML of DOTGNU/CSCC/csnodes.c
Status: Beta
Brought to you by:
mdupont
|
From: James M. D. <mdu...@ya...> - 2002-04-18 22:57:43
|
Dear Sirs, Please excuse the follwing cross posting. I know that it is frowned apon, but I hope that you find the following mail interesting. Originally it was meant for the dotGNU mailing list, but I think that it is of relevance to this list. Please come and join the int...@so... mailing list for a open discussion about creating an GPLD/Free-Software reverse engineering and program understanding toolchain. Mike --- James Michael DuPont <mdu...@ya...> wrote: > From: James Michael DuPont <mdu...@ya...> > To: dev...@do... > CC: int...@so..., > gvo...@vo... > Subject: [Introspector-developers] Example SQL and > XML of DOTGNU/CSCC/csnodes.c > Date: Thu, 18 Apr 2002 15:24:34 -0700 (PDT) > > Dear Fellow DotGNUers, > > I have done the first step in actually *Doing* > something for DotGNU and towards a bridge between > the > gcc and pnet and not just thinking and talking > about > what I want to do all the time. > > Taking the csnodes.c and running it through the > introspector for one. Tweaking and *SIMPLIFING* the > database model so that you can probably run in on > *ANY* sql database server. Putting it all on a > server > that you can download and play with. > Sorry that the last release from me did not have any > documentation or tips on how to use it. One has to > be > carefull, the asts are very BIG and hard to use. But > we will get there :=) > > I have reduced the database mode down to 3 tables > > *node_base > contains the ID and the type of the node > > *node_attr > contains the ID of the node, type and value of > the > attribute. > > *node_usage > contains the fromid, toid , types of nodes and > type > of relationship > > With these three tables you have a full graph of the > parse tree of the c# compilers node structure. > > The SQL for the tables is located on > http://introspector.sourceforge.net/dotgnu/simple.sql > > The data for inserting into the database you will > find > in a gz sql file here : > http://introspector.sourceforge.net/dotgnu/____global.xml.sql.gz > > The XML that was dumped you will find here : > http://introspector.sourceforge.net/dotgnu/____global.xml.gz > (If you are interested in parsing the XML yourself ) > The XML has the following structure: > > <xmlroot> # the root of the document > > # tells you what file that was compiled to get these > nodes > <xml_cfile name= NAME OF SOURCE FILE/> > > # each tree node in the parse tree produces such > a > xml entry > <node idx=NUMBER OF NODE > node_name=TYPE OF NODE > > > # RELATIONSHIPS - each relation to a different > node is contained inside of the NODE element > < # EACH RELATION is an entity of one of > the following types > name | type | unql | size | min | max | args > | > prms | scpe | flds | body | chan | valu | > op_0 | op_2 | val | purp | next > > > idx="THE ID OF THE OTHER NODE" > ref_node_name="THE TYPE OF OTHER NODE TYPE" > /> > > # ATTRIBUTES SOME of the following attributes > might be set : > <strg>THE VALUE OF A STRING</strg> > <srcl>SOURCE LINE</srcl> > <srcp>SOURCE FILE</srcp> > <prec>PRECISION</prec> > <algn>ALIGNMENT</algn> > <built_in>ALIGNMENT</built_in> > <low>LOW BYTE of a Constant</low> > <high>LOW BYTE of a Constant</high> > <lngth>Length of a string</lngth> > <qualconst>is const</qualconst> > <qualrest>?forgot for now :(</qualrest> > <qualvol>is volitile</qualcol> > <str>SOME TYPE OF PARAMETER FOR THE NODE (extern > for functions, struct for records)</str> > > </node> > # MANY OTHER NODEs may follow > </xmlroot> > > I am also testing a simple query language for > accessing the nodes. more about that next time. > > The files are located here : > http://introspector.sourceforge.net/dotgnu/ > > I hope that you can use these files and find them > helpfull. Next step is to create a cross reference > table between the GCC and the CSCC cores. > > Following are two example queries that show you the > power of the database. > > Mike > > First is a list of all the identifiers of > record_types > who name begin with IL > introspector_simple=# > > select distinct > value > from > node_usage u, > node_attr a , > node_base b > where > a.attr_type = 'strg' and > a.value like '"IL%' > and a.id=b.id > and u.to_id = b.id > and u.usage = 'name' > and u.from_type = 'record_type'; > > value > ---------------------------------------- > "ILNode_AddressOf__" > "ILNode_AddressOf_vtable__" > "ILNode_ArrayAccess__" > "ILNode_ArrayAccess_vtable__" > "ILNode_ArrayInit__" > "ILNode_ArrayInit_vtable__" > "ILNode_AsIs__" > "ILNode_AsIs_vtable__" > "ILNode_Assign__" > "ILNode_Assign_vtable__" > "ILNode_AttrArgs__" > "ILNode_BaseAccess__" > "ILNode_BaseAccess_vtable__" > "ILNode_BaseElement__" > "ILNode_BaseElement_vtable__" > "ILNode_BinaryArith__" > "ILNode_BinaryArith_vtable__" > "ILNode_BinaryBitwise__" > "ILNode_BinaryBitwise_vtable__" > "ILNode_BinaryExpression_vtable__" > "ILNode_BinaryShift__" > "ILNode_BinaryShift_vtable__" > "ILNode_CastSimple__" > "ILNode_CastSimple_vtable__" > "ILNode_CastType__" > "ILNode_CastType_vtable__" > "ILNode_Concat__" > "ILNode_Concat_vtable__" > "ILNode_Constant__" > "ILNode_Constant_vtable__" > "ILNode_DecimalType__" > "ILNode_DerefField__" > "ILNode_DerefField_vtable__" > "ILNode_Deref__" > "ILNode_Deref_vtable__" > "ILNode_DocComment__" > "ILNode_DocComment_vtable__" > "ILNode_DummyBinaryExpr__" > "ILNode_DummyBinaryExpr_vtable__" > "ILNode_DummySem_vtable__" > "ILNode_DummyUnaryExpr__" > "ILNode_DummyUnaryExpr_vtable__" > "ILNode_Dummy_vtable__" > "ILNode_Expression_vtable__" > "ILNode_FixAddress__" > "ILNode_FixAddress_vtable__" > "ILNode_FixExpr__" > "ILNode_FixExpr_vtable__" > "ILNode_FixedDeclList_vtable__" > "ILNode_Identifier__" > "ILNode_Identifier_vtable__" > "ILNode_IndexerAccess__" > "ILNode_IndexerAccess_vtable__" > "ILNode_IsNonNull__" > "ILNode_IsNonNull_vtable__" > "ILNode_IsNull__" > "ILNode_IsNull_vtable__" > "ILNode_LValueBinaryExpr_vtable__" > "ILNode_LValueNoRefUnaryExpr__" > "ILNode_LValueNoRefUnaryExpr_vtable__" > "ILNode_LValueNoRef_vtable__" > "ILNode_LValueUnaryExpr_vtable__" > "ILNode_LValue__" > "ILNode_LValue_vtable__" > "ILNode_List_vtable__" > "ILNode_LocalVariableType__" > "ILNode_LocalVariableType_vtable__" > "ILNode_LogicalAnd__" > "ILNode_LogicalAnd_vtable__" > "ILNode_LogicalNot__" > "ILNode_LogicalNot_vtable__" > "ILNode_LogicalOr__" > "ILNode_LogicalOr_vtable__" > "ILNode_MemberAccess__" > "ILNode_MemberAccess_vtable__" > "ILNode_MemberField__" > "ILNode_MemberField_vtable__" > "ILNode_MemberProperty__" > "ILNode_MemberProperty_vtable__" > "ILNode_NamedArg__" > "ILNode_NamedArg_vtable__" > "ILNode_Namespace__" > "ILNode_Namespace_vtable__" > "ILNode_Neg__" > "ILNode_Neg_vtable__" > "ILNode_NoOverflow__" > "ILNode_NoOverflow_vtable__" > "ILNode_NoPedantic__" > "ILNode_NoPedantic_vtable__" > "ILNode_Overflow__" > "ILNode_Overflow_vtable__" > "ILNode_Pedantic__" > "ILNode_Pedantic_vtable__" > "ILNode_PostDec__" > "ILNode_PostDec_vtable__" > "ILNode_PostInc__" > "ILNode_PostInc_vtable__" > "ILNode_PreDec__" > "ILNode_PreDec_vtable__" > "ILNode_PreInc__" > "ILNode_PreInc_vtable__" > "ILNode_QualIdent__" > "ILNode_QualIdent_vtable__" > "ILNode_Relational__" > "ILNode_Relational_vtable__" > "ILNode_Statement__" > "ILNode_Statement_vtable__" > "ILNode_StaticField__" > "ILNode_StaticProperty__" > "ILNode_StaticProperty_vtable__" > "ILNode_ToBool__" > "ILNode_ToBool_vtable__" > "ILNode_ToConst__" > "ILNode_ToConst_vtable__" > "ILNode_TypeSuffix__" > "ILNode_TypeSuffix_vtable__" > "ILNode_UnaryExpression_vtable__" > "ILNode_Unsafe__" > "ILNode_Unsafe_vtable__" > "ILNode_UserBinaryOp__" > "ILNode_UserBinaryOp_vtable__" > "ILNode_UserConversion__" > "ILNode_UserConversion_vtable__" > "ILNode_UserIncOrDec__" > "ILNode_UserIncOrDec_vtable__" > "ILNode_UserLogical__" > "ILNode_UserLogical_vtable__" > "ILNode_UserPostDec__" > "ILNode_UserPostDec_vtable__" > "ILNode_UserPostInc__" > "ILNode_UserPostInc_vtable__" > "ILNode_UserPreDec__" > "ILNode_UserPreDec_vtable__" > "ILNode_UserPreInc__" > "ILNode_UserPreInc_vtable__" > "ILNode_UserUnaryOp__" > "ILNode_UsingAlias__" > "ILNode_UsingAlias_vtable__" > "ILNode_UsingNamespace__" > "ILNode_UsingNamespace_vtable__" > "ILNode__" > "ILNode_vtable__" > > > Following is an example query that shows you what > type > of nodes point to what other types of nodes in the > current data set (It is loading right now, so not > finished yet). As you can see there is a lot of > information about the tree nodes as records and > fields. 1020 fields in the database, not bad! > > introspector_simple# select > from_type,to_type,usage,count(*) from node_usage > group > by from_type,to_type,usage order by count(*) desc; > from_type | to_type | usage | count > ---------------+-----------------+-------+------- > field_decl | identifier_node | name | 1020 > field_decl | integer_cst | size | 1020 > field_decl | record_type | scpe | 1007 > field_decl | field_decl | chan | 917 > field_decl | pointer_type | type | 754 > tree_list | tree_list | chan | 737 > function_decl | function_type | type | 512 > function_decl | identifier_node | name | 512 > tree_list | pointer_type | valu | 495 > function_decl | function_decl | chan | 485 > type_decl | type_decl | chan | 345 > function_type | integer_cst | size | 322 > function_type | tree_list | prms | 319 > record_type | field_decl | flds | 265 > record_type | integer_cst | size | 265 > tree_list | void_type | valu | 260 > type_decl | identifier_node | name | 258 > field_decl | integer_type | type | 229 > type_decl | record_type | type | 207 > integer_cst | integer_type | type | 193 > record_type | identifier_node | name | 182 > pointer_type | integer_cst | size | 165 > record_type | record_type | unql | 152 > tree_list | integer_type | valu | 152 > integer_type | integer_cst | max | 140 > integer_type | integer_cst | min | 140 > integer_type | integer_cst | size | 140 > function_type | integer_type | retn | 133 > type_decl | integer_type | type | 129 > integer_type | type_decl | name | 121 > integer_type | integer_type | unql | 106 > pointer_type | record_type | ptd | 105 > record_type | type_decl | name | 103 > function_type | pointer_type | retn | 91 > var_decl | identifier_node | name | 78 > function_type | void_type | retn | 71 > var_decl | integer_cst | size | 71 > var_decl | var_decl | chan | 69 > const_decl | enumeral_type | type | 65 > const_decl | identifier_node | name | 65 > tree_list | identifier_node | purp | 64 > tree_list | integer_cst | valu | 64 > const_decl | const_decl | chan | 60 > var_decl | integer_type | type | 44 > pointer_type | integer_type | ptd | 26 > type_decl | function_decl | chan | 24 > var_decl | pointer_type | type | 24 > function_decl | type_decl | chan | 19 > tree_list | enumeral_type | valu | 19 > pointer_type | pointer_type | unql | 18 > pointer_type | function_type | ptd | 17 > field_decl | union_type | scpe | 13 > tree_list | real_type | valu | 13 > field_decl | enumeral_type | type | 12 > function_type | real_type | retn | 12 > enumeral_type | integer_cst | max | 11 > enumeral_type | integer_cst | min | 11 > enumeral_type | integer_cst | size | 11 > enumeral_type | tree_list | csts | 11 > field_decl | record_type | type | 11 > parm_decl | function_decl | scpe | 11 > parm_decl | identifier_node | name | 11 > parm_decl | integer_cst | size | 11 > type_decl | enumeral_type | type | 11 > array_type | integer_cst | size | 9 > array_type | integer_type | domn | 9 > field_decl | array_type | type | 9 > pointer_type | type_decl | name | 9 > type_decl | pointer_type | type | 9 > array_type | integer_type | elts | 8 > complex_type | integer_cst | size | 8 > complex_type | type_decl | name | 8 > function_decl | parm_decl | args | 8 > function_decl | var_decl | chan | 8 > function_type | record_type | retn | 8 > pointer_type | void_type | ptd | 8 > type_decl | complex_type | type | 8 > parm_decl | pointer_type | argt | 7 > parm_decl | pointer_type | type | 7 > pointer_type | pointer_type | ptd | 7 > type_decl | real_type | type | 7 > var_decl | function_decl | chan | 7 > enumeral_type | enumeral_type | unql | 6 > enumeral_type | type_decl | name | 6 > real_type | integer_cst | size | 6 > real_type | type_decl | name | 6 > tree_list | complex_type | valu | 6 > type_decl | const_decl | chan | 6 > var_decl | array_type | type | 6 > const_decl | type_decl | chan | 5 > function_type | enumeral_type | retn | 4 > function_type | function_type | unql | 4 > function_type | type_decl | name | 4 > parm_decl | integer_type | argt | 4 > parm_decl | integer_type | type | 4 > tree_list | record_type | valu | 4 > type_decl | function_type | type | 4 > var_decl | record_type | type | 4 > void_type | type_decl | name | 4 > array_type | pointer_type | elts | 3 > function_type | complex_type | retn | 3 > parm_decl | parm_decl | chan | 3 > real_type | real_type | unql | 3 > type_decl | var_decl | chan | 3 > type_decl | void_type | type | 3 > void_type | void_type | unql | 3 > array_type | record_type | elts | 2 > field_decl | real_type | type | 2 > field_decl | union_type | type | 2 > integer_type | identifier_node | name | 2 > pointer_type | real_type | ptd | 2 > string_cst | array_type | type | 2 > union_type | field_decl | flds | 2 > union_type | integer_cst | size | 2 > var_decl | string_cst | init | 2 > var_decl | type_decl | chan | 2 > boolean_type | integer_cst | size | 1 > boolean_type | type_decl | name | 1 > type_decl | boolean_type | type | 1 > type_decl | union_type | type | 1 > > > > > __________________________________________________ > Do You Yahoo!? > Yahoo! Tax Center - online filing with TurboTax > http://taxes.yahoo.com/ > > _______________________________________________ > Introspector-developers mailing list > Int...@li... > https://lists.sourceforge.net/lists/listinfo/introspector-developers ===== James Michael DuPont __________________________________________________ Do You Yahoo!? Yahoo! Tax Center - online filing with TurboTax http://taxes.yahoo.com/ |