设计、编制、调试一个具体的词法分析程序,代码
如下#include <stdio.h>
#include <string.h>
//定义单词类型常量
#define IDENTIFIER 0 //标识符
#define NUMBER 1 //数字
#define OPERATOR 2 //操作符
//定义操作符常量,以及其对应的字符串值 (可自行扩充)
#define PLUS "+" //加法运算 "+" "-" "*" "/" "%" "=" "<>" "<=" "<" ">=" ">" "( )";
char token[50];//保存当前分析出来的单词
int isDigit(char c){//判断是否是数字
if (c >= '0' && c <= '9'){
return 1;
}else{
return 0;
}
}
int isLetter(char c){//判断是否是英文字母或者下划线_开头的标识符中的一部分。
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c == '_')){ return 1; } else { return 0; } } void getToken(){//从输入流中得到一个token,并将token保存在token[]中。 char ch = getchar(); int i = 0; while ((ch == '\n') || (ch == '\t') || (ch == 32)) { ch = getchar(); } if (isDigit(ch)) { while ((isDigit(ch) || isLetter(ch))) { token[i++] = ch; ch = getchar(); } token[i] = 0; ungetc(ch, stdin); printf("%s\t\t number\n", token); } else if (isLetter(ch)) { while ((isDigit(ch) || isLetter(ch))) { token[i++] = ch; ch = getchar(); } token[i] = 0; ungetc(ch, stdin); printf("%s \t\t identifier \n", token); } else if (strcmp(&PLUS, &token)==0) { printf("+ \t\t operator \n"); }} void main() { while (!feof()) { getToken(); }}
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!