source code:
int main() {
int sum=5;
sum = 3 * M + 4 * M + 5 * M;
int test=assgin(sum);
printf(sum);
return 0;
}
AST:
TranslationUnit
|--FunctionDefinition <54:2162..54:2173> int main() {
|--BuiltinTypeSpecifier <54:2162..54:2164> int
|--FunctionDeclarator <54:2166..54:2170> main(
| |--IdentifierDeclarator <54:2166..54:2169> main
| |--ParameterSuffix <54:2170..54:2171> ()
|--CompoundStatement <54:2173..60:2260> { int sum=5; sum = 3 * M + 4 *...
|--DeclarationStatement <55:2175..55:2177> int
| |--VariableAndOrFunctionDeclaration <55:2175..55:2184> int sum=5;
| |--BuiltinTypeSpecifier <55:2175..55:2177> int
| |--IdentifierDeclarator <55:2179..55:2183> sum=5
| |--ExpressionInitializer <55:2183..55:2183> 5
| |--IntegerConstantExpression <55:2183..55:2183> 5
|--ExpressionStatement <56:2186..56:2213> sum = 3 * M + 4 * M + 5 * M;
| |--BasicAssignmentExpression <56:2186..56:2192> sum = 3
| |--IdentifierName <56:2186..56:2188> sum
| |--AddExpression <56:2192..56:2208> 3 * M + 4 * M + 5
| |--AddExpression <56:2192..56:2200> 3 * M + 4
| | |--MultipliyExpression <56:2192..56:2196> 3 * M
| | | |--IntegerConstantExpression <56:2192..56:2192> 3
| | | |--IdentifierName <56:2196..56:2196> M
| | |--MultipliyExpression <56:2200..56:2204> 4 * M
| | |--IntegerConstantExpression <56:2200..56:2200> 4
| | |--IdentifierName <56:2204..56:2204> M
| |--MultipliyExpression <56:2208..56:2212> 5 * M
| |--IntegerConstantExpression <56:2208..56:2208> 5
| |--IdentifierName <56:2212..56:2212> M
|--DeclarationStatement <57:2215..57:2217> int
| |--VariableAndOrFunctionDeclaration <57:2215..57:2235> int test=assgin(sum);
| |--BuiltinTypeSpecifier <57:2215..57:2217> int
| |--IdentifierDeclarator <57:2219..57:2229> test=assgin
| |--ExpressionInitializer <57:2224..57:2229> assgin
| |--CallExpression <57:2224..57:2234> assgin(sum)
| |--IdentifierName <57:2224..57:2229> assgin
| |--IdentifierName <57:2231..57:2233> sum
|--AmbiguousCallOrVariableDeclaration <58:2237..58:2242> printf
| |--DeclarationStatement <58:2237..58:2242> printf
| | |--VariableAndOrFunctionDeclaration <58:2237..58:2248> printf(sum);
| | |--TypedefName <58:2237..58:2242> printf
| | |--ParenthesizedDeclarator <58:2243..58:2247> (sum)
| | |--IdentifierDeclarator <58:2244..58:2246> sum
| |--ExpressionStatement <58:2237..58:2248> printf(sum);
| |--CallExpression <58:2237..58:2247> printf(sum)
| |--IdentifierName <58:2237..58:2242> printf
| |--IdentifierName <58:2244..58:2246> sum
|--ReturnStatement <59:2250..59:2258> return 0;
|--IntegerConstantExpression <59:2257..59:2257> 0
ERROR:
| |--IdentifierDeclarator <57:2219..57:2229> `test=assgin`
| |--ExpressionInitializer <57:2224..57:2229> `assgin`
|--ExpressionStatement <56:2186..56:2213> `sum = 3 * M + 4 * M + 5 * M;`
| |--BasicAssignmentExpression <56:2186..56:2192> `sum = 3`
| |--IdentifierName <56:2186..56:2188> `sum`
I think there is something wrong with ‘=’. The content next to '=' will be always extracted with the variable before '='.
source code:
int main() {
int sum=5;
sum = 3 * M + 4 * M + 5 * M;
int test=assgin(sum);
printf(sum);
return 0;
}
AST:
TranslationUnit
|--FunctionDefinition <54:2162..54:2173>
int main() {|--BuiltinTypeSpecifier <54:2162..54:2164>
int|--FunctionDeclarator <54:2166..54:2170>
main(| |--IdentifierDeclarator <54:2166..54:2169>
main| |--ParameterSuffix <54:2170..54:2171>
()|--CompoundStatement <54:2173..60:2260>
{ int sum=5; sum = 3 * M + 4 *...|--DeclarationStatement <55:2175..55:2177>
int| |--VariableAndOrFunctionDeclaration <55:2175..55:2184>
int sum=5;| |--BuiltinTypeSpecifier <55:2175..55:2177>
int| |--IdentifierDeclarator <55:2179..55:2183>
sum=5| |--ExpressionInitializer <55:2183..55:2183>
5| |--IntegerConstantExpression <55:2183..55:2183>
5|--ExpressionStatement <56:2186..56:2213>
sum = 3 * M + 4 * M + 5 * M;| |--BasicAssignmentExpression <56:2186..56:2192>
sum = 3| |--IdentifierName <56:2186..56:2188>
sum| |--AddExpression <56:2192..56:2208>
3 * M + 4 * M + 5| |--AddExpression <56:2192..56:2200>
3 * M + 4| | |--MultipliyExpression <56:2192..56:2196>
3 * M| | | |--IntegerConstantExpression <56:2192..56:2192>
3| | | |--IdentifierName <56:2196..56:2196>
M| | |--MultipliyExpression <56:2200..56:2204>
4 * M| | |--IntegerConstantExpression <56:2200..56:2200>
4| | |--IdentifierName <56:2204..56:2204>
M| |--MultipliyExpression <56:2208..56:2212>
5 * M| |--IntegerConstantExpression <56:2208..56:2208>
5| |--IdentifierName <56:2212..56:2212>
M|--DeclarationStatement <57:2215..57:2217>
int| |--VariableAndOrFunctionDeclaration <57:2215..57:2235>
int test=assgin(sum);| |--BuiltinTypeSpecifier <57:2215..57:2217>
int| |--IdentifierDeclarator <57:2219..57:2229>
test=assgin| |--ExpressionInitializer <57:2224..57:2229>
assgin| |--CallExpression <57:2224..57:2234>
assgin(sum)| |--IdentifierName <57:2224..57:2229>
assgin| |--IdentifierName <57:2231..57:2233>
sum|--AmbiguousCallOrVariableDeclaration <58:2237..58:2242>
printf| |--DeclarationStatement <58:2237..58:2242>
printf| | |--VariableAndOrFunctionDeclaration <58:2237..58:2248>
printf(sum);| | |--TypedefName <58:2237..58:2242>
printf| | |--ParenthesizedDeclarator <58:2243..58:2247>
(sum)| | |--IdentifierDeclarator <58:2244..58:2246>
sum| |--ExpressionStatement <58:2237..58:2248>
printf(sum);| |--CallExpression <58:2237..58:2247>
printf(sum)| |--IdentifierName <58:2237..58:2242>
printf| |--IdentifierName <58:2244..58:2246>
sum|--ReturnStatement <59:2250..59:2258>
return 0;|--IntegerConstantExpression <59:2257..59:2257>
0ERROR:
I think there is something wrong with ‘=’. The content next to '=' will be always extracted with the variable before '='.