c语言 词法分析器 《编译原理》课程设计

设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。

针对表达各类词语的一组正规表达式,设计一个确定化的最简的有限自动机,对输入的符号串进行单词划分及词类识别。

要求词法分析器的输入是字符串,输出是源程序中各单词的字符串、词的类别以及对应值。

算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。

 (二)概要设计

1.单词符号及内部表示表

单词符号

种别码

Int

1

关键字

break

2

关键字

if

3

关键字

long

4

关键字

while

5

关键字

union

6

关键字

return

7

关键字

double

8

关键字

else

9

关键字

X1+

10

标识符

25.2

11

数字

+-*、><

13~28

符号

// 跳过空白符,直至读入一个非空字符

char GetBC(int *p)

{

while(chStream[*p] == ' '){

(*p)++;

}

return chStream[(*p)++];

}

// 判断是否为字母

int IsLetter(char c)

{

    if(((c>='a')&&(c<='z'))||((c>='A')&&(c<='Z'))||ch=='~'){

return 1;

}

return 0;

}

// 判断是否为数字

int IsDigit(char c)

{

    if((c>='0'&&c<='9')|c=='.'){

return 1;

}

return 0;

}

// 搜索指针回调一个字符位置

void Retract(int *p)

{

(*p)--;

}

// 运算符和界符的判断

void solve(int *p)

{

memset(strToken, 0, sizeof(strToken));

ch = GetBC(p); // 跳过空白符,直至读入一个非空字符

if(IsLetter(ch)){ // 第一个是字母,则可能是关键字也可能是标识符

int idx = 0;

while(IsLetter(ch) || IsDigit(ch)){

strToken[idx++] = ch;

ch = GetChar(p);

}

输入:输入源码字符串,然后以@结尾就好。

输出:会在屏幕上输出分析后的结果序列。

  • 收获、不足与感想

成功实现了基本的词法分析器,能够识别关键字、标识符、数字和符号。使用了数组和指针等基本数据结构和操作。可能需要更多的注释和说明,以提高代码的可读性和可维护性。对于错误处理和异常情况的处理较为简单,可以进一步完善。通过编写词法分析器,加深了对字符处理、数组操作和程序流程控制的理解。学到了如何处理关键字、标识符和数字等基本语法结构。这是一个简单但有效的词法分析器,还可以进一步扩展和改进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/218245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装odoo17 Windows版时,PostgreSQL Database无法被勾选

安装odoo17 Windows版时&#xff0c;PostgreSQL Database无法被勾选。 出现的原因是&#xff0c;曾经安装过PostgreSQL Database&#xff1b;虽然可能已被卸载&#xff0c;但注册表内还有残余信息&#xff0c;导致odoo认为PostgreSQL Database仍存在于系统之中。 解决方案 删…

MySQL忘记root密码和修改root密码的解决方法

文章目录 &#xff08;1&#xff09;简介&#xff08;2&#xff09;MySQL 5.5 忘记root密码&#xff08;3&#xff09;MySQL 5.6 忘记root密码&#xff08;4&#xff09;MySQL 8.0 忘记root密码&#xff08;5&#xff09;MySQL 5.6修改root密码&#xff08;6&#xff09;MySQL …

美易官方:构建多元化证券投资组合

掌握美股投资的黄金法则&#xff1a;构建多元化证券投资组合 亲爱的投资者朋友们&#xff0c;当我们迈入充满活力与机遇的美股市场&#xff0c;我们的心中都满怀期待和激动。在这个全球关注的金融舞台上&#xff0c;如何构建一个可靠、安全且多样化的证券投资组合成为了一门艺…

三勾商城新功能-电子面单发货

商家快递发货时可以选择在线下单,在线获取和打印电子面单。免去手写面单信息以及避免填写运单号填错,系统会自动填写对应发货商品的运单信息 快递100电子面单1、进入快递100&#xff0c;点击登录 2、登录成功后&#xff0c;点击“电子面单与云打印” 3、进入电子面单与云打印后…

15、vue3(十五):首页实现,暗黑模式,主体颜色设置

目录 一、首页实现 1.代码实现 2.效果展示 二、暗黑模式 1.思路分析

arcgis api for js 中的query实现数据查询

相当于服务地址中的query查询 获取图层范围内的数据4.24 import Query from arcgis/core/rest/support/Query; import * as QueryTask from "arcgis/core/rest/query";//获取图层范围内的数据4.24 _returnFeatureFromWhere(url, where, geo) {const self thisretu…

基于Java食堂餐饮店铺管理系统

基于Java食堂餐饮店铺管理系统 功能介绍 1、订单管理&#xff1a;对食堂的订单进行管理&#xff0c;包括订单的录入、查询、修改等功能。 2、菜品管理&#xff1a;对食堂的菜品进行管理&#xff0c;包括菜品的添加、删除、修改等功能&#xff0c;同时能够设置菜品的原材料、…

AI全栈大模型工程师(二十七)如何部署自己 fine-tune 的模型

服务器价格计算器 火山引擎提供的这个价格计算器很方便&#xff0c;做个大概的云服务器 GPU 选型价格参考。其它服务厂商价格相差不是很多。 https://www.volcengine.com/pricing?productECS&tab2 高稳定和高可用地部署模型 序号模块名称描述1负载均衡将流入的请求分发到多…

GKeyFile 是一个用于存储和检索按键值对

Glibc 中的 GKeyFile 库 GKeyFile 是一个用于存储和检索按键值对的文件格式&#xff0c;其中按键名称和值可以是任意字符串。在 GKeyFile 文件中&#xff0c;每个条目都由一行文本组成&#xff0c;其中键和值由等号&#xff08;&#xff09;分隔。 以下是一个使用 g_key_file…

基于Java SSM框架实现沙县小吃门店连锁点餐订餐系统项目【项目源码+论文说明】

基于java的SSM框架实现县小吃门店连锁点餐订餐系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 沙县小吃点餐系统&#xff0c;主要的模块包括实现管理员&#xff1b;个人中心、用户管…

WebSocket实现数据的实时推送

一、简介&#xff08;什么是WebSocket&#xff09; WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工&#xff08;full-duplex&#xff09;通信&#xff0c;即允许服务器主动发送信息给客户端。因此&#xff0c;在WebSocket中&#xff0c;浏览器和服务…

FastDDS 安装 foonathan_memory_vendor 找不到 not found

FastDDS 安装 foonathan_memory_vendor 找不到 cmake -v 3.23.2 git clone https://github.com/eProsima/foonathan_memory_vendor.git cd foonathan_memory_vendor mkdir build && cd build # cmake .. 编译不成功需要替换为如下&#xff1a; cmake -DCMAKE_INSTALL…

Linux 安装图形界面 “startx”

———————————————— 报错&#xff0c;如下&#xff1a; bash :startx command not found ———————————————— 解决方法&#xff1a; 1.先安装 — X Windows System&#xff0c;输入以下命令&#xff1a; yum groupinstall “X Window System”…

盘点2023年低代码平台TOP10

盘点2023年低代码平台TOP10 1 什么是低代码平台2 十大低代码平台2.1 IVX2.2 简道云2.3 伙伴云2.4 企名片one2.5 明道云2.6 轻流2.7 速融云2.8 轻舟——网易2.9 钉钉宜搭2.10 腾讯云-微搭 1 什么是低代码平台 低代码平台是一种开发软件的方法&#xff0c;它可以通过简单的拖放和…

【Anaconda】Ubuntu anaconda使用(新建环境、最小化安装Tensorflow)

Ubuntu anaconda使用&#xff08;新建环境、最小化安装Tensorflow&#xff09; 清华源地址&#xff1a; https://pypi.tuna.tsinghua.edu.cn/simplepip安装使用的时候&#xff0c; pip install xxx(库名) -i https://pypi.tuna.tsinghua.edu.cn/simple请先安装好anaconda&am…

Python 递归及目录遍历

递归调用&#xff1a;一个函数&#xff0c;调用了自身&#xff0c;称为递归调用 递归函数&#xff1a;一个会调用自身的函数 凡是循环能做的事&#xff0c;递归都能做。 目录 递归示例 普通方法实现 递归方式实现 计算分析&#xff1a; 递归遍历目录 引入os 遍历目录 执…

基于SSM的小儿肺炎知识管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

MobileNet网络

介绍 MobileNet 网络专注于移动端或者嵌入式设备中的轻量级CNN网络&#xff0c;相比传统卷积神经网络&#xff0c;在准确率小幅降低的前提下大大减少模型参数与运算量&#xff08;相比VGG16准确率减少了0.9%&#xff0c;但模型参数只有VGG的1/32&#xff09; 网络中的亮点&am…

Go 语言开发工具

Go 语言开发工具 VSCode VScode 安装教程参见&#xff1a;https://www.kxdang.com/topic//w3cnote/vscode-tutorial.html 然后我们打开 VSCode 的扩展&#xff08;CtrlShiftP&#xff09;&#xff1a; 搜索 go&#xff1a; 点击安装&#xff0c;安装完成后我们就可以使用代码…

利用知识付费小程序,我有才打造高效的知识传播渠道

在当今信息爆炸的时代&#xff0c;知识管理已经成为了每个人必须面对的问题。然而&#xff0c;市面上的知识付费平台大多数都是通用的&#xff0c;无法满足个性化需求。 因此&#xff0c;我有才提供了一款专属定制的适合个人的知识付费平台。核心产品能力如下&#xff1a; 一…