Ни для кого не секрет, что C++ обладает контекстно-зависимой грамматикой, т.е. для куска кода возможны несколько различных AST. Например, в следующем коде две синтаксически одинаковые строки обладают совершенно разной семантикой.
template <int n> void f(int m)
{
return;
}
int main()
{
int s = 123;
int k = 1234;
f<11>(k);
s<11>(k);
return 0;
}
Однако, для каждой из этих строк валидным является только один вариант AST: вызов функции в первом случае, сравнение во втором.
Мой вопрос вот в чём: возможно ли написать код на C++ таким образом, чтобы для него было больше одного валидного варианта парсинга?