| | 1 | C Example: |
| | 2 | {{{ |
| | 3 | #include <stdio.h> |
| | 4 | #include <stdlib.h> |
| | 5 | |
| | 6 | int main(int argc, char *argv[]) { |
| | 7 | double result = 0.0; |
| | 8 | int n = atoi(argv[1]); |
| | 9 | int i; |
| | 10 | double a[n]; |
| | 11 | FILE *fp = fopen("data","r"); |
| | 12 | |
| | 13 | for (i=0; i<n; i++) fscanf(fp, "%lf", &a[i]); |
| | 14 | for (i=0; i<n; i++) result += a[i]; |
| | 15 | printf("%lf",result); |
| | 16 | fclose(fp); |
| | 17 | return 0; |
| | 18 | } |
| | 19 | }}} |
| | 20 | |
| | 21 | TASS-AST xml: |
| | 22 | |
| | 23 | {{{ |
| | 24 | <tass-ast> |
| | 25 | <function name = "main" typeClass="0" type="int" s="include"> |
| | 26 | <parameters> |
| | 27 | <variableDeclaration class="Builtin" type = "int" name="argc"/> |
| | 28 | <variableDeclaration class="IncompleteArray" type = "char *[]" name="argv"/> |
| | 29 | </parameters> |
| | 30 | <body> |
| | 31 | <compoundStatement s="adder_spec.c:5:3"> |
| | 32 | <variableDeclaration class="Builtin" type = "double" name="result"> |
| | 33 | <init> |
| | 34 | <literalExpression s="adder_spec.c:5:19"> |
| | 35 | <rationalValue>0.000000e+00</rationalValue> |
| | 36 | </literalExpression> |
| | 37 | </init> |
| | 38 | </variableDeclaration> |
| | 39 | </compoundStatement> |
| | 40 | <compoundStatement s="adder_spec.c:6:3"> |
| | 41 | <variableDeclaration class="Builtin" type = "int" name="n"> |
| | 42 | <init> |
| | 43 | <evaluatedFunctionExpression> |
| | 44 | <function> |
| | 45 | <declRefExpression value="atoi" s="adder_spec.c:6:11"/> |
| | 46 | </function> |
| | 47 | <argument> |
| | 48 | <arrayAccessExpression> |
| | 49 | <variable> |
| | 50 | <declRefExpression value="argv" s="adder_spec.c:6:16"/> |
| | 51 | </variable> |
| | 52 | <subscript> |
| | 53 | <literalExpression s="adder_spec.c:6:21"> |
| | 54 | <integerValue>1</integerValue> |
| | 55 | </literalExpression> |
| | 56 | </subscript> |
| | 57 | </arrayAccessExpression> |
| | 58 | </argument> |
| | 59 | </evaluatedFunctionExpression> |
| | 60 | </init> |
| | 61 | </variableDeclaration> |
| | 62 | </compoundStatement> |
| | 63 | <compoundStatement s="adder_spec.c:7:3"> |
| | 64 | <variableDeclaration class="Builtin" type = "int" name="i"/> |
| | 65 | </compoundStatement> |
| | 66 | <compoundStatement s="adder_spec.c:8:3"> |
| | 67 | <variableDeclaration class="VariableArray" type = "double []" name="a"/> |
| | 68 | </compoundStatement> |
| | 69 | <compoundStatement s="adder_spec.c:9:3"> |
| | 70 | <variableDeclaration class="Pointer" type = "FILE *" name="fp"> |
| | 71 | <init> |
| | 72 | <evaluatedFunctionExpression> |
| | 73 | <function> |
| | 74 | <declRefExpression value="fopen" s="adder_spec.c:9:14"/> |
| | 75 | </function> |
| | 76 | <argument> |
| | 77 | <literalExpression s="adder_spec.c:9:20"> |
| | 78 | <stringExpression value ="data"> |
| | 79 | </literalExpression> |
| | 80 | </argument> |
| | 81 | <argument> |
| | 82 | <literalExpression s="adder_spec.c:9:27"> |
| | 83 | <stringExpression value ="r"> |
| | 84 | </literalExpression> |
| | 85 | </argument> |
| | 86 | </evaluatedFunctionExpression> |
| | 87 | </init> |
| | 88 | </variableDeclaration> |
| | 89 | </compoundStatement> |
| | 90 | <forStatement s="adder_spec.c:11:3"> |
| | 91 | <initializer> |
| | 92 | <binaryExpression kind="="> |
| | 93 | <leftHandSide> |
| | 94 | <declRefExpression value="i" s="adder_spec.c:11:8"/> |
| | 95 | </leftHandSide> |
| | 96 | <rightHandSide> |
| | 97 | <literalExpression s="adder_spec.c:11:10"> |
| | 98 | <integerValue>0</integerValue> |
| | 99 | </literalExpression> |
| | 100 | </rightHandSide> |
| | 101 | </binaryExpression> |
| | 102 | </initializer> |
| | 103 | <updater> |
| | 104 | <unaryExpression postFix = "true" operator="++" s="adder_spec.c:11:18"> |
| | 105 | <expression> |
| | 106 | <declRefExpression value="i" s="adder_spec.c:11:18"/> |
| | 107 | </expression> |
| | 108 | </unaryExpression> |
| | 109 | </updater> |
| | 110 | <condition> |
| | 111 | <binaryExpression kind="less_than"> |
| | 112 | <leftHandSide> |
| | 113 | <declRefExpression value="i" s="adder_spec.c:11:13"/> |
| | 114 | </leftHandSide> |
| | 115 | <rightHandSide> |
| | 116 | <declRefExpression value="n" s="adder_spec.c:11:15"/> |
| | 117 | </rightHandSide> |
| | 118 | </binaryExpression> |
| | 119 | </condition> |
| | 120 | <body> |
| | 121 | <evaluatedFunctionExpression> |
| | 122 | <function> |
| | 123 | <declRefExpression value="fscanf" s="adder_spec.c:11:23"/> |
| | 124 | </function> |
| | 125 | <argument> |
| | 126 | <declRefExpression value="fp" s="adder_spec.c:11:30"/> |
| | 127 | </argument> |
| | 128 | <argument> |
| | 129 | <literalExpression s="adder_spec.c:11:34"> |
| | 130 | <stringExpression value ="%lf"> |
| | 131 | </literalExpression> |
| | 132 | </argument> |
| | 133 | <argument> |
| | 134 | <unaryExpression postFix = "false" operator="&" s="adder_spec.c:11:41"> |
| | 135 | <expression> |
| | 136 | <arrayAccessExpression> |
| | 137 | <variable> |
| | 138 | <declRefExpression value="a" s="adder_spec.c:11:42"/> |
| | 139 | </variable> |
| | 140 | <subscript> |
| | 141 | <declRefExpression value="i" s="adder_spec.c:11:44"/> |
| | 142 | </subscript> |
| | 143 | </arrayAccessExpression> |
| | 144 | </expression> |
| | 145 | </unaryExpression> |
| | 146 | </argument> |
| | 147 | </evaluatedFunctionExpression> |
| | 148 | </body> |
| | 149 | </forStatement> |
| | 150 | <forStatement s="adder_spec.c:12:3"> |
| | 151 | <initializer> |
| | 152 | <binaryExpression kind="="> |
| | 153 | <leftHandSide> |
| | 154 | <declRefExpression value="i" s="adder_spec.c:12:8"/> |
| | 155 | </leftHandSide> |
| | 156 | <rightHandSide> |
| | 157 | <literalExpression s="adder_spec.c:12:10"> |
| | 158 | <integerValue>0</integerValue> |
| | 159 | </literalExpression> |
| | 160 | </rightHandSide> |
| | 161 | </binaryExpression> |
| | 162 | </initializer> |
| | 163 | <updater> |
| | 164 | <unaryExpression postFix = "true" operator="++" s="adder_spec.c:12:18"> |
| | 165 | <expression> |
| | 166 | <declRefExpression value="i" s="adder_spec.c:12:18"/> |
| | 167 | </expression> |
| | 168 | </unaryExpression> |
| | 169 | </updater> |
| | 170 | <condition> |
| | 171 | <binaryExpression kind="less_than"> |
| | 172 | <leftHandSide> |
| | 173 | <declRefExpression value="i" s="adder_spec.c:12:13"/> |
| | 174 | </leftHandSide> |
| | 175 | <rightHandSide> |
| | 176 | <declRefExpression value="n" s="adder_spec.c:12:15"/> |
| | 177 | </rightHandSide> |
| | 178 | </binaryExpression> |
| | 179 | </condition> |
| | 180 | <body> |
| | 181 | <compoundAssignOperator operator="+="> |
| | 182 | <leftHandSide> |
| | 183 | <declRefExpression value="result" s="adder_spec.c:12:23"/> |
| | 184 | </leftHandSide> |
| | 185 | <rightHandSide> |
| | 186 | <arrayAccessExpression> |
| | 187 | <variable> |
| | 188 | <declRefExpression value="a" s="adder_spec.c:12:33"/> |
| | 189 | </variable> |
| | 190 | <subscript> |
| | 191 | <declRefExpression value="i" s="adder_spec.c:12:35"/> |
| | 192 | </subscript> |
| | 193 | </arrayAccessExpression> |
| | 194 | </rightHandSide> |
| | 195 | </body> |
| | 196 | </forStatement> |
| | 197 | <evaluatedFunctionExpression> |
| | 198 | <function> |
| | 199 | <declRefExpression value="printf" s="adder_spec.c:13:3"/> |
| | 200 | </function> |
| | 201 | <argument> |
| | 202 | <literalExpression s="adder_spec.c:13:10"> |
| | 203 | <stringExpression value ="%lf"> |
| | 204 | </literalExpression> |
| | 205 | </argument> |
| | 206 | <argument> |
| | 207 | <declRefExpression value="result" s="adder_spec.c:13:16"/> |
| | 208 | </argument> |
| | 209 | </evaluatedFunctionExpression> |
| | 210 | <evaluatedFunctionExpression> |
| | 211 | <function> |
| | 212 | <declRefExpression value="fclose" s="adder_spec.c:14:3"/> |
| | 213 | </function> |
| | 214 | <argument> |
| | 215 | <declRefExpression value="fp" s="adder_spec.c:14:10"/> |
| | 216 | </argument> |
| | 217 | </evaluatedFunctionExpression> |
| | 218 | <returnStatement s="adder_spec.c:15:3"> |
| | 219 | <expression> |
| | 220 | <literalExpression s="adder_spec.c:15:10"> |
| | 221 | <integerValue>0</integerValue> |
| | 222 | </literalExpression> |
| | 223 | </expression> |
| | 224 | </returnStatement> |
| | 225 | </body> |
| | 226 | </function> |
| | 227 | |
| | 228 | </tass-ast> |
| | 229 | }}} |
| | 230 | |