读书人

无聊写了个小解释器,该如何解决

发布时间: 2012-02-07 17:45:37 作者: rapoo

无聊写了个小解释器
只实现了赋值、输出、字符串连接功能,主要用的字典和正则两个对象
谁有兴趣的一起把for、if实现啊 哈哈


[解决办法]
sf~~~
[解决办法]
确实够小的:)
[解决办法]
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
[解决办法]
呵呵,不错不错啊
[解决办法]
真是羡慕啊。
[解决办法]
楼主很强大啊.

[解决办法]
哎!本人初学,感觉楼主太牛了,想跟楼主学习一下,
希望楼主有空的教一下我。
本人QQ:718429464
希望在编程这方面强的人都能指导一下我.
[解决办法]
我这里有一段逆波兰表达式的现实算法,可以计算四则混合运算,调用eval函数

VB code
 
Public Sub Push(Data As String, ByRef SP As String)
SP = SP & Data & ","
End Sub

Public Function Pop(ByRef SP As String) As String
Dim Arr() As String, I As Integer
If Len(SP) = 0 Then
Pop = ""
Else
Arr = Split(SP, ",")
I = UBound(Arr) - 1
SP = Left(SP, Len(SP) - Len(Arr(I)) - 1)
Pop = Arr(I)
End If
End Function


Public Function RPN(Str As String) As String
Dim SP As String, A As String, B As String, C As String, R As String
Dim PA As Integer, PB As Integer
Dim I As Integer, D As Integer
C = Str & "#"
D = Len(C)
R = "0"
For I = 1 To D
A = Mid(C, I, 1)
Select Case A
Case "+", "-", "*", "/", "(", ")", ">", " <", "=", "#"
R = R & IIf(Len(R) > 0, "$", "")
Do
If (Len(SP) = 0) Or (A = "(") Then
If A <> ")" Then SP = SP & A
Exit Do
Else
B = Right(SP, 1)
Select Case A
Case "*", "/"
PA = 4
Case "+", "-"
PA = 3
Case " <", ">", "="
PA = 2
Case "(", ")"
PA = 1
Case Else
PA = 0
End Select
Select Case B
Case "*", "/"
PB = 4
Case "+", "-"


PB = 3
Case " <", ">", "="
PB = 2
Case "(", ")"
PB = 1
Case Else
PB = 0
End Select
If PA > PB Then
SP = SP & A
Exit Do
Else
SP = Left(SP, Len(SP) - 1)
B = Replace(B, "(", "")
R = R & B
End If
End If
Loop
Case Else
R = R & A
End Select
Next
RPN = R
End Function

Public Function Eval(Str As String) As Single
Dim Arr() As String
Dim X As String, SP1 As String, SP2 As String, R As String
Dim CHA As String, CHB As String, CHC As String, CHD As String
Dim C As Integer, D As Integer, I As Integer, J As Integer
X = RPN("0$" & Str)
C = Len(X)
For I = 1 To C
CHA = Mid(X, I, 1)
Select Case CHA
Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "."
CHB = CHB & CHA
Case "$"
Push CHB, SP1
CHB = ""
Case Else
CHB = Pop(SP1)
CHC = Pop(SP1)
If Len(CHC) = 0 Then CHC = "0"
Select Case CHA
Case "+"
CHD = CStr(CSng(CHC) + CSng(CHB))
Case "-"
CHD = CStr(CSng(CHC) - CSng(CHB))
Case "*"
CHD = CStr(CSng(CHC) * CSng(CHB))
Case "/"
CHD = CStr(CSng(CHC) / CSng(CHB))
Case ">"
CHD = IIf(CSng(CHC) > CSng(CHB), "1", "0")
Case " <"
CHD = IIf(CSng(CHC) < CSng(CHB), "1", "0")
Case "="
CHD = IIf(CSng(CHC) = CSng(CHB), "1", "0")
End Select
Push CHD, SP1
CHB = ""
End Select
Next
Eval = CSng(Pop(SP1))
End Function


[解决办法]
哈哈,我也用VB写了个解释器,不过是想兼容批处理为目的,所以一开始就跟CMD靠得很近。。。



实现了变量替换、连接符、十来个命令、系统变量、执行第三方命令等。。。

已经大约写了650行了。。。

解释器写起来就是累啊,字串符处理搞得头都晕。。。
[解决办法]
改用C写吧,才会强大。

[解决办法]
呵呵,使用现成的正则表达式来作为词法分析,自动机省掉了,很巧妙。
[解决办法]
何不用C++写呢,C++能力更强。
[解决办法]
mark
[解决办法]
不错,顶!
[解决办法]
很好很强大!
[解决办法]
学习.....厉害...
[解决办法]
看不到,能不能下载呀?
[解决办法]
学习学习!!

[解决办法]
qianghan
[解决办法]
呵呵,不错不错啊
[解决办法]
顶……
[解决办法]
强悍,还是躲起来接分吧
[解决办法]
害.....
[解决办法]
强悍,还是躲起来接分吧
[解决办法]
up !up !up !up !up !up !up !up !
[解决办法]
jf 。。。。。。
[解决办法]
围观 膜拜
[解决办法]
还是躲起来接分吧
[解决办法]
哎 真是
[解决办法]
初来乍到,感觉都是高手啊。。
[解决办法]

探讨

引用:
加油啊,再把循环结构的支持也写上。另外,怎么定义和处理字符串呢:)
写这种用C的好像远大于用C++的吧。

另外循……

[解决办法]
sf
顶一个
[解决办法]
探讨
改用C写吧,才会强大。

[解决办法]
牛人,学习了呵呵

[解决办法]
很好很强大
[解决办法]
牛人,学习了
[解决办法]
mnbgvjhgjhgjg p

[解决办法]
牛人 学习了
[解决办法]
无聊写了个小解释器 [基础类]
[解决办法]
强人啊,.......
------解决方案--------------------


很牛哟
[解决办法]
楼主也太有才了
[解决办法]
有才.我顶..
[解决办法]
哈哈
嗯 还可以。。
[解决办法]


打酱油的、
[解决办法]
haoohaohaoaao
[解决办法]
顶,加油啊LZ
[解决办法]
楼主也太有才了
[解决办法]
呵呵 楼主可以嘛 强啊
[解决办法]
[size=14px][/size][color=#FFCC00][/color]汗一个先,LZ继续努力,弄个大的
[解决办法]
强`````````````````````````顶你
[解决办法]
来看看~来学习~
[解决办法]
d顶~~~~
[解决办法]
mark...............
[解决办法]
顶~~~~~~
[解决办法]
学习中………………
[解决办法]
恩 1!!
谢谢!!

[解决办法]
yp 回复内容太短了!

[解决办法]
辛苦啦,看着不错,可惜不会VB
[解决办法]
我很早也写过类似的,用于公式计算,你写这东西如果是学习,没有问题,否则很可能没有什么用,但是还是鼓励一下。
[解决办法]
good!
[解决办法]
点击左上角的“+ expand source”就可以展开看到代码了
[解决办法]
hao
[解决办法]
学习........
[解决办法]
sdfsdf
[解决办法]
学习,学习,蛤蛤, 高人
[解决办法]
一个字:强!!两个字:小强
[解决办法]
感觉楼主走的不是常规的编译/解释器的套路啊...
[解决办法]

探讨
强`````````````````````````顶你

[解决办法]
佩服啊....
[解决办法]
学习,顶,不错
学习,顶,不错


[解决办法]
年不懂,学习学习
[解决办法]
学习学习
------解决方案--------------------


楼主好厉害,本人VB初学小鸟鸟,无限憧憬楼主境界中……
[解决办法]
看不懂
[解决办法]
当年看编译原理,看了,忘了。后来也就这么着了。
[解决办法]
看不懂
[解决办法]
不知道

[解决办法]
up一下
[解决办法]
处女贴。
给你了
[解决办法]
高手,顶下
[解决办法]
顶,好帖子!

读书人网 >VB

热点推荐