以下是一个简单的词法分析程序,可以实现从输入源程序中识别出各类单词,并输出各个单词的种别码和单词符号自身的值。请注意,这只是一个示例程序,可能还需要根据具体情况进行修改和完善。
```c
#include
#include
#include
#define MAX_LEN 100 // 最大单词长度
// 定义各种单词的种别码
#define KEYWORD_BEGIN 101
#define KEYWORD_END 108
#define OPERATOR_BEGIN 201
#define OPERATOR_END 206
#define DELIMITER_BEGIN 301
#define DELIMITER_END 305
#define IDENTIFIER 400
#define NUMBER 500
// 定义关键字表
char *keywords[] = {"void", "main", "int", "char", "if", "else", "for", "while"};
// 定义运算符表
char *operators[] = {">=", "<", "<=", "==", "<>", "++", "--"};
// 定义界符表
char *delimiters[] = {"(", ")", "{", "}", ";", ","};
// 判断一个字符串是否为关键字
int is_keyword(char *str) {
int i;
for (i = 0; i < KEYWORD_END - KEYWORD_BEGIN + 1; i++) {
if (strcmp(str, keywords[i]) == 0) {
return KEYWORD_BEGIN + i;
}
}
return 0;
}
// 判断一个字符是否为运算符
int is_operator(char c) {
int i;
for (i = 0; i < OPERATOR_END - OPERATOR_BEGIN + 1; i++) {
if (c == operators[i][0]) {
return OPERATOR_BEGIN + i;
}
}
return 0;
}
// 判断一个字符是否为界符
int is_delimiter(char c) {
int i;
for (i = 0; i < DELIMITER_END - DELIMITER_BEGIN + 1; i++) {
if (c == delimiters[i][0]) {
return DELIMITER_BEGIN + i;
}
}