【编译原理】词法分析C++/C语言

本文介绍了一个简单的C++程序,用于实现词法分析。程序通过读取用户输入的源代码,识别关键字、标识符、数字、运算符等,并输出相应的种别码和单词。关键词表包括预定义的关键字,如'begin', 'if', 'then'等,程序支持多行输入,以'#'作为输入结束标记。" 111835478,10294035,JMeter HTML报告扩展与性能指标详解,"['性能测试', 'JMeter报告', 'HTML', 'XML转换', 'XSLT']
摘要由CSDN通过智能技术生成


/*需要的库和全局变量、函数及主程序*/
#include <stdio.h>  //包含库所用的某些宏和变量
#include <stdlib.h> //包含库
#include <string.h> //包含字符串处理库
#define  _KEY_WORD_END "waiting for your expanding"   //定义关键字结束标志

/*单词二元组的结构,可以根据需要继续扩充*/
typedef struct
{
    int typenum;
    char *word;
}WORD;

char input[255];   //输入换缓冲区
char toke[255] = "";    //单词缓冲区
int p_input;    //输入缓冲区指针
int p_token;    //单词缓冲区指针
char ch;        //当前读入字符
char *rwtab[] = {"begin", "if", "then", "while", "do", "end", _KEY_WORD_END}; //可扩充的关键字数组
WORD *scaner();  //词法扫描函数,获得一个单词

int main()
{
    int over = 1;
    WORD *oneword = new WORD;
    printf("Enter Your words (end with #):");
    scanf("%[^#]s", input); //读入源程序字符到缓冲区,以#结束,允许多行输入

    p_input = 0;
    printf("Your words: \n %s \n", input);

    //对源程序进行分析,直至结束符#
    while(over < 1000 && over != -1)
    {

        oneword = scaner();  //获取新单词
        if (oneword->typenum < 1000)
            printf("%d, %s", oneword->typenum, oneword->word);  //打印种别码和单词自身的值
        over = oneword->typenum;
    }
    printf("\npress # to exit:");   //按#退出程序
    scanf("%[^#]s", input);
    return 0;
}

/*需要用到自编函数参考实现*/
/*从输入缓冲区读取一个字符到ch*/
char m_getch()
{
    ch = input[p_input];
    p_input = p_input + 1;
    return (ch);
}

/*去掉空白符号*/
void getbc()
{
    while(ch == ''||ch == 10

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值