基于仓颉编程语言的四则运算解释器开发秘籍
通过实际操作,让大家深入了解如何进行华为云的开发者云主机完成CodeArts IDE for Cangjie编辑器的部署,并利用该编译器实现MathInterpreter解释器组合子的实际作用,体验其在模型开发中所扮演的角色。
1 概述
1.1 案例介绍
MathInterperter 是基于数学表达式解析器组合子的计算器,能够精准处理包含四则运算和多重括号嵌套的复杂表达式。仓颉编写的解释器通过枚举动态构建抽象语法树 Expression,简化代码结构的同时进行高效求值。其核心功能包括运算符优先级的自动识别、实时语法校验及表达式求值。
通过实际操作,让大家深入了解如何进行华为云的开发者云主机完成CodeArts IDE for Cangjie编辑器的部署,并利用该编译器实现MathInterpreter解释器组合子的实际作用,体验其在模型开发中所扮演的角色。
1.2 适用对象
- 企业
- 个人开发者
- 高校学生
1.3 案例时间
本案例总时长预计30分钟。
1.4 案例流程
说明:
- 进入华为开发者空间,登录云主机;
- 使用CodeArts IDE for Cangjie编程和运行仓颉代码。
1.5 资源总览
资源名称 | 规格 | 单价(元) | 时长(分钟) |
---|---|---|---|
开发者空间 - 云主机 | 鲲鹏通用计算增强型 kc2 | 4vCPUs | 8G | Ubuntu | 免费 | 30 |
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 update
sudo 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。
至此,基于仓颉编程语言的四则运算解释器开发秘籍案列内容已全部完成。
此刻,您已掌握数学表达式解析器的核心功能,它将成为您快速处理数学表达式的得力助手,助力探索组合子解析器的无限可能。
更多推荐
所有评论(0)