- 项目介绍
- 项目结构介绍
- 使用方法
- 词法分析介绍
- 语法分析介绍
python版本为3.6。
使用库为ply。
模仿python语法完成一小部分功能,例如注释,二元运算符,逻辑运算符,print语句,for语句,if语句,if-else语句,基本数据类型有int,string,boolean,变量。
- dlexer.py 实现了词法分析
- dparser.py 实现了语法分析
- dexecute.py 实现了执行语法的功能
- test_code.py 要进行测试的代码
- run.py 执行文件,从test_code中读入代码,可调整choice变量,执行1-3的功能
- 首先创建一个文件用于写测试代码(自带的测试文件为test_code.py)
- run.py中会加载1中创建的文件(默认加载为test_code.py)
- 更改choice变量的值,可更改值有1(词法),2(语法),3(执行)(默认choice的值为3)
-
标识符
- NUMBER 整数类型
- ID 变量
- STRING 字符串类型
- SPLIT 语句间的分隔符
-
保留字
- TRUE/FALSE bool类型
- print/range 常用的函数
- and/or 逻辑运算符
- if/else 条件
- for/in 循环
-
单字符操作符
- ADD/REM/MUL/DIV/% 加减乘除除余
- LT/GT/ASSIGN 大于小于赋值
- LPAREN/RPAREN 左右括号
- COMMA/COLON 逗号冒号
-
双字符操作符
- GE/LE 大于等于/小于等于
- EQ/NE 等于/不等于
- ** 乘方
-
注释
# 由井号开头的一行将被忽略
Rule 0 S' -> entry
Rule 1 entry -> start
Rule 2 start -> start stmt_print SPLIT
Rule 3 start -> start stmt
Rule 4 start -> empty
Rule 5 stmt -> SPLIT
Rule 6 stmt -> expression SPLIT
# print
Rule 7 stmt_print -> PRINT LPAREN expr_list RPAREN
# for
Rule 8 range -> RANGE LPAREN expr_list RPAREN
Rule 9 stmt -> FOR ID IN range COLON stmt_print SPLIT
# if-else
Rule 10 stmt -> stmt_print IF condition_list ELSE stmt_print SPLIT
Rule 11 if_assign -> ID ASSIGN expression
Rule 12 stmt -> if_assign IF condition_list ELSE expression SPLIT
Rule 13 stmt -> IF condition_list COLON stmt_print SPLIT
Rule 14 stmt -> IF condition_list COLON SPLIT stmt_print SPLIT
# 赋值
Rule 15 stmt -> ID ASSIGN expression SPLIT
Rule 16 stmt -> ID ASSIGN condition_list SPLIT
# 一行多个表达式
Rule 17 expr_list -> expression
Rule 18 expr_list -> expr_list COMMA expression
# 逻辑控制
Rule 19 condition_list -> expression
Rule 20 condition_list -> condition_list AND expression
Rule 21 condition_list -> condition_list OR expression
Rule 22 condition_list -> LPAREN condition_list RPAREN
# 标识符
Rule 23 expression -> TRUE
Rule 24 expression -> FALSE
Rule 25 expression -> ID
Rule 26 expression -> NUMBER
Rule 27 expression -> STRING
# 二元运算
Rule 28 expression -> expression ADD expression
Rule 29 expression -> expression REM expression
Rule 30 expression -> expression MUL expression
Rule 31 expression -> expression DIV expression
Rule 32 expression -> expression MOD expression
Rule 33 expression -> expression GT expression
Rule 34 expression -> expression LT expression
Rule 35 expression -> expression GE expression
Rule 36 expression -> expression LE expression
Rule 37 expression -> expression EQ expression
Rule 38 expression -> expression NE expression
Rule 39 expression -> expression POW expression
Rule 40 expression -> LPAREN expression RPAREN
Rule 41 empty -> <empty>