编译原理实现一个简单计算器程序.docVIP

  • 56
  • 0
  • 约3.2万字
  • 约 8页
  • 2018-08-04 发布于湖北
  • 举报
《编译原理》实验报告 专 业: 学 号: 班 级: 姓 名: 实验题目:设计,实现一个简单的计算器程序 实验时间: 指导教师: 实验成绩: 实验目的 实现一个简单计算器 实验要求 单词的构词规则有明确的定义; 编写的分析程序能够正确识别源程序中的语法符号; 计算器源程序的以.c格式输出 对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成整个源程序的词法分析,语法分析; 计算器能够实现加,减,乘,除,混合运算,多项式运算。 实验环境 Windows XP Flex词法分析工具 Visual Studio C++ 6.0 实验原理 多项式计算器的实现,采用后缀表达式来对输入的计算表达式进行计算 对后缀表达式进行符号识别,词法分析,语法分析 编写计算器的源程序,使用Flex工具生成计算器的C语言程序 对生成的程序进行相应的修改,再进行编译,连接,运行,测试得到可以用于进行多项式运算的源程序。 软件设计与编程 程序源代码: 新建文件夹 将Flex工具复制到该文件夹下 在DOS环境学生成目标源程序 在Visual Studio C++ 6.0环境下进行相应的修改,添加main方法和打开文件的方法 程序测试结果 编写源代码 使用Flex生成C代码: 6.3 在Visual Studio C++6.0上运行生成的”.c”文件 文件:y.ta.h #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { CLEAR = 258, EXIT = 259, LIST = 260, ERASE = 261, DEC = 262, HEX = 263, OCT = 264, HELP = 265, NUM = 266, REG = 267, ADD = 268, SUB = 269, MUL = 270, DIV = 271, MOD = 272, LSHIFT = 273, RSHIFT = 274, AND = 275, OR = 276, NOT = 277, LESS = 278, MORE = 279, BITAND = 280, BITOR = 281, BITXOR = 282, BITREV = 283, SIN = 284, COS = 285, TAN = 286, ABS = 287, SQRT = 288, LOG = 289, RMINUS = 290 }; //前面定义过,此处省略宏定义 #if ! defined (YYSTYPE) ! defined (YYSTYPE_IS_DECLARED) typedef int YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE yylval; 文件:calc.l 核心程序 %{ #define YYSTYPE double #define BIGINT long #include ctype.h #include y.tab.h %} digit [0-9] xdigit [0-9a-fA-F] odigit [0-7] decnum (0(\.{digit}+)?)|([1-9]{digit}*(\.{digit}+)?) octnum 0{odigit}+ hexnum 0(x|X){xdigit}+ reg [a-zA-Z] opt1 +|-|*|/||||%|^|~|!|| opt2 ()|(\|\|)|(\\)|(\\) exit ((E|e)(X|x)(I|i)(T|t))|((Q|q)(U|u)(I|i)(T|t)) clear (C|c)(L|l)(E|e)(A|a)(R|r) list (L|l)(I|i)(S|s)(T|t) erase (E|e)(R|r)(A|a)(S|s)(E|e) hex (H|h)(E|e)(X|x) oct (O|o)(C

文档评论(0)

1亿VIP精品文档

相关文档