设为首页
优惠IDC
收藏本站
六狼博客
六狼论坛
开启辅助访问
切换到窄版
用户名
Email
自动登录
找回密码
密码
登录
立即注册
只需一步,快速开始
只需一步,快速开始
快捷导航
门户
首页
BBS
云计算
大数据
手机
移动开发android,ios,windows phone,windows mobile
编程
编程技术java,php,python,delphi,ruby,c,c++
前端
WEB前端htmlcss,javascript,jquery,html5
数据库
数据库开发Access,mysql,oracle,sql server,MongoDB
系统
操作系统windows,linux,unix,os,RedHat,tomcat
架构
项目管理
软件设计,架构设计,面向对象,设计模式,项目管理
企业
服务
运维实战
神马
搜索
搜索
热搜:
php
java
python
ruby
hadoop
sphinx
solr
ios
android
windows
centos
本版
帖子
用户
六狼论坛
»
首页
›
编程技术
›
C++
›
一个脚本解释器的实现与分析(HOC改进版) ...
返回列表
查看:
80
|
回复:
0
一个脚本解释器的实现与分析(HOC改进版)
[复制链接]
abruzzi
abruzzi
当前离线
积分
106
窥视卡
雷达卡
升级
37.33%
当前用户组为
秀才
当前积分为
106
, 升到下一级还需要 94 点。
26
主题
26
主题
26
主题
秀才
秀才, 积分 106, 距离下一级还需 94 积分
秀才, 积分 106, 距离下一级还需 94 积分
积分
106
发消息
楼主
|
发表于 2013-1-27 04:41:17
|
显示全部楼层
|
阅读模式
HOC(High Order Calculator)
是一个解释型的程序语言,最初的版本由Brain Kernighan和Rob Pike在《The UNIX Programming Environment》[UNIX编程环境]一书中作为一个例子给出。本身由lex/yacc构造,结构十分清晰,作为一个教学语言,HOC支持函数,具有类C的语法,有简单的I/O,变量赋值,表达式计算,错误恢复等机制。
后来,Bell实验室又陆续开发出了一些改进的版本,使得HOC可以平坦的移植到各种Linux系统中,我在上学的时候阅读过[UNIX编程环境]这本书,并且对其中的HOC做了一些简单的改进,后来又找到了Bell实验室的一个版本,深入的学了一遍,由于这个发布版本出自Research UNIX系统,我又对源码做了一些修改,并将其移植到了Windows平台。
在第一次学习HOC解释器的时候,是在编译原理课程结束后,当时是想在linux下设计一个通用的数学计算引擎,然后将计算出的数据通过一个前端展示系统(最好平台无关)展示给最终用户。开始,准备用Delphi自己写一个,但是一直没有实现,这个项目就停止了。直到后来发现了一个优秀的绘图工具gnuplot(关于gnuplot的更多细节,请参看我的另一篇文章), 用它来做前端似乎再合适不过了,于是,我决定将原来的改进后的HOC移植到Windows下,然后进行一个简单的整合。
下面是用HOC语言写的一段代码:
代码很简单,先定义一个过程:plotSin(在HOC中有procedure,function之分,前者没有返回值,而后者有),这个过程定义了三个临时变量begin,end,step,其中PI是一个常量,其值为3.1415926, 然后是一个for循环,begin不断加step(0.1),直到不小于end,退出循环,同时每次迭代时,先计算sin(begin)的值,并打印此时的begin和sin(begin)值。最后,调用这个过程,执行计算并退出。
这个是程序生成的数据:
将数据交给gnuplot展示,gunplot可以轻易的从数据文件中读出数据,并以第一列为横坐标,第二类为纵坐标画出图形来,根据上边这个数据文件,gnuplot画出的图形结果如下:
如果需要绘制3-D的图形,事实上更为简单一些。如下面的代码所示:
代码很简单,就是两层循环,计算出sin(x)*cos(y)的值,打印出来,一次x迭代结束后,打印一个空行,这样gunplot可以识别次文件,并画出3-D的图形来。
使用gnuplot的3-D绘制命令,splot,可以得到下边的图形:
z = sin(x)*cos(y)
z = x * y
z = x^2 - y^2 (鞍面)
整个思路很清晰,没有什么难懂的地方,而这个HOC的原始版本就是在UNIX下用lex/yacc开发的,只要对正则表达式和BNF形式比较熟悉就可以很快的理解整个解释器的实现(建议直接去看源码)。如果不太熟悉,那么就接着往下看,我会详细解释这些工具的用法和一些形式语言的理论。
形式语言
在计算机科学中,
形式语言
是用精确的数学定义或者机器可识别的公式定义的语言,形式语言跟自然语言很类似,包含两部分:
语法
和
语义
。形式语言的
定义
为:
<div class="quote_title"> 写道
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2008-2020
六狼论坛
(https://it.6wolf.com) 版权所有 All Rights Reserved.
Powered by
Discuz!
X3.4
京ICP备14020293号-2
本网站内容均收集于互联网,如有问题请联系
QQ:389897944
予以删除
快速回复
返回顶部
返回列表