(2020年下半年软件设计师49题)程序设计语言的大多数语法现象可以用CFG(上下文无关文法)表示。下面的CFG产生式集用于描述简单算术表达式,其中+ – * 表示加、减、乘运算,id表示单个字母表示

后续应该还会发布一些关于 软件设计师题目的解题思路,或软件设计师的笔记资料,有需要的可以来我的个人主页搜索

2020年下半年软件设计师上午题49题

三种解题思路

第一种 排除法

  • 这相当于硬凑,首先,上下文无关管文法中没有()和 / 符 ,所以可以直接排除B和D选项
  • 仅限用于这题,根据符 排除了BD选项,题目有说明,id表示单个字母表示变量,C选项中有数字,这CFG无法产生数字,所以C也可以直接排除,但还是建议看下第二种推理过程

第二种 自底向上推

  • C需要 * – + 这三个运算符

    • + 和 – 可以有不少符合的条件实现,但是* 只能由T->TF,并且要保证a-b的要求,后面久必须跟上一个 – ,所以F转为-F,现在的得出的式子就是T-F,需要最后一个 + ,向上寻找,T只能由E+T|E-T|T 给出,加 都只能排在 T*-F 这一块的前面,所以C选项是错误的
  • A需要+ – – 这三个运算符

    • 最好先考虑两个符 连在一起的情况,+ -, – 这个符 标志比较有特征,-b只能是负数,所以-F是必定需要的,,然后就是如何插入-F的问题,-F是由F给出,F由T给出,T由E给出,关于E的有两个式子,-F的前面是 + ,所以-F要挨着+ ,向上推又是由T给出的,E+T就可以满足专为E±F,这时还差一个 – ,E – T,E再分解,可以分解为E+T|E-T|T,所以只要E-T的E分解一下,变成E+T-T,中间的T分解为-F,得出式子分解为E±F-T,最后分解为id±id-id,就可以表示单个字母表示的变量,故答案为A

第三种 自顶向下推

  • (2020年下半年软件设计师49题)程序设计语言的大多数语法现象可以用CFG(上下文无关文法)表示。下面的CFG产生式集用于描述简单算术表达式,其中+ - * 表示加、减、乘运算,id表示单个字母表示

总结

  • 三种方法各有好处,第一种快速,但容易错,难点的也不好解,第二种抓细节,难点也好解开,第三种,需要一定想象力
  • 如果确实对你有帮助别忘记一键三连支持一下哦??

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月19日
下一篇 2021年4月19日

相关推荐