https://github.com/rmsnow/simplecompiler
一个完整的编译器前端
https://github.com/rmsnow/simplecompiler
Last synced: over 1 year ago
JSON representation
一个完整的编译器前端
- Host: GitHub
- URL: https://github.com/rmsnow/simplecompiler
- Owner: RMSnow
- Created: 2017-11-30T11:26:41.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-12-17T17:16:55.000Z (over 8 years ago)
- Last Synced: 2025-01-30T10:30:41.587Z (over 1 year ago)
- Language: Java
- Homepage:
- Size: 18.6 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 一个完整的编译器前端
来自龙书`附录A`
## 源语言
一个程序由一个块组成,该块中包含可选的声明和语句。语法符号`basic`表示基本类型。
program -> block
block -> { decls stmts }
decls -> decls decl
| null
decl -> type id ;
type -> type [ num ]
| basic
stmts -> stmts stmt
| null
把赋值当作一个语句(而不是表达式中的运算符)可以简化翻译工作。
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