软考-软件设计师:程序设计语言-编译过程-词法分析-文法

介绍

文法,是在 词法分析 节点

一个形式文法是一个有序四元组 G=(V,T,S,P),其中:

  • V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符。
  • T:终结符。是语言的组成部分,是最终结果。
  • S:起始符。是语言的开始符号。
  • P:产生式。用终结符替代非终结符的规则

例子

分析

  • a、b没有推导,所以是 终结符 T

  • S、A可以推导出其他,所以是 非终结符 V。推导过程也就是 产生式 P

  • S 是起始符,从 S 开始推导

  • |代表 或 的意思。如:S -> aAS|a,表示可以推导出 aAs 或 a。注意: 没有先后顺序

解答

题

简单算术表达式的结构可以用下面的上下文无关文法进行描述(E为开始符号),()是符合该文法的句子。

E -> T|E+T
T -> F|T*F
F -> -F|N
N→0|1|2|3|4|5|6|7|8|9

A、2--3*4
B、2+-3*4
C、(2+3)*4
D、2*4-3

分析

选项C

有 (),但是在推导式中没有,所以是错误的

选项A

2--3*4 转成=> 2 - (-3)*4 转成=> 2 + -( (-3)*4 )

看出有些复杂,先不算 A

选项B

2+-3*4 转成=> 2 + (-3) * 4

技巧:

  • 从左往右看,是 加法 运算,根据 E -> E+T 推导出

  • 接下来,要将 T 推导出 (-3) * 4

具体如下:


原文出处:/show_1GWtV26espD.html