哈工大威海 编译原理实验报告资料

哈工大威海 编译原理实验报告资料
哈工大威海 编译原理实验报告资料

《编译原理》实验报告

班级:

学号:

姓名:

实验一词法扫描器设计

一实验目的

通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。

二实验内容

设计一个简单的类C语言的词法扫描器。

三实验要求

(一)程序设计要求

(1)根据附录给定的文法,从输入的类C语言源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分隔符五大类;文

法见最后附录。

(2)提供源程序输入界面;

(3)词法分析后可查看符号表和TOKEN串表;

(4)保存符号表和TOKEN串表(如:文本文件);

(5)遇到错误时可显示提示信息,然后跳过错误部分继续进行分析。

(二)实验报告撰写要求

(1)系统功能(包括各个子功能模块的功能说明);

(2)开发平台(操作系统、设计语言);

(3)设计方案;

1)主数据流图;

2)主要子程序的流程框图(若有必要);

3)模块结构图;

4)主要数据结构:符号表、TOKEN串表等。

(4)具体设计过程(包括主控程序、各个功能模块的具体实现)。

1.系统功能:

根据附录给定的文法,从输入的类C语言源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分隔符五大类。然后输出本源程序的符号表显示在dos界面和存放在文本文件中。本程序以如下源程序(语法分析的例子)示范:

源程序;

int a;

int b;

int c;

a=2;

b=1;

if (a>b)

c=a+b;

else

c=a-b;

子功能模块有:

关键字处理过程;字母的处理过程;数字的处理过程;整个词法分析处理过程;运算符处理过程以及主程序。

2.开发平台(操作系统、设计语言);

Windows 7,Microsoft Visual C++ 6.0

3.设计方案:

(1)主流程图:

(2)主要子程序的流程框图:

判断是否注释子模块①:

模块①判断是否是字符子模块②:

模块②判断是否为数字或者运算符子模块③:

N

模块③实验结果:

Test.txt内容:

Token.txt文件内容:

四实验总结:

通过词法分析实验,首先我认识到词法分析就是将字符序列转换为单词(Token)序列的过程。词法分析器一般以函数的形式存在,供语法分析器调用。词法分析阶段是编译过程的第一个阶段,这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。并且对符号表有了一定的理解,符号表是:

1、编译过程中编译程序不断汇集和反复查证出现在源程序中各种名字的属性和特征信息等有关信息。

这些信息通常记录在一张或几张符号表中。

2、符号表的每一项有两部分:

一部分是名字(标识符);一部分是名字属性(标识符的有关信息)。

3、编译过程中,每当扫描器(词法分析器)识别出一个名字后,编译程序就查阅符号表,看其是否在符号表中。

如果它是一个新名字就将它填进表里。

它的有关信息将在词法分析和语法-语义分析过程中陆续填入表中。

4、符号表是边填边用。

附录:类C语言的词法文法

id→ Letter

int10→ Num int10 | Num

OP→ +| - |* |/ |>| < | = | ( | ) | ; | ‘ | == | >= |<= | !=

Keyword→if | then | else | while | do

Letter→a|b|c|d|e|f|g|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P| Q|R|S|T|U|V|W|X|Y|Z

Num→0|1|2|3|4|5|6|7|8|9 |ε

→ Letter | Num

实验二 LR语法分析器设计

一实验目的

通过设计调试LR语法分析程序,实现根据词法分析的输入TOKEN字,进行文法的语法分析;加深对课堂教学的理解;提高语法分析方法的实践能力。

二实验内容

使用附录中的文法,可以对类似下面的程序语句进行语法分析:

int a;

int b;

int c;

a=2;

b=1;

if (a>b)

c=a+b;

else

c=a-b;

三实验要求

(一)程序设计要求

(1)给出主要数据结构:分析栈、符号表;

(2)将扫描器作为一个子程序,每次调用返回一个TOKEN;

(3)程序界面:表达式输入、语法分析的表示结果(文件或者图形方式);(二)实验报告撰写要求

(1)系统功能分析与设计(包括各个子功能模块的功能说明);

(2)开发平台(操作系统、设计语言);

(3)设计方案:包括功能模块结构图、主要函数的流程图;

(4)主要数据结构:分析栈、分析表、符号表;

(5)具体设计实现过程(包括主控程序、各个功能模块的具体实现)。

四实验总结

一:系统功能分析与设计:

可对一段包含加减乘除括号的赋值语句进行语法分析,其必须以$为终结符,语句间以;隔离,判断其是否符合语法规则,依次输出判断过程中所用到的产生式,并

输出最终结论。

二:开发平台(操作系统,设计语言)

Windows 7,Microsoft Visual C++ 6.0(Dos),C++

三:设计方案:(包括第四步的数据结构)

首先构造数据结构,分析栈,分析表,符号表等如下:

分析栈

struct FenXiZhan

{

char name[50];

char *type;

int value;

}FenXiZhan[1000];

分析表()

Table[31][20]

{108,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,4,0,0,0},

{0,0,0,0,0,0,0,0,0,0,1000,0,0,0,0,0,0,0,0,0},

{0,0,109,0,0,0,0,0,0,0,0,113,0,0,0,3,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,0,0,0,0,0},

{0,0,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{108,0,203,0,0,0,0,0,0,0,0,203,0,0,7,0,4,0,0,0},

{0,0,202,0,0,0,0,0,0,0,0,202,0,0,0,0,0,0,0,0},

{0,0,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,11,25},

{0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,205,0,205,0,0,0,0,0,0,0},

{0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,15,28,25},

{0,0,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,109,0,0,0,0,0,0,0,113,0,0,0,0,17,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0,0,118,0,0,0,0,0,0,0},

{0,0,109,0,0,0,0,0,0,0,113,0,0,0,0,19,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,206,0,206,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,121,123,0,0,0,0,0,0,0,0,0,0,0},

{0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,0,22},

{0,208,0,0,0,0,208,208,208,0,0,0,0,0,0,0,0,0,0,0},

{0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,0,24},

{0,209,0,0,0,0,209,209,209,0,0,0,0,0,0,0,0,0,0,0},

{0,210,0,0,0,0,210,210,210,0,0,0,0,0,0,0,0,0,0,0},

{0,211,0,0,0,0,211,211,211,0,0,0,0,0,0,0,0,0,0,0},

{0,212,0,0,0,0,212,212,212,0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,129,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,0,126,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0,30,25},

{0,0,0,0,0,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

符号表:

struct TokenTable

{

char *type;

int attr;

}TokenTable[1000];

具体思路:首先对源文件进行词法分析,然后产生符号表FenXiTable(),然后对词法分析产生的Token进行语法分析,用分析栈和分析表进行GOTO和ACTION函数进行语法分析。

五:具体实现过程:

Main函数:

词法分析流程:实验结果:

总结:通过这次语法分析LR(0)实验,我加深了对语法分析的理解,并且能熟练利用分析表进行GOTO函数和ACTION函数的应用,以前在书本上学到的东西,没有实验之前都很抽象,但是自己通过实验,利用数组产生了分析表,对LR(0)自动机也有了很深的理解!

附录:简单类c语言文法

产生式语义规则

注:P为文法的开始符号

说明语句部分文法:

P → D S

D →L id ; D |ε

L → int | float

程序语句部分文法:

S → id = E; S.code = E.code || gen(id.place’:=’E.place)

S → if (C)S1 C.true = newlabel; C.false = S.next;

S1.next = S.next;

S.code = C.code || gen(C.true’:’) || S1.code

S → if (C)S1 else S2

S → while (C)S1 do S2

C.true = newlabel; C.false = newlabel;

S1.next = S2.next =S.next;

S.code = C.code || gen(C.true’:’) || S1.code

|| gen(‘goto’S.next)|| gen(C.false’:’)|| S2.code;

S → S ;S

C → E1 > E2

C.code = E1.code || E2.code ||

gen(‘if’E1.place’>’E2.place’goto’C.true) ||

gen(‘goto’C.false)

C → E1 < E2 C.code = E1.code || E2.code ||

gen(‘if’E1.place’<’E2.place’goto’C.true) ||

gen(‘goto’C.false)

C → E1 == E2 C.code = E1.code || E2.code ||

gen(‘if’E1.place’=’E2.place’goto’C.true) ||

gen(‘goto’C.false)

E → E1 + T E.place = newtemp;

E.code = E1.code||T.code||

gen(E.place’:=’E1.place’+’T.place)

E → E1 – T E.place = newtemp; E.code = E1.code || T.code ||

gen(E.place’:=’E1.place’-’T.place)

E → T E.place = T.place; E.code = T.code

T → F T.place = F.place; T.code = F.code

T → T1 * F T.place = newtemp;

T.code = T1.code || F.code ||

gen(T.place’:=’T1.place’*’F.place)

T → T1 / F T.place = newtemp; T.code = T1.code || F.code ||

gen(T.place’:=’T1.place’/’F.place)

F → ( E ) F.place = E.place; F.code = E.code

F → id F.place = https://www.360docs.net/doc/5615678549.html,; F.code = ‘ ‘

F → int10 F.place = int10.value; F.code = ‘ ‘

实验三语义分析及中间代码生成

一实验目的

通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法范畴变换为某种中间代码的语义翻译方法。

二实验内容

实现简单的高级语言源程序的语义处理过程。

三实验要求

(一)程序设计要求

(1)目标机:8086及其兼容处理器

(2)中间代码:三地址码

(3)设计结果:语法分析树(节点具有属性)、三地址码表、符号表、TOKEN 串表

(4)语义分析内容要求:

1)变量说明语句

2)赋值语句

3)控制语句(任选一种)

(5)其它要求:

1)将词法分析(扫描器)作为子程序,供语法语义程序调用;

2)使用语法制导的语义翻译方法;

3)编程语言自定;

4)最好提供源程序输入界面;

5)目标代码生成暂不做;

6)编译后,可查看TOKEN串、符号表、三地址码表;

7)主要数据结构:产生式表、符号表、三地址码表。

所用文法使用实验2中的文法。

附录:语义分析源程序范例

int a;

int b;

int c;

a=2;

b=1;

if (a>b)

c=a+b;

else

c=a-b;

(二)实验报告撰写要求

(1)系统功能分析与设计(包括各个子功能模块的功能说明);

(2)开发平台(开发软硬件环境);

(3)语义翻译中使用的数据结构;

一:系统功能分析与设计:

在词法分析和语法分析的基础上进一步分析含义,主要的工作是静态语义检查和三地址代码的翻译。

二:开发平台;

Windows 7,Microsoft Visual C++ 6.0(Dos),C++

三:数据结构:

struct token//词法 token结构体

{

int code;//编码

int num;//递增编号

token *next;

};

token *token_head,*token_tail;//token队列

struct str//词法 string结构体

{

int num;//编号

string word;//字符串内容

str *next;

};

str *string_head,*string_tail;//string队列

struct ivan//语法产生式结构体

{

char left;//产生式的左部

string right;//产生式的右部

int len;//产生式右部的长度

};

ivan css[20];//语法 20个产生式

struct pank//语法 action表结构体

{

char sr;//移进或归约

int state;//转到的状态编号

};

pank action[46][18];//action表

int go_to[46][11];//语法 go_to表

struct ike//语法分析栈结构体,双链

ike *pre;

int num;//状态

int word;//符号编码

ike *next;

};

ike *stack_head,*stack_tail;//分析栈首尾指针

struct L//语义四元式的数据结构

{

int k;

string op;//操作符

string op1;//操作数

string op2;//操作数

string result;//结果

L *next;//语义四元式向后指针

L *Ltrue;//回填true链向前指针

L *Lfalse;//回填false链向前指针

};

L *L_four_head,*L_four_tail,*L_true_head,*L_false_head;//四元式链,true链,false 链

struct symb//语义输入时符号表

{

string word;//变量名称

int addr;//变量地址

symb *next;

};

symb *symb_head,*symb_tail;//语义符号链表

四:实验流程图:

广东工业大学编译原理实验报告

实验报告 课程名称____ 编译原理__________ 题目名称_ PL/0编译程序的修改扩充_ 学生学院______计算机学院__ 专业班级_______ ________ 学号 学生姓名______ ________ 指导教师____ _________ __ 20 年月日

一、课内实验要求 对PL/0作以下修改扩充: 增加单词:保留字ELSE,FOR,TO,DOWNTO,RETURN 运算符*=,/=,++,--,&,||,! 修改单词:不等号# 改为<> 增加条件语句的ELSE子句,要求:写出相关文法,语法图,语义规则。 二、实验环境与工具 计算机及操作系统:PC机,Windows2000,WindowsXP 程序设计语言:C 教学型编译程序:PL/0 设计方案 概述:源、目标语言,实现工具(平台),运行平台 源语言:PASCAL 目标语言:假想栈式计算机的汇编语言,可称为类PCODE指令代码 实现工具:Visual C++ 6.0 运行平台:Windows 7 三、设计方案 1.结构设计说明 (1)PL/0 语言编译器 PL/0语言可看成是PASCAL语言的子集,它的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。

(2)PL/0编译程序的语法分析过程BLOCK是整个编译过程的核心。这里根据编译程序的总体流程图,来弄清BLOCK过程在整个编译程序中的作用。总流程图如下图所示: PL/0语法调用关系图

PL/0 的编译程序采用一趟扫描方式,以语法分析程序为核心,词法分析程序和代码生 成程序都作为一个独立的过程,当语法分析需要读单词时就用词法分析程序,而当语法分析正确需生成相应的目标代码时,则调用代码生成程序。此外,用表格管理程序建立变量,常量和过程标识符的说明与引用之间的信息联系。用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错误性质。 (3)各功能模块描述

编译原理实验报告

编译原理实验报告 班级 姓名: 学号: 自我评定:

实验一词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验内容 根据教学要求并结合学生自己的兴趣和具体情况,从具有代表性的高级程序设计语言的各类典型单词中,选取一个适当大小的子集。例如,可以完成无符号常数这一类典型单词的识别后,再完成一个尽可能兼顾到各种常数、关键字、标识符和各种运算符的扫描器的设计和实现。 输入:由符合或不符合所规定的单词类别结构的各类单词组成的源程序。 输出:把单词的字符形式的表示翻译成编译器的内部表示,即确定单词串的输出形式。例如,所输出的每一单词均按形如(CLASS,VALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码;VALUE字段则是该标识符、常数的具体值或在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。对于关键字和运算符,采用一词一类的编码形式;由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。另外,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上放置单词类别的助记符。 三、实现方法与环境 词法分析是编译程序的第一个处理阶段,可以通过两种途径来构造词法分析程序。其一是根据对语言中各类单词的某种描述或定义(如BNF),用手工的方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应的状态矩阵,该状态矩阵同控制程序便组成了编译器的词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序的另外一种途径是所谓的词法分析程序的自动生成,即首先用正规式对语言中的各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程序所应进行的语义处理工作,然后由一个所谓词法分析程序的构造程序对上述信息进行加工。如美国BELL实验室研制的LEX就是一个被广泛使用的词法分析程序的自动生成工具。 总的来说,开发一种新语言时,由于它的单词符号在不停地修改,采用LEX等工具生成的词法分析程序比较易于修改和维护。一旦一种语言确定了,则采用手工编写词法分析程序效率更高。 四、实验设计 1)题目1:试用手工编码方式构造识别以下给定单词的某一语言的词法分析程序。 语言中具有的单词包括五个有代表性的关键字begin、end、if、then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。 单词的分类:构造上述语言中的各类单词符号及其分类码表。 表I 语言中的各类单词符号及其分类码表 单词符号类别编码类别码的助记符单词值

编 译 原 理 实 验 报 告

编译原理实验报告 课程:编译原理 系别:计算机系 班级:11网络 姓名:王佳明 学号:110912049 教师:刘老师 实验小组:第二组 1

实验一熟悉C程序开发环境、进行简单程序的调试 实验目的: 1、初步了解vc++6.0环境; 2、熟悉掌握调试c程序的步骤: 实验内容: 1、输入下列程序,练习Turbo C 程序的编辑、编译、运行。 #include main() { printf(“Programming is fun.\n”); } 2、分析程序,预测其运行结果,并上机检测你的预测。 #include main() { printf(“*\n”); printf(“* * *\n”); printf(“* * * * *\n”); printf(“* * * * * * *\n”); } 3、下面是一个加法程序,程序运行时等待用户从键盘输入两个整数,然后求出它们的和并输出。观察运行结果(程序输出),上机验证该程序。 #include main() { int a,b,c; printf(“Please input a,b:”); scanf(“%d,%d”,&a,&b); c=a+b; printf(“%d+%d=%d\n”,a,b,c); } 2

实验二词法分析器 一、实验目的: 设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。 二、实验要求: 1.对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。 2.本程序自行规定: (1)关键字"begin","end","if","then","else","while","write","read", "do", "call","const","char","until","procedure","repeat" (2)运算符:"+","-","*","/","=" (3)界符:"{","}","[","]",";",",",".","(",")",":" (4)其他标记如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 在屏幕上显示如下: ( 1 , 无符号整数) ( begin , 关键字) ( if , 关键字) ( +, 运算符) ( ;, 界符) ( a , 普通标识符) 三、使用环境: Windows下的visual c++6.0; 四、调试程序: 1.举例说明文件位置:f:、、11.txt目标程序如下: begin x:=9 if x>0 then x:=x+1; while a:=0 do 3

编译原理实验报告一

实验一词法分析程序实现 一、实验目得与要求 通过编写与调试一个词法分析程序,掌握在对程序设计语言得源程序进行扫描得过程中,将字符流形式得源程序转化为一个由各类单词符号组成得流得词法分析方法 二、实验内容 基本实验题目:若某一程序设计语言中得单词包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符与四个算术运算符,试构造能识别这些单词得词法分析程序(各类单词得分类码参见表I)。 表I语言中得各类单词符号及其分类码表 输入:由符合与不符合所规定得单词类别结构得各类单词组成得源程序文件。 输出:把所识别出得每一单词均按形如(CLASS,VALUE)得二元式形式输出,并将结果放到某个文件中。对于标识符与无符号常数,CLASS字段为相应得类别码得助记符;V AL UE字段则就是该标识符、常数得具体值;对于关键字与运算符,采用一词一类得编码形式,仅需在二元式得CLASS字段上放置相应单词得类别码得助记符,V ALUE字段则为“空". 三、实现方法与环境 词法分析就是编译程序得第一个处理阶段,可以通过两种途径来构造词法分析程序.其一就是根据对语言中各类单词得某种描述或定义(如BNF),用手工得方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应得状态矩阵,该状态矩阵连同控制程序一起便组成了编译器得词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序得另外一种途径就是所谓得词法分析程序得自动生成,即首先用正规式对语言中得各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程

哈工大威海实际力学试题及答案

哈尔滨工业大学(威海) 2011 / 2012 学年 秋 季学期 理论力学 试题卷(A ) 考试形式(开、闭卷):闭卷 答题时间:120(分钟)本卷面成绩占课程成绩 80 % 题号 一 二 三 四 五 卷 面 总 分 平 时 成 绩 课 程 总 成 绩 分数 一、填空题(每题6 分,共30分) 1、图示滚轮的半径为R ,轮心速度为v ,加速度为a ,沿水平直线作纯滚动,M 点加速度的大小为 。 2、图示匀质细杆各以匀角速度ω绕轴O转动。已知:杆长为,重为l P 。惯性力系向转轴O简化,主矢的大小为 ,主矩的大小为 。 3、如图所示,物块重P =150N ,靠在粗糙的水平天花板上,物体间静滑 动摩擦因数f s =0.3, 动滑动摩擦因数f =0.2, 在物块上加一力F ,且F = 200N ,θ=30°,摩擦力大小为 。 得分 教研室主任签字: 姓名: 班级: 学号 遵 守 考 试 纪 律 注 意 行 为 题,叉时,应采用金属隔板进行隔开处理;同一线槽内强电回路须同时切断习题要进行检查和检测处理。作并且问题,作为调试人员,需要在事前掌握图纸资料、设备制造厂家出具高中资料术资料,并且了解现场设备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。 调试调试技术是指发电机一变压器组在发生内部故障时,需要进行外部电源高中资中资料试卷主要保护装置。

4、如图所示结构受集中力P作用,各杆自重不计。则杆1的内力为。 (须注明拉、压) 5、如图所示,沿长方体的三个不相交且不平行的棱作用着3个大小相等 的力F,若力系简化为一合力,求棱a,b,c的关系。 二、计算题(10 分) 如图所示简支梁,不计梁的重量,在C处作用一铅垂力P。试求支座B处的约束力(要求用虚位移原理求解,用其它方法做不给分)。 得分 遵 守 考 试 纪 律 注 意 行 为 规 范 回 路 交 叉 时 , 应 采 用 金 属 隔 板 进 行 隔 开 处 理 ; 同 一 线 槽 内 强 电 回 路 须 同 时 试 卷 技 术 问 题 , 作 为 调 试 人 员 , 需 要 在 事 前 掌 握 图 纸 资 料 、 设 备 制 造 厂 家 出 具 料 试 卷 调 试 技 术 是 指 发 电 机 一 变 压 器 组 在 发 生 内 部 故 障 时 , 需 要 进 行 外 部 电

编译原理实验报告总结

学年第学期《编译原理》实验报告 学院(系):计算机科学与工程学院 班级:11303070A 学号:11303070*** 姓名:无名氏 指导教师:保密式 时间:2016 年7 月

目录 1.实验目的 (1) 2.实验内容及要求 (1) 3.实验方案设计 (1) 3.1 编译系统原理介绍 (1) 3.1.1 编译程序介绍 (2) 3.1.2 对所写编译程序的源语言的描述 (2) 3.2 词法分析程序的设计 (3) 3.3 语法分析程序设计 (4) 3.4 语义分析和中间代码生成程序的设计 (4) 4. 结果及测试分析 (4) 4.1软件运行环境及限制 (4) 4.2测试数据说明 (5) 4.3运行结果及功能说明 (5) 5.总结及心得体会 (7)

1.实验目的 根据Sample语言或者自定义的某种语言,设计该语言的编译前端。包括词法分析,语法分析、语义分析及中间代码生成部分。 2.实验内容及要求 (1)词法分析器 输入源程序,输出对应的token表,符号表和词法错误信息。按规则拼单词,并转换成二元形式;滤掉空白符,跳过注释、换行符及一些无用的符号;进行行列计数,用于指出出错的行列号,并复制出错部分;列表打印源程序;发现并定位词法错误; (2)语法分析器 输入token串,通过语法分析,寻找其中的语法错误。要求能实现Sample 语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while语句、do while语句等。 (3)语义分析和中间代码生成 输入token串,进行语义分析,修改符号表,寻找其中的语义错误,并生 成中间代码。要求能实现Sample语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while 语句、do while语句等。 实验要求:功能相对完善,有输入、输出描述,有测试数据,并介绍不足。3.实验方案设计 3.1 编译系统原理介绍 编译器逐行扫描高级语言程序源程序,编译的过程如下: (1).词法分析 识别关键字、字面量、标识符(变量名、数据名)、运算符、注释行(给人看的,一般不处理)、特殊符号(续行、语句结束、数组)等六类符号,分别归类等待处理。 (2).语法分析 一个语句看作一串记号(Token)流,由语法分析器进行处理。按照语言的文法检查判定是否是合乎语法的句子。如果是合法句子就以内部格式保存,否则报错。直至检查完整个程序。 (3).语义分析 语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是

编译原理标准实验报告

电子科技大学 实验报告 学生姓名:学号:指导教师: 实验地点:实验时间: 一、实验室名称:计算机学院软件工程实验室 二、实验项目名称:词法分析器的设计与实现 三、实验学时:4学时 四、实验原理 1.编译程序要求对高级语言编写的源程序进行分析和合成,生成目标程序。词法分析是对源程序进行的首次分析,实现词法分析的程序为词法分析程序。 2.词法分析的功能是从左到右逐个地扫描源程序字符串,按照词法规则识别出单词符号作为输出,对识别过程中发现的词法错误,输出相关信息。 3.状态转换图是有限有向图,是设计词法分析器的有效工具。 五、实验目的 通过设计词法分析器的实验,使同学们了解和掌握词法分析程序设计的原理及相应的程序设计方法,同时提高编程能力。 六、实验内容 实现求n!的极小语言的词法分析程序,返回二元式作为输出。 七、实验器材(设备、元器件) 1.操作系统:Windows XP

2.开发工具:VC6.0 3.普通PC即可 八、实验步骤 (1)启动VC6.0,创建空白工程项目。选择菜单中的“文件”->“新建”->“项目”,在弹出的对话框中,左边的“项目类型”框中,选择“Visual C++ 项目”,在右边框中,选择“空项目(.Net)”,在对话框下边,选择工程文件存放目录及输入名称,如Example1,单击“确定”。 (2)建立相应的单词符号与种别对照表; (3)根据状态转换图编写相应的处理函数; (4)完成词法分析器; (5)编译与调试以上程序; (6)生成相应的*.dyd文件,作为后面语法分析的输入文件。 九、实验数据及结果分析

可以对源程序进行词法分析,如果有错给出出错信息和所在行数,如果无错则生成二元式文件。 十、实验结论 本实验程序较好地完成了词法分析程序的设计与实现,能够对所给文法的程序进行词法分析,在没有词法错误的时候生成相应的二元式文件。该实验程序可一次性给出源程序中的词法错误。 十一、总结及心得体会 通过该实验,对词法分析程序的设计,以及运用C语言进行编程有了更深刻的理解,同时加深了自己对词法分析程序的原理的理解与掌握,提高了自己的动手能力。 十二、对本实验过程及方法、手段的改进建议 程序设计合理,代码可进一步优化。 报告评分: 指导教师签字:

编译原理实验报告

学生学号实验课成绩 武汉理工大学 学生实验报告书 实验课程名称编译原理 开课学院计算机科学与技术学院 指导老师姓名饶文碧 学生姓名 学生专业班级 —学年第学期

实验课程名称:编译原理 实验项目名称单词的词法分析实验成绩 实验者专业班级组别 同组者实验日期 第一部分:实验分析与设计(可加页) 一、实验内容描述(问题域描述) 完成对某一种常用高级语言(如Pascal、C语言、PL/0语言)的各类单词进行词法分析,即对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词;并把其转换成属性字输出。 实验要求: (1)选择常用高级程序设计语言(如 Pascal、C语言、PL/0语言)的源程序作为词法分析对象。 (2)根据教学要求和学生具体情况,从上列语言之一中选取它的一个适当大小的子集,可以选取一类典型单词,也可以尽可能使各种类型的单词都能兼顾到。其基本要求是:对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词,并把其转换成属性字输出。 二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) #include #include #include #include char *table[7]={" ","main","int","if","then","else","return"},TOKEN[20],ch; //定义关键字 int lookup(char *TOKEN){ //关键字匹配函数 int m,i; for(i=1;i<6;i++){ if((m=strcmp(TOKEN,table[i]))==0) return(i); } return(0); } void out(int c,char *TOKEN){ //输出函数 printf("(%d,%s)\n",c,TOKEN); } void scanner(FILE *fp){ //扫描函数 char TOKEN[20]={'\0'}; char ch; int i,c; ch=fgetc(fp); //获取字符 指针fp并自动指向下一个字符 if(isalpha(ch)){ //判断该字符是否是字母

河北工业大学编译原理实验报告

编译原理实验报告 组员:韦廷廷(112455)、熊敏(112456)、马昊(113042) 任课老师:吴清

一、任务概述 本次实验我们要完成的任务主要是实现一个简单语言集的词法、语法和语义分析程序,验证实际编译系统的实现方法。我们组的分工并不是词法分析、语法分析、语义分析每人负责一个,而是先确定每种分析按照哪一种方法实现,然后每个人写出自己的想法,按照自己的想法实验,最后总结到一起,有问题大家一起讨论,共同商量解决的办法。 二、系统设计 实验采用的实现方法和依据: 语言中的各类单词符号及其分类码表

实验采用的实现方法和依据: 文法:E → T | E+T | E-T T → F | T*F | T/F F → i | (E) 三、系统实现(包括必要的框图,各.h和.c文件说明,所有函数功能的说明,数据结构、各种表格、变量等的说明,以及函数调用关系图等) (1)各.h和.c文件说明 Cifa.cpp的功能:字符串扫描识别。 Table.cpp的功能:存放SLR分析法需要用到的ACTION和GOTO表。 Yufa.cpp的功能:引用Cifa.cpp、Table.cpp两个文件进行语法、语义的分析。 (2)函数功能说明 词法分析部分函数说明: int lookup (char *token) //比较是否是关键字 int GetChar(char ch) //每调用一次,就把扫描指示器当前所指示的源程序字符送入字符变量ch,然后把扫描指示器前推一个字符位置。 int HandleError (void)//报错函数 int EXCUTE (int state, int symbol)//状态转换 int lookup (char *token) //比较是否是关键字

理论力学复习题及答案(哈工大版)汇总

一、是非题 1、力有两种作用效果,即力可以使物体的运动状态发生变化,也可以使物体发生变形。 (√) 2、在理论力学中只研究力的外效应。(√) 3、两端用光滑铰链连接的构件是二力构件。(×) 4、作用在一个刚体上的任意两个力成平衡的必要与充分条件是:两个力的作用线相同, 大小相等,方向相反。(√) 5、作用于刚体的力可沿其作用线移动而不改变其对刚体的运动效应。(×) 6、三力平衡定理指出:三力汇交于一点,则这三个力必然互相平衡。(×) 7、平面汇交力系平衡时,力多边形各力应首尾相接,但在作图时力的顺序可以不同。 (√) 8、约束力的方向总是与约束所能阻止的被约束物体的运动方向一致的。(×) 9、在有摩擦的情况下,全约束力与法向约束力之间的(应是最大)夹角称为摩擦角。(×) 10、用解析法求平面汇交力系的平衡问题时,所建立的坐标系x,y轴一定要相互垂直。 (×) 11、一空间任意力系,若各力的作用线均平行于某一固定平面,则其独立的平衡方程最多只有3个。 (×) 12、静摩擦因数等于摩擦角的正切值。(√) 13、一个质点只要运动,就一定受有力的作用,而且运动的方向就是它受力方向。(×) 14、已知质点的质量和作用于质点的力,质点的运动规律就完全确定。(×) 15、质点系中各质点都处于静止时,质点系的动量为零。于是可知如果质点 系的动量为零,则质点系中各质点必都静止。(×) 16、作用在一个物体上有三个力,当这三个力的作用线汇交于一点时,则此力系必然平衡。 (×) 17、力对于一点的矩不因力沿其作用线移动而改变。(√) 18、在自然坐标系中,如果速度υ= 常数,则加速度α= 0应是切线方向加速度为零。(×) 19、设一质点的质量为m,其速度 与x轴的夹角为α,则其动量在x轴上的投影为mvx =mvcos a。(√) 20、用力的平行四边形法则,将一已知力分解为F1和F2两个分力,要得到唯一解答,必须具备:已知 F1和F2两力的大小;或已知F1和F2两力的方向;或已知F1或F2中任一个力的大小和方向。 ( √) 21、某力在一轴上的投影与该力沿该坐标轴的分力其大小相等,故投影就是分力。 ( ×) 22、图示结构在计算过程中,根据力线可传性原理,将力P由A点传至B点,其作用效果不变。 (×)

编译原理实验报告

《编译原理》实验报告软件131 陈万全132852

一、需求分析 通过对一个常用高级程序设计语言的简单语言子集编译系统中词法分析、语法分析、语义处理模块的设计、开发,掌握实际编译系统的核心结构、工作流程及其实现技术,获得分析、设计、实现编译程序等方面的实际操作能力,增强设计、编写和调试程序的能力。 通过开源编译器分析、编译过程可视化等扩展实验,促进学生增强复杂系统分析、设计和实现能力,鼓励学生创新意识和能力。 1、词法分析程序设计与实现 假定一种高级程序设计语言中的单词主要包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符和四个算术运算符,试构造能识别这些单词的词法分析程序。 输入:由符合和不符合所规定的单词类别结构的各类单词组成的源程序文件。 输出:把所识别出的每一单词均按形如(CLASS,VALUE)的二元式形式输出,并将结果放到某个文件中。对于标识符和无符号常数,CLASS字段为相应的类别码的助记符;VALUE字段则是该标识符、常数的具体值;对于关键字和运算符,采用一词一类的编码形式,仅需在二元式的CLASS字段上放置相应单词的类别码的助记符,VALUE字段则为“空”。 2、语法分析程序设计与实现 选择对各种常见高级程序设计语言都较为通用的语法结构——算术表达式的

一个简化子集——作为分析对象,根据如下描述其语法结构的BNF定义G2[<算术表达式>],任选一种学过的语法分析方法,针对运算对象为无符号常数和变量的四则运算,设计并实现一个语法分析程序。 G2[<算术表达式>]: <算术表达式>→<项> | <算术表达式>+<项> | <算术表达式>-<项> <项>→<因式>|<项>*<因式>|<项>/<因式> <因式>→<运算对象> | (<算术表达式>) 若将语法范畴<算术表达式>、<项>、<因式>和<运算对象>分别用E、T、F和i 代表,则G2可写成: G2[E]:E → T | E+T | E-T T → F | T*F | T/F F → i | (E) 输入:由实验一输出的单词串,例如:UCON,PL,UCON,MU,ID······输出:若输入源程序中的符号串是给定文法的句子,则输出“RIGHT”,并且给出每一步分析过程;若不是句子,即输入串有错误,则输出“ERROR”,并且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的出错说明信息。 3、语义分析程序设计与实现 对文法G2[<算术表达式>]中的产生式添加语义处理子程序,完成运算对象是简单变量(标识符)和无符号数的四则运算的计值处理,将输入的四则运算转换为四元式形式的中间代码。 输入:包含测试用例(由标识符、无符号数和+、?、*、/、(、)构成的算术表达式)的源程序文件。 输出:将源程序转换为中间代码形式表示,并将中间代码序列输出到文件中。 若源程序中有错误,应指出错误信息 二、设计思路 1、词法分析程序设计与实现 1)单词分类 为了编程的实现。我们假定要编译的语言中,全部关键字都是保留字,程序员不得将它们作为源程序中的标识符;作了这些限制以后,就可以把关键字和标识符的识别统一进行处理。即每当开始识别一个单词时,若扫视到的第一个字符为字母,则把后续输入的字母或数字字符依次进行拼接,直至扫视到非字母、数字字符为止,以期获得一个尽可能长的字母数字字符串,然后以此字符串查所谓保留字表(此保留字表要事先造好),若查到此字符串,则取出相应的类别码;反之,则表明该字符串应为一标识符。

编译原理实验报告

实验一词法分析器的设计与实现 (1) 1)实验目的 (1) 2)实验内容 (1) 3)实验要求 (1) 4)实验原理 (1) 5)实验步骤 (1) 6)状态转化图及词法分析程序 (2) 7)测试 (7) 实验二语法分析器的设计与实现 (9) 1)实验目的 (9) 2)实验内容 (9) 3)实验要求 (9) 4)实验原理 (9) 5)实验步骤 (9) 6)语法分析程序 (10) 7)测试 (16)

编译原理实验报告 专业:计算机科学与技术 学生姓名: 学号: 48 完成时间:2020年11月25日

实验一词法分析器的设计与实现 1)实验目的 ①掌握正规式、状态转换图、C语言单词符号的划分及词法分析器的实现 ②掌握词法分析程序的作用和接口。 2)实验内容 设计及实现C语言程序的词法分析器。 3)实验要求 ①对任给的一个C语言源程序,能够虑掉空格、回车换行符、tab键及注释。 ②识别各类单词符号,如关键字、标识符、运算符、常数、界符,结果以二元式形式 输出。并构造符号表。 ③输出有词法错误的单词及所在行号。 4)实验原理 根据扫描到的单词符号的第一个字符的种类,分别转到相应的程序进行处理。这些程序的功能就是识别以相应字符开头的各类单词符号。

5)实验步骤 ①根据C语言各类单词的正规式,构造能识别各类单词的状态转换图。 ②根据状态转换图,构造识别各类单词的词法分析器。 6)状态转化图及词法分析程序

#include "" #include "" #include "" FILE *fp; int id; void main() { char cbuffer; char alphaprocess(char buffer); char digitprocess(char buffer); char otherprocess(char buffer); if ((fp=fopen("","r"))==NULL) /*以只读方式打开文件"",NULL在文件中已被定义为0*/ printf("error"); else { cbuffer=fgetc(fp); /*文件不为空则从文件中取字符*/ while (cbuffer!=EOF) /*EOF文件结束标志*/ { if(cbuffer==' '||cbuffer=='\n') /*掠过空格和回车符*/ { cbuffer=fgetc(fp); id=4; }

理论力学-哈工大版-公式定义总结

静力学知识点 静力学公理和物体的受力分析 本章总结 1.静力学是研究物体在力系作用下的平衡条件的科学。 2.静力学公理?公理1 力的平行四边形法则。 公理2二力平衡条件。?公理3 加减平衡力系原理?公理4作用和反作用定律。 公理5 刚化原理。 3.约束和约束力 限制非自由体某些位移的周围物体,称为约束。约束对非自由体施加的力称为约束力。约束力的方向与该约束所能阻碍的位移方向相反。 4.物体的受力分析和受力图?画物体受力图时,首先要明确研究对象(即取分离体)。物体受的力分为主动力和约束力。要注意分清内力与外力,在受力图上一般只画研究对象所受的外力;还要注意作用力和反作用力之间的相互关系。 常见问题 问题一画受力图时,严格按约束性质画,不要凭主观想象与臆测。 平面力系 本章总结 1. 平面汇交力系的合力 (1)几何法:根据力多边形法则,合力矢为 合力作用线通过汇交点。 ( 2 )解析法:合力的解析表达式为 2. 平面汇交力系的平衡条件 (1)平衡的必要和充分条件: (2)平衡的几何条件:平面汇交力系的力多边形自行封闭。?(3)平衡的解析条件(平衡方程): 3. 平面内的力对点O之矩是代数量,记为 一般以逆时针转向为正,反之为负。 或 4.力偶和力偶矩 力偶是由等值、反向、不共线的两个平行力组成的特殊力系。力偶没有合力,也不能用一个力来平衡。 平面力偶对物体的作用效应决定于力偶矩M的大小和转向,即

式中正负号表示力偶的转向,一般以逆时针转向为正,反之为负。 力偶对平面内任一点的矩等于力偶矩,力偶矩与矩心的位置无关。 5. 同平面内力偶的等效定理:在同平面内的两个力偶,如果力偶相等,则彼此等效。力偶矩是平面力偶作用的唯一度量。 6. 平面力偶系的合成与平衡 合力偶矩等于各分力偶矩的代数和,即 平面力偶系的平衡条件为 7、平面任意力系 平面任意力系是力的作用线可杂乱无章分布但在同一平面内的力系。当物体(含物体系)有一几何对称平面,且力的分别关于此平面对称时,可简化为平面力系计算。还有其他情况也可按平面任意力系计算。 本章用力的平移定理对平面任意力系进行简化,得到主矢主矩的概念,并进一步对力系简化结果进行讨论;然后得出平面任意力系的平衡条件,得出平衡方程的三种形式,并用平衡方程求解一些平衡问题;介绍静定超静定问题的概念,对物体系的平衡问题进行比较多的训练;最后介绍平面简单桁架的概念和内力计算。 常见问题 问题一不要因为这一章的内容简单,就认为理论力学容易学,而造成轻视理论力学的印象,这将给后面的学习带来影响。 问题二本章一开始要掌握好单个物体的平衡问题与解题技巧,这样才能熟练掌握物体系平衡问题的解法与解题技巧。 问题三在平时做题时,要注意解题技巧的训练,能用一个方程求解的就不用两个方程,但考试时则不一定如此。 第三章空间力系 本章总结 1.力在空间直角坐标轴上的投影 (1)直接投影法 (2)间接投影法(图形见课本) 2.力矩的计算 (1 )力对点的矩是一个定位矢量, (2)力对轴的矩是一个代数量,可按下列两种方法求得: ( a) ( b ) ( 3 )力对点的矩与力对通过该点的轴的矩的关系

编译原理实验报告(手打)

《编译原理》实验报告 班级:计C104 姓名:李云霄 学号:108490

实验一词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验内容 选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。 输入:由无符号数和+,-,*,/, ( , ) 构成的算术表达式,如1.5E+2-100。 输出:对识别出的每一单词均单行输出其类别码(无符号数的值暂不要求计算)。 三、实现方法与环境 1、首先设计识别各类单词的状态转换图。 描述无符号常数的确定、最小化状态转换图如图1所示。其中编号0,1,2,…,6代表非终结符号<无符号数>、<余留无符号数>、<十进小数>、<小数部分>、<指数部分>、<整指数>及<余留整指数>, 1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。 图1 文法G[<无符号数>]的状态转换图 其中编号0,1,2,…,6代表非终结符号<无符号数>、<余留无符号数>、<十进小数>、<小数部分>、<指数部分>、<整指数>及<余留整指数>, 1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。 在一个程序设计语言中,一般都含有若干类单词符号,为此可首先为每类单词建立一张状态转换图,然后将这些状态转换图合并成一张统一的状态图,即得到了一个有限自动机,再进行必要的确定化和状态数最小化处理,最后据此构造词法分析程序。 四则运算算术符号的识别很简单,直接在状态图的0状态分别引出相应标记的矢

编译原理实验报告

实验一词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验内容 选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。 输入:由无符号数和+,-,*,/, ( , ) 构成的算术表达式,如1.5E+2-100。 输出:对识别出的每一单词均单行输出其类别码(无符号数的值暂不要求计算)。 三、实现方法与环境 1、首先设计识别各类单词的状态转换图。 描述无符号常数的确定、最小化状态转换图如图1所示。其中编号0,1,2, (6) 表非终结符号<无符号数>、<余留无符号数>、<十进小数>、<小数部分>、<指数部分>、<整指数>及<余留整指数>,1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。 图1 文法G[<无符号数>]的状态转换图 其中编号0,1,2,…,6代表非终结符号<无符号数>、<余留无符号数>、<十进小数>、<小数部分>、<指数部分>、<整指数>及<余留整指数>,1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。 在一个程序设计语言中,一般都含有若干类单词符号,为此可首先为每类单词建立一张状态转换图,然后将这些状态转换图合并成一张统一的状态图,即得到了一个有限自动机,再进行必要的确定化和状态数最小化处理,最后据此构造词法分析程序。 四则运算算术符号的识别很简单,直接在状态图的0状态分别引出相应标记的矢线至一个新的终态即可。根据自己的习惯,也可以将其转换为状态矩阵形式。 2、词法分析程序编写 根据描述语言中各类单词的文法状态转换图或状态矩阵,利用某种语言(C语言或JA V A 语言)直接编写词法分析程序。 3、词法分析程序测试 用于测试扫描器的实例源文件中应有词法正确的,也应有错误的字符串,对于输入的测试用例的源程序文件,以对照的形式将扫描器的分析结果信息在输出文件中表示出来。四、参考资料 实现无符号数识别的参考方法:将设计的状态转换图直接转化为一张程序流程图,并在外层再增加一个以EOF为循环终止条件的while循环,即形成能连续识别各类单词的词法分析程序。 各类单词的编码建议如表1。 表1 单词的内部编码

编译原理实验报告(词法分析器语法分析器)

编译原理实验报告

实验一 一、实验名称:词法分析器的设计 二、实验目的:1,词法分析器能够识别简单语言的单词符号 2,识别出并输出简单语言的基本字.标示符.无符号整数.运算符.和界符。 三、实验要求:给出一个简单语言单词符号的种别编码词法分析器 四、实验原理: 1、词法分析程序的算法思想 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 2、程序流程图 (1 (2)扫描子程序

3

五、实验内容: 1、实验分析 编写程序时,先定义几个全局变量a[]、token[](均为字符串数组),c,s( char型),i,j,k(int型),a[]用来存放输入的字符串,token[]另一个则用来帮助识别单词符号,s用来表示正在分析的字符。字符串输入之后,逐个分析输入字符,判断其是否‘#’,若是表示字符串输入分析完毕,结束分析程序,若否则通过int digit(char c)、int letter(char c)判断其是数字,字符还是算术符,分别为用以判断数字或字符的情况,算术符的判断可以在switch语句中进行,还要通过函数int lookup(char token[])来判断标识符和保留字。 2 实验词法分析器源程序: #include #include #include int i,j,k; char c,s,a[20],token[20]={'0'}; int letter(char s){ if((s>=97)&&(s<=122)) return(1); else return(0); } int digit(char s){ if((s>=48)&&(s<=57)) return(1); else return(0); } void get(){ s=a[i]; i=i+1; } void retract(){ i=i-1; } int lookup(char token[20]){ if(strcmp(token,"while")==0) return(1); else if(strcmp(token,"if")==0) return(2); else if(strcmp(token,"else")==0) return(3); else if(strcmp(token,"switch")==0) return(4); else if(strcmp(token,"case")==0) return(5); else return(0); } void main() { printf("please input string :\n"); i=0; do{i=i+1; scanf("%c",&a[i]);

哈工大威海 编译原理实验报告资料

《编译原理》实验报告 班级: 学号: 姓名:

实验一词法扫描器设计 一实验目的 通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。 二实验内容 设计一个简单的类C语言的词法扫描器。 三实验要求 (一)程序设计要求 (1)根据附录给定的文法,从输入的类C语言源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分隔符五大类;文 法见最后附录。 (2)提供源程序输入界面; (3)词法分析后可查看符号表和TOKEN串表; (4)保存符号表和TOKEN串表(如:文本文件); (5)遇到错误时可显示提示信息,然后跳过错误部分继续进行分析。 (二)实验报告撰写要求 (1)系统功能(包括各个子功能模块的功能说明); (2)开发平台(操作系统、设计语言); (3)设计方案; 1)主数据流图; 2)主要子程序的流程框图(若有必要); 3)模块结构图; 4)主要数据结构:符号表、TOKEN串表等。 (4)具体设计过程(包括主控程序、各个功能模块的具体实现)。 1.系统功能: 根据附录给定的文法,从输入的类C语言源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分隔符五大类。然后输出本源程序的符号表显示在dos界面和存放在文本文件中。本程序以如下源程序(语法分析的例子)示范: 源程序; int a; int b;

int c; a=2; b=1; if (a>b) c=a+b; else c=a-b; 子功能模块有: 关键字处理过程;字母的处理过程;数字的处理过程;整个词法分析处理过程;运算符处理过程以及主程序。 2.开发平台(操作系统、设计语言); Windows 7,Microsoft Visual C++ 6.0 3.设计方案: (1)主流程图:

哈工大理论力学期末考试及答案

三、计算题(本题10分) 图示平面结构,自重不计,B 处为铰链联接。已知:P = 100 kN ,M = 200 kN ·m ,L 1 = 2m ,L 2 = 3m 。试求支座A 的约束力。 四、计算题(本题10分) 在图示振系中,已知:物重Q ,两并联弹簧的刚性系数为k 1与k 2。如果重物悬挂的位置使两弹簧的伸长相等,试求:(1)重物振动的周期;(2)此并联弹簧的刚性系数。 五、计算题(本题15分) 半径R =0.4m 的轮1沿水平轨道作纯滚动,轮缘上A 点铰接套筒3,带动直角杆2作上下运动。已知:在图示位置时,轮心速度C v =0.8m/s ,加速度为零,L =0.6m 。试求该瞬时:(1)杆2的速度2v 和加速度2a ;(2)铰接点A 相对于杆2的速度r v 和加速度r a 。 六、计算题(本题15分) 在图示系统中,已知:匀质圆盘A 和B 的半径各为R 和r ,质量各为M 和m 。试求:以φ和θ为广义坐标,用拉氏方程建立系统的运动微分方程。

七、计算题(本题20分) 在图示机构中,已知:纯滚动的匀质轮与物A 的质量均为m ,轮半径为r ,斜面倾角为β,物A 与斜面的动摩擦因数为'f ,不计杆OA 的质量。试求:(1)O 点的加速度;(2)杆OA 的内力。 答案 三、解,以整体为研究对象,受力如图所示。 由()0C M F =∑ 11222(2)20A x A y P L F L L F L M ?-?--?-= ……(1) 再以EADB 为研究对象受力如图所示, 由12()0 0B Ax Ay M F F L F L M =?-?-=∑ (2)

相关文档
最新文档