Open Z769018860 opened 1 year ago
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
int main() {
int
main(
main
()
{ int sum=5; sum = 3 * M + 4 *...
int sum=5;
sum=5
5
sum = 3 * M + 4 * M + 5 * M;
sum = 3
sum
3 * M + 4 * M + 5
3 * M + 4
3 * M
3
M
4 * M
4
5 * M
int test=assgin(sum);
test=assgin
assgin
assgin(sum)
printf
printf(sum);
(sum)
printf(sum)
return 0;
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>0
ERROR:
I think there is something wrong with ‘=’. The content next to '=' will be always extracted with the variable before '='.