首页 > 其他分享 >Tiny+ yuyan词法之C语言

Tiny+ yuyan词法之C语言

时间:2023-05-21 10:04:15浏览次数:30  
标签:判断 语法分析 Tiny C语言 yuyan bool str 特殊符号

访问【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 函数中,在语义上判断条件必须返回布尔类型的值,因此我们加入一个判断,判断是否结果为布尔类型,如果不是的话就抛出异常。

Tiny+ yuyan词法之C语言_语义分析

Tiny+ yuyan词法之C语言_语法分析_02

Tiny+ yuyan词法之C语言_特殊符号_03

Tiny+ yuyan词法之C语言_语义分析_04

标签:判断,语法分析,Tiny,C语言,yuyan,bool,str,特殊符号
From: https://blog.51cto.com/u_16075443/6318621

相关文章

  • C语言函数大全-- _w 开头的函数(5)
    C语言函数大全本篇介绍C语言函数大全--_w开头的函数1._wspawnl1.1函数说明函数声明函数功能int_wspawnl(intmode,constwchar_t*cmdname,constwchar_t*arglist,...);启动一个新的进程并运行指定的可执行文件参数:mode:启动命令的模式,可以是_P_W......
  • c语言趣味编程
    三色球问题1#include<iostream>2usingnamespacestd;3intmain()4{5intcount=0;6for(inti=0;i<=3;i++)7{8for(intj=0;j<=3;j++)9{10for(intk=0;k<=6;k++)11{12......
  • C语言定义和声明
    1、定义:创建一个对象,为这个对象分配一块内存并给他去上一个名字,一个变量只能被定义一次。2、声明:告诉编译器,这个名字已经被匹配到一块内存上了,变量或对象是在别的地方定义的,声明可以出现很多次,声明是为了扩大变量的适用范围。......
  • C语言程序设计(第四版)谭浩强版 课后答案 第八章 指针
    1、输出3个整数,按由小到大的顺序输出,写的复杂了,加上分析会变得简单,像下面输出3个字符(从小到大)#include<stdio.h>intmain(){voidcompare(int*a,int*b,int*c);inta,b,c;printf("pleaseinputthreenumbers:");scanf("%d%d%d",&a,&b,&c);c......
  • Create Vite App 支持 OpenTiny 啦
    大家好,我是Kagol,个人公众号:前端开源星球。一个月前,日日自新写了一篇介绍CreateViteApp开源项目的文章:基于vite4.x快速搭建开箱即用,高度可定制化模版脚手架CreateViteApp是基于esbuild+commander+ejs模板渲染进行开发脚手架,用于创建vite4.xtypescript5.xvite......
  • C语言函数大全-- _w 开头的函数(4)
    C语言函数大全本篇介绍C语言函数大全--_w开头的函数1._wstrtime1.1函数说明函数声明函数功能wchar_t*_wstrtime(wchar_t*buffer);用于获取当前系统时间并返回一个宽字符字符串表示,格式为"HH:MM:SS"(小时:分钟:秒)参数:buffer:一个指向wchar_t类型数组......
  • C语言函数大全-- _w 开头的函数(3)
    C语言函数大全本篇介绍C语言函数大全--_w开头的函数1._wmkdir1.1函数说明函数声明函数功能int_wmkdir(constwchar_t*dirname);用于创建指定路径名的新目录参数:dirname:指向以null结尾的宽字符数组,该数组包含要创建的目录的路径1.2演示示例#in......
  • C语言--动态内存分配2
    realloc--追加动态内存空间relloc函数追加的两种形式:原动态内存空间后有足够空间进行追加时直接追加。返回原动态内存地址。原动态内存空间厚不够追加空间时,则重新开辟动态内存空间,复制原有内存空间大小、数据并在  其后追加空间。释放原动态内存,返回新的动态内存地址。动态内......
  • C语言编程—常量
    常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。常量就像是常规的变量,只不过常量的值在定义后不能进行修改。常量可以直接在代码中使用,也可以通过定义常量来使用。整数......
  • 打卡 c语言趣味编程 求最小公倍数
    问题描述:求任意两个正整数的最小公倍数(LCM)。思路:输入两个正整数,假设为num1和num2。定义一个变量lcm并初始化为较大的那个数(即lcm=max(num1,num2))。进入一个循环,循环条件为lcm不能同时被num1和num2整除。在每次循环中,将lcm增加1。循环结束后,lcm的值就是最小......