From 83c68889eff40411bbef50df0904f3585ed9e2b7 Mon Sep 17 00:00:00 2001 From: jofret Date: Tue, 5 May 2009 13:52:15 +0000 Subject: Split into several files --- macros/ASTManagement/%comment_string.sci | 7 + macros/ASTManagement/%cste_string.sci | 23 ++++ macros/ASTManagement/%equal_string.sci | 16 +++ macros/ASTManagement/%funcall_string.sci | 15 +++ macros/ASTManagement/%ifthenel_string.sci | 27 ++++ macros/ASTManagement/%operatio_string.sci | 13 ++ macros/ASTManagement/%program_p.sci | 198 ----------------------------- macros/ASTManagement/%program_string.sci | 19 +++ macros/ASTManagement/%variable_string.sci | 23 ++++ macros/ASTManagement/%while_string.sci | 14 ++ macros/ASTManagement/for_string.sci | 15 +++ macros/ASTManagement/objectlist2string.sci | 13 ++ 12 files changed, 185 insertions(+), 198 deletions(-) create mode 100644 macros/ASTManagement/%comment_string.sci create mode 100644 macros/ASTManagement/%cste_string.sci create mode 100644 macros/ASTManagement/%equal_string.sci create mode 100644 macros/ASTManagement/%funcall_string.sci create mode 100644 macros/ASTManagement/%ifthenel_string.sci create mode 100644 macros/ASTManagement/%operatio_string.sci create mode 100644 macros/ASTManagement/%program_string.sci create mode 100644 macros/ASTManagement/%variable_string.sci create mode 100644 macros/ASTManagement/%while_string.sci create mode 100644 macros/ASTManagement/for_string.sci create mode 100644 macros/ASTManagement/objectlist2string.sci (limited to 'macros') diff --git a/macros/ASTManagement/%comment_string.sci b/macros/ASTManagement/%comment_string.sci new file mode 100644 index 00000000..a963507d --- /dev/null +++ b/macros/ASTManagement/%comment_string.sci @@ -0,0 +1,7 @@ +function txt=%comment_string(e) +//overloading function for "comment" type tlist string function +//fields: +// text: a string +//this is a leaf of the AST + txt=['Comment : '+e.text] +endfunction diff --git a/macros/ASTManagement/%cste_string.sci b/macros/ASTManagement/%cste_string.sci new file mode 100644 index 00000000..a081461b --- /dev/null +++ b/macros/ASTManagement/%cste_string.sci @@ -0,0 +1,23 @@ +function txt=%cste_string(c) +//overloading function for "cste" type tlist string function +//this is a leaf of the AST +//fields: +// value : a number or a string +//NUT: added cste I also need "" for strings in order to be sure that the blanks are +//NUT: correctly considered and not mistaken with additional blanks present in the ast text file. + stringcvalue = string(c.value); + if (stringcvalue == "%T" | ... + stringcvalue == "%F" | ... + stringcvalue == "%nan" | ... + stringcvalue == "%inf" | ... + stringcvalue == "%pi") + txt=['Number_x: '+stringcvalue]; + elseif (SCI2Cisnum(stringcvalue)) + //NUT needed to convert format 1D-14 into 1d-14 + txt=['Number_x: '+strsubst(stringcvalue,'D','e')]; + elseif (stringcvalue == "%i") + txt=['Number_X: '+stringcvalue]; + else + txt=['String: ""'+stringcvalue+'""']; + end +endfunction \ No newline at end of file diff --git a/macros/ASTManagement/%equal_string.sci b/macros/ASTManagement/%equal_string.sci new file mode 100644 index 00000000..9678f0e0 --- /dev/null +++ b/macros/ASTManagement/%equal_string.sci @@ -0,0 +1,16 @@ +function txt=%equal_string(e) +//overloading function for "equal" type tlist string function +//this is a node of the AST + +//fields: +// expression: "expression" type tlist (the right hand side) +// lhs : list of "variable" type tlist and "operation" type tlist // (the assignment) +// endsymbol : string (the orginal end-of-instruction symbol (, ; )) + txt=['Equal' + ' Expression: ' + ' '+string(e.expression) + ' Lhs : ' + ' '+objectlist2string(e.lhs) + 'EndEqual' + ] +endfunction \ No newline at end of file diff --git a/macros/ASTManagement/%funcall_string.sci b/macros/ASTManagement/%funcall_string.sci new file mode 100644 index 00000000..faeb81d9 --- /dev/null +++ b/macros/ASTManagement/%funcall_string.sci @@ -0,0 +1,15 @@ +function txt=%funcall_string(F) +//overloading function for "funcall" type tlist string function +//this is a node of the AST +//fields: +// rhs : a list +// name : string, the name of the function +// lhsnb: number, the number of function lhs + +txt=['Funcall : '+F.name + ' #lhs : '+string(F.lhsnb) + ' Rhs : ' + ' '+objectlist2string(F.rhs) + 'EndFuncall' + ] +endfunction diff --git a/macros/ASTManagement/%ifthenel_string.sci b/macros/ASTManagement/%ifthenel_string.sci new file mode 100644 index 00000000..6787a87c --- /dev/null +++ b/macros/ASTManagement/%ifthenel_string.sci @@ -0,0 +1,27 @@ +function txt=%ifthenel_string(I) +//overloading function for "ifthenel" type tlist string function +//this is a node of the AST +//fields: +// expression : "expression" type tlist (the if expression) +// then : list of "equal" type tlist and list('EOL') (the +// then instructions list) +// elseifs : a list of tlists +// else : list of "equal" type tlist and list('EOL') (the +// else instructions list) + txt=['If ' + ' Expression:' + ' '+string(I.expression) + ' If Statements' + ' '+objectlist2string(I.then)] + for e=I.elseifs + txt=[txt; + ' Else If Expression' + ' '+string(e.expression) + ' Else If Statements' + ' '+objectlist2string(e.then)] + end + txt=[txt; + ' Else Statements' + ' '+objectlist2string(I.else) + 'EndIf'] +endfunction diff --git a/macros/ASTManagement/%operatio_string.sci b/macros/ASTManagement/%operatio_string.sci new file mode 100644 index 00000000..8421a3f4 --- /dev/null +++ b/macros/ASTManagement/%operatio_string.sci @@ -0,0 +1,13 @@ +function txt=%operatio_string(O) +//overloading function for "operation" type tlist string function +//this is a node of the AST +//fields: +// operands: a list +// operator: a string + txt=['Operation' + ' Operands:' + ' '+objectlist2string(O.operands) + ' Operator: '+O.operator + 'EndOperation' + ] +endfunction \ No newline at end of file diff --git a/macros/ASTManagement/%program_p.sci b/macros/ASTManagement/%program_p.sci index 931f1f17..f45ed69a 100644 --- a/macros/ASTManagement/%program_p.sci +++ b/macros/ASTManagement/%program_p.sci @@ -2,201 +2,3 @@ function %program_p(p) //overloading function for "program" type tlist display mprintf("%s\n",string(p)) endfunction - -function txt=%program_string(p) -//overloading function for "program" type tlist string function -//main (root) node of the Abstract Formal Tree -//fields: -// name : string (the function name) -// outputs : list of "variable" type tlist (the output arg names) -// inputs : list of "variable" type tlist (the intput arg names) -// statements: list of "equal" type tlist and list('EOL') (the -// instructions list) -// nblines : number (the number of lines in the scilab function) - txt=['Program' - 'Name : '+p.name - 'Outputs: '+strcat(objectlist2string(p.outputs),' ') - 'Inputs : '+strcat(objectlist2string(p.inputs),' ') - 'Statements ' - ' '+objectlist2string(p.statements) - 'EndProgram' - ] -endfunction - - -function txt=%equal_string(e) -//overloading function for "equal" type tlist string function -//this is a node of the AST - -//fields: -// expression: "expression" type tlist (the right hand side) -// lhs : list of "variable" type tlist and "operation" type tlist // (the assignment) -// endsymbol : string (the orginal end-of-instruction symbol (, ; )) - txt=['Equal' - ' Expression: ' - ' '+string(e.expression) - ' Lhs : ' - ' '+objectlist2string(e.lhs) - 'EndEqual' - ] -endfunction - - -function txt=%for_string(F) -//overloading function for "for" type tlist string function -//this is a node of the AST -//fields: -// expression : "expression" type tlist (the loop expression) -// statements : list of "equal" type tlist and list('EOL') (the -// for instructions list) -//NUT: raf cambiato ForExpression e ForStatements - txt=['For' - ' ForExpression:' - ' '+string(F.expression) - ' ForStatements:' - ' '+objectlist2string(F.statements) - 'EndFor'] -endfunction - -function txt=%while_string(W) -//overloading function for "while" type tlist string function -//this is a node of the AST -//fields: -// expression : "expression" type tlist (the loop expression) -// statements : list of "equal" type tlist and list('EOL') (the -// while instructions list) - txt=['While' - ' WhileExpression:' - ' '+string(W.expression) - ' WhileStatements:' - ' '+objectlist2string(W.statements) - 'EndWhile'] -endfunction - -function txt=%ifthenel_string(I) -//overloading function for "ifthenel" type tlist string function -//this is a node of the AST -//fields: -// expression : "expression" type tlist (the if expression) -// then : list of "equal" type tlist and list('EOL') (the -// then instructions list) -// elseifs : a list of tlists -// else : list of "equal" type tlist and list('EOL') (the -// else instructions list) - txt=['If ' - ' Expression:' - ' '+string(I.expression) - ' If Statements' - ' '+objectlist2string(I.then)] - for e=I.elseifs - txt=[txt; - ' Else If Expression' - ' '+string(e.expression) - ' Else If Statements' - ' '+objectlist2string(e.then)] - end - txt=[txt; - ' Else Statements' - ' '+objectlist2string(I.else) - 'EndIf'] -endfunction - -function txt=%operatio_string(O) -//overloading function for "operation" type tlist string function -//this is a node of the AST -//fields: -// operands: a list -// operator: a string - txt=['Operation' - ' Operands:' - ' '+objectlist2string(O.operands) - ' Operator: '+O.operator - 'EndOperation' - ] -endfunction - -function txt=%funcall_string(F) -//overloading function for "funcall" type tlist string function -//this is a node of the AST -//fields: -// rhs : a list -// name : string, the name of the function -// lhsnb: number, the number of function lhs - -txt=['Funcall : '+F.name - ' #lhs : '+string(F.lhsnb) - ' Rhs : ' - ' '+objectlist2string(F.rhs) - 'EndFuncall' - ] -endfunction - -function txt=%variable_string(v) - global anscounter; //NUT: just to fix problem with ans variables. -//overloading function for "variable" type tlist string function -//fields: name -//this is a leaf of the AST -//NUT: changed here. For me %i is a number not a variable. - if (v.name == "%T" | ... - v.name == "%F"| ... - v.name == "%nan"| ... - v.name == "%inf"| ... - v.name == "%pi") - txt=['Number_x: '+v.name]; - elseif (v.name == "%i") - txt=['Number_X: '+v.name]; - else - if (v.name == 'ans') - anscounter = anscounter + 1; - txt=['Variable: '+v.name+string(anscounter)]; - else - txt=['Variable: '+v.name]; - end - end -endfunction - -function txt=%cste_string(c) -//overloading function for "cste" type tlist string function -//this is a leaf of the AST -//fields: -// value : a number or a string -//NUT: added cste I also need "" for strings in order to be sure that the blanks are -//NUT: correctly considered and not mistaken with additional blanks present in the ast text file. - stringcvalue = string(c.value); - if (stringcvalue == "%T" | ... - stringcvalue == "%F" | ... - stringcvalue == "%nan" | ... - stringcvalue == "%inf" | ... - stringcvalue == "%pi") - txt=['Number_x: '+stringcvalue]; - elseif (SCI2Cisnum(stringcvalue)) - //NUT needed to convert format 1D-14 into 1d-14 - txt=['Number_x: '+strsubst(stringcvalue,'D','e')]; - elseif (stringcvalue == "%i") - txt=['Number_X: '+stringcvalue]; - else - txt=['String: ""'+stringcvalue+'""']; - end -endfunction - -function txt=%comment_string(e) -//overloading function for "comment" type tlist string function -//fields: -// text: a string -//this is a leaf of the AST - txt=['Comment : '+e.text] -endfunction - -function txt=objectlist2string(L) -//auxiliary function for conversion of a list of objects -//into a string vector - txt=[]; - for o=L, - if type(o)==15 then //EOL case - txt=[txt;'<'+o(1)+'>'], - else - txt=[txt; string(o)], - end - end - if txt==[] then txt='',end -endfunction diff --git a/macros/ASTManagement/%program_string.sci b/macros/ASTManagement/%program_string.sci new file mode 100644 index 00000000..93486992 --- /dev/null +++ b/macros/ASTManagement/%program_string.sci @@ -0,0 +1,19 @@ +function txt=%program_string(p) +//overloading function for "program" type tlist string function +//main (root) node of the Abstract Formal Tree +//fields: +// name : string (the function name) +// outputs : list of "variable" type tlist (the output arg names) +// inputs : list of "variable" type tlist (the intput arg names) +// statements: list of "equal" type tlist and list('EOL') (the +// instructions list) +// nblines : number (the number of lines in the scilab function) + txt=['Program' + 'Name : '+p.name + 'Outputs: '+strcat(objectlist2string(p.outputs),' ') + 'Inputs : '+strcat(objectlist2string(p.inputs),' ') + 'Statements ' + ' '+objectlist2string(p.statements) + 'EndProgram' + ] +endfunction diff --git a/macros/ASTManagement/%variable_string.sci b/macros/ASTManagement/%variable_string.sci new file mode 100644 index 00000000..cfb2e8ec --- /dev/null +++ b/macros/ASTManagement/%variable_string.sci @@ -0,0 +1,23 @@ +function txt=%variable_string(v) + global anscounter; //NUT: just to fix problem with ans variables. +//overloading function for "variable" type tlist string function +//fields: name +//this is a leaf of the AST +//NUT: changed here. For me %i is a number not a variable. + if (v.name == "%T" | ... + v.name == "%F"| ... + v.name == "%nan"| ... + v.name == "%inf"| ... + v.name == "%pi") + txt=['Number_x: '+v.name]; + elseif (v.name == "%i") + txt=['Number_X: '+v.name]; + else + if (v.name == 'ans') + anscounter = anscounter + 1; + txt=['Variable: '+v.name+string(anscounter)]; + else + txt=['Variable: '+v.name]; + end + end +endfunction \ No newline at end of file diff --git a/macros/ASTManagement/%while_string.sci b/macros/ASTManagement/%while_string.sci new file mode 100644 index 00000000..7d5e6223 --- /dev/null +++ b/macros/ASTManagement/%while_string.sci @@ -0,0 +1,14 @@ +function txt=%while_string(W) +//overloading function for "while" type tlist string function +//this is a node of the AST +//fields: +// expression : "expression" type tlist (the loop expression) +// statements : list of "equal" type tlist and list('EOL') (the +// while instructions list) + txt=['While' + ' WhileExpression:' + ' '+string(W.expression) + ' WhileStatements:' + ' '+objectlist2string(W.statements) + 'EndWhile'] +endfunction diff --git a/macros/ASTManagement/for_string.sci b/macros/ASTManagement/for_string.sci new file mode 100644 index 00000000..0ed9ca28 --- /dev/null +++ b/macros/ASTManagement/for_string.sci @@ -0,0 +1,15 @@ +function txt=%for_string(F) +//overloading function for "for" type tlist string function +//this is a node of the AST +//fields: +// expression : "expression" type tlist (the loop expression) +// statements : list of "equal" type tlist and list('EOL') (the +// for instructions list) +//NUT: raf cambiato ForExpression e ForStatements + txt=['For' + ' ForExpression:' + ' '+string(F.expression) + ' ForStatements:' + ' '+objectlist2string(F.statements) + 'EndFor'] +endfunction \ No newline at end of file diff --git a/macros/ASTManagement/objectlist2string.sci b/macros/ASTManagement/objectlist2string.sci new file mode 100644 index 00000000..26a38962 --- /dev/null +++ b/macros/ASTManagement/objectlist2string.sci @@ -0,0 +1,13 @@ +function txt=objectlist2string(L) +//auxiliary function for conversion of a list of objects +//into a string vector + txt=[]; + for o=L, + if type(o)==15 then //EOL case + txt=[txt;'<'+o(1)+'>'], + else + txt=[txt; string(o)], + end + end + if txt==[] then txt='',end +endfunction -- cgit