怎么将source code翻译成token
时间: 2023-10-07 22:12:20 浏览: 46
将源代码翻译成 token 的过程称为词法分析。词法分析器会将源代码按照一定规则划分成一个个 token,每个 token 对应着代码中的一个语法单元。
在 C 语言中,可以使用 Lex 工具来生成词法分析器。Lex 工具需要一个词法描述文件,该文件定义了如何将源代码转换成 token。以下是一个简单的例子:
词法描述文件 lexer.l:
```
%{
#include <stdio.h>
%}
%%
[0-9]+ { printf("INT: %s\n", yytext); }
[a-zA-Z][a-zA-Z0-9]* { printf("ID: %s\n", yytext); }
. { printf("OTHER: %s\n", yytext); }
%%
int main()
{
yylex();
return 0;
}
```
上述词法描述文件定义了三个模式,分别匹配整数、标识符和其他字符。其中,`[0-9]+` 匹配一串数字,`[a-zA-Z][a-zA-Z0-9]*` 匹配一个字母后跟零个或多个字母或数字,`.` 匹配除换行符以外的任意字符。
在程序入口函数中调用 `yylex()` 函数即可开始词法分析。例如,下面是一个示例输入和输出:
输入:
```
int main()
{
int a = 123;
printf("Hello, world!\n");
return 0;
}
```
输出:
```
ID: int
ID: main
OTHER: (
OTHER: )
OTHER: {
ID: int
ID: a
OTHER: =
INT: 123
OTHER: ;
ID: printf
OTHER: (
OTHER: "
OTHER: Hello, world!
OTHER: \n
OTHER: "
OTHER: )
OTHER: ;
OTHER: return
INT: 0
OTHER: ;
OTHER: }
```
词法分析器将源代码按照模式划分成了不同的 token,输出了每个 token 的类型和值。程序员可以根据词法分析器的输出来设计后续的语法分析器和代码生成器。