zoukankan      html  css  js  c++  java
  • 词法分析

    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    #include <ctype.h>
    void cffx();
    char prog[80]={'\0'},
    token[8];
    char ch;
    int syn,n,sum,m,p;
    char *rwtab[6]={"begin","if","then","while","do","end"};
    main()
    {
    p=0;
    printf("\nplease input string:\n");
    do {
    ch=getchar();
    prog[p++]=ch;
    }while(ch!='#');

    p=0;
    do{
    cffx();
    switch(syn){
    case 11: printf("(%d,%d)\n",syn,sum);break;
    case -1: printf("\n ERROR;\n");break;
    default: printf("(%d,%s)\n",syn,token);
    }
    }while(syn!=0);
    getch();
    }
    void cffx()
    {
    m=0;
    sum=0;
    for(n=0;n<8;n++)
    token[n]='\0';
    ch=prog[p++];
    while(ch==' ')
    ch=prog[p++];
    if(isalpha(ch))
    {
    while(isalpha(ch)||isdigit(ch))
    {
    token[m++]=ch;
    ch=prog[p++];}
    token[m++]='\0';
    ch=prog[p--];
    syn=10;
    for(n=0;n<6;n++)
    if(strcmp(token,rwtab[n])==0)
    {
    syn=n+1;
    break;}}
    else
    if(isdigit(ch))
    {
    while(isdigit(ch))
    {
    sum=sum*10+ch-'0';
    ch=prog[p++];}
    ch=prog[p--];
    syn=11;}
    else
    switch(ch){
    case'<':m=0;token[m++]=ch;ch=prog[p++];
    if(ch=='>'){
    syn=21;
    token[m++]=ch;}
    else if(ch=='='){
    syn=22;
    token[m++]=ch;}
    else{
    syn=20;
    ch=prog[p--];}
    break;
    case'>':m=0;token[m++]=ch;ch=prog[p++];
    if(ch=='='){
    syn=24;
    token[m++]=ch;}
    else{
    syn=23;
    ch=prog[p--];}
    break;
    case':':m=0;token[m++]=ch;ch=prog[p++];
    if(ch=='='){
    syn=18;
    token[m++]=ch;}
    else{
    syn=17;
    ch=prog[p--];}
    break;
    case'+':syn=13;
    token[0]=ch;
    break;
    case'-':syn=14;
    token[0]=ch;
    break;
    case'*':syn=15;
    token[0]=ch;
    break;
    case'/':syn=16;
    token[0]=ch;
    break;
    case'=':syn=25;
    token[0]=ch;
    break;
    case';':syn=26;
    token[0]=ch;
    break;
    case'(':syn=27;
    token[0]=ch;
    break;
    case')':syn=28;
    token[0]=ch;
    break;
    case'#':syn=0;
    token[0]=ch;
    break;
    default:syn=-1;
    }
    }

  • 相关阅读:
    错误:you (root) are not allowed to access to (crontab) because of pam configuration.
    linux自定义登录提示信息
    oracle错误IMP-00013: only a DBA ……
    将MyBatis Mapper xml 放到 jar 包外面
    ApplicationContextAware
    Netty ChannelFuture 监听三种方法
    Intellij 查找排除JAR包的依赖关系(Maven Helper)
    Nacos 服务状态监听四种写发
    Docker 常用命令
    Nginx 安装配置
  • 原文地址:https://www.cnblogs.com/severusandsusa/p/5924389.html
Copyright © 2011-2022 走看看