写点什么

基于仓颉编程语言的四则运算解释器开发秘籍

  • 2025-09-04
    中国香港
  • 本文字数:2276 字

    阅读完需:约 7 分钟

基于仓颉编程语言的四则运算解释器开发秘籍

1 概述

1.1 案例介绍

MathInterperter 是基于数学表达式解析器组合子的计算器,能够精准处理包含四则运算和多重括号嵌套的复杂表达式。仓颉编写的解释器通过枚举动态构建抽象语法树 Expression,简化代码结构的同时进行高效求值。其核心功能包括运算符优先级的自动识别、实时语法校验及表达式求值。


通过实际操作,让大家深入了解如何进行华为云的开发者云主机完成 CodeArts IDE for Cangjie 编辑器的部署,并利用该编译器实现 MathInterpreter 解释器组合子的实际作用,体验其在模型开发中所扮演的角色。

1.2 适用对象

  • 企业

  • 个人开发者

  • 高校学生

1.3 案例时间

本案例总时长预计 30 分钟。

1.4 案例流程


说明:


  1. 进入华为开发者空间,登录云主机;

  2. 使用 CodeArts IDE for Cangjie 编程和运行仓颉代码。


MathInterpreter :基于仓颉编程语言的四则运算解释器开发秘籍 👈👈👈体验完整版案例,点击这里。

2 运行测试环境准备

2.1 开发者空间配置

面向广大开发者群体,华为开发者空间提供一个随时访问的“开发桌面云主机”、丰富的“预配置工具集合”和灵活使用的“场景化资源池”,开发者开箱即用,快速体验华为根技术和资源。


领取云主机后可以直接进入华为开发者空间工作台界面,点击打开云主机 > 进入桌面连接云主机。没有领取在开发者空间根据指引领取配置云主机即可,云主机配置参考 1.5 资源总览



2.2 创建仓颉程序

点击桌面 CodeArts IDE for Cangjie,打开编辑器,点击新建工程,保持默认配置,点击创建


产物类型说明


  • executable,可执行文件;

  • static,静态库,是一组预先编译好的目标文件的集合;

  • dynamic,动态库,是一种在程序运行时才被加载到内存中的库文件,多个程序共享一个动态库副本,而不是像静态库那样每个程序都包含一份完整的副本。


2.3 运行仓颉工程

创建完成后,打开 src/main.cj,参考下面代码简单修改后,点击编辑器右上角运行按钮直接运行,终端窗口可以看到打印内容。


package demo// 第一个仓颉程序main(): Int64 {    println("hello world")    println("你好,仓颉!")    return 0}
复制代码


(* 注意:后续替换 main.cj 文件代码时,package demo 保留)


(* 仓颉注释语法:// 符号之后写单行注释,也可以在一对 /* 和 */ 符号之间写多行注释)



到这里,我们第一个仓颉程序就运行成功啦!接下来我们继续探索仓颉语言。

3 MathInterpreter 计算器使用指南

3.1 领取你的 MathInterpreter 工具

使用云主机火狐浏览器前往仓颉 gitcode 论坛官网下载 Cangjie-Examples 项目完整代码


gitcode:


https://gitcode.com/Cangjie/Cangjie-Examples
复制代码



文件下载在/home/developer/Downloads 目录下:



进入 Downloads 目录下,右键选择“Open Terminal Here”打开终端,使用 unzip 解压文件。


unzip Cangjie-Examples-0.53.18.zip
复制代码



若未安装 unzip,请打开终端,输入以下命令安装 unzip。


sudo apt-get updatesudo apt-get install unzip
复制代码


Cangjie-Examples 项目完整代码,已下载并解压在/home/developer/Downloads/目录下。


3.2 MathInterpreter 项目结构简介

数学计算解释器(MathInterpreter),主要通过解析器组合子将数学表达式解析问题分解为可组合、可重用的原子操作,不仅实现了精确的数学计算,更提供了一种可扩展、易维护的解析框架设计范式。


combinator.cj: 定义了可组合的解析器单元,将字符处理、类型转换、序列生成等逻辑封装为可复用的解析器单元,为构建完整的四则运算解释器奠定了词法分析基础。


public class Combinator<I, O> {    // 核心解析函数(输入流 → 解析结果 + 剩余流)    public let parseFunc: (List<I>) → Option<(O, List<I>)>}// 创建原子解析器,匹配满足谓词条件的单个输入元素public static func make<I>(predicate: (I) -> Bool): Combinator<I, I>  // 对解析结果进行类型转换,将原始输出映射为新类型  public func map<O2>(f: (O) -> O2): Combinator<I, O2>  // 构建顺序组合解析器,依次执行this和c2并返回结果元组  public func and<O2>(c2: Combinator<I, O2>): Combinator<I, (O, O2)>  // 构建分支选择解析器,优先尝试this解析,失败时回退到c2  public func or(c2: Combinator<I, O>): Combinator<I, O>  // 构建重复模式解析器,连续匹配至少min次相同模式  public func many(min: Int64): Combinator<I, List<O>>  
复制代码


parser.cj: 实现了解析器部分,将输入的字符流转化为组合表达式,并按照优先级对表达式进行计算。


// 将字符区分为运算符、括号及数字enum Token{}// 表达式枚举类enum Expression{}// 系统总控函数,实现从原始字符串到计算结果的端到端处理:  public func eval(str: String): Result<Int64, String>  
复制代码


main.cj: 包含主函数,用于测试分词器的功能。

3.3 Cangjie 实现数学表达式解析器

使用 CodeArts IDE for Cangjie 打开工程,选择前面下载解压的示例代码目录 Cangjie-Examples 下的 MathInterpreter 打开。



选择/home/developer/Downloads/ Cangjie-Examples-0.53.18/目录下的 MathInterpreter,点击打开。



打开 MathInterpreter\src\__main.cj,通过 CodeArts IDE for Cangjie 点击运行项目。



验证测试一:括号嵌套测试。


按下 enter 键,输入表达式:3+1+(2+(4-1)+1)+1,再次按下 enter 键,输出结果为 11。



测试二:运算符优先级测试。


输入表达式:3+2*(99+101)/100+7,按下 enter 键,输出结果为 14。



测试三:无效表达式测试。


输入表达式:a+1-3,按下 enter 键,输出结果为 Invalid Input。



至此,基于仓颉编程语言的四则运算解释器开发秘籍案列内容已全部完成。


此刻,您已掌握数学表达式解析器的核心功能,它将成为您快速处理数学表达式的得力助手,助力探索组合子解析器的无限可能。


用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
基于仓颉编程语言的四则运算解释器开发秘籍_CodeArts_华为云开发者联盟_InfoQ写作社区