Home - Lixiaokun0106/SysY2022-Language-editors GitHub Wiki

Welcome to the SysY2022E-Language-editors wiki!

在内容开始之前,项目组Four Pigs成员十分欢迎大家查看/学习本项目,本项目的实现未必能完全满足您的需求,但我们相信其中部分方法能够为您提供思路和启发。

本项目开发背景为USTB软件工程课程设计题目一,针对SysY2022E语言编写编辑插件,以帮助开发者更好地进行相关程序的开发。

SysY2022是C语言的一个子集,最初是为“全国大学生系统能力大赛-编译器大赛”设计的迷你编程语言。虽然SysY是一种简化的C语言,但经过简单扩展后能够编写相对复杂的程序。本项目将以扩展的SysY2022语言为目标(称为SysY2022SysY2022E语言定义),开发一款支持SysY2022E程序编写的编辑器环境,从而为SysY2022E开发人员提供能更好的开发体验。

本项目基于LSP和ANTLR4实现,使用Typescript编写,最终产品为VSCode插件,用户可以通过拓展市场直接安装使用。关于该项目的详细介绍见文档1-6,欢迎在此基础上进行二次开发。

开发人员

  • Lixiaokun0106 (写bug的天才,哦不,其实是最有实力的天才)
  • RoxanneKimmich (debug的天才,de着de着发现还是写bug好玩)
  • wangchongai (写文案的天才,1天完成所有报告排版的战神)
  • cx8688688 (修电脑的天才,有请这位选手开始你的表演)

示例代码

本项目主要使用Typescript语言编写,在代码中的必要之处已添加注释。

// 处理文档的函数
async function handleDocument(document: TextDocument) {
    // 获取文档的内容
    let text = document.getText();
  
    // 在这里,你可以使用ANTLR对文档内容进行分析
    // 创建词法分析器和解析器
    let inputStream = new CharStream(text);
    let lexer = new SysY2022ELexer(inputStream);
    let tokenStream = new CommonTokenStream(lexer);
    let parser = new SysY2022EParser(tokenStream);
    parser.buildParseTrees = true;
    let tree = parser.compUnit();
    console.log(tree.toStringTree(parser.ruleNames, parser));

    // 生成符号表
    const walker = new ParseTreeWalker();
    walker.walk(MySymbolGenerator, tree);

  }

开发经验分享

先鸽了~

最佳实践

先鸽了