全程不讲废话,先把文法的符号、规则掰碎成 “拼音识字级”,再教你唯一解题方法(推导法),套上就能解软考所有文法选择题,一步一步来,保证你能跟着走通!
第一步:先认文法的「4 个核心符号」—— 就 4 个,记死!
软考里的文法固定格式是G=(Vₙ, Vₜ, P, S),这四个部分没有任何模糊的地方,长得就是字母 + 符号的组合,先把每个部分的含义、长什么样、作用记牢:
| 符号 | 中文名 | 长什么样(软考真题版) | 核心作用 | 通俗类比 |
|---|---|---|---|---|
| Vₙ | 非终结符 | {S,A,B,E}(大写字母) | 可以继续拆分的 “概念” | 语文里的 “句子、主语、谓语” |
| Vₜ | 终结符 | {a,b,0,1,+,-}(小写 / 数字 / 运算符) | 不能拆分的基本符号,是推导的 “最终结果” | 语文里的 “字、词”,编程里的 “变量、符号” |
| P | 产生式 | S→aSb、A→ab(箭头式) | 文法的核心规则:规定 “非终结符怎么拆成其他符号” | 拼音的 “拼写规则”(如:妈→m+a) |
| S | 开始符号 | 单个大写字母(如 S) | 推导的唯一起点,所有合法串都从它开始拆 | 拼单词的 “首字母” |
✅硬规矩记死:
- 非终结符只有大写字母,终结符只有小写 / 数字 / 运算符,软考里绝对不会混;
- 产生式的箭头左边只能是 1 个非终结符,右边可以是 “非终结符 + 终结符” 的任意组合;
- 推导的目标:把开始符号 S,通过产生式一步步拆,直到右边全是终结符(没有任何大写字母),拆出来的这个串,就是该文法的合法句子。
第二步:教你「唯一解题方法 —— 正向推导法」
软考文法题 99% 是选择题:给文法,问哪个选项的串是合法的。不用学复杂方法,就用正向推导(从 S 开始拆,凑选项),3 步就能解,慢动作教你,全程只套规则,不用动脑子!
解题 3 步固定流程:
- 定起点:从开始符号S出发;
- 套规则:每次选一个产生式,把当前的非终结符替换成箭头右边的内容;
- 终目标:拆到没有任何大写字母(全是终结符),得到的串就是合法串,去选项里找匹配的即可。
第三步:拿软考真题原型题,慢动作走一遍(全程不跳步)
真题原型:
给定文法 G=(Vₙ, Vₜ, P, S),其中Vₙ={S},Vₜ={a,b},P={①S→aSb,②S→ab},问:下列哪个串是该文法的合法句子?A. aabb B. aaabbb C. abab D. abba
慢动作推导(跟着走,绝对能懂):
起点:从唯一的非终结符S开始(Vₙ只有 S,没其他大写字母)
第一次推导:试产生式② S→ab
S → ab → 右边全是 a、b(终结符),推导结束→ 合法串:ab(如果选项有 ab,直接选)。
第二次推导:试产生式① S→aSb(想凑更长的串,软考常考长串)
S → aSb → 此时右边有S(大写,非终结符),必须继续拆这个 S!
- 对这个 S再用产生式② S→ab:aSb → aabb → aabb → 右边全是终结符,推导结束→ 合法串:aabb(对应选项 A,这就是答案)。
拓展推导(凑更长的串,理解规律):
如果想拆出 aaabbb,就多来一次:S→aSb → a (aSb) b → aaabbb → aaabbb(也是合法串,若选项有也对)。
为什么其他选项错?
- B.aaabbb:本题如果只推 2 次是 aabb,推 3 次才是 aaabbb,若题目没要求,A 是最直接答案;
- C.abab、D.abba:用 S 的两个产生式,怎么拆都拆不出这两个串,因为产生式只有 S→aSb 和 S→ab,拆出来的串一定是a 在前、b 在后,且 a 和 b 数量相等,直接排除。
第四步:再练一道「带 2 个非终结符」的真题(进阶版,软考高频)
真题原型:
文法 G=(Vₙ, Vₜ, P, S),Vₙ={S,A},Vₜ={a},P={①S→A,②A→aA,③A→a},问合法串是?A. a B. aa C. aaa D. 以上都是
慢动作推导:
起点:S
- S→A(用规则①),现在要拆 A;
- 拆 A:用规则③ A→a → 得到a(选项 A 合法);
- 拆 A:用规则② A→aA,再拆新的 A→a → aa=aa(选项 B 合法);
- 拆 A:用规则② A→aA,再拆 A→aA,再拆 A→a → aaa=aaa(选项 C 合法);→ 答案:D。
第五步:软考文法题「避坑 + 秒杀技巧」
- 一眼排除法:选项里如果出现大写字母,直接排除(合法串必须全是终结符,无大写);
- 数量规律法:像第一题 S→aSb、S→ab,拆出来的串a 和 b 数量一定相等,选项里 a、b 数量不一样的直接排除;
- 只推选项:不用把所有合法串都推出来,看选项的串,反向凑推导步骤(比如选项是 aabb,就想怎么从 S 拆出 aabb),节省时间;
- 产生式只能套箭头左边:比如产生式是 A→a,就只能替换 A,不能替换 S,软考不会考不规则产生式。
总结
文法在软考里没有模糊考点,所有题都是套推导规则,核心就两点:
- 认死4 个核心符号的样子和规则,大写 = 非终结符、小写 / 数字 = 终结符;
- 用正向推导法,从 S 开始,套产生式拆,直到全是终结符,凑选项即可。
现在来练一道题,检验一下,你试着推,我帮你批改:练习题:文法 G=(Vₙ={S}, Vₜ={0,1}, P={S→0S1, S→01}),合法串是?A. 0011 B. 0101 C. 0001 D. 0110
阿雪技术观
让我们积极投身于技术共享的浪潮中,不仅仅是作为受益者,更要成为贡献者。无论是分享自己的代码、撰写技术博客,还是参与开源项目的维护和改进,每一个小小的举动都可能成为推动技术进步的巨大力量
Embrace open source and sharing, witness the miracle of technological progress, and enjoy the happy times of humanity! Let's actively join the wave of technology sharing. Not only as beneficiaries, but also as contributors. Whether sharing our own code, writing technical blogs, or participating in the maintenance and improvement of open source projects, every small action may become a huge force driving technological progrss.