首页 > 股票资讯 正文

词法分析器的简单思考 000554资金流向

时间:2021-03-10 07:23:17作者:佚名

词法分析是编译器的第一个也是最简单的模块。

它的作用是将程序源代码转换成词汇词,用于后续的语法分析。

词汇分析简介,写在之前的文章里。

这里有一个简单的实现方法。

1、首先需要一个读写源文件的IO代码。

可以使用fgetc、fread等FILE*类型和F系列函数,也可以使用其他语言的file IO函数。

不推荐Linux的读取功能。

因为编译器代码需要跨平台,直接使用操作系统的API代替现有编程语言的API,可能在这一点上有不利影响。

2,需要动态字符串。

类似redis的Sds类型,或者C++的字符串类型。

大多数高级语言中的字符串类型可以满足这一要求。

c语言异常,你可能需要写一个简单的动态字符串实现。

因为词法分析需要逐个读取源字符,然后根据空格等分隔符拆分成不同的单词,所以需要动态字符串。

一个单词的每个字符不是一次确定的,而是随着词法分析过程一起添加的。

3,需要一个关键词列表。

关键字列表,用于指示哪些标记是关键字以及关键字的语义是什么。

语义可以用枚举类型的整数来表示,这是代码可以看到的。

关键字的文本串是给人看的,要尽量接近自然语言(一般是英文单词)。

4.关键字以外的类型包括标记、常量和运算符。

常量的文字值可以是整数、浮点数、常量字符串。

其中常量字符串可以包含转义字符,如 等。,应该将其转换为相应的ascii码。

整数和浮点数,应该转换成对应的数字。

(在源代码中,它们都是文本字符串)

为了打印调试信息,建议记录源代码的原始文本和常量的值(语义)。

标记的语义,如类型、变量、函数等。,只能在解析时确定。

这里只记录原文,语义一般暂称标记。

运算符的语义应该尽量在这里确定。

这样可以大大简化后续语法分析的难度。

"

然而,为了照顾过去的编程惯例和ascii码中有限的运算符,一些符号的模糊性是不可避免的。

比如,*可能是乘法或者指针值,只能在词法阶段确定为星号,是否是乘法符号要在解析时确定。

同样的,&:是取一个变量的地址还是按位AND运算也要经过语法分析。

获取地址和获取指针的值都是单目操作。

乘法和按位“与”是双目运算。

这两者在语法分析上是不难区分的。

单目算子后面跟一个表达式(表达式可以只是一个变量),单目算子本身可以位于一个表达式的开头,也可以跟一个双目算子。

*p或* of 1+*p是指针的值。

a*b的*是乘法。

双目运算符前后都有表达式(表达式可以只是一个变量)。

5,()、


以上就是词法分析器的简单思考000554资金流向的全部内容了,喜欢我们网站的可以继续关注承浩股票网其他的资讯!