Как C/C++ tokeniser/parser не понимает использование '*', так как он может использоваться для умножения и для типа указателей. например :.Как парсер/лексер C/C++ делает разницу между «*» указателя и «*» умножения?
... {
...
obj *var1; // * used to make var1 as pointer to obj
var1 * var2; // * used to multiply var1 and var2
}
Обновление 1: В то время как tokenising/синтаксический анализ, пока мы не можем сделать разницу между идентификатором, который ссылается на переменную, и идентификатор, который относится к типу.
Update 2: (контекста вопроса) Я разработка и реализация языка программирования/C семейства C++, где указатели объявляются как Pointer<int>
, и я хочу использовать стиль C-указатель вместо этого.
Update 3 (30 декабря 2016 года): Некоторые ответы этого stackoverflow question about LR(1) parser and C++, кажется, рассматривать мой вопрос.
"*' obj * var1; '*": Умножение типа и неопределенного токена не имеет смысла, поэтому это может быть определение переменной. – alk
Зная, что такое 'obj' /' var1' ... Но ведь синтаксический анализ C++ является сложным. – Jarod42
вот почему у нас есть ключевые слова и идентификаторы. –