CMinus词法分析和语法分析设计编译器编译原理课程设计报告书

合集下载

编译原理课程设计说明书--词法分析,语法分析,语义分析

编译原理课程设计说明书--词法分析,语法分析,语义分析

编译原理课程设计说明书题目:编译器原型设计与开发院(系):计算机科学与工程学院专业:计算机科学与技术目录1 引言 (1)1.1 设计概述 (1)1.2 设计目标 (2)1.3 小组分工 (3)2 开发过程 (3)2.1 词法分析 (3)2.1.1 消除白空格以及注释 (3)2.1.2 词法分析 (6)2.2 .语法分析 (8)2.2.1 递归下降手工编码 (8)2.2.2 first集合的计算 (8)2.2.3 左递归消除 (9)2.2.4 selection表自动生成 (10)2.2.5 LL(1)手工编码 (11)2.3 语义分析 (11)2.3.1 表达式求值LR(1) (11)2.3.2 四元式 (13)3 测试过程 (14)4 总结 (19)5 参考文献 (20)6 代码附录 (20)1引言编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都配有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。

从功能上看,一个编译程序就是一个语言翻译程序。

语言翻译程序把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价程序。

一个编译程序的重要性体现在它使得多数计算机用户不必考虑与机器有关的繁琐细节,使程序员和程序设计专家独立于机器,这对于当今机器的数量和种类持续不断地增长的年代尤为重要。

编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。

将编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段。

1.1设计概述编译原理程序结构框图词法分析词法分析是编译过程的第一个阶段。

这个阶段的任务是从左到右有一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号)。

这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符基友具体含义。

比如标识符是由字母字符开头,后跟字母、数字字符的字符序列组成的一种单词。

编译原理课程设计-C-词法扫描器及语法分析器实现

编译原理课程设计-C-词法扫描器及语法分析器实现

编译原理课程设计报告课题名称: C-词法扫描器及语法分析器实现提交文档学生姓名:提交文档学生学号:同组成员名单:无指导教师姓名:金军指导教师评阅成绩:指导教师评阅意见:..提交报告时间:2014年 6月 xx日目录目录 (2)1 课程设计目标 (3)2 分析与设计 (4)2.1 程序结构 (4)3 程序代码实现 (8)3.1 代码结构 (8)3.2.1 globals.h (8)3.2.2 scan.c (10)3.2.3 parser.c (17)3.4 util.c (29)3.5 test.cpp (36)4 测试结果 (37)4.1.给出标准测试程序的词法和语法分析结果: (37)4.1.1 词法分析结果 (37)4.1.2 语法分析结果 (40)4.2.修改代码后的结果: (41)4.2.1修改 (41)5. 本课程设计我的独创工作 (43)6.总结 (43)1 课程设计目标学生在学习《编译原理》课程过程中,结合各章节的构造编译程序的基本理论,要求用C或C++语言描述及上机调试,实现一个C-Minus 小编译程序(包括词法分析,语法分析等重要子程序),使学生将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软件开发的能力。

要求:(1)设计词法分析器设计各单词的状态转换图,并为不同的单词设计种别码。

将词法分析器设计成供语法分析器调用的子程序。

功能包括:a. 具备预处理功能。

将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;b. 能够拼出语言中的各个单词;c. 返回(种别码,属性值)。

(2)语法分析要求用学习过的自底向上或自顶向下的分析方法等,实现对表达式、各种说明语句、控制语句进行语法分析。

若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。

2 分析与设计2.1 程序结构本程序采用C++语言以面向对象的思想编写,程序分为两部分:词法分析(Scanner)和语法分析(Parser)。

C-Minus词法分析报告四川大学编译原理

C-Minus词法分析报告四川大学编译原理
外层CASE一共有12个状态:START,LBUFFER,RBUFFER,INCOMMENT,INNUM,INID,INEQ,INLE,INGE,INNEQ,DONE,default;
内层CASE判断getNextChar()获取的下一个字符使当前状态转换为其他状态。
关键代码分析
TokenType getToken(void)
} TokenType;
//定义状态类型
typedef enum { START,LBUFFER,RBUFFER,INCOMMENT,INNUM,INID,INEQ,INLE,INGE,INNEQ,DONE }StateType;
//结构定义
static struct
{ char *str;
TokenType tok;
}
实验结果截图
总结
词法分析程序的输出和输入:词法分析程序的功能是读入源程序,输出单词符号。单词符号是程序设计语言的本语法符号,程序设计语言的单词符号一般分为如下几种:关键字,标示符,常数,运算符,界符,单词的输出是二元式的形式,需要知道二元式的表示方法,把得到的二元式写入输出文件。
实验注意事项:
1.试验中在设计注释部分的解析时,因为C-Minus的注释符是四个字符组成,设计DFA时设计了两个中间态,用来判断状态转换;在代码中,如果由中间态转换为INCOMMENT状态,注意字符回退和save置false
currentToken=ENDFILE;
}
else
state=INCOMMENT;
break;
}
case INNUM:{
if(!isdigit(c))
{
ungetNextChar();
save=FALSE;

编译原理课程设计报告C语言词法与语法分析器的实现

编译原理课程设计报告C语言词法与语法分析器的实现

编写原理课程设计报告题目:编译原理课程设计C语言词法和语法分析器的实现C-词法和语法分析器的实现1.课程设计目标(1)题目的实用性C语言具有完整语言的基本属性,写C语言的词法分析和语法分析对理解编译原理的相关理论和知识会起到很大的作用。

通过编写C语言词法和语法分析程序,可以对编译原理的相关知识:正则表达式、有限自动机、语法分析等有一个清晰的认识和掌握。

(2)C语言的词法描述①语言的关键词:else if int返回void while的所有关键字都是保留字,必须小写。

②特殊符号:+ - * / < <= > >= == != = ;, ( ) [ ] { } /* */③其他标记是ID和NUM,它们由以下正则表达式定义:ID =字母字母*NUM =数字数字*字母= a|..|z|A|..|Zdigit = 0|..|9注:ID表示标识符,NUM表示数字,letter表示字母,digit表示数字。

小写字母和大写字母是有区别的。

④它由空格、换行符和制表符组成。

空格通常会被忽略。

⑤用常用的C语言符号/*将注释括起来...*/.注释可以放在任何空白位置(也就是注释不能放在标记上),可以多行。

注释不能嵌套。

(3)规划目标能够正确分析程序的词法和语法。

2.分析和设计(1)设计理念a.词汇分析词法分析的实现主要使用有限自动机理论。

有限自动机可以用来描述识别输入字符串中模式的过程,因此也可以用来构造扫描程序。

词法分析器可以很容易地用有限自动机理论来设计。

b.语法分析语法分析采用递归下降分析法。

递归下降法是语法分析中最容易理解的方法。

其主要原理是根据每个非终结符的产生式结构为其构造相应的解析子程序,其中终结符生成匹配命令,非终结符生成过程调用命令。

这种方法被称为递归子例程下降法或递归下降法,因为语法递归的相应子例程也是递归的。

子程序的结构与产生式的结构几乎相同。

(2)程序流程图主程序流程图:词法分析:语法分析:词汇分析子流程图:语法分析子流程图:3.程序代码实现整个词法与语法程序设计在同一个项目中,包含八个文件,分别是main.cpp、parse.cpp、scan.cpp、util.cpp、scan.h、util.h、globals.h和parse.h,其中scan.cpp和scan.h是词法分析程序。

编译原理课程设计报告

编译原理课程设计报告

编译原理课程设计报告课题名称: Lex C Minus词法分析器C Minus词法分析器Yacc C Minus 语法分析器C Minus语法分析器提交文档学生姓名:******提交文档学生学号:**********同组成员名单:无指导教师姓名:杨秋辉指导教师评阅成绩:指导教师评阅意见:..提交报告时间: 2012年 6 月 3 日1.课程设计目标本课程设计主要实现C Minus 的词法分析器和语法分析器,包括自动构造和手动构造分析器。

主要目标如下:1. lex 生成C Minus的词法分析器。

2. 手动构造C Minus的词法分析器,这里采用表驱动方式构造。

3. yacc生成C Minus的语法分析器。

4. 手动构造C Minus的语法分析器,文法为文件输入,这里采用LL(1)构造。

2.C Minus Lex 生成词法分析2.1在定义集中定义以下C Minus需要的符号digit [0-9]number {digit}+letter [a-zA-Z]identifier {letter}+newline \nwhitespace [ \t]+2.2在规则集中定义如下规则。

"if" {return IF;}"else" {return ELSE;}"int" {return INT;}"return" {return RETURN;}"void" {return VOID;}"while" {return WHILE;}"=" {return ASSIGN;}"==" {return EQ;}"!=" {return NEQ;}"<" {return LT;}"<=" {return LTEQ;}">" {return GT;}">=" {return GTEQ;}"," {return COMMA;}"[" {return LSQUARE;}"]" {return RSQUARE;}"{" {return LCURVE;}"}" {return RCURVE;}"+" {return PLUS;}"-" {return MINUS;}"*" {return TIMES;}"/" {return OVER;}"(" {return LPAREN;}")" {return RPAREN;}";" {return SEMI;}{number} {return NUM;}{identifier} {return ID;}{newline} {lineno++;}{whitespace} {/* skip whitespace */}/*对于注释,当程序读到/*时,一直往后读,知道碰到第一个*/进入终结状态,接受该注释,代码如下*/"/*" {char c;int done = FALSE;do{while((c = input()) != '*');while((c = input()) == '*');if(c == '/')done = TRUE;}while(!done);. {return ERROR;}2.3在辅助程序集中实现如下获取记号的函数,并将获取的记号打印到输出流中。

编译原理词法分析和语法分析报告+代码(C语言版)[1]

编译原理词法分析和语法分析报告+代码(C语言版)[1]

词法分析一、实验目的二、设计、编制并调试一个词法分析程序, 加深对词法分析原理的理解。

三、实验要求2.1 待分析的简单的词法(1)关键字:begin if then while do end所有的关键字都是小写。

(2)运算符和界符: = + - * / < <= <> > >= = ; ( ) #(3)其他单词是标识符(ID)和整型常数(SUM), 通过以下正规式定义:ID = letter (letter | digit)*NUM = digit digit*(4)空格有空白、制表符和换行符组成。

空格一般用来分隔ID.SUM、运算符、界符和关键字, 词法分析阶段通常被忽略。

2.2 各种单词符号对应的种别码:输入: 所给文法的源程序字符串。

输出: 二元组(syn,token或sum)构成的序列。

其中: syn为单词种别码;token为存放的单词自身字符串;sum为整型常数。

例如: 对源程序begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件, 经过词法分析后输出如下序列:(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)……三、词法分析程序的算法思想:算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号, 其基本思想是根据扫描到单词符号的第一个字符的种类, 拼出相应的单词符号。

3.1 主程序示意图:主程序示意图如图3-1所示。

其中初始包括以下两个方面:⑴关键字表的初值。

关键字作为特殊标识符处理, 把它们预先安排在一张表格中(称为关键字表), 当扫描程序识别出标识符时, 查关键字表。

如能查到匹配的单词, 则该单词为关键字, 否则为一般标识符。

关键字表为一个字符串数组, 其描述如下:Char *rwtab[6] = {“begin”, “if”, “then”, “while”, “do”, “end”,};图3-1(2)程序中需要用到的主要变量为syn,token和sum3.2 扫描子程序的算法思想:首先设置3个变量: ①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn 用来存放单词符号的种别码。

C_minus语言词法分析器实验报告

C_minus语言词法分析器实验报告

编译原理实验报告 题目: C_minus语言词法分析器学 院 计算机科学与技术专 业 xxxxxxxxxxxxxxxx学 号 xxxxxxxxxxxx姓 名 xxxx装订线指导教师xxxx20xx年xx月xx日C_minus语言词法分析器一、实验目的1.理解词法分析器的设计方法:利用DFA编写相应的程序。

2.掌握手工编写词法分析程序的方法。

3.复习熟悉以前学过的编程语言4.通过实验了解编译器词法分析的工作原理二、实验原理1.文法的概念,DFA的表示方法。

2.词法分析程序的输出和输入:词法分析程序的功能是读入源程序,输出单词符号。

单词符号是程序设计语言的比本语法符号,程序设计语言的单词符号一般分为如下几种:关键字,标示符,常数,运算符,界符,单词的输出是二元式的形式,需要知道二元式的表示方法,把得到的二元式写入输出文件。

转化图如下:3.熟悉单词的描述工具,如正规文法,正规式,以及知道正规文法和正规式的等价性以及他们之间的互相转化。

熟悉把正规文法转化为正规式,把正规式转化为NFA以及把NFA 转为相应的DFA,最后再把DFA简化,DFA的状态转化为相应的子程序,最后得到词法分析器4.C语言的基本语法。

三、实验要求1、该个词法分析器要求至少能够识别以下几类单词:关键字:else if int return void while共6个,所有的关键字都是保留字,并且必须是小写;标识符:识别与C语言词法规定相一致的标识符,通过下列正则表达式定义:ID = letter (letter | digit)*;常数:NUM = digit digit*(.digit digit* |ε)(e(+ | - |ε) digit digit* |ε),letter = a|..|z|A|..|Z|,digit = 0|..|9,包括整数,如123等;小数,如123.45等;科学计数法表示的常数,如1.23e3,2.3e-9等;专用符号:+ - * / < <= > >= == != = , ( ) [ ] { } /* */;2、分析器的输入为由上述几类单词构成的程序,输出为该段程序的机表示形式,即关键字、运算符、界限符变为其对应的机符,常数使用二进制形式,标识符使用相应的标识符表指针表示。

C_minus语言词法分析器实验报告

C_minus语言词法分析器实验报告
.
编译原理实验报告
题目 : C_minus 语言词法分析器
装 订 线
学 院 计算机科学与技术 专 业 xxxxxxxxxxxxxxxx 学 号 xxxxxxxxxxxx 姓 名 xxxx 指导教师 xxxx
20xx 年 xx 月 xx 日
.
.
C_minus 语言词法分析器
一、实验目的
1. 理解词法分析器的设计方法:利用 DFA编写相应的程序。 2. 掌握手工编写词法分析程序的方法。 3. 复习熟悉以前学过的编程语言 4. 通过实验了解编译器词法分析的工作原理
四、实验结果(程序)及分析
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
typedef struct {
char name[30];
int code;
int addr;
}token;// 存储刚从文件中读取的字符
typedef struct {
h=0; } else{
h=1; break; } } if(h==0) break; } if(h==0) { current.code=key[i].code; output_1(); } else{ strcpy(symboltable[addr_count].name,); symboltable[addr_count].code=10; symboltable[addr_count].addr=addr_count;
isnumber(); else isOthers(); ch=fgetc(source); } fclose(source); fclose(keytxt); fclose(badgetxt); fclose(othertxt); fclose(number); } void iskeyword(){ int i=0,k=0,j=0; int h=0; while(((ch>='a') && (ch<='z')) ||((ch>='A') && (ch<='Z')) || ch=='_' || (ch> '0' && ch<'9')) { [i]=ch; i++; ch=fgetc(source); } zancun=current; for(i=0;i<6;i++) { for(j=0;j<30;j++) { if([j]==key[i].name[j]){
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译原理课程设计报告课题名称:C- Minus词法分析和语法分析设计提交文档学生姓名:X X X提交文档学生学号:XXXXXXXXXX同组成员名单:X X X指导教师姓名:X X指导教师评阅成绩:指导教师评阅意见:..提交报告时间:2015年6月10日1.课程设计目标实验建立C-编译器。

只含有扫描程序(scanner)和语法分析(parser)部分。

2.分析与设计C-编译器设计的整体框架,本实验实现扫描处理和语法分析程序(图中粗黑部分)。

2.1 、扫描程序scanner部分2.1.1系统设计思想设计思想:根据DFA图用switch-case结构实现状态转换。

惯用词法:①语言的关键字:else if int return void while②专用符号:+ - * / < <= > >= == != = ; , ( ) [ ] { } /* */③其他标记是ID和NUM,通过下列正则表达式定义:ID = letter letter*NUM = digit digit*letter = a|..|z|A|..|Zdigit = 0|..|9大写和小写字母是有区别的④空格由空白、换行符和制表符组成。

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

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

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

注释不能嵌套scanner的DFA说明:当输入的字符使DFA到达接受状态的时候,则可以确定一个单词了。

初始状态设置为START,当需要得到下一个token时,取得次token的第一个字符,并且按照DFA与对此字符的类型分析,转换状态。

重复此步骤,直到DONE为止,输出token类型。

当字符为“/”时,状态转换为SLAH再判断下一个字符,如果为“*”则继续转到INCOMMENT,最后以“*”时转到ENDCOMMENT状态,表明是注释,如果其他的则是字符停滞于当前字符,并且输出“/”。

2.1.2程序流程图2.1.3 各文件或函数的设计说明扫描程序用到:scanner.h,scanner.cpp➢scanner.h:声明词法状态,词法分析//DFA中的状态typedef enum{START = 1, INNUM, INID, INDBSYM, DONE} DFAState;//定义的Token的类型(31种),分别对应于else、if、int、return、void、while、+、-、*、/、<、<=、>、>=、==、!=、=、;、,、(、)、[、]、{、}、/*、*/、num、id、错误、结束typedef enum{ELSE = 1,IF,INT,RETURN,VOID,WHILE,PLUS,MINUS,TIMES,OVER,LT,LEQ,GT,GEQ,EQ,NEQ,ASSIGN,SEMI,COMM A,LPAREN,RPAREN,LMBRACKET,RMBRACKET,LBBRACKET,RBBRACKET, LCOMMENT,RCOMMENT,NUM,ID,ERROR,ENDFILE} TokenType;//定义的Token结构体,包括类型、对应的串、所在代码的行号struct Token{TokenType tokenType;string tokenString;int lineNo;};//每种TokenType对应的串,如tokenTypeString[ELSE]=="ELSE"const string tokenTypeString[32] = {"OTHER", "ELSE", "IF", "INT", "RETURN", "VOID", "WHILE", "PLUS", "MINUS", "TIMES", "OVER", "LT", "LEQ", "GT", "GEQ", "EQ", "NEQ", "ASSIGN", "SEMI", "COMMA", "LPAREN", "RPAREN", "LMBRACKET", "RMBRACKET", "LBBRACKET", "RBBRACKET", "LCOMMENT", "RCOMMENT", "NUM", "ID", "ERROR", "ENDFILE"};class Scanner:定义scanner.cpp中函数➢scanner.cpp文件函数说明void Scanner :: scan():设置输出结果界面以及设置各种输出状态。

if(scanSuccess==false)cout<<"词法分析出错!"<<endl;elsecout<<"词法分析成功了!"<<endl;printToken();/*输出Token到文件Token.txt中*///正在删除注释void Scanner :: deleteComments()TokenType Scanner :: returnTokenType(string s)//返回Token的类型DFAState Scanner :: charType(char c)//返回字符的类型typedef enum{ ENDFILE,ERROR,IF,ELSE,INT,RETURN,VOID,WHILE, //关键字ID,NUM,ASSIGN,PLUS,MINUS,TIMES,OVER,EQ,UEQ,LT,LPAREN,RPAREN,SEMI,BT, LQ,BQ,DOU,LZGH,RZGH,LDGH,RDGH,//特殊字符:= + - * / == != < 等} TokenType;2.1.4 测试程序说明根据附录A后面的例子,程序输入两个整数,计算并打印出它们的最大公因子,保存为a.txt。

/* A program to perform Eucild'sAlgorithm to compute gcd. */int gcd (int u, int v){if (v==0)return u;else returngcd(v,u-u/v*v); /* u-u/v*v== u mod v */}void main(void){int x;int y;x=input();y=input();output(gcd(x,y));}2.2、语法分析parse部分2.2.1系统设计思想设计思想:parser用递归下降分析方法实现,通过调用词法分析函数getToken实现语法分析。

根据C-语言的规则,得出BNF语法如下:1.program->declaration-list2.declaration-list->declaration-list declaration | declaration3.declaration->var-declaration|fun-declaration4.var-declaration->type-specifier ID;|type-specfier ID[NUM]5.type-specifier->int|void6.fun-specifier ID(parans) compound-stmt7.params->params-list|void8.param-list->param-list,param|param9.param->type-specifier ID|type-specifier ID []pound-stmt->{local-declarations statement-list}11.local-declarations->local-declarations var-declaration|empty12.statement-list->statement-list statement|empty13.statement->expression-stmt|compound-stmt|selection-stmt|iteration-stmt|return-stmt14.expression-stmt->expression;|;15.selection-stmt->if(expression)statement|if(expression)statement elsestatement16.iteration-stmt->while(expression)statement17.return-stmt->return ;|return expression;18.expression->var=expression|simple-expression19.var->ID|ID[expression]20.simple-expression->additive-expression relopadditive-expression|additive-expression21.relop-><=|<|>|>=|==|!=22.additive-expression->additive-expression addop term|term23.addop->+|-24.term->term mulop factor|factor25.mulop->*|/26.factor->(expression)|var|call|NUM27.call->ID(args)28.args->arg-list|empty29.arg-list->arg-list,expression|expression2.1.2语法分析程序流程图2.1.3 各文件或函数的设计说明语法分析程序包括:parser.cpp,parser.h➢parser.cpp:Parser :: Parser()//界面设计Token Parser :: getToken()//获取scanner中保存在TokenList数组中的Token,并且每次获取完之后数组下标指向下一个void Parser :: syntaxError(string s)//出错处理void Parser :: match(TokenType ex)//匹配出错TreeNode * Parser :: declaration(void)//类型匹配错误TreeNode * Parser :: param_list(TreeNode * k)//k可能是已经被取出来的VoidK,但又不是(void)类型的参数列表,所以一直传到param中去,作为其一个子节点➢parse.h:对parse.c的函数声明//19种节点类型,分别表示int、id、void、数值、变量声明、数组声明、函数声明、函数声明参数列表、函数声明参数、复合语句体、if、while、return、赋值、运算、数组元素、函数调用、函数调用参数列表、未知节点typedef enum {IntK, IdK, VoidK, ConstK, Var_DeclK, Arry_DeclK, FunK, ParamsK, ParamK, CompK, Selection_StmtK, Iteration_StmtK, Return_StmtK, AssignK, OpK, Arry_ElemK, CallK, ArgsK, UnkownK} Nodekind;typedef enum {Void,Integer} ExpType;ofstream fout_Tree("tokenTree.txt");//输出语法树到文件//treeNode定义包括子节点、兄弟节点、所处行号、节点类型、属性、表达式返回类型typedef struct treeNodeTreeNode * newNode(Nodekind k);//根据节点类型新建节点TreeNode * declaration_list(void);TreeNode * declaration(void);TreeNode * params(void);TreeNode * param_list(TreeNode * k);TreeNode * param(TreeNode * k);TreeNode * compound_stmt(void);TreeNode * local_declaration(void);TreeNode * statement_list(void);TreeNode * statement(void);TreeNode * expression_stmt(void);TreeNode * selection_stmt(void);TreeNode * iteration_stmt(void);TreeNode * return_stmt(void);TreeNode * expression(void);TreeNode * var(void);TreeNode * simple_expression(TreeNode * k);TreeNode * additive_expression(TreeNode * k);TreeNode * term(TreeNode * k);TreeNode * factor(TreeNode * k);TreeNode * call(TreeNode * k);TreeNode * args(void);2.1.4 测试程序说明根据附录A后面的例子,程序输入两个整数,计算并打印出它们的最大公因子,保存为a.txt。

相关文档
最新文档