In the future, they should resolve according to some kind of dynamic precedence annotations provided in the grammars. For now, this at least makes them fully deterministic, so that tests won't fail due to ambiguities resolving differently after undone edits.
75 lines
2.1 KiB
Text
75 lines
2.1 KiB
Text
==================================================
|
|
simple functions cpp
|
|
==================================================
|
|
|
|
int main() {
|
|
x;
|
|
}
|
|
|
|
---
|
|
|
|
(translation_unit (function_definition
|
|
(type_specifier (identifier))
|
|
(declarator (direct_declarator (direct_declarator (identifier))))
|
|
(function_body (compound_statement
|
|
(expression_statement (identifier))))))
|
|
|
|
==================================================
|
|
function calls
|
|
==================================================
|
|
|
|
int main() {
|
|
printf("hello %s", "world");
|
|
}
|
|
|
|
---
|
|
|
|
(translation_unit (function_definition
|
|
(type_specifier (identifier))
|
|
(declarator (direct_declarator (direct_declarator (identifier))))
|
|
(function_body (compound_statement
|
|
(expression_statement (call_expression (identifier) (string) (string)))))))
|
|
|
|
==================================================
|
|
template function / relational expression ambiguities
|
|
==================================================
|
|
|
|
int main() {
|
|
someVariable < someValue > 0.0;
|
|
someTemplate<SomeType>(0, 0);
|
|
}
|
|
|
|
---
|
|
|
|
(translation_unit (function_definition
|
|
(type_specifier (identifier))
|
|
(declarator (direct_declarator (direct_declarator (identifier))))
|
|
(function_body (compound_statement
|
|
(expression_statement
|
|
(relational_expression
|
|
(relational_expression (identifier) (identifier))
|
|
(number)))
|
|
(expression_statement
|
|
(call_expression
|
|
(template_call (identifier) (type_id (type_specifier (identifier))))
|
|
(number) (number)))))))
|
|
|
|
==================================================
|
|
template class / relational expression ambiguities
|
|
==================================================
|
|
|
|
int main() {
|
|
SomeTemplate<SomeType> someVariable = 1;
|
|
}
|
|
|
|
---
|
|
|
|
(translation_unit (function_definition
|
|
(type_specifier (identifier))
|
|
(declarator (direct_declarator (direct_declarator (identifier))))
|
|
(function_body (compound_statement
|
|
(simple_declaration
|
|
(type_specifier (template_call (identifier) (type_id (type_specifier (identifier)))))
|
|
(init_declarator
|
|
(declarator (direct_declarator (identifier)))
|
|
(initializer (initializer_clause (number)))))))))
|