Notes on TASS AST and Translation to Model
C Example
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
double result = 0.0;
int n = atoi(argv[1]);
int i;
double a[n];
FILE *fp = fopen("data","r");
for (i=0; i<n; i++) fscanf(fp, "%lf", &a[i]);
for (i=0; i<n; i++) result += a[i];
printf("%lf",result);
fclose(fp);
return 0;
}
TASS-AST xml:
<tass-ast>
<function name = "main" typeClass="0" type="int" s="include">
<parameters>
<variableDeclaration class="Builtin" type = "int" name="argc"/>
<variableDeclaration class="IncompleteArray" type = "char *[]" name="argv"/>
</parameters>
<body>
<compoundStatement s="adder_spec.c:5:3">
<variableDeclaration class="Builtin" type = "double" name="result">
<init>
<literalExpression s="adder_spec.c:5:19">
<rationalValue>0.000000e+00</rationalValue>
</literalExpression>
</init>
</variableDeclaration>
</compoundStatement>
<compoundStatement s="adder_spec.c:6:3">
<variableDeclaration class="Builtin" type = "int" name="n">
<init>
<evaluatedFunctionExpression>
<function>
<declRefExpression value="atoi" s="adder_spec.c:6:11"/>
</function>
<argument>
<arrayAccessExpression>
<variable>
<declRefExpression value="argv" s="adder_spec.c:6:16"/>
</variable>
<subscript>
<literalExpression s="adder_spec.c:6:21">
<integerValue>1</integerValue>
</literalExpression>
</subscript>
</arrayAccessExpression>
</argument>
</evaluatedFunctionExpression>
</init>
</variableDeclaration>
</compoundStatement>
<compoundStatement s="adder_spec.c:7:3">
<variableDeclaration class="Builtin" type = "int" name="i"/>
</compoundStatement>
<compoundStatement s="adder_spec.c:8:3">
<variableDeclaration class="VariableArray" type = "double []" name="a"/>
</compoundStatement>
<compoundStatement s="adder_spec.c:9:3">
<variableDeclaration class="Pointer" type = "FILE *" name="fp">
<init>
<evaluatedFunctionExpression>
<function>
<declRefExpression value="fopen" s="adder_spec.c:9:14"/>
</function>
<argument>
<literalExpression s="adder_spec.c:9:20">
<stringExpression value ="data">
</literalExpression>
</argument>
<argument>
<literalExpression s="adder_spec.c:9:27">
<stringExpression value ="r">
</literalExpression>
</argument>
</evaluatedFunctionExpression>
</init>
</variableDeclaration>
</compoundStatement>
<forStatement s="adder_spec.c:11:3">
<initializer>
<binaryExpression kind="=">
<leftHandSide>
<declRefExpression value="i" s="adder_spec.c:11:8"/>
</leftHandSide>
<rightHandSide>
<literalExpression s="adder_spec.c:11:10">
<integerValue>0</integerValue>
</literalExpression>
</rightHandSide>
</binaryExpression>
</initializer>
<updater>
<unaryExpression postFix = "true" operator="++" s="adder_spec.c:11:18">
<expression>
<declRefExpression value="i" s="adder_spec.c:11:18"/>
</expression>
</unaryExpression>
</updater>
<condition>
<binaryExpression kind="less_than">
<leftHandSide>
<declRefExpression value="i" s="adder_spec.c:11:13"/>
</leftHandSide>
<rightHandSide>
<declRefExpression value="n" s="adder_spec.c:11:15"/>
</rightHandSide>
</binaryExpression>
</condition>
<body>
<evaluatedFunctionExpression>
<function>
<declRefExpression value="fscanf" s="adder_spec.c:11:23"/>
</function>
<argument>
<declRefExpression value="fp" s="adder_spec.c:11:30"/>
</argument>
<argument>
<literalExpression s="adder_spec.c:11:34">
<stringExpression value ="%lf">
</literalExpression>
</argument>
<argument>
<unaryExpression postFix = "false" operator="&" s="adder_spec.c:11:41">
<expression>
<arrayAccessExpression>
<variable>
<declRefExpression value="a" s="adder_spec.c:11:42"/>
</variable>
<subscript>
<declRefExpression value="i" s="adder_spec.c:11:44"/>
</subscript>
</arrayAccessExpression>
</expression>
</unaryExpression>
</argument>
</evaluatedFunctionExpression>
</body>
</forStatement>
<forStatement s="adder_spec.c:12:3">
<initializer>
<binaryExpression kind="=">
<leftHandSide>
<declRefExpression value="i" s="adder_spec.c:12:8"/>
</leftHandSide>
<rightHandSide>
<literalExpression s="adder_spec.c:12:10">
<integerValue>0</integerValue>
</literalExpression>
</rightHandSide>
</binaryExpression>
</initializer>
<updater>
<unaryExpression postFix = "true" operator="++" s="adder_spec.c:12:18">
<expression>
<declRefExpression value="i" s="adder_spec.c:12:18"/>
</expression>
</unaryExpression>
</updater>
<condition>
<binaryExpression kind="less_than">
<leftHandSide>
<declRefExpression value="i" s="adder_spec.c:12:13"/>
</leftHandSide>
<rightHandSide>
<declRefExpression value="n" s="adder_spec.c:12:15"/>
</rightHandSide>
</binaryExpression>
</condition>
<body>
<compoundAssignOperator operator="+=">
<leftHandSide>
<declRefExpression value="result" s="adder_spec.c:12:23"/>
</leftHandSide>
<rightHandSide>
<arrayAccessExpression>
<variable>
<declRefExpression value="a" s="adder_spec.c:12:33"/>
</variable>
<subscript>
<declRefExpression value="i" s="adder_spec.c:12:35"/>
</subscript>
</arrayAccessExpression>
</rightHandSide>
</body>
</forStatement>
<evaluatedFunctionExpression>
<function>
<declRefExpression value="printf" s="adder_spec.c:13:3"/>
</function>
<argument>
<literalExpression s="adder_spec.c:13:10">
<stringExpression value ="%lf">
</literalExpression>
</argument>
<argument>
<declRefExpression value="result" s="adder_spec.c:13:16"/>
</argument>
</evaluatedFunctionExpression>
<evaluatedFunctionExpression>
<function>
<declRefExpression value="fclose" s="adder_spec.c:14:3"/>
</function>
<argument>
<declRefExpression value="fp" s="adder_spec.c:14:10"/>
</argument>
</evaluatedFunctionExpression>
<returnStatement s="adder_spec.c:15:3">
<expression>
<literalExpression s="adder_spec.c:15:10">
<integerValue>0</integerValue>
</literalExpression>
</expression>
</returnStatement>
</body>
</function>
</tass-ast>
Last modified
15 years ago
Last modified on 04/18/11 11:50:57
Note:
See TracWiki
for help on using the wiki.
