что должно вывод лексического анализатора быть в c?

#include<stdio.h>

int main()
{
  int a,b;
  a=a+b;
  printf("%d",a);
return 0;
}

что должно быть выводом, если этот код передается через лексический анализатор

5
задан Bryan Oakley 18 April 2010 в 13:16
поделиться

2 ответа

лексический анализатор просто токенизирует поток, чтобы превратить поток символов в поток токенов (который позже будет проанализирован парсером для получения полного синтаксического дерева ). В вашем примере вы получите что-то вроде:

#include <stdio.h> (this is handled by preprocessor, not by lexer so it wouldn't exist)

int KEYWORD
main IDENTIFIER
( LPAR
) RPAR
{ LBRACE
int KEYWORD
a IDENT
, COMMA
b IDENT
; SEMICOL
a IDENT
= ASSIGN
a IDENT
+ PLUS
b IDENT
; SEMICOL
printf IDENT
( LPAR
"%d" STRING
, COMMA
a IDENT
) RPAR
; SEMICOL
return RETURN_KEYWORD
0 INTEGER
; SEMICOL
} RBRACE

Конечно, лексер сам по себе не может много сделать, он может просто разбить исходный текст на минимально возможные элементы, проверяя синтаксические ошибки (например, ключевые слова с ошибками). Вам понадобится что-то, что объединит их, чтобы придать им семантическое значение.

Небольшое примечание: некоторым лексерам нравится группировать похожие типы токенов только в один (например, токен KEYWORD , содержащий все ключевые слова), используя связанный с ним параметр, в то время как у других есть другой токен. для каждого типа RETURN_KEYWORK , IF_KEYWORD и так далее ..

12
ответ дан 18 December 2019 в 11:54
поделиться

Директивы препроцессора не будут присутствовать во входных данных компилятора, поскольку препроцессор будет их использовать. Таким образом, #include будет заменен содержимым файла stdio.h .

Результирующий файл будет разбит на токенов сканером в соответствии с лексическими правилами , которые можно найти здесь и будет передан парсеру , когда он запрашивает токены.

3
ответ дан 18 December 2019 в 11:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: