仪陇家园分类信息网、仪陇生活网、仪陇家园网

搜索

[用易语言做一门语言. 1] 易语言四则运算解析器 [复制链接]

[复制链接]
seo 发表于 2021-11-13 18:10:56 | 显示全部楼层 |阅读模式


前言我是小学时候用易语言入门了编程, 用了一两年后, 由于切换到了Linux平台, 就再也没怎么用过易语言了. 最近打算复习一下编译原理, 所以决定用易语言实现一个易语言的虚拟机(自举), 并给易语言添加扩展语法, 让她现代化起来.
易语言社区关于计算机科学的东西太少了, 我来补充一些吧.
本篇内容这里用易语言基于栈实现了一个带括号的四则运算文本解析工具来解析合法的表达式文本并求值, 一些输入输出为:
> 10 * (2 + 2) +  2 * (808080 - 808080)
遇到数: 1
遇到数: 0
遇到符: *
准备合并, 当前操作数|操作符栈长度 1 | 1
准备求值括号内容: 2 + 2) +  2 * (808080 - 808080)
遇到数: 2
遇到符: +
准备合并, 当前操作数|操作符栈长度 1 | 1
遇到数: 2
准备合并, 当前操作数|操作符栈长度 1 | 2
准备合并, 当前操作数|操作符栈长度 0 | 1
已食用文本: 2 + 2)
遇到符: +
准备合并, 当前操作数|操作符栈长度 2 | 2
准备合并, 当前操作数|操作符栈长度 1 | 1
遇到数: 2
遇到符: *
准备合并, 当前操作数|操作符栈长度 2 | 2
准备求值括号内容: 808080 - 808080)
遇到数: 8
遇到数: 0
遇到数: 8
遇到数: 0
遇到数: 8
遇到数: 0
遇到符: -
准备合并, 当前操作数|操作符栈长度 1 | 1
遇到数: 8
遇到数: 0
遇到数: 8
遇到数: 0
遇到数: 8
遇到数: 0
准备合并, 当前操作数|操作符栈长度 1 | 2
准备合并, 当前操作数|操作符栈长度 0 | 1
已食用文本: 808080 - 808080)
准备合并, 当前操作数|操作符栈长度 2 | 3
准备合并, 当前操作数|操作符栈长度 1 | 2
准备合并, 当前操作数|操作符栈长度 0 | 1
10 * (2 + 2) +  2 * (808080 - 808080) 之计算结果为 40
> 1+1
遇到数: 1
遇到符: +
准备合并, 当前操作数|操作符栈长度 1 | 1
遇到数: 1
准备合并, 当前操作数|操作符栈长度 1 | 2
准备合并, 当前操作数|操作符栈长度 0 | 1
1+1 之计算结果为 2
> 1+2*3
遇到数: 1
遇到符: +
准备合并, 当前操作数|操作符栈长度 1 | 1
遇到数: 2
遇到符: *
准备合并, 当前操作数|操作符栈长度 2 | 2
遇到数: 3
准备合并, 当前操作数|操作符栈长度 2 | 3
准备合并, 当前操作数|操作符栈长度 1 | 2
准备合并, 当前操作数|操作符栈长度 0 | 1
1+2*3 之计算结果为 7
>代码逻辑翻译自我过去用于给别人教编程时的Python代码: https://gist.github.com/myuanz/d7f43062d3ad2fe746469c27026147d6
原理遇到每个字符前先判断是数字/算符/括号中哪个, 数字的话放到数字栈中, 算符放到算符栈中, 直到新的算符优先级
网上也有很多讲解的, 我随便找了个看着还行的: https://blog.csdn.net/qq_28602957/article/details/70948575
线路图[ol]
  • 四则运算解析器
  • 带更多函数的科学计算器
  • Lisp 解析器
  • Lisp 虚拟机
  • 易语言语法解析和AST制定
  • 易语言语法扩展(数组和字符串切片语法, Dict, 宏, 以及更多看情况的语法糖)
  • 易语言翻译器(翻译到C/Zig lang/Python, 具体哪个尚未确定)
  • 易语言虚拟机[/ol]线路图随时可能更改
                

                
                点我下载
                (已有 1 次下载)
                

                
                
            

            
                   
                引用模块
                
                无
  • 回复

    使用道具 举报

    全部回复0 显示全部楼层

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    楼主

    审核员

    热门推荐

    联系客服 关注微信 下载APP 返回顶部 返回列表