#include <stdio.h>
#include <string.h>
#include <ctype.h>
typedef struct node
{
  char list[81];
  int tempi;
}sentance;//分离出一个个关键字所用临时结构
void printch(char stack[][10],int top);
int main()
{
  sentance one,two,three;
  char whole[800];//存放用户输入数据
  char word=NULL;
  char stack[800][10];//存放关键字以及变量的栈
  int top=-1;
  int i=1;
  one.tempi=two.tempi=three.tempi=0;
  printf("Please input the code and end with the '#':");
  while(word!='#')
  {
    i=1;
    gets(whole);
    word=whole[0];//将字符串第一个字符赋给word
    while(word!='#')
      {
        while(ispunct(word)&&(word!='#'))
        {
          two.list[two.tempi]=word;
          two.tempi++;
          word=whole[i];//i是以1开始,所以whole[i]是下一个字符
          i++;
          if(two.list[two.tempi-1]!=':'&&two.list[two.tempi-1]!='<'&&two.list[two.tempi-1]!='>')//若果不是这三个符号,则直接入栈
          {
            two.list[two.tempi]='\0';
            top++;
            strcpy(stack[top],two.list);
            two.tempi=0;
          }
          else if(word=='='&&two.list[two.tempi-1]==':'||word=='='&&two.list[two.tempi-1]=='<'||word=='='&&two.list[two.tempi-      1]=='>'||word=='>'&&two.list[two.tempi-1]=='<')//比较是否为双标点情况
          {
            two.list[two.tempi]=word;
            two.list[two.tempi+1]='\0';
            top++;
            strcpy(stack[top],two.list);
            two.tempi=0;
            word=whole[i];//将下一个字符赋给word
            i++;//i指向下一个字符
          }
          else//当下一个字符没有组成双标点,则入栈
          {
            two.list[two.tempi]='\0';
            top++;
            strcpy(stack[top],two.list);
            two.tempi=0;
          }
        }
        while(isalpha(word)&&(word!='#'))
        {
          one.list[one.tempi]=word;
          one.tempi++;
          word=whole[i];
          i++;
          if(!(isalpha(word)))
          {
            one.list[one.tempi]='\0';
            top++;
            strcpy(stack[top],one.list);
            one.tempi=0;
          }
        }
        while(isdigit(word))
        {
          three.list[three.tempi]=word;
          three.tempi++;
          word=whole[i];
          i++;
          if(!(isdigit(word)))
          {
            three.list[three.tempi]='\0';
            top++;
            strcpy(stack[top],three.list);
            three.tempi=0;
          }
        }
        if(word==' ')//忽略空格
        {
          word=whole[i];
          i++;
        }
        if(word=='\0')//遇到结束符跳出循环
          break;
      }
  }
  if(top!=-1)//如果栈里无元素,则函数结束
    printch(stack,top);
  return 0;
}
void printch(char stack[][10],int top)
{
  char clist[][6]={"begin","if","then","while","do","end","","","","","","","+","-","*","/",":",":=","","<","<=","<>",">",">=","=",";","(",")","#"};
  int i,k;
  for(k=0;k<=top;k++)
  {
    if(strlen(stack[k])!=0)
    {
      if(stack[k][0]>='0'&&stack[k][0]<='9')//数字的输出
      {
        printf("<11,\"%s\">\n",stack[k]);
        continue;//如果是数字则continue循环
      }
      for(i=0;i<=28;i++)
      {
        if(strcmp(clist[i],stack[k])==0)
        {
          printf("<%d,\"%s\">\n",i+1,stack[k]);//关键字的输出
          break;
        }
        if(i==28)//找不到相同的字符串,则作为一个变量输出
        {
          printf("<10,\"%s\">\n",stack[k]);
        }
      }
    }
  }
}

v2.0的更多相关文章

  1. 《我常用的股票投资工具与网站》v2.0

    <我常用的股票投资工具与网站>v2.0 王大海 职业投资,抽空做一点分享. 661 人赞同了该文章 "少年你好,想不到你竟有如此因缘际会看到这里.我看你骨骼精奇,定是万中无一的交 ...

  2. 常用HTML meta 标签属性(网站兼容与优化需要),meta标签

    常用HTML meta 标签属性(网站兼容与优化需要),meta标签 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索 ...

  3. [python]爬代理ip v2.0(未完待续)

    爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...

  4. Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性

    Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性 1.1. Jquery1.12  jQuery 2.2 和 1.12 新版本发布 - OPEN资讯.h ...

  5. 运维工程师打怪升级进阶之路 V2.0

    在此之前,发布过两个版本: 运维工程师打怪升级之路 V1.0 版本发布 运维工程师打怪升级必经之路 V1.0.1 很多读者伙伴们反应总结的很系统.很全面,无论是0基础初学者,还是有基础的入门者,或者是 ...

  6. 【JS】heatmap.js v1.0 到 v2.0,详细总结一下:)

    前段时间,项目要开发热力图插件,研究了heatmap.js,打算好好总结一下. 本文主要有以下几部分内容: 部分源码理解 如何迁移到v2.0 v2.0官方文档译文 关于heatmap.js介绍,请看这 ...

  7. 怎样在IDEA中使用JUnit4和JUnitGenerator V2.0自动生成测试模块

     因为项目的需要,所以研究了一下自动生成测试代码.将经验记录下来,总会有用的.我个人认为,好记性不如多做笔记多反思总结. 1.    前提条件 开发环境已正确配置 工程已解决JUnit依赖关系(pom ...

  8. 转发 win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案

    win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NE ...

  9. Heatmap.js v2.0 – 最强大的 Web 动态热图

    Heatmap 是用来呈现一定区域内的统计度量,最常见的网站访问热力图就是以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示.Heatmap.js 这个 JavaScript 库可以实现 ...

  10. 数据获取以及处理系统 --- 功能规格说明书V2.0

    产品规格说明书: 版本号: V2.0 版本说明: Version 1.0 简单得需求分析以及构思,初稿形成 Version 2.0 细化beta阶段设计,增加典型用户尝尽以及功能罗列 1. 引言 1. ...

随机推荐

  1. java.lang.NoClassDefFoundError: org/apache/avro/ipc/Responder

    文章发自:http://www.cnblogs.com/hark0623/p/4170174.html  转发请注明     java.lang.NoClassDefFoundError: org/a ...

  2. Spring的profile属性

    使用示例 //注解方式 public class DataSourceConfig { @Bean @Profile("prod") public DataSource dataS ...

  3. LightOJ1079 Just another Robbery(DP)

    题目大概是抢劫银行,每家银行都有一个收益和一个被抓的概率,求在被抓概率小于P的条件下能获得的最大收益. dp[i][j]表示抢劫前i家银行收益为j被抓的最小概率 dp[0][0]=0 dp[i][j] ...

  4. BZOJ4060 : [Cerc2012]Word equations

    首先通过hash建树 设f[i][j]表示第i个特殊符号从P的第j位开始匹配能到达哪里 记忆化搜索,对于底层贪心匹配. #include<cstdio> #include<cstri ...

  5. [Cocos2d-x For WP8]Action 常用动作

    Action相当于是Cocos2d-x里面的动画操作,在Cocos2d-x里面的动画基类是CCAction类,从CCAction类派生出来的就有很多常用的动作的实现类,利用这些类就可以给我们游戏的精灵 ...

  6. 【wikioi】1002 搭桥(dfs+最小生成树)

    http://wikioi.com/problem/1002/ 今天开始又开始刷水了哈T_T.照着hzwer神犇的刷题记录刷!!! 题解: 一开始我也不会,但是我想到了直接爆搜T_T. 好吧,题解. ...

  7. POJ 3691 DNA repair(AC自动机+DP)

    题目链接 能AC还是很开心的...此题没有POJ2778那么难,那个题还需要矩阵乘法,两个题有点相似的. 做题之前,把2778代码重新看了一下,回忆一下当时做题的思路,回忆AC自动机是干嘛的... 状 ...

  8. BZOJ3676 [Apio2014]回文串

    Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...

  9. python 操作execl文件

    http://www.jb51.net/article/60510.htm import xlrdimport xlwt # 打开文件   workbook = xlrd.open_workbook( ...

  10. HttpClient工具类v1.7

    package com.cucpay.fundswap.util; import java.io.IOException; import java.net.SocketTimeoutException ...