编译原理第三章 形式语言和语法分析.pptVIP

  • 14
  • 0
  • 约1.08万字
  • 约 67页
  • 2017-06-07 发布于湖北
  • 举报

编译原理第三章 形式语言和语法分析.ppt

* * * * * * * * * * * * * * * * CFG for ToyL 变量声明: VarDec ? ? VarDec ? var VarDefList ; 程序: Prg ?VarDec Body 变量定义列表: VarDefList ? VarDef; VarDec ? VarDef ; VarDec CFG for ToyL 变量定义: VarDef ? Type IdList IdList ? id IdList ? id, IdList Type ? int Type ? real Type ? bool CFG for ToyL 程序体: Body ?{ Stms } Stms ? Stm Stm ? Stm; Stms CFG for ToyL 语句: Stm ? Assig | if-S | while-S | read-S | write-S Assig ? id ass Exp If-S ? if Exp then Stms else Stms while-S ? while Exp Body read-S ? read (id) write-S ? write (Exp) CFG for ToyL 表达式: Exp ? E | relE relE ? E E | E E | E=E (1) E ? T (2) E ? E + T (3) E ? E - T (4) T ? F (5) T ? T * F (6) T ? T / F (7) F ? (E) (8) F ? i (9) F ? n * * * * * * * * * * * * * * * * * * * * * * * * * * * CFG小结 CFG (VN,VT, S, P) 可以定义程序设计语言的语法结构; 一般地,VT 是token的集合; 一个VT可以是一个token,一个token-type, 或是代表某种语法结构的一个符号; VN可看作是某种结构的中间表示; 产生式是关于如何推导语法结构的规则; 例(1) 算术表达式 VT = {id, num, (, ), +, -, *, /} VN = {Exp} P: Exp ? Exp + Exp Exp ? Exp – Exp Exp ? Exp * Exp Exp ? Exp / Exp Exp ? (Exp) Exp ? id Exp ? num S = Exp 例(2) 语句 VT = {id, if, (, ), else, while, {, }, ;, ,,:= } VN = {stmt, exp, stmts} P: stmt ? id := exp; | if (exp) stmt | if (exp) stmt else stmt | while (exp) stmt | {stmts} stmts ? stms stmt | ? exp ? Exp S = stmt 例(3) 变量声明 VT = {Type, id, ; , , } VN = {VarDec, VarDef, VarDefList, idList} P: VarDec ? ? VarDec ? VarDef ; VarDec ? VarDef; VarDec S = VarDec VarDef ? Type idList idList? id idList ? id, idList P: 变量声明 ? 变量声明 ? 一个变量定义; 变量声明 ? 一个变量定义 ; 变量声明 变量定义? 类型 标识符序列 标识符序列? 一个标识符 标识符序列? 一个标识符 , 标识符序列 扩展巴克斯范式 扩展表示 选择 | A ? ? | ? | ? A ? ? A ? ? A ? ? 重复 * or {} A ? A? | ? (左递归) A ? ? ? *或A ? ?{?} A ? ? A | ? (右递归) A

文档评论(0)

1亿VIP精品文档

相关文档