编译原理词法分析实验源代码
时间: 2023-10-08 19:08:05 浏览: 50
由于编译原理词法分析实验的源代码可能因不同学校或老师的要求而有所不同,因此我提供一份通用的基础代码作为参考:
```
#include <stdio.h>
#include <ctype.h>
char token; // 存储当前读入的符号
char lexeme[100]; // 存储当前读入的单词
// 读取下一个字符
void getChar() {
token = getchar();
}
// 跳过空格和换行符
void getNonBlank() {
while (isspace(token)) {
getChar();
}
}
// 识别保留字和标识符
void identifier() {
int i = 0;
while (isalnum(token)) {
lexeme[i++] = token;
getChar();
}
lexeme[i] = '\0'; // 结束标志符
printf("IDENTIFIER: %s\n", lexeme);
}
// 识别数字
void number() {
int i = 0;
while (isdigit(token)) {
lexeme[i++] = token;
getChar();
}
lexeme[i] = '\0'; // 结束标志符
printf("NUMBER: %s\n", lexeme);
}
// 识别特殊符号
void special() {
printf("SPECIAL: %c\n", token);
getChar();
}
// 词法分析主函数
void lex() {
getNonBlank();
if (isalpha(token)) {
identifier();
} else if (isdigit(token)) {
number();
} else {
special();
}
}
int main() {
printf("Please enter a statement: \n");
getChar();
while (token != EOF) {
lex();
getNonBlank();
}
return 0;
}
```
该代码可以实现简单的词法分析功能,可以识别保留字、标识符、数字和特殊符号。在主函数中,每次读取一个字符后调用 `lex()` 函数进行词法分析,直到输入结束为止。
但是需要注意的是,该代码只是一个基础的模板,具体实验要求可能需要根据实验手册进行修改和补充。