|
@@ -1,17 +1,17 @@
|
|
# 词法分析科学计算器
|
|
# 词法分析科学计算器
|
|
|
|
|
|
-> http://gogs.mkyr.fun:99/myuan/elang
|
|
|
|
|
|
+> 上一节: https://bbs.125.la/forum.php?mod=viewthread&tid=14705096
|
|
|
|
+> 源代码 git: http://gogs.mkyr.fun:99/myuan/elang
|
|
|
|
|
|
## 目标
|
|
## 目标
|
|
|
|
|
|
-本节的目标是实现包含一些初等函数的计算器, 允许输入的例子如下:
|
|
|
|
|
|
+本节的目标是实现包含一些初等函数的计算器解析器, 允许输入的例子如下:
|
|
```
|
|
```
|
|
# 允许以#开始写注释, #到行尾的将被忽略
|
|
# 允许以#开始写注释, #到行尾的将被忽略
|
|
|
|
|
|
1 + sin(degree(30)) # 角度制的30度
|
|
1 + sin(degree(30)) # 角度制的30度
|
|
-2 - cos(pi) / 10 # 默认为弧度制, 支持定义常量
|
|
|
|
3 * log(10, 100) # 以10为底, 取100的对数
|
|
3 * log(10, 100) # 以10为底, 取100的对数
|
|
-4 / (2^3 / 4^2) # 当然仍然还有括号可以用
|
|
|
|
|
|
+4 / ((2-3) / (4/2)) # 当然仍然还有括号可以用
|
|
```
|
|
```
|
|
|
|
|
|
## 代码流程
|
|
## 代码流程
|
|
@@ -267,6 +267,6 @@ a + b -> +(a, b)
|
|
- 使用易语言实现的计算器的虚拟机
|
|
- 使用易语言实现的计算器的虚拟机
|
|
- 在JavaScript里实现的同样功能的解析器和虚拟机
|
|
- 在JavaScript里实现的同样功能的解析器和虚拟机
|
|
|
|
|
|
-本节代码仍然使用纯的易语言做文本分析, 但是如果你详细读了这份代码, 会发现大量的重复, 之后我将使用 JavaScript 的 [peggyjs](https://peggyjs.org/online) 库来重新做这件事, 同时, 如果你认真读了本节代码, 你也可以轻松读懂 peggyjs 的大部分东西. 为什么用 JavaScript 的库? 因为易语言没人做这种DSL. 另外就是 JavaScript 的话可以放到浏览器上去分析易语言语法啦, 也就有机会运行到浏览器里去了. 那么我现在写的命令行上的分析程序也能上浏览器了.
|
|
|
|
|
|
+本节代码仍然使用纯的易语言做文本分析, 但是如果你详细读了这份代码, 会发现大量逻辑上的重复, 之后我将使用 JavaScript 的 [peggyjs](https://peggyjs.org/online) 库来重新做这件事, 同时, 如果你认真读了本节代码, 你也可以轻松读懂 peggyjs 的大部分东西. 为什么用 JavaScript 的库? 因为易语言没人做这种DSL. 另外就是 JavaScript 的话可以放到浏览器上去分析易语言语法啦, 也就有机会运行到浏览器里去了. 那么我现在写的命令行上的分析程序也能上浏览器了.
|
|
|
|
|
|
> *不过严格来说, 正则表达式也是 DSL, 因此用了正则表达式就不算是纯易语言了.*
|
|
> *不过严格来说, 正则表达式也是 DSL, 因此用了正则表达式就不算是纯易语言了.*
|