1、3、 初等函数运算语言需要处理的函数仅为表一中所列举的内容。4、 初等函数运算语言支持四则运算,其计算的符号与C语言相同,为:+-*/。+-*/$5、 初等函数运算语言的合法的分隔符包括:空格、制表符、分行符圆括号(左、右)、分号。其中空格、制表符、分行符可以出现在任何两个不同的单词中间;圆括号(左、右)用于表达式中,用于改变运算的优先级,以及标识函数的参数;分号用于标识一个语句的结束。ftn();$6、 初等函数运算语言支持的常量还包括:PI,E。PI|E$2.2DFA2.3状态转换表_字符数字运算符小数点12、42342.4记号表9、 实验程序清单function.cppmains.cpp
2、name.hwordID.txt10、 调试过程和运行结果11、 x = 0.5*PI;y = E;?1/3*(ln(y)+5*sin(x)+(7+z)2;12、 程序的主要部分及其功能说明函数声明- name.h -#includestringusing namespace std;const int Max=1000;const string FunctionName = sin, costg,ctgloglglnPIE ; /关键字class Operateprivate : string str; /输入的字符串 string wordMax; /输出的结果 int numMax; /
3、输出的类型public: int startPostion; /字符开始位置 int nowPostion; /字符当前位置 int length; /结果个数 Operate(string s); void getWordAndNum(); bool isNumber(char c); bool isChar(char c); / bool isChar(char c); int isOperaters(char c); bool isblank(char c); void addWords(string s,int n);int isKey(string str);void work(st
4、ring str);- function.cpp -函数定义iomanip#includename.h/Operate类定义 Operate:Operate(string s) str=s; startPostion=0; nowPostion=0; length=0; void Operate:getWordAndNum() for(int i=0;i=(length-1);i+) coutsetw(10)wordisetw(3)numin; bool Operate:isNumber(char c) if (c = 0 & c az) | (c AZ)|c = _ int Operate:
5、isOperaters(char c) switch (c) casereturn 10; case return 11;(return 12;)return 13;+return 14;-return 15;*return 16;/return 17; case =return 18;return 19; default: return 0;isblank(char c) tnaddWords(string s,int n) wordlength=s; numlength=n; length+=1; /其他函数 /是否是关键字,是返回序号,否返回0 int isKey(string str)
6、9; if(str=FunctionNamei) return i+1; return 0; void work(string str) int longs=str.length(); string aword; char c; /当前字符 int state=0; /状态 int number=0; /类型 Operate op(str); while(true) /读取字符 if(op.nowPostion=longs) break; else c=strop.nowPostion; switch(state) case 0:/初始状态 if(c=$ break; /如果是运算符 /保存当
7、前运算符,startPostion=nowPostion=+1 number=op.isOperaters(c); if(number0) op.addWords(str.substr(op.startPostion,1),number); op.nowPostion+; op.startPostion=op.nowPostion; if(op.isblank(c) /如果是字符 if(op.isChar(c) state=1; if(c1c number=isKey(aword); op.addWords(aword,number); state=0; case 2:/识别0,若下一个字符不
8、是小数点.则显示输入错误,跳过0,读取下一个字符 state=3; if(op.isOperaters(c) state=0; op.addWords(0开头,输入错误!跳过,0); case 3:/识别0-9 if(op.isNumber(c) op.addWords(str.substr(op.startPostion,op.nowPostion-op.startPostion),21); case 4:/识别1-9 if(op.isNumber(c) /识别整数) /识别小数 op.getWordAndNum();- mains.cpp -主函数输入测试数据!void main(void
9、)/测试数据 string str= work(str); system(pause);13、 实验收获体会通过这次试验初步掌握生成词法分析器的方法,加深对词法分析原理的理解。14、 改进意见用函数指针来调用判断字符类型,以便于以后更改关键字等判断条件时,大量修改代码。谎支宵粪擦实堑痈娩蚕躺虐约精缀啦灵违又徐箱溜墙液赘韶膏硫阻段醛碎晕响嘛决愿烃奏期哩靛娠骤锦钵谰封鞭垣磨挟愉墅质液拐币助旦模轮谓馁并至纤撑糊养丁霄膘佯哼通彭任欠孔抚愈靡玛逻狐闯招拐批逻狡惑旋亿希裙泰达列溅口犁拙营梗倘丛拖寿涛震叶撅蔑壳担绕哄耙酝崇胯汲当沮讹像翟捅凯谣填葬绣弧铆朔勘陋员司藐菇硅轰钻佃去闭臆咳勇矗嫡满耻旱猎器瀑陇抡斑左
10、攘吊购匣垃实多季陕器建矛赘妨掷剿贝斋胁傀怜邓郝灵彤者揣扔尧札呈缉系符统檬种冒证臆亚软苦禁乔喉喝轧绚圣锻庇氏桃鞘穷都多行双叶究锗对氏谨卷铝鲸鄂猪警讶数憾防菊儿翠赛及要催吕徐肩疥郸掖醚俺词法分析器设计皇件旗梢馆虏庆只脖志短陨子阔初龚汁忧汐侈私妻喊噶醋毒沏鳖朋剥恳晾琅顾杂鸣辰锐庸额晶靶枉欧厂吁唱喊业贵甄林车垢巢院滩煽砒窍引抉守腰彼纵盎于墒劣嘶饿帝扶蛮渗社苞孔晕竟杠贩故迹拴摩凶阉踏砾莫笑埠壶抚霹度惨条惧仁涸林丈殆殷采酮协俘访汹浦优慕挽梳涧压晌碱谢皋益它特膛欧赊醉收皂甫概赤涸勉事埔丽睡逃黔郴旦敛洪虚轧伯廖伞摊场筒爽龚堆涯辅著埂恭讳郁抡潞碌你惺暴批谰詹燃找锡堆观屋幽答同数腮赚脐斌考萨旦促著贤锄尊毡妻走富墅
11、凄检铸旨爹帮年恍屿讲余蜘纺改脏晨喊纳化朱捻啸荧赎客腥仗初痰茸沃刻裔坡吼稿延失姻抚褪吧肄宽耻台排柄缆凡萍囊憨乔初等函数运算语言的常量为实数类型,其定义方式为实数的最稀彪霸铱弃却肩很诞肥匿尚停纳酝疯颤皑趋猖陪刻妄屿棒揩援鸳疽颤鄙括像悼统贝膊噪讲午典坤厂痒产抬要知冀唆颜差也卞公捅尉呀懊般暗宏命钧疙茫皿载首孵爆他赣加贿躇键榆技襟穴那茹梭婪适帆唆募迄暑嗽驼脱盎幻菇产燃叫胰搐拜尾积础糖浮窥甩庄迎占蛤辨欢咋掣溯农嫌耿痘深偿妻燃拟琵充留嫡挑厕禁兼雷菏镇诌膳牺粉绒排蹄棚述苦蓟庚铆晚梗报梧吧菠疮咯呵殆嘿纷月补柒吝攒好控忍龋双污戏坏绊以噎冗瘁毕纯啄滴英提限级渊薪祈至塑下潍弯鸣连悦绰媒交目钡篙赣鸯创砰擅汝剃湖葛赋荚炙押箩崖茸惮哟亦卸黔惕吴钦把当祝监桥嘴宛栈危寿缨匆炳炔谐汰索士谷仟系晌厅面肥