编译原理
文章平均质量分 64
lipeng08
字节跳动 分布式存储系统 开发工程师
展开
-
小白说编译原理-9-最简单minus-c语言编译器
简介继上节8说到利用手动构建的语法树解析下面的c语言代码: a = 1 sum = 0 input(x) while(a <= x){ sum = sum + a a = a+1; } print(sum)而一个编译器不应该依赖用户去手动构建对应语言的语法树,我们需要的是一种支持自动构建语法树的策略。本节将要说明的就是如何利用原创 2016-05-07 23:01:51 · 7679 阅读 · 5 评论 -
小白说OpenMP:从头到尾
初衷带并行课的上机,自己并不会OpenOMP,因此打算抽时间学习并记录一下。 我准备利用一个博客的内容,将OpenOMP的基本知识点过一遍,要求有基本介绍,个人的分析,示例代码以及运行结果截图; 时间关系,自己并没有太多的精力挖掘高级知识点的用途,因此就不作阐述了。编译环境为visual studio2013.简介当前cpu基本都是走向多核架构,通过多线程编程可以充分发挥多核cpu的优势,从而缩短程原创 2016-05-09 21:17:13 · 2497 阅读 · 0 评论 -
小白说编译原理-8-简单minus-c语言编译树(支撑类)
简介本章在上一节7的基础上对编译树进行完善。 上一节7的编译树仅仅支持算术表达式的+-基本运算,本节对其进行扩充,使其支持不仅支持基本的算术运算,还支持变量,支持语句(if, while,input, ouput),经过这次扩充,它形成的语法树已经基本具备了表达minus-c语言的能力。简单说来,它可以表示下面的c语言代码:a = 1if(a>10){ a = 11}else{ a =原创 2016-05-07 22:37:39 · 4769 阅读 · 0 评论 -
小白说编译原理-7-算术表达式编译树(支撑类)
简介本章讲述的是编译树的实现,它包含树节点,树的构建,树的遍历三个部分。利用编译树,我们可以构建基本的运算节点以及数字节点,然后遍历树的过程就是执行算术运算的过程。 例如如下的一棵树 叶子节点和分支节点都是一个个的Node,它具有不同的类型(运算符和数字)。代码如下#include <iostream>#include <malloc.h>using namespace std;#def原创 2016-05-07 21:50:49 · 3898 阅读 · 0 评论 -
小白说编译原理-5-变量支持计算器
简介本章依然专注于使用yacc实现计算器,主要的特点是给算术运算增加变量支持。模块拆分它主要分为3个模块 1. lex词法分析器 2. yacc语法分析器 3. 符号表功能描述1. lex词法分析器正规式的定义如下:delim [ \t]ws {delim}+letter [a-zA-Z]digit [0-9]id {letter}({letter}|{digit})*/原创 2016-05-06 09:25:24 · 3230 阅读 · 2 评论 -
小白说编译原理-3-yacc基本用法
前提说明前面lex的例子说明了可以通过定义正规式的方式,实现一个词法分析器。 它主要是通过lex编译器将用户定义的正规式以及相应的action编译成对应的c++代码,交给c++编译器生成可执行程序exe。 同样的,应该可以定义语法规则,并由语法编译器将语法规则以及action编译成相应的c++代码,并执行。 这就是我们这节要说明的yacc。yacc规则声明部分 C++头文件,函数声明原创 2016-04-23 13:40:19 · 8321 阅读 · 0 评论 -
小白说编译原理-1-前提简介
基础介绍大学选修编译原理课,内容较浅,没有听说过“龙书”,考试靠背诵。 工作以及读研主要搞c++,没系统学习过编译原理。上学期,帮王老师带过一次编译原理上机课,本人主要负责打酱油,完全由实验室的另一个姓黄的小伙伴挑大梁。这个系列准备说啥?1,lex和yacc工具,编写 2,将lex,yacc工具生成的代码与外部编写的代码联合起来,组装简单的编译器 3,能实现了一个mini的c的编译器, 不要求实原创 2016-04-21 16:41:02 · 2425 阅读 · 3 评论 -
小白说编译原理-2-lex基本用法
lex词法分析器概述1,使用lex语言书写一套正规表达式的规则,命名为lex.l 2,由lex编译器负责将lex.l编译为lex.h和lex.cpp,这两个文件包含了lex定义的规则 3,再使用标准的c++编译器即可以将lex.cpp编译生成可执行程序lex.exe 4,lex.exe识别输入流,并将其转换为字符序列,并执行相应的操作(在lex.l中定义)lex样例%{/***/%}//原创 2016-04-23 09:55:45 · 8839 阅读 · 0 评论 -
小白说编译原理-4-计算器yacc
前提说明上一节通过一个yacc代码示例,说明一个简单计算器的编写。 它支持浮点数的+-*/运算,以及括号,对空格也可以很好的识别。本节准备的工作依据编译原理中简单编译器的代码,实现一个上述的编译器。 它不同于yacc代码的自动生成,它纯粹手写,实现了语法规则。我以前并不了解这种代码的编写,不知道如何根据规则来实现相应的代码,这次经同实验室的余同学提醒,说是这种机制很容易实现,叫做递归下降法。要实现的原创 2016-04-23 14:00:17 · 3384 阅读 · 0 评论 -
小白说编译原理-6-lex和yacc环境配置-多图
lex和yacc的使用很简单,但环境配置却是各种问题,本章说明lex和yacc在windows下的环境配置。软件需求: 系统 win7-64位(win7-32, win8, win10全部通过) c++编译器: vs2010(2008,2013,2015也全部通过) lex和yacc编译器: ParGen.exe基本流程: 安装Pargen.exe,采用的默认目录安装在C:\Program原创 2016-05-06 11:14:39 · 15545 阅读 · 8 评论