Что будет на выходе этой простой программы сразу после лексического анализа?

Для простой C программы, такой как:

#include<stdio.h>
int main(){
   int first,second,sum;
   first = 10;
   second = 20;
   sum = first + second;
   printf("%d\n",sum);
}

что будет на выходе после первой фазы компиляции, которой является лексический анализ?


person Y.E.P    schedule 25.02.2013    source источник


Ответы (2)


Лексический анализ создает поток токенов. Игнорируя препроцессор на данный момент, вывод будет примерно таким

KEYWORD int
IDENTIFIER main
LPAREN
RPAREN
LBRACE
KEYWORD int
IDENTIFIER first
COMMA
...

Очевидно, что фактический результат зависит от вашего компилятора.

person nneonneo    schedule 25.02.2013
comment
Не могли бы вы объяснить вывод - person Y.E.P; 25.02.2013
comment
LPAREN будет (, RPARAN будет) и т. д. - person Sean Conner; 25.02.2013
comment
Почему вы записали один вывод как KEYWORD int, а не только int? - person Y.E.P; 25.02.2013
comment
Первый столбец — это тип маркера, а второй столбец — это значение, если оно применимо. Некоторые лексеры будут выводить INT, FLOAT, CONST и т. д. как отдельные классы токенов. Мой вывод носит чисто иллюстративный характер; для фактического вывода обратитесь к внутренностям вашего любимого компилятора. - person nneonneo; 25.02.2013

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

person user207421    schedule 25.02.2013