scanf("%d",&n);
читает число из стандартного ввода.
Он не читает число и следующий символ новой строки. Он просто читает число. Что бы ни следовало, число будет возвращено из следующей операции, которая читает из stdin
.
Так что, когда вы пытаетесь выполнить синтаксический анализ, символ, читаемый лексером, является символом новой строки, который вы ввели после числа. Этот символ новой строки приводит к тому, что лексер возвращает 0 анализатору, который анализатор интерпретирует как конец ввода. Но грамматика не допускает пустых вводов, поэтому синтаксический анализатор сообщает о синтаксической ошибке.
В моей системе синтаксический анализатор сообщает о синтаксической ошибке, прежде чем он даст мне возможность ввести любой ввод. Тот факт, что он позволяет вам вводить строку ввода, немного озадачивает меня, но это может иметь какое-то отношение к любой IDE, которую вы используете для запуска своей программы.