Может ли лексический анализатор проверять грамматические правила во время компиляции? - PullRequest
0 голосов
/ 26 января 2010

извините за такой глупый вопрос, но я поспорил с друзьями о лексическом анализе, и мы решили спросить сообщество.будет интерпретироваться как недействительный на этапе лексического анализа или на этапе синтаксического анализа в грамматике Си.Спасибо

Ответы [ 3 ]

1 голос
/ 26 января 2010

В Си лексический анализ происходит первым. Затем препроцессор применяет макросы и все их магические преобразования к результирующему потоку токенов. Синтаксический анализ выполняется только после того, как препроцессор сработал.

Таким образом, чтобы узнать ответ на свой вопрос, просто запустите код в препроцессоре. С gcc это вопрос использования флага командной строки -E. Если препроцессор доволен, то лексический анализ по определению прошел нормально (как в вашем примере).

1 голос
/ 26 января 2010

Лексический анализ проверяет, что все ваши токены действительны (они есть). Синтаксический анализ (или синтаксический анализ) проверяет, образует ли последовательность токенов правильное произведение в вашей грамматике (а не). Так что это пройдет фазу лексического анализа и завершится фазой разбора.

0 голосов
/ 26 января 2010

Во время фазы синтаксического анализа, также известный как

...