吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4661|回复: 12
收起左侧

[其他原创] 【原创源码】C#编写一款自己的脚本语言.第六章

[复制链接]
moodlee 发表于 2016-3-8 21:56
本帖最后由 moodlee 于 2016-3-8 22:00 编辑

第六章 幽兰

她的“可以”,驻在脑海,回旋起伏,恰若天籁。
她送我的一句轻言,却让我感到生命的厚重。
——————————

“1+2-3/4*5”与“1+2-3+4 ”不同在于:
“+-”与“/*”的优先级不同。

枯燥的东西,我就不放在这里了,请转看沙发。(你可以拿出草稿纸模拟一下哦~)
——————————

隐逸的秋菊,富贵的牡丹,君子般的莲,而我却最爱那空谷幽兰。


_____________________________________________________________

这是一个系列的《原创源码》。
有可能单个章节无法看出《源码》二字。但这一系列的章节是为了最后的源码而做铺垫。
最后的源码是开花结果,它是需要枝叶的。
或许其他人面对《原创源码》的态度是,直接贴上代码,而不管代码的形成过程,
而我不同,我注重这个形成过程。
所以,请版主尊重我的选择,不要随意改成《笔记》。
(我已将第五章改回,谢谢。)
—————————————————————————————————————


本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| moodlee 发表于 2016-3-8 21:57
*****以下为枯燥地段,慎入*****
“1+2-3/4*5 ”的解析方法:
首先,我们定义这几个变量:
1、左变量=空
2、右变量=空
3、运算开关=假
4、非执行代码=空
5、当前运算符号=空

***注释:
“-+”优先级为0
“*/”优先级为1

***第一个字符“1”
判断为数值符号,判断【运算开关】为假,将“1”添加至【左变量】

*此时,1=“1”,2=空,3=假,4=空,5=空


***第二个字符“+”
判断为运算符号,判断优先级为0,将【左变量】添加至【非执行代码】,将【左变量】清空,将“+”添加至【非执行代码】

*此时,1=空,2=空,3=假,4=“1+”,5=空


***第三个字符“2”
判断为数值符号,判断【运算开关】为假,将“2”添加至【左变量】

*此时,1=“2”,2=空,3=假,4=“1+”,5=空


***第四个字符“-”
判断为运算符号,判断优先级为0,将【左变量】添加至【非执行代码】,将【左变量】清空,将“-”添加至【非执行代码】

*此时,1=空,2=空,3=假,4=“1+2-”,5=空


***第五个字符“3”
判断为数值符号,判断【运算开关】为假,将“3”添加至【左变量】

*此时,1=“3”,2=空,3=假,4=“1+2-”,5=空

***第六个字符“/”
判断为运算符号,判断优先级为1,判断【运算开关】为假,设置【运算开关】为真,设置【当前运算符号】为“/”

*此时,1=“3”,2=空,3=真,4=“1+2-”,5=“/”


***第七个字符“4”
判断为数值符号,判断【运算开关为】为真,将“4”添加至【右变量】

*此时,1=“3”,2=“4”,3=真,4=“1+2-”,5=“/”

***第八个字符 "*"
判断为运算符号,判断优先级为1,判断【运算开关】为真,根据【当前运算符号】为“/”执行函数Divided(【左变量】,【右变量】),返回数值0.75,将【左变量】清空,将“0.75”添加到【左变量】,将【右变量】清空,设置【运算开关】为真,设置【当前运算符号】为“*”

*此时,1=“0.75”,2=空,3=真,4=“1+2-”,5=“*”


***第九个字符 “5”
判断为数值符号,判断【运算开关】为真,将“5”添加到【右变量】

*此时,1=“0.75”,2=“5”,3=真,4=“1+2-”,5=“*”


***结束时
根据【当前运算符号】为“*”执行函数Multiply(【左变量】,【右变量】),返回数值“3.75”,将“3.75”添加至【非执行代码】,返回【非执行代码】为“1+2-3.75”

*****只要在执行一下“1+2-3.75”就可以得出结果,相信对你来说会很简单!*****

所以,如果有多个优先级别的话,我们可以先执行优先级别较高的运算,再依次计算。

免费评分

参与人数 2热心值 +2 收起 理由
那逝去的风 + 1 很详细!
丿追逐 + 1 我是渣渣。。

查看全部评分

Cizel 发表于 2016-3-9 00:26
moodlee 发表于 2016-3-8 21:57
*****以下为枯燥地段,慎入*****
“1+2-3/4*5 ”的解析方法:
首先,我们定义这几个变量:

下次记得自己加上,不加我就直接删除了
【编程语言区】本版发帖标题格式=前缀+标题,不按照格式直接删除
http://www.52pojie.cn/thread-457450-1-1.html

我是人民币 发表于 2016-3-8 22:03
没细看楼主都写的啥,反正表达式求值转为后缀表达式后用栈来求值~
over
 楼主| moodlee 发表于 2016-3-8 22:04
[C#] 纯文本查看 复制代码
private string Divided (string X,string Y)
{
double lx=double.parse(X);
double ly=double.parse(Y);
return (lx/ly).ToString();
}
//相信Multiply你也知道怎么写了
啊飞 发表于 2016-3-8 22:11
支持技术大神,感谢无私奉献的楼主!
 楼主| moodlee 发表于 2016-3-8 22:11
我是人民币 发表于 2016-3-8 22:03
没细看楼主都写的啥,反正表达式求值转为后缀表达式后用栈来求值~
over

百度百科了一下,谢谢你提出“后缀表达式”这个想法。
恩,暴露了我的无知
思念灬给了谁 发表于 2016-3-8 22:14
萌新前来学习,感谢楼主分享
 楼主| moodlee 发表于 2016-3-8 22:15
上一章有一个朋友提到:
“逆波兰式”,百度一下,了解了,是一个很好的方法!(及后缀表达式)谢谢。

还有一个朋友提到“树的先序排列”,百度百科也未明白,准备购买专业书籍看一下,谢谢。
我是人民币 发表于 2016-3-8 22:17
moodlee 发表于 2016-3-8 22:15
上一章有一个朋友提到:
“逆波兰式”,百度一下,了解了,是一个很好的方法!(及后缀表达式)谢谢。

应该是树的中序遍历求值吧
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 03:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表