2009年会计从业资格考试会计基础模拟试题
- 格式:doc
- 大小:164.00 KB
- 文档页数:34
2009年11月会计从业资格考试试卷(标准答案)会计基础一、单项选择题(本题共20小题,每小题1分,共计20分,不答、错答均不得分。
)1、会计的基本职能是( B )。
A、反映和考核B、核算和监督C、预测和决策D、分析和管理2、下列各项中,不符合收入定义要求的是(C)。
A、提供设备安装服务取得的劳务收入B、出售多余原材料取得的销售收入C、出售生产设备取得的利得D、出租生产设备取得的租金收入3、下列(A )平衡公式是编制资产负债表的依据。
A、资产=负债+所有者权益B、资产-负债=所有者权益C、收入=费用+利润D、收入-费用=利润4、下列科目中,属于资产类的是( A )。
A、预付账款B、预收账款C、实收资本D、资产公积5、会计科目按其所提供信息的详细程度及其统驭关系不同,可分为总分类科目和(A)A、明细分类科目B、资产类科目C、负债类科目D、所有者权益类科目6、某企业资产总额为100万元,当发生下列三笔经济业务后:(1)向银行借款20万元存入银行:(2)用银行存款偿还货款5万元;(3)收回应收账款4万元存入银行,其资产总额为(A)。
A、115万元B、119万元C、111万元D、71万元7、“资产公积”账户的期末余额等于(D)。
A、期初余额+本期借方发生额-本期贷方发生额B、期初余额-本期借方发生额-本期贷方发生额C、期初余额+本期借方发生额+本期贷方发生额D、期初余额-本期借方发生额+本期贷方发生额8、某企业月末编制的试算平衡表中,全部账户的本月借方发生额合计为元,除“应付账款”以外其它账户的本月贷方发生额合计为元,则“应付账款”账户(B)。
A、本月借方发生额为5000元B、本月贷方发生额为5000元C、月末借方余额为5000元D、月末贷款余额为红字5000元9、“生产成本”账户的期末借方余额表示(A)。
A、期末在产品成本B、本期完工产品成本C、本期已售产品成本D、期末库存商品成本10、总分类账、日记账以及只需反应价值指示的资本、债权、债务明细账一般适用的账薄格式是(A)A、三栏式B、多栏式C、两栏式D、数量金额式11、企业开出现金支票应填制的专用记账凭证是(D)。
一、单项选择题(下列每小题备选答案中,只有一个符合题意的正确答案。
请将选定的答案编号填入括号内。
本类题共40分,每小题1分。
多选、错选、不选均不得分)第1题:“本年利润”账户年结结转前的余额应等于利润表中的()。
A.营业收入B.营业利润C.利润总额D.净利润【正确答案】:D【参考解析】:“本年利润”账户年结结转前的余额应等于利润表中的净利润。
第2题:试算平衡表是根据()确定的。
A.借贷记账法的记账规则B.经济业务的内容C.经济业务的类型D.资产一负债+“所有者权益”的恒等式【正确答案】:A【参考解析】:试算平衡是根据资产与权益的衡等关系以及借贷记账法的记账规则和规律,检查所有账户记录是否正确的过程。
第3题:以下不符合借贷记账法的记账规则()。
A.现金和原材料同时增加B.银行存款和实收资本同时增加C.银行存款和应交税金同时减少D.应付债券减少、实收资本增加【正确答案】:A第4题:S公司向银行借人款项20万元,并用其中10万元归还前欠货款,则企业总资产增加了()万元。
A.20B.10C.30D.0【正确答案】:B【参考解析】:银行存款只增加10万元,导致企业总资产增加了10万元。
第5题:领料单中,通常是一式两联的是()。
A.领料单B.领料登记表C.领料单与限额领料单D.限额领料单【正确答案】:D【参考解析】:限额领料单一式两联。
领料单和领料登记表通常一式三联。
第6题:是指企业对外提供反映企业某一特定日期财务状况和某一会计期间经营成果、现金流量情况的书面文件()。
A.资产负债表B.利润表C.会计报表附注D.财务会计报告【正确答案】:D第7题:下列属于长期负债的是()。
A.应付工资B.应交税金C.应付利润D.应付债券【正确答案】:D第8题:某企业对发出的存货采用后进先出法计价,本月期初钢材的数量为100吨,单位为1200元/吨,本月3日购入一批,数量为300吨,单价1000元/吨,本月10日发出钢材100吨,则本月发出存货的价值为()元。
2009年会计从业资格考试会计基础模拟试题一、单项选择题(40题,每小题1分,共40分,每小题只能选择一个答案)1.()是指企业为生产某种产品而发生的费用。
它与一定种类和数量的产品相联系,是对象化了的费用。
A. 管理费用B. 营业费用C. 期间费用D. 产品成本2. 我国历史上,最早是在()出现“会计”一词。
A. 夏商时期B. 西周时期C. 秦朝时期D. 唐宋时期3. 下列属于长期负债的是()。
A. 应付工资B. 应交税金C. 应付利润D. 应付债券4. 企业资金运动的动态会计要素是()。
A. 资产B. 权益C. 资产、负债及所有者权益D. 收入、费用和利润5. 收入是指企业在销售商品、提供劳务及让渡资产使用权等日常活动中所形成的()。
A. 经济利益的总流入B. 投资人享有的经济利益C. 全部收入D. 经营成果6. 某企业资产总额为100万元,负债为20万元,在将10万元负债转作投入资本后,资产总额为()。
A. 100万元B. 130万元C. 80万元D. 90万元7. 下列各项中不属于会计核算内容的是()。
A. 用盈余公积转增实收资本B. 制定下年度财务费用开支计划C. 将现金存人银行D. 赊销货物8. “累计折旧”账户按其所反映的经济内容属于()账户。
A. 资产类B. 负债类C. 所有者权益类D. 成本类9. 会计科目与会计账户之间的关系是()。
A. 两者完全不相关B. 两者的分类口径一致和性质相同C. 两者的分类口径一致,但性质不完全相同D. 两者没有区别,是同义语10. 下列内容中()不在“其他货币资金”科目核算。
A. 外埠存款B. 银行承兑汇票C. 银行汇票存款D. 信用卡存款11. “物资采购”科目核算企业购入的材料、商品的采购成本,本科目的期末借方余额表示()。
A. 在途物资的实际成本B. 在途物资的计划成本C. 本期采购物资的实际成本D. 本期采购物资实际成本与计划成本的差异来源:考试大12. 如果合同没有规定受益年限,法律也没有规定有效年限,无形资产摊销年限不超过()。
时代学习社区(/)是一个专门提供计算机类、外语类、资格类、学历类,会计类、建筑类、医学类等教育信息服务的教育学习交流社区。
希望大家本着人人为我,我为人人的服务态度相互信任,相互支持,分享学习,共同成长,为广大学者创造一个和谐干净、积极向上和有素养的学习交流场所,时代学习社区会因为你们的到来而更加精彩。
2009年会计证考试《会计基础》模拟试题及答案(6)word文档下载一、单项选择题(共40小题,每小题1分,共40分)1、会计核算必须以为核算的基础和假设条件 ( )A、会计主体B、持续经营C、会计分期D、货币计量2、流动资产是指可以在变现或耗用的资产,包括现金和各种存款、短期投资、应收及预收款项、存货。
( )A、一年内B、一年或超过一年的一个营业周期内C、一个营业周期内D、一年或超过一年的一个营业周期以上3、下列项目中不属于有价证券的是 ( )A、国库券B、股票C、银行汇票D、企业债券4、下列项目中,不属流动资产有 ( )A、其他收款B、待摊费用C、预收账款D、预付账款5、企业月初资产总额60万,本月生下列经济业务1)赊购材料10万 2)用银行存款偿还短期借款20万 3)收到购货单位偿还欠款15万存入银行 4)用银行存款购入材料8万。
月末资产总额为 ( )A、65万B、73万C、50万D、 57万6、关于会计科目,下列说法不正确的是 ( )A、会计科目是对会计要素的进一步分类B、会计科目按其所提供的详细程序不同,可以分为总分类科目和明细分类科目C、会计科目可以根据企业的具体情况自行设定D、会计科目是复式记账和编制记账凭证的基础7、某企业月末在编制试算平衡表中,全部账户的本月贷方发生额合计为6万,除银行存款的本月借方发生额合计为4万,则银行存款账户 ( )A、本月借方发生额为2万B、本月贷方发生额为2万C、本月贷方余额为2万D、本月借方余额为2万8、甲公司月末计算本月车间使用的机器设备等固定资产的折旧费7000元,下列会计分录正确的是 ( )A、借:生产成本7000贷:累计折旧7000B、借:制造费用7000贷:累计折旧7000C、借:管理费用7000贷:累计折旧7000D、借:固定资产7000贷:累计折旧70009、企业3月末支付本季短期借款利息3000元(前两月已预提2000元)正确分录为 ( )A、借:预提费用 2000管理费用 1000贷:银行存款3000B、借:预提费用 2000财务费用1000贷:银行存款3000C、借:待难费用 2000贷:银行存款3000D、借:财务费用 3000贷:银行存款300010、企业向银行借入6个月借款50000元,存入银行。
时代学习社区(/)是一个专门提供计算机类、外语类、资格类、学历类,会计类、建筑类、医学类等教育信息服务的教育学习交流社区。
希望大家本着人人为我,我为人人的服务态度相互信任,相互支持,分享学习,共同成长,为广大学者创造一个和谐干净、积极向上和有素养的学习交流场所,时代学习社区会因为你们的到来而更加精彩。
2009年会计证考试《会计基础》模拟试题及答案(7)word文档下载一、单项选择题:(本类题共15 小题,每小题1 分,共15 分。
每小题只有一个正确的答案,请将选定的答案编号用英文大写字母填写在专用答题纸指定位置。
选择正确的得分,错选、不选或多选均不得分。
)1 . ()是会计核算对象的基本分类。
A .会计科目B .会计账户C. 会计要素D .资金运动2 .某企业资产总额为100 万元,负债为20 万元,在以银行存款30 万元购进材料,并以银行存款10 万元偿还借款后,资产总额为()万元。
A . 60B . 90C . 50D . 403 .下列属于明细分类科目的是()。
A .营业费用B .其他应收款C .盈余公积D .差旅费4 .用转账支票归还欠A 公司的货款60 000 元,会计人员编制的记账凭证为:借记应收账款60 000 元,贷记银行存款60 000 元,并已登记入账。
该记账凭证()。
A .没有错误,不需要更止B .有错误,使用划线更正法更止C .有错误,使用红字冲销法更正D .有错误,重新编制正确的记账凭证5 .借贷记账法的理论依据是()。
A .复式记账法B .资产=负债十所有者权益C .有借必有贷,借贷必相等D .借贷平衡6 .某企业本月销售产品取得收入200 万元,已收款120 万元,月末结平“主营业务收入”账户,则该帐户本月借方结转额为()万元。
A . 200B . 120C . 80D . 07 .下列错误中能通过试算平衡查找的有()。
A .某项经济业务未入账B.某项经济业务重复记账C.应借应贷账户中借贷方向颠倒D. 应借应贷账户中借贷金额不等8 . 2003 年度某企业的收入为450 000 元,费用为330 000 元。
2009年会计证考试会计基础模拟试题1、会计核算工作的起点是()A、复式记账B、登记账簿C、填制和审核会计凭证D、编制会计报表2、()是记录经济业发生或完成情况书面证明,也是登记账簿的依据。
A、记账凭证B、原始凭证C、专用凭证D、会计凭证3、()是在经济业务发生或完成时取得或填制的,用以记录或证明经济业务的发生或完成情况的书面证明。
A、原始凭证B、记账凭证C、收款凭证D、付款凭证4、在一定时期内连续记录若干项同类经济业务的自制原始凭证是()A、一次凭证B、累计凭证C、汇总凭证D、原始凭证汇总表5、()是指根据一定时期内,若干相同的原始凭证汇总编制成的原始凭证。
A、记账凭证汇总B、累计凭证C、一次凭证D、原始凭证汇总表6、下列各项中不属于原始凭证的有()A、销货发票B、借据C、固定资产卡片D、运费结算凭证7、下列属于汇总原始凭证的有()A、科目汇总表B、汇总记账凭证C、限额领料单D、工资结算汇总表8、会计人员在审核购货发票及材料入库单时发现,该批材料采购量过大。
则该原始凭证所反映的经济业务是()。
A、不合法B、不合理C、不完整D、不正确9、外来原始凭证一般都是()A、一次凭证B、汇总凭证C、累计凭证D、原始凭证汇总表10、将会计凭证分为原始凭证和记账凭证两大类的依据是()A、凭证填制的时间B、凭证填制的程序和用途C、凭证填制的方法D、凭证所反映的经济内容1、“待摊费用”账户的期末余额等于()A、期初余额+贷方发生额—借方发生额B、期初余额+借方发生额—贷方发生额A、期初余额+贷方发生额+借方发生额D、期初余额—贷方发生额—借方发生额2、企业5月份发生营业费用50万元,月末应结平“营业费用”账户,则“营业费用”账户()A、月末借方余额50万B、月末贷方余额50万C、本期贷方发生额50万D、以上都不对3、某企业月末在编制试算平衡表中,全部账户的本月贷方发生额合计为6万,除银行存款的本月借方发生额合计为4.2万,则银行存款账户()A、本月贷方余额为1.8万B、本月借方余额为1.8万C、本月借方发生额为1.8万D、本月贷方发生额为1.8万4、某企业期末余额试算平衡表资料如下:则乙账户有()B、贷方余额3.5万C、借方余额2.5万D、贷方余额2.5万5、企业本期生产产品直接耗用原材料3000元,生产车间管理方面耗用原材料2000元,正确的会计分录是()A、借:生产成本5000贷:原材料5000B、借:制造费用500贷:原材料5000C、借:生产成本3000贷:原材料5000制造费用2000D、借:生产成本3000贷:原材料5000管理费用20006、甲公司月末计算本月车间使用的机器设备等固定资产的折旧费7000元,下列会计分录正确的是()A、借:生产成本7000贷:累计折旧7000B、借:制造费用7000贷:累计折旧7000C、借:管理费用7000贷:累计折旧7000D、借:制造费用7000贷:固定资产70007、甲公司以银行存款支付下半年6个月房租费12000,则应作会计分录为()A、借:待难费用12000贷:银行存款12000B、借:管理费用12000贷:银行存款12000C、借:制造费用12000贷:待摊费用12000D、借:管理费用12000贷:银行存款120008、月末结转已售产品的销售成本90000元,正确会计分录为()A、借:库存商品90000贷:生产成本90000B、借:主营业务成本9000贷:主营业务收入90000C、借:主营业务成本9000贷:库存商品90000D、借:主营业务成本9000贷:生产成本900009、企业3月末支付本季短期借款利息3000元(前两月已预提2000元)正确分录为()A、借:预提费用2000管理费用1000贷:银行存款3000B、借:预提费用2000财务费用1000贷:银行存款3000C、借:预提费用3000贷:银行存款3000D、借:财务费用3000贷:银行存款300010、本年应纳所得额为200000,所得税率为33%,正确的分录为()A、借:主营业务税金及附加66000贷:应交税金66000B、借:管理费用66000贷:应交税金66000C、借:应交税金66000贷:所得税66000 D、借:所得税66000贷:应交税金66000。
一、单项选择题(下列每小题备选答案中,只有一个符合题意的正确答案。
请将选定的答案编号填入括号内。
每小题 1 分,本类题共 10 分。
多选、错选、不选均不得分)第 1 题:构成产品组成部分的包装物,其价值在领用时,应()。
A .借记“生产成本”B .贷记“生产成本”C.借记“包装物一库存未用包装物”D.贷记“包装物一出借包装物”【正确答案】: A【参考解析】:其价值在领用时,应借记“生产成本”,贷记“包装物 -存未用包装物”。
第 2 题:下列不属于会计循环的业务是()。
A.编制会计分录B.登记账簿C.进行试算平衡D.编制决算报告【正确答案】: D【参考解析】:编制决算报告不属于会计循环的业务。
第 3 题:按反映的经济内容分,制造费用属于()科目。
A .资产类B .负债类C.成本类D.损益类【正确答案】: C第 4 题:对应收账款计提坏账准备的依据()。
A .谨慎性要求B .重要性要求C.及时性要求D.客观性要求【正确答案】: A【参考解析】:对应收账款计提坏账准备的依据谨慎性要求。
第 5 题:不可以用多栏式明细分类账核算的是()。
A.管理费用B.主营业务收入C.生产成本D.原材料【正确答案】: D【参考解析】:原材料用数量式明细分类账核算。
第 6 题:以下哪项不是行政事业单位会计科目()。
A.有价证券B.库存材料C.暂存款D.经营收入【正确答案】: D【参考解析】:行政事业单位没有经营权利,也就不会发生经营收入第7 题:新的会计年度开始,启用新账时,()可以继续使用,不必更换新账。
A.日记账B.总账C.产成品明细账D.固定资产明细账【正确答案】: D【参考解析】:会计账簿的更换通常在新会计年度建账时进行,总账、日记账和多数明细账应每年更换一次。
变动小的部分明细账如固定资产明细账或固定资产卡片及备查账簿可以连续使用。
第 8 题:()结算方式适合在异地使用。
A.汇兑B.支票C.委托收款D.银行本票【正确答案】: A【参考解析】:汇兑可以在同城或异地使用第 9 题:某企业 6 月初的资产总额为 60000 元,负债总额为 25000 元。
时代学习社区(/)是一个专门提供计算机类、外语类、资格类、学历类,会计类、建筑类、医学类等教育信息服务的教育学习交流社区。
希望大家本着人人为我,我为人人的服务态度相互信任,相互支持,分享学习,共同成长,为广大学者创造一个和谐干净、积极向上和有素养的学习交流场所,时代学习社区会因为你们的到来而更加精彩。
2009年会计证考试《会计基础》模拟试题及答案(10)word文档打包下载一、单项选择题(每小题1分,本类题共40分)1.会计核算使用的主要计量单位是( )A.货币计量B.劳动计量C.实物计量D.单一计量2.预收账款属于会计要素中的 ( )。
A.资产B.负债C.收入D.利润3.《中华人民共和国会计法》将会计的基本职能表述为( )A.进行会计核算、实行会计监督B.预测经济前景C.参与经济决策D.控制经济过程4.为会计核算提供了必要手段的会计假设是( )A.会计主体B.持续经营C.会计分期D.货币计量5.我国的会计期间包括会计年度和会计中期,并且均按公历起讫日期确定。
下列不属于会计中期的是( )A.旬B.月度C.季度D.半年度6.下列各项属于长期负债的有( )A.应收账款B.应付账款C.其他应付款D.应付债券7.不属于反映企业财务状况的会计要素有( )A.资产B.收入C.所有者权益D.负债8.会计核算是会计监督的( )。
A.主要手段B.根本保障C.基础和前提D.基本目标9.费用的发生将引起( )。
A.所有者权益的减少B.所有者权益的增加10.企业现有资产总额为10万元,在发生一笔“用银行存款购入材料3万元”的经济业务后,企业的资产总额将为( )。
A.7万元B.10万元C.13万元D.上述都不是11.所有者权益是企业投资人对企业净资产的要求权,在数量上所有者权益等于( )。
A.全部资产扣除流动负债B.全部资产扣除长期负债C.全部资产加上流动负债D.全部资产扣除全部负债12.将现金1500元解交银行,会使企业的资产总额( )。
湖北省会计从业资格考试《会计基础》全真模拟试题二(2009年下半年考试专用) 本套试题是遵循会计从业资格考试《会计基础考试大纲(2009年)》(考试大纲与2008年相同)的要求,根据最近两年的湖北省会计从业资格考试的命题规律编写的,基本涵盖了所有重要考点,其难度、题型、题量和命题的风格接近于考试真题。
特供参加湖北省2009年下半年会计从业资格考试的考生最后冲刺使用。
该套试卷分为单项选择题(40题)、多项选择题(20题)和判断题(30题)三种题型。
【部分内容展示】 一、单项选择题(40题。
每小题1分,共40分,每小题只能选择一个答案) 1.()是指过去的交易或事项形成并由企业拥有或者控制的资源,该资源预期会给企业带来经济利益。
A.会计对象 B.会计要素 C.资金 D.资产 【答案】D ………… 二、多项选择题(20题,每小题1.5分,共30分,每小题应选择两个或两个以上答案) 1.下列经济业务中,仅引起资产项目一增一减的有()。
A.从银行贷款10万元,存入银行备用 B.以现金10万元支付职工工资 C.以银行存款20000元购入一批原材料 D.将现金5000元存入银行 【答案】CD ………… 三、判断题(30题,每小题1分,共30分。
判对得分) 1.会计核算基本前提之所以又称为会计假设,是由于其缺乏客观性及人们无法对其进行证明。
() 【答案】√ …………。
一、单项选择题(下列每小题备选答案中,只有一个符合题意的正确答案。
请将选定的答案编号填入括号内。
本类题共40分,每小题1分。
多选、错选、不选均不得分)第1题:支票用于()。
A.同城结算B.异地结算C.同城或异地结算D.国际结算【正确答案】:A第2题:对于实行定额备用金制度的企业,在账务处理上应()。
A.只能设置“其他应收款一备用金”进行核算B.只能设置“备用金”账户核算C.既可以设置“其他应收款一备用金”进行核算,又可以设置“备用金”账户核算D.可以“现金”账户下设置备用金明细账进行核算【正确答案】:C【参考解析】:对于实行定额备用金制度的企业,在账务处理上,既可以设置“其他应收款一备用金”进行核算,又可以设置“备用金”账户核算。
第3题:所有者权益是指所有者在企业资产中享有的经济利益,在数量上等于()。
A.全部资产减去全部负债后的余额B.全部资产加上全部负债后的余额C.投入资本加上未分配利润D.全部资产加上全部收入【正确答案】:A第4题:下列项目中不属于企业的款项范围的是()。
A.现金B.银行存款C.外埠存款D.企业债券【正确答案】:D第5题:科目汇总表属于()。
A.原始凭证B.原始凭证汇总表C.累计凭证D.记账凭证汇总表【正确答案】:D【参考解析】:科目汇总表属于记账凭证汇总表。
第6题:在下列各项费用中,不属于产品销售过程发生的费用有()。
A.业务招待费B.运输费C.广告费D.包装费【正确答案】:A【参考解析】:业务招待费属于管理费用。
第7题:我国的中央银行是()。
A.中国银行B.中国工商银行C.中国建设银行D.中国人民银行【正确答案】:D第8题:现金日记张通常采用()账簿。
A.活页式B.订本式C.卡片式D.两栏式【正确答案】:B【参考解析】:现金日记账、银行存款日记账和总账应该采用订本式。
第9题:某企业发行10000股新股,每股面值为1元,发行价为每股6元,则记入股本的数额为()。
A.10000元B.60000元C.50000元D.70000元【正确答案】:A【参考解析】:应记入股本的数额为10000股×l元/股=10000元。
递归下降分析法实现LL(1)文法的语法分析器作者:余洪周nickhome@版权所有,转载时请注明出自: 本文将就编译原理中比较常用的一个表达式文法,通过递归下降语法分析法来编写分析器。
文中将为您提供如何通过FIRST、FOLLOW和SELECT集合来判断LL(1)方法,然后如何用递归下降语法分析法分析LL(1)方法的基本递归流程,以及如何用C语言来编程实现分析器。
题目:编程识别由下列文法所定义的表达式的递归下降语法分析器。
E→E+T | E-T | TT→T*F | T/F |FF→(E) | i输入:每行含一个表达式的文本文件。
输出:分析成功或不成功信息。
解答:(1)分析a) ∵E=>E+T=>E+T*F=>E+T*(E)即有E=>E+T*(E)存在左递归。
用直接改写法消除左递归,得到如下:E →TE’E’ →+TE’ | −TE’|εT →FT’T’ →*FT’ | /FT’|εF → (E) | ib) 对于以上改进的方法。
可得:对于E’:FIRST( E’ )=FIRST(+TE’)∪FIRST(-TE’)∪{ε}={+,−,ε} 对于T’:FIRST( T’ )=FIRST(*FT’)∪FIRST(/FT’)∪{ε}={*,∕,ε}而且:FIRST( E ) = FIRST( T ) = FIRST( F )=FIRST((E))∪FIRST(i)={(,i }由此我们容易得出各非终结符的FOLLOW集合如下:FOLLOW( E )= { ),#}FOLLOW(E’)= FOLLOW(E)={ ),#}FOLLOW( T )= FIRST(E’)\ε∪FOLLOW(E’)={+,−,),#}FOLLOW( T’ ) = FOLLOW( T ) ={+,−,),#}FOLLOW( F )=FIRST(T’)\ε∪FOLLOW(T’)={*,∕,+,−,),#}由以上FOLLOW集可以我们可以得出SELECT集如下:对E SELECT(E→TE’)=FIRST(TE’)=FIRST(T)={ (,i }对E’ SELECT(E’ →+TE’)={ + }SELECT(E’ →−TE’)={ − }SELECT(E’ →ε)={ε,),#}对T SELECT(T→FT’)={(,i}对T’ SELECT(T’ →*FT’)={ * }SELECT(T’ →∕FT’)={ ∕ }SELECT(T’ →ε)={ε,+,−,),#}对F SELECT(F→(E) )={ ( }SELECT(F→i)={ i }∴SELECT(E’ →+TE’)∩SELECT(E’ →−TE’)∩SELECT(E’ →ε)=ΦSELECT(T’ →*FT’)∩SELECT(T’ →∕FT’)∩SELECT(T’ →ε)=ΦSELECT(F→(E) )∩SELECT(F→i)= Φ由上可知,有相同左部产生式的SELECT集合的交集为空,所以文法是LL (1)文法。
因此,转化后的文法可以用递归下降分析法作语法分析。
(2)设计这里采用递归下降分析法形象描述递归子程序。
程序中将要用到的几个重要数据如下:一个全局变量ch,存放由文件输入得到的字符。
一个函数宏READ(ch),实现读取文件中的字符。
五个子函数:P(E)、P(E’)、P(T)、P(T’)、P(F)。
程序主要的子函数模块流程图如下:程序子模块图(3)程序代码如下/******************************************************************** ***** 文件名:ana.c* 文件描述:递归下降语法分析器。
分析如下方法:* E->E+T | E-T | T* T->T*F | T/F |F* F->(E) | i* 输入:每行含一个表达式的文本文件。
* 输出:分析成功或不成功信息。
* 创建人:余洪周<nickhome@> 2006-12-8* 版本号:1.0********************************************************************* **/#include<stdio.h>#include<malloc.h>#define READ(ch) ch=getc(fp) /*宏:READ(ch)*/char ch; /*声明为全局变量*/int right=0;FILE *fp;struct struCH{char ch;struct struCH *next;}struCH,*temp,*head,*shift;/*head指向字符线性链表的头结点*//*shift指向动态建成的结点(游标)*/void main(int argc,char *argv[]){void E (); /* P(E) */void E1(); /* P(E')*/void T (); /* P(T) */void T1(); /* P(T')*/void F (); /* P(F) */int errnum=0,k=0,m=0,countchar=0,rownum;int charerr=0; /*开关控制量*//************************以只读方式打开文件*********************/if((fp=fopen(argv[1],"r"))==NULL){printf("\n\tCan not open file %s,or not exist it!\n",argv[1]);exit(0); /*文件不存在or打不开时,正常退出程序*/}else printf("\n\tSuccess open file: %s\n",argv[1]); /*成功打开文件*//******************遍历整个文件检测是否有非法字符********************//*如果用while(!feof(fp))语言,将会多出一个字符*所以这里采用以下方法遍历整个文件检测其否有非法字符*//*[1]计算文件中字符数量*/while(!feof(fp)){READ(ch); /*这里读取字符只是让文件指针往前移*/countchar++; /*统计文件中的字符数(包括换行符及文件结束符)*/}rewind(fp); /*将fp文件指针重新指向文件头处,以备后面对文件的操作*/if(countchar==0){ /*空文件*/printf("\t%s is a blank file!\n",argv[1]);exit(0); /*正常退出本程序*/}/*[2]开始遍历文件*/while(k<(countchar-1)){ /*加换行符后countchar仍多了一个,不知为何*/ ch=getc(fp);if(!(ch=='('||ch==')'||ch=='i'||ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='#'||ch=='\n')){ charerr=1;errnum++; /*charerror出错标记,errnum统计出错个数*/}k++;}rewind(fp); /*将fp文件指针重新指向文件头处,以备后面的建链表操作*/if(charerr==1){ /*文件中有非法字符*/printf("\n\t%d Unindentify characters in file %s \n",errnum,argv[1]);exit(0); /*正常退出本程序*/}/*******************非空且无非法字符,则进行识别操作*****************/for(rownum=1;m<(countchar-1);rownum++){ /*识别所有行,rownum记录行号*//*初始变量及堆栈和*/right=1;/*初始存放待识别的表达式的线性链表头*/shift=malloc(sizeof(struCH));/**/shift->next=NULL;head=shift;/*读取一行形成线性链表*/READ(ch);putchar(ch);m++;while(ch!='\n'&&m<(countchar)){ /*行末or到文件尾。
最后会读取文件结束符*//*读取ch,读取存入结点,这样每行便形成一个线性链表*/temp=malloc(sizeof(struCH));temp->ch=ch;temp->next=NULL;shift->next=temp;shift=shift->next;READ(ch);if(m!=(countchar-1)) putchar(ch); /*不输出最后一次读取的文件结束符*/m++;}head=head->next; /*消去第一个空头结点,并使head指向非空线性链表头*/shift=head; /*shift指向头结点,以便后面识别操作*/putchar('\n');E(); /*开始识别一行*/if(shift->ch=='#'&&right) /*正确提示:[文件名] Line [行号]:right expression!*/printf("%s Line %d:\t right expression!\n",argv[1],rownum);else /*错误提示:[文件名] Line [行号]:error expression!*/printf("%s Line %d:\t error expression!\n",argv[1],rownum);putchar('\n');}/*end for*/printf("Completed!\n");fclose(fp); /*关闭文件*/exit(0); /*正常结束程序*/}/*以下函数分别对应于子模块程序*/void E(){T();E1();}void E1(){if(shift->ch=='+'||shift->ch=='-'){shift=shift->next;T();E1();}else{if(shift->ch=='#'||shift->ch==')')return;elseright=0;}}void T(void){F();T1();}void T1(void){if(shift->ch=='*'||shift->ch=='/'){shift=shift->next;F();T1();}else{if(shift->ch!='#'&&shift->ch!=')'&&shift->ch!='+'&&shift->ch!='-') right=0; /*如果不是'#'or')'or'+'or'+'or'-'则出错*/}}void F(void){if(shift->ch=='i')shift=shift->next;else{if(shift->ch=='('){shift=shift->next;E();if(shift->ch==')')shift=shift->next;elseright=0;}elseright=0;}}(4)调试1.编译:在Windows平台下,用Turbo C 2编译连接生成后ana.exe;2.输入表达式:在ana.exe程序同一目录下新建一文本文件(如:test.txt)。