Skip to content

Repository files navigation

A-level CS 伪代码解释器

完整实现的 A-level Computer Science(9618) 伪代码解释器,支持所有标准伪代码语法结构。

A fully implemented A-level Computer Science(9618) pseudocode interpreter that supports all standard pseudocode syntax structures.

🌐 现已支持Web版!

💡 快速开始

方式1:Web界面(推荐)

点击 ➡️这里⬅️ 直接访问 https://code.i-o.autos 开始使用

方式2:命令行

python3 main.py your_program.pseudo

功能特性

✅ 已实现功能

  • 完整的数据类型系统

    • 基本类型:INTEGER, REAL, STRING, CHAR, BOOLEAN, DATE
    • 复合类型:ARRAY(一维/二维数组,支持自定义下界)
    • 自定义类型:TYPE...ENDTYPE(记录类型)
  • 变量和常量

    • DECLARE 变量声明
    • CONSTANT 常量定义
    • 支持大小写不敏感的标识符
  • 控制结构

    • IF-THEN-ELSE-ENDIF(支持嵌套)
    • CASE-OF-OTHERWISE-ENDCASE(支持值匹配和范围匹配)
    • FOR...TO...STEP...NEXT(计数循环)
    • WHILE...ENDWHILE(前测试循环)
    • REPEAT...UNTIL(后测试循环)
  • 函数和过程

    • PROCEDURE 过程定义和调用
    • FUNCTION 函数定义(支持返回值)
    • 参数传递:传值和传引用(BYREF)
    • ⚠️ 注意:递归函数当前存在问题,正在修复中
  • 输入输出

    • INPUT 输入语句
    • OUTPUT/PRINT 输出语句
    • 支持多项输出
  • 文件操作

    • OPEN...FOR READ/WRITE/APPEND
    • READFILE, WRITEFILE
    • CLOSEFILE
    • EOF() 文件结束检测
  • 内置函数

    • 字符串函数:ASC, CHR, LENGTH, LEFT, RIGHT, MID, UCASE, LCASE
    • 数学函数:INT, ABS, SQRT, POWER, ROUND, MOD, DIV
    • 日期函数:TODAY, DAYOF, MONTHOF, YEAROF, DATEDIFF
    • 随机数:RANDOM, RANDOMINT
  • 表达式

    • 算术运算:+, -, *, /, ^ (幂)
    • 字符串连接:&
    • 比较运算:=, <>, <, >, <=, >=
    • 逻辑运算:AND, OR, NOT
    • 完整的运算符优先级

安装

无需额外依赖,仅需Python 3.7+

cd pseudocode_interpreter
chmod +x main.py

使用方法

1. 运行伪代码文件

python3 main.py your_program.pseudo

2. 交互模式(REPL)

python3 main.py

3. 调试模式

python3 main.py --debug your_program.pseudo

4. 严格模式(强制变量声明)

# 开启严格模式,要求所有变量必须先声明
python3 main.py --strict your_program.pseudo
python3 main.py -s your_program.pseudo

# 组合使用
python3 main.py --strict --debug your_program.pseudo

严格模式说明:

  • 非严格模式(默认):允许隐式声明变量,x <- 10 会自动创建变量
  • 严格模式(--strict):强制要求使用 DECLARE 声明变量,未声明会报错
  • 严格模式有助于发现拼写错误和未初始化变量,符合A-level考试规范

代码示例

示例1:基本变量和算术

DECLARE x : INTEGER
DECLARE y : REAL
DECLARE name : STRING

x <- 10
y <- 3.14
name <- "Alice"

OUTPUT "x =", x
OUTPUT "y =", y
OUTPUT "name =", name

示例2:IF条件语句

DECLARE score : INTEGER
score <- 75

IF score >= 60
THEN
    OUTPUT "Pass"
ELSE
    OUTPUT "Fail"
ENDIF

示例3:FOR循环

FOR i <- 1 TO 5
    OUTPUT i
NEXT i

示例4:数组

DECLARE numbers : ARRAY[1:5] OF INTEGER

FOR i <- 1 TO 5
    numbers[i] <- i * 10
NEXT i

FOR i <- 1 TO 5
    OUTPUT "numbers[", i, "] =", numbers[i]
NEXT i

示例5:二维数组

DECLARE matrix : ARRAY[1:2, 1:3] OF INTEGER

matrix[1,1] <- 1
matrix[1,2] <- 2
matrix[1,3] <- 3

FOR row <- 1 TO 2
    FOR col <- 1 TO 3
        OUTPUT matrix[row, col]
    NEXT col
NEXT row

示例6:内置函数

DECLARE text : STRING
text <- "Hello World"

OUTPUT "LENGTH:", LENGTH(text)
OUTPUT "LEFT 5:", LEFT(text, 5)
OUTPUT "RIGHT 5:", RIGHT(text, 5)
OUTPUT "MID:", MID(text, 7, 5)

语法要点

缩进规则

重要:伪代码使用缩进来表示代码块。每个控制结构(IF, FOR, WHILE等)的代码块必须缩进。

正确示例:

IF x > 0
THEN
    OUTPUT "Positive"
ENDIF

错误示例:

IF x > 0
THEN
OUTPUT "Positive"    // ❌ 缺少缩进
ENDIF

关键字大写

所有关键字必须大写:IF, THEN, ELSE, FOR, WHILE, DECLARE 等。

赋值操作符

使用 <- 而非 = 进行赋值:

x <- 10    // ✅ 正确
x = 10     // ❌ 错误

数组索引

数组可以使用自定义下界:

DECLARE arr : ARRAY[5:10] OF INTEGER  // 下界是5,上界是10
arr[5] <- 100
arr[10] <- 200

项目结构

pseudocode_interpreter/
├── main.py                 # 主程序入口
├── lexer.py                # 词法分析器(处理缩进)
├── parser.py               # 语法分析器(递归下降)
├── ast_nodes.py            # AST节点定义
├── interpreter.py          # 解释器核心
├── pseudocode_types.py     # 类型系统
├── environment.py          # 作用域和环境管理
├── builtin_functions.py    # 内置函数库
├── tests/                  # 测试用例
└── README.md               # 本文档

架构设计

1. 词法分析(Lexer)

  • 手写词法分析器
  • 处理缩进敏感的语法(INDENT/DEDENT tokens)
  • 识别所有关键字和操作符

2. 语法分析(Parser)

  • 递归下降解析器
  • 生成抽象语法树(AST)
  • 支持所有伪代码语法结构

3. 类型系统

  • 强类型系统
  • 支持所有标准类型
  • 可扩展的类型框架(易于添加新类型如DATE)

4. 解释器

  • 基于AST的树遍历解释器
  • 访问者模式执行节点
  • 完整的作用域管理
  • 支持函数调用栈

扩展性

添加新的内置函数

builtin_functions.py 中添加:

def builtin_your_function(arg1, arg2):
    # 实现你的函数
    return result

# 注册函数
BUILTIN_FUNCTIONS['YOURFUNCTION'] = builtin_your_function

添加新的数据类型

pseudocode_types.py 中定义新类型:

class YourType(PseudocodeType):
    def __init__(self, value):
        super().__init__(value)
    # 实现必要的方法

测试

运行测试用例:

python3 main.py tests/test_basic.pseudo
python3 main.py tests/test_arithmetic.pseudo
python3 main.py tests/test_if_fixed.pseudo
python3 main.py tests/test_loops2.pseudo
python3 main.py tests/test_array.pseudo
python3 main.py tests/test_builtins.pseudo

许可证

本项目为教育目的开发,用于A-level CS课程学习。

About

A pseudocode IDE,including AI error correction and assistance, currently supports CIE CS, and will support more exam boards or other pseudocode syntax in the future.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages