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

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

  • 答案:A

题解

三种解题思路

第一种 排除法

  • 这相当于硬凑,首先,上下文无关管文法中没有()和 / 符号,所以可以直接排除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

第三种 自顶向下推

总结