ВНИМАНИЕ: Этот вопрос не о том, что «у Java нет указателей»
На языке C код identifier1 * identifier2
неоднозначен для двух возможных значений:
- Если идентификатор1 является типом, то это может быть объявление указателя.
- Если идентификатор1 является переменной, то это может быть оператор умножения.
проблема в том, что я не могу выбрать правильную продукцию при построении дерева синтаксиса.Я проверил код Clang, и кажется, что Clang должен поставить проверку типа (с помощью таблицы символов) на этап синтаксического анализа (исправьте меня, если я ошибаюсь).
Затем я проверил код javac (OpenJDK), кажется, что на этапе синтаксического анализа нет семантического анализа.Синтаксический анализатор может построить AST, используя только токены.
Так что мне интересно, есть ли у Java такая же неоднозначная проблема синтаксиса?Проблема в том, что если синтаксический анализатор не знает тип идентификатора, он не может выбрать правильную продукцию?
Или, что более универсально, имеет ли Java неоднозначный синтаксис, что парсер не может выбрать продукцию без другой информации?больше, чем поток токенов?