编译原理课程设计C语言编译器文档格式.docx

上传人:b****4 文档编号:16994914 上传时间:2022-11-27 格式:DOCX 页数:21 大小:32.38KB
下载 相关 举报
编译原理课程设计C语言编译器文档格式.docx_第1页
第1页 / 共21页
编译原理课程设计C语言编译器文档格式.docx_第2页
第2页 / 共21页
编译原理课程设计C语言编译器文档格式.docx_第3页
第3页 / 共21页
编译原理课程设计C语言编译器文档格式.docx_第4页
第4页 / 共21页
编译原理课程设计C语言编译器文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

编译原理课程设计C语言编译器文档格式.docx

《编译原理课程设计C语言编译器文档格式.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计C语言编译器文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

编译原理课程设计C语言编译器文档格式.docx

.

编程语言为C语言。

编程方法:

scanner部分根据DFA图用switch-case结构实现状态转换;

parser部分用递归下降分析方法实现。

(2)扫描器:

C-惯用的词法

1、语言的关键字:

elseifintreturnvoidwhile

2、专用符号:

+-*/<

<

=>

>

===!

==;

()[]{}/**/

3、其他标记是ID和NUM,通过下列正则表达式定义:

ID=letterletter*NUM=digitdigit*letter=a|..|z|A|..|Zdigit=0|..|9

?

4、空格由空白、换行符和制表符组成。

空格通常被忽略,除了它必须分开ID、NUM关键字。

5.注释用通常的C语言符号/*...*/围起来。

注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。

注释不能嵌套

各单词的状态转换图(DFA图如下)词法结构见文件"

"

中。

#

(3)分析器:

分析树结构见文件"

C-的BNF语法如下:

(4)代码设计说明:

程序结构:

语法分析函数parse通过调用词法分析函数getToken实现语法分析。

文件和函数的设计说明:

文件包含相应头文件,及main函数的实现;

文件包含符号表和分析数的数据结构及在其它文件中使用的变量;

文件和实现与词法分析和语法分析输出相关的函数printToken和printTree,以及分析树节点初始化相关的函数newStmtNode,newExpNode(Expkind)和copyString;

文件和实现词法分析,主要函数为getToken;

文件和实现语法分析,函数为与文法规则对应的函数。

关键数据结构

3.程序代码实现

文件代码如下:

==NULL)

{strcat(pgm,"

.tny"

);

}

source=fopen(pgm,"

r"

if(source==NULL)

{

fprintf(stderr,"

file%snotfound\n"

pgm);

return-1;

listing=stdout;

fprintf(listing,"

\nC-COMPILATION:

%s\n"

~

}

else

{EOF_Flag=TRUE;

returnEOF;

}

elsereturnlineBuf[linepos++];

}

<

tr))

{

returnreservedWords[i].tok;

returnID;

TokenTypegetToken(void)

{

*/

intgcd(intu,intv)

if(v==0)returnu;

elsereturngcd(v,u-u/v*v);

/*u-u/v*v==umodv*/

voidmain(void)

intx;

inty;

x=input();

y=input();

output(gcd(x,y));

-

>

=;

==;

!

错误用例:

/*AprogramtoperformEucild'

s

Algorithmtocomputegcd.*/

{returk;

re9;

!

"

/*umodv*/

语法分析用例:

正确用例:

()

/*Aprogramtoperformselectionsortona10

elementarray.*/

intx[10];

intminloc(inta[],intlow,inthigh)

{inti;

intk;

k=low;

x=a[low];

i=low+1;

while(i<

high)

{if(a[i]<

x)

%

{x=a[i];

k=i;

i=i+1;

returnk;

voidsort(inta[],intlow,inthigh)

intk;

i=low;

high-1)

{intt;

k=minloc(a,i,high);

t=a[k];

a[k]=a[i];

a[i]=t;

voidmain(void)

i=0;

10)

*

{x[i]=input;

sort(x,0,10);

{output(x[i]);

intgcd(intu,intv

if(v==0returnu;

intx,inty;

词法分析结果输出:

正确结果:

C:

\DocumentsandSettings\计算机学院专业实验室\桌面\compiler\Debug>

compilersou

C-COMPILATION:

1:

/*AprogramtoperformEucild'

2:

3:

intgcd(intu,intv)

reservedword:

int

ID,name=gcd

ID,name=u

ID,name=v

4:

5:

if

^

==

NUM,val=0

return

;

6:

`

else

/

7:

8:

9:

10:

voidmain(void)

void

ID,name=main

11:

12:

ID,name=x

ID,name=y

13:

=

ID,name=input

14:

ID,name=output

15:

16:

17:

EOF

错误结果:

compilersour

{returk;

ERROR:

ID,name=returk

ID,name=re

NUM,val=9

语法分析的结果输出:

Syntaxtree

:

Int

Id:

x

Vark:

10

minloc

[

Hanshu

a

-1

low

high

Hanshuti

i

k

Assignto:

Op:

+

Const:

1

While

If

Return

Void

sort

@

t

main

0

input

$

output

MicrosoftWindowsXP[版本版权所有1985-2001MicrosoftCorp.

\DocumentsandSettings\计算机学院专业实验室>

cd桌面\compiler\Debug

Syntaxerroratline4:

unexoectedtoken->

Syntaxerroratline5:

Syntaxerroratline12:

Syntaxerroratline16:

codeendbefore

gcd

u

v

y

z

4.总结

收获:

1、熟悉C语言的结构、指针、文件方面的使用。

2、学会用startUml构造状态图,及用switch-case结构实现状态转换实现词法分析。

3、学会用递归下降方法实现EBNF文法规则,进而实现语法分析。

4、熟悉构造编译器的步骤及程序实现的框架及部分方法。

不足:

1、程序语法实现部分只用了递归下降分析一种方法。

2、此程序框架与教材《编译原理及实践》附录BTiny编译器的程序框架相似。

3、递归下降分析方法手工实现应经验少程序逻辑错误多,调试费时久,不能保证程序的高健壮性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1