编译原理之设计简单词法分析器(C语言)

这篇博客介绍如何用C语言实现一个简单的词法分析器。内容包括词法分析器的基本概念,设计思路,以及具体的C语言实现代码。通过这个项目,读者可以更好地理解和应用编译原理。
摘要由CSDN通过智能技术生成

本次的内容主要是通过c语言实现简单的词法分析器,所以理论方面的知识较少,在大家有了编译原理的基础知识后,提供代码学习。

使用语言:C语言
编译环境:vscode

  • 什么是词法分析器
  • 设计词法分析器
  • c语言代码实现

编译原理总框:
在这里插入图片描述

一、什么是词法分析器

词法分析(lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。
通俗理解:我们可以联想到英语句子,假如给我们一串英语句子,这个时候我们要提取每一个单词,就是词法分析器的作用。语法分析器就调用词法分析器,来实现对每个单词的解释翻译。

二、设计词法分析器

简述:主要是数字,字符串(标识符和关键字),运算符,边界符等。数字以数字开头,一一识别,将字符通过asc码转数字提取;关键字由于有限通过枚举的方式保存,通过判断字母串满匹配确定,而字符串不是关键字,则为标识符;其他特殊符号则是直接编码提取,根据有限的特性。

对照表如下:
在这里插入图片描述

三、c语言代码实现

大家在了解了词法分析器后,结合代码学习效果更佳。
c语言代码如下:

#include<stdio.h>
#include<string.h>

char input[200];    //存放输入字符串 
char token[5];      //存放构成单词符号的字符串 
char ch;            //存放当前读入字符 
int p;              //input[]下标 
int fg;             //switch标记 
int num;            //存放整型值 

// 二维字符数组,存放关键字 
char index[6][6]={
   "begin","if","then","while","do","end"};

// 词法分析方法申明
void scaner();  

int main()
{
   
    p=0;
    printf("please intput string(End with '#'):\n");
    
    // 循环读入字符
    do {
   
        ch=getchar();
        input[p++] = ch;
    } while( ch!='#' );

    p=0;
    do {
   

        scaner();

        switch
  • 12
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值