• 作业--词法分析的源代码与运行结果


    词法分析的源代码与运行结果:

    #include<stdio.h> /*定义I/O库所用的某些宏和变量*/
    #include<string.h> /*定义字符串库函数*/
    #include<conio.h> /*提供有关屏幕窗口操作函数*/
    #include<ctype.h> /*分类函数*/
    char prog[80]={''},
    token[8]; /*存放构成单词符号的字符串*/
    char ch;
    int syn, /*存放单词字符的种别码*/
    n,
    sum, /*存放整数型单词*/
    m,p; /*p是缓冲区prog的指针,m是token的指针*/
    char *rwtab[6]={"begin","if","then","while","do","end"};
    void scaner(){
    m=0;
    sum=0;
    for(n=0;n<8;n++)
    token[n]='';
    ch=prog[p++];
    while(ch==' ')
    ch=prog[p++];
    if(isalpha(ch)) /*ch为字母字符*/
    {
    while(isalpha(ch)||isdigit(ch)) /*ch 为字母字符或者数字字符*/
    {
    token[m++]=ch;
    ch=prog[p++];}
    token[m++]='';
    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)) /*ch是数字字符*/
    {
    while(isdigit(ch)) /*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;}}
    main()
    {

    p=0;
    printf("请输入符号或字符: ");
    do {
    ch=getchar();
    prog[p++]=ch;
    }while(ch!='#');

    p=0;
    do{
    scaner();
    switch(syn){
    case 11: printf("(%d,%d) ",syn,sum);break;
    // case -1: printf(" ERROR; ");break;
    default: printf("(%d,%s) ",syn,token);
    }
    }while(syn!=0);
    //getch();
    }

    结果:

  • 相关阅读:
    php 链接不上 mysql数据库,不是扩展的问题,也不是数据库的问题
    php中magic_quotes_gpc的作用
    QuickSkin简单学习控制结构
    Xdebug调试PHP程序 (NetBeans)
    记录bind方法。。。和ajax二级联动
    自己写的php分页代码,喜欢的就看看,很实用的
    想去掉启动时的win7选择怎么办
    QuickSkin简单学习属性和方法
    【CDQ分治】P3810 【模板】三维偏序(陌上花开)
    LibraryBar、LibraryContainer的宽高设置
  • 原文地址:https://www.cnblogs.com/god1924668503/p/5924687.html
Copyright © 2020-2023  润新知