1 概述

1.1 案例介绍

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

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

1.2 适用对象

  • 企业
  • 个人开发者
  • 高校学生

1.3 案例时间

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

1.4 案例流程

abf6ec3409dff70ce74ed05ed269792a.png

说明:

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

1.5 资源总览

资源名称 规格 单价(元) 时长(分钟)
开发者空间 - 云主机 鲲鹏通用计算增强型 kc2 | 4vCPUs | 8G | Ubuntu 免费 30

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

2 运行测试环境准备

2.1 开发者空间配置

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

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

a1aae6ff53aac98855ef597dd6899967.png

552fc96c3b58a06e294e4a760ae719e3.PNG

2.2 创建仓颉程序

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

产物类型说明

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

28acbca9146a8a6aacbfdd4f6ac3791b.png

2.3 运行仓颉工程

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

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

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

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

d1e16b48f5f9620fafe9fc59ae62a367.png

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

3 MathInterpreter计算器使用指南

3.1 领取你的MathInterpreter工具

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

gitcode:

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

c3a9939f82f41894a8e2bfd0fd5814d2.PNG

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

dcff41e622e96107562a55e22668d0a4.PNG

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

unzip Cangjie-Examples-0.53.18.zip

9897746933635418ed1475539e43d1b2.png

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

sudo apt-get update
sudo apt-get install unzip

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

d1848d24ee75efccf4e9ba977f83facf.png

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打开。

74a35e4b58f819323b846c5e3ac7a9bd.PNG

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

09c4d4dd1891f32b718a49721ab59524.png

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

dfae9353c59dd599fa878c76527fc8b8.PNG

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

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

d066082ad3628a01f2c9f9cebab38cf7.PNG

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

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

d0a7cf2046aff0fc1d94f1fce8275b6c.PNG

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

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

c77d784386eededffde6cb6af0c446cc.PNG

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

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐