Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Something wrong when I dumped AST with codes like"sum = 3 * M + 4 * M + 5 * M;" #126

Open
Z769018860 opened this issue Sep 8, 2023 · 0 comments

Comments

@Z769018860
Copy link

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 '='.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant