#include<stdio.h>

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

如果此代码通过词法分析器传递,输出应该是什么

最佳答案

词法分析器只是对流进行标记化,以将字符流转换为标记流(稍后将使用解析器进行解析以获得完整的语法树)。对于您的示例,您将获得类似以下内容的信息:

#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_KEYWORKIF_KEYWORD等上..

10-08 04:10