Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于C语法设计的源语言LittleC编译器

(1)结构和语义说明:

a. 该语言的一个程序由且仅由一个块结构组成,该块中包含两部分:可选的声明语句和必须的执行语句。声明语句用于声明变量,执行语句用于表达计算过程,过程中使用这些变量来存储内部数据和计算结果。

b. 该语言支持两种数据类型:整型和布尔型。整型数据占4个字节,布尔型占1个字节。整型数据的常量是整常数,布尔型数据的常量是 true 和 false 。

c. 整型数据支持 +、-、*、/ 四种算术运算,运算结果为整型值。整型数据可与>、>=...等六个关系运算符结合,运算结果为布尔型值。

d. 布尔型数据支持 || 、&& 、!三种逻辑运算,运算结果为布尔常量。

e. 整型的变量和常量可以用算术运算符组合成算术表达式,其值为整常数;布尔型的变量和常量可以用逻辑运算符组成成布尔表达式,其值为布尔常量;算术表达式可以加上关系运算符构造出布尔表达式。

f. 整常数和算术表达式可以用于整型变量赋值,布尔常量和布尔表达式可以用于布尔型变量赋值;两者不兼容(文法中使用不同的赋值运算符以示区别)。

g. 各种运算符的优先级和结合规则参照C语言语法理解。

h. 控制流语句中的控制条件限定为1个布尔型变量,该量应该在引用之前定值。

i. 该语言不支持数组、结构体、指针等复杂数据类型。

j. 该语言不含有子程序结构,也不支持过程调用。

k. 该语言有简单的I/O功能:使用read指令能够从键盘读入1个整常数,使用write指令能向屏幕打印输出1个整常数。

(2)文法定义:

PROG        →    {  DECLS  STMTS  } 

DECLS       →    DECLS  DECL    |   empty

DECL         →    int  NAMES  ;  |  bool  NAMES  ; 

NAMES     →    NAMES ,  NAME  |  NAME

NAME       →    id 

STMTS    →    STMTS  STMT  |   STMT          

STMT      →    id  =  EXPR ;    |   id := BOOL ;

STMT      →    if  id   then  STMT

STMT      →    if  id   then  STMT  else STMT

STMT      →    while   id  do  STMT

STMT      →    {  STMTS   STMT  }

STMT      →    read  id  ;

STMT      →    write  id  ; 

EXPR    →    EXPR  ADD  TERM  |  TERM

ADD     →    + | -

TERM    →    TERM  MUL NEGA  |  NEGA

MUL     →    * | /

NEGA   →    FACTOR  |  - FACTOR  

FACTOR →    (  EXPR ) |  id  |  number 

BOOL    →    BOOL  ||  JOIN    |    JOIN

JOIN     →    JOIN   &&   NOT  |   NOT

NOT      →    REL   |  ! REL

REL       →    EXPR   ROP  EXPR 

ROP      →     >  |  >=  |  <  |  <=  |  ==  |   != 

(3)词法规则

a. 标识符:由字母打头后跟字母、数字任意组合的字符串;长度不超过8;不区分大小写;把下划线看作第27个字母。

b. 整常数:完全由数字组成的字符串;正数和0前面不加符号,负数在正数前面加-构成;长度不超过8;十进制。

c. 布尔常量:true 和 false 。

d. 关键字、运算符、分隔符仅包含在文法定义中出现过的终结符。关键字保留。

e. 字母表定义为上述规则中出现的字符的集合;不在该集合中的符号都以非法字符看待。

f. 源程序中可以出现单行注释和多行注释,其语法参考C/C++语言。     

运行环境

Python 3.10以上

Clang+LLVM 18.0.0以上

运行方式

./run.bat

About

基于LLVM的LittleC编译器,99%Python+1%C书写

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages