一个完整的编译器前端-A.1 源语言

  这个语言的一个程序由一个块组成,该块中包含可选的声明和语句。语法符号basic表示基本类型。

program –> block

block   –> { decls stmts }

decls   -> desls decl | ε

decl    -> type id;

type    -> type [num] | basic

stmts   -> stmts stmt | ε

把复制当做一个语句(而不是表达式中的运算符)可以简化翻译工作。

stmt    -> loc=bool;

         | if(bool) stmt

         | if(bool) stmt else stmt

         | while(bool) stmt

         | do stmt while(bool);

         | break;

         | block

loc    -> loc [bool] | id

表达式的产生式处理了运算符的结合性和优先级。他们对每个优先级级别都使用了一个非终结符号,而非终结符号factor用来表示括号中的表达式,标识符,数组引用和常量。

bool –> bool ||join | join

join –> join && equality |equality

equality –> equality == rel | equality != rel | rel

rel   -> expr < expr | expr <= expr |expr >= expr | expr > expr | expr

expr –> expr + term | expr - term | term

term –> term * unary | term / unary | unary

unary –> !unary | –unary | factor

factor –> ( bool ) | loc | num | real | true | false

原文地址:https://www.cnblogs.com/ZJUT-jiangnan/p/3524530.html