3666 小C语言--词法分析程序

来源:互联网 发布:淘宝网价格 编辑:程序博客网 时间:2024/06/05 05:07

3666 小C语言–词法分析程序

#include<stdio.h>#include<string.h>using namespace std;int isDigit(char ch){    if(ch >= '0'&& ch <= '9')        return 1;    else return 0;}int isCharacter(char ch){     if(ch >= 'a'&& ch <= 'z'||ch >= 'A'&& ch <= 'Z')        return 1;    else return 0;}int isOperator(char ch){    if(ch == '+'|| ch == '-'||ch == '*'|| ch == '/'||ch == '>'|| ch == '<'||ch == '!'|| ch == '=')        return 1;    else return 0;}int isKeyword(char tmp[]){    if(!strcmp(tmp,"main")||!strcmp(tmp,"if")||!strcmp(tmp,"else")||!strcmp(tmp,"for")||!strcmp(tmp,"while")||!strcmp(tmp,"int"))        return 1;    else return 0;}int get(){    char ch;    char tmp[20];    int i=0;    while(~scanf("%c",&ch))    {        if(ch == '\t'||ch == ' ')        continue;        else if (isDigit(ch))        {            while(isDigit(ch))            {            tmp[i++] = ch;            scanf("%c",&ch);            }            tmp[i] = '\0';            i=0;            printf("(integer,%s)\n",tmp);            ungetc(ch,stdin);        }        else if(ch == '{'||ch == '}'||ch == '('||ch ==')'||ch == ','||ch ==';')            printf("(boundary,%c)\n",ch);        else if (isCharacter(ch)||ch == '_')        {            while(isCharacter(ch)||ch == '_'||isDigit(ch))            {                tmp[i++] = ch;                scanf("%c",&ch);            }            tmp[i] = '\0';            i=0;            if(isKeyword(tmp))                printf("(keyword,%s)\n",tmp);            else                printf("(identifier,%s)\n",tmp);            ungetc(ch,stdin);        }        else if (isOperator(ch))        {            while(isOperator(ch))            {                tmp[i++] = ch;                scanf("%c",&ch);            }            tmp[i] = '\0';            i=0;            printf("(operator,%s)\n",tmp);            ungetc(ch,stdin);        }    }}int main(){    get();}