Tiny+ 语言词法之C语言

news/2025/1/11 0:33:49/

访问【WRITE-BUG数字空间】_[内附完整源码和文档]

语义分析本质上就是在语法分析的基础上进一步完善分析的功能。举个例子来说,在语法分析部分的 if_stmt 函数中,在语义上判断条件必须返回布尔类型的值,因此我们加入一个判断,判断是否结果为布尔类型,如果不是的话就抛出异常。

一、关键词(KEY)
Tiny+ 中可能出现的关键词包括以下这些

// 定义语法中所有可能出现的关键词
bool Token::is_KEY(string& str) {
return str == “true” || str == “false” || str == “or” ||
str == “and” || str == “not” || str == “int” ||
str == “bool” || str == “string” || str == “while” ||
str == “do” || str == “if” || str == “then” ||
str == “else” || str == “end” || str == “repeat”
|| str == “until” || str == “read” || str == “write”;
}
二、特殊符号(SYM)
常见特殊符号包括以下这些,其中注释用大括号包括。

// 判断是否为特殊符号
bool LexicalAnalysis::is_special_symbol(char c) {
return c == ‘:’ || c == ‘,’ || c == ‘;’ ||
c == ‘<’ || c == ‘>’ || c == ‘=’ ||
c == ‘+’ || c == ‘-’ || c == ‘*’ ||
c == ‘/’ || c == ‘(’ || c == ‘)’ ||
c == ‘{’ || c == ‘}’;
}
其中单引号包括起来的是字符串,需要特殊考虑。在处理单引号包括的内容时,我们不做任何处理,并维持当前单引号状态

三、标识符(ID)
标识符由非数字开头的字符串,用来代表变量名等。

四、空白(blank)
Tiny 中常见空白包括:空格(0x20)、水平制表(0x09)、垂直制表(0x0B)、换页(0x0C)、回车(0x0D)和换行符(0x0A)

语义分析实验
一、实验目的
语义分析本质上就是在语法分析的基础上进一步完善分析的功能。举个例子来说,在语法分析部分的 if_stmt 函数中,在语义上判断条件必须返回布尔类型的值,因此我们加入一个判断,判断是否结果为布尔类型,如果不是的话就抛出异常。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/80655.html

相关文章

Linux 学习目录合集【文章索引】

前言&#xff1a;本内容为笔者自学笔记内容。 本文中的操作环境&#xff1a;腾讯云服务器&#xff1a;CentOS 7.6 64bit 学习阶段规划&#xff1a; Linux 基本操作【基本命令、vim、makefile使用等】Linux 系统【进程&#xff1a;概念、控制、通信&#xff1b;IO基础&#xff1…

Java中自定义注解

当使用Java编写应用程序时&#xff0c;我们常常使用注解来为程序添加附加信息&#xff0c;并且可以在运行时读取这些注解。除了Java提供的预定义注解外&#xff0c;我们还可以自定义注解来满足自己的需求。在本文中&#xff0c;我们将介绍Java中自定义注解的基础知识。 一、什…

JVM-0522

JVM性能调优 一、概念 1.生产环境中的问题 生产环境发生了内存溢出该如何处理&#xff1f;生产环境应该给服务器分配多少内存合适&#xff1f;如何对垃圾回收器的性能进行调优&#xff1f;生产环境CPU负载飙高该如何处理&#xff1f;生产环境应该给应用分配多少线程合适&…

【Hbase 05】Hbase表的设计原则与优化方案

这里说一下Hbase在使用过程中的表设计原则与优化方案,如果你是运维或者开发兼顾环境的工作,也许比较受用,话不多说,我们直接开始说优化的内容: 一、表设计原则 1.行键设计 行键在设计的时候要尽量的散列,例如可以考虑使用哈希、加密算法等使结果散列,这样能保证请求不会…

操作系统第三章——存储系统(下)

锦衣雪华玉颜色&#xff0c;回眸一笑天下倾 文章目录 3.2.1 虚拟内存的基本概念知识总览传统存储方式的特征&#xff0c;缺点局部性原理虚拟内存的定义如何实现虚拟内存技术知识总结 3.2.2 请求分页管理方式知识总览页表机制缺页中断机制地址变换机制知识回顾 3.2.3 页面置换算…

DirectX12 简单入门(二)

完成了初始化工作就需要加载渲染时需要的资源。 加载资源 首先需要使用ID3D12Device的CreateRootSignature方法创建RootSignature&#xff0c;这是D3D12里一个重要的接口。他将所有pipeline使用的资源联系在一起。为了区分不同APP所使用的资源&#xff0c;每一个APP使用一个R…

Fluid 助力数据处理,让弹性伸缩更加智能化

弹性伸缩是现代数据处理中一个重要的概念&#xff0c;它是指在处理海量数据时&#xff0c;根据数据量的变化动态地调整计算资源&#xff0c;以达到高效处理的目的。弹性伸缩的优势在于能够充分利用计算资源&#xff0c;降低计算成本&#xff0c;提高数据处理效率。而 Fluid 则是…

Python之将日志写入到文件(二十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…