1 概述

1.1 案例介绍

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

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

1.2 适用对象
  • 企业
  • 个人开发者
  • 高校学生
1.3 案例时间

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

1.4 案例流程

基于仓颉编程语言的四则运算解释器开发秘籍_华为开发者空间

说明:

  1. 进入华为开发者空间,登录云主机;
  2. 使用CodeArts IDE for Cangjie编程和运行仓颉代码。
1.5 资源总览

资源名称

规格

单价(元)

时长(分钟)

开发者空间 - 云主机

鲲鹏通用计算增强型 kc2 | 4vCPUs | 8G | Ubuntu

免费

30

最新案例动态,请查阅 《MathInterpreter :基于仓颉编程语言的四则运算解释器开发秘籍》。小伙伴快来领取华为开发者空间进行实操体验吧!

2 运行测试环境准备

2.1 开发者空间配置

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

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

基于仓颉编程语言的四则运算解释器开发秘籍_华为开发者空间_02

基于仓颉编程语言的四则运算解释器开发秘籍_华为开发者空间_03

2.2 创建仓颉程序

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

产物类型说明

  • executable,可执行文件;
  • static,静态库,是一组预先编译好的目标文件的集合;
  • dynamic,动态库,是一种在程序运行时才被加载到内存中的库文件,多个程序共享一个动态库副本,而不是像静态库那样每个程序都包含一份完整的副本。

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

2.3 运行仓颉工程

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

package demo
// 第一个仓颉程序
main(): Int64 {
    println("hello world")
    println("你好,仓颉!")
    return 0
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

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

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

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

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

3 MathInterpreter计算器使用指南

3.1 领取你的MathInterpreter工具

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

gitcode:

https://gitcode.com/Cangjie/Cangjie-Examples
  • 1.

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

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

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

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

unzip Cangjie-Examples-0.53.18.zip
  • 1.

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

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

sudo apt-get update
sudo apt-get install unzip
  • 1.
  • 2.

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

基于仓颉编程语言的四则运算解释器开发秘籍_华为开发者空间_09

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>>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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