- 浏览: 4411568 次
- 性别:
- 来自: 湛江
博客专栏
-
SQLite源码剖析
浏览量:80123
-
WIN32汇编语言学习应用...
浏览量:70327
-
神奇的perl
浏览量:103580
-
lucene等搜索引擎解析...
浏览量:286537
-
深入lucene3.5源码...
浏览量:15043
-
VB.NET并行与分布式编...
浏览量:67780
-
silverlight 5...
浏览量:32289
-
算法下午茶系列
浏览量:46075
文章分类
最新评论
-
yoyo837:
counters15 写道目前只支持IE吗?插件的东西是跨浏览 ...
Silverlight 5 轻松开启绚丽的网页3D世界 -
shuiyunbing:
直接在前台导出方式:excel中的单元格样式怎么处理,比如某行 ...
Flex导出Excel -
di1984HIT:
写的很好~
lucene入门-索引网页 -
rjguanwen:
在win7 64位操作系统下,pygtk的Entry无法输入怎 ...
pygtk-entry -
ldl_xz:
http://www.9958.pw/post/php_exc ...
PHPExcel常用方法汇总(转载)
-module(pparser). -export([start/1]). -import(io,[fwrite/1,format/2]). -import(sfile,[load/1,unload/1,readline/1]). -import(string,[len/1,substr/3,to_lower/1,to_upper/1,strip/1,tokens/2,join/2]). -import(ets,[new/2,insert/2,delete/1,lookup/2]). -import(qsort,[qsort3/1]). -import(lists,[reverse/1,concat/1]). -vsn(0.1005). -author({deepfuturelx@gmail.com}). %解释执行源代码 %遵守LGPL协议 start(Sfilename)->%启动解释器 fwrite("Poles 0.1005 \nContact us:deepfuturelx@gmail.com\nload.....~n"), try load(Sfilename) of Sf-> prestart(Sfilename), try read(Sf) catch {error,Why}-> format("~s~n",[Why]); {runerr,Runwhy}-> format("~s~n",[Runwhy]) after preclose(), unload(Sf) end catch err->format("load ~s error~n",[Sfilename]) end. prestart(Sfilename)->%解析前运行 erase(),%清空符号表 getcurln(), format("load ~s finished.~n",[Sfilename]). preclose()->%关闭前运行 erase().%清空符号表 read(Sf)->%读源代码 case readline(Sf) of eof->format("run finished~n",[]); Data-> begin try parse(Data) catch {error,Why}->throw({error,Why}); {runerr,Runwhy}->throw({runerr,Runwhy}) end end, read(Sf) end. parse(Data)->%解析一行 inccurln(), Line=strip(substr(Data,1,len(Data)-1)), case substr(Line,1,1)=:="#" of true->%注释使用# notes(Line); false->%非注释,执行 begin Sline=tokens(Line,"\t"), try run(Sline) catch {error,Why}->throw({error,Why}); {runerr,Runwhy}->throw({runerr,Runwhy}) end end end. run(Spline)->%运行一行代码 %format("~p~n",[Spline]), try runinstruction(list_to_tuple(Spline)) catch {error,Why}->throw({error,concat([" line ",getcurln()," ~"])++join(Spline," ")++"|====>runtime error:"++Why}); {runerr,Runwhy}->throw({runerr,concat([" line ",getcurln()," ~"])++join(Spline," ")++"|====>run error:"++Runwhy}) end. runinstruction(Instruction)-> %分析并执行指令 try Instruction of {"list",Source,Target}->modisymbol({Source,list,Target,null});%列表变量声明 {"list",Source}->modisymbol({Source,list,[],null});%列表变量赋值并声明 {"var",Source,Target}->modisymbol({Source,var,Target,null});%标量赋值声明 {"var",Source}->modisymbol({Source,var,null,null});%标量声明 {"mov",Source,Target}->assign({Source,Target});%赋值 {"pushlist",Source,Target}->pushlist({Source,Target});%push 列表 列表 {"push",Source,Target}->push({Source,Target});%push 元素 列表 {"qsort",Source,Target}->qsort({Source,Target});%qsort 列表 {"pop",Source,Target}->pop({Source,Target});%pop 列表 {"pop",Source,Target,"del"}->pop({Source,Target},del);%pop and del 列表首 {"say",Source}->say({Source});%带回车输出 {"print",Source}->print({Source});%输出 {}->{}%空行 catch {error,Why}->throw({error,Why}); {runerr,Runwhy}->throw({runerr,Runwhy}) end. notes(Sline)->Sline. newsysinfo(poles_symbol)->% new(poles_symbol,[set,named_table]). delsysinfo(poles_symbol)->% delete(poles_symbol). modisymbol({Name,Type,Value,Flag})->%符号表修改符号 put(Name,{Name,Type,Value,Flag}). assign({Value,Name})->%赋值 case findsymbol(Name) of false->throw({runerr,Name++" not defined"}); {_,Type,_,SFlag}-> Svalue=eval(Value), modisymbol({Name,Type,Svalue,SFlag}) end. say({Name})->%带回车输出 case findsymbol(Name) of false-> Value=eval(Name), format("~p~n",[Value]); {_,_,Value,_}->format("~p~n",[Value]) end. print({Name})->%输出 case findsymbol(Name) of false-> Value=eval(Name), format("~p",[Value]); {_,_,Value,_}->format("~p",[Value]) end. push({Value,Name})->%在列表首加入元素 case findsymbol(Name) of false->throw({runerr,Name++" not defined"}); {_,Type,SValue,SFlag}->modisymbol({Name,Type,[eval(Value)|SValue],SFlag}) end. pushlist({Value,Name})->%在列表首加入列表元素 case findsymbol(Name) of false->throw({runerr,Name++" not defined"}); {_,Type,SValue,SFlag}->modisymbol({Name,Type,eval(Value)++SValue,SFlag}) end. pop({Sname,Dname})->%在列表首取出元素 case findsymbol(Sname) of false->throw({runerr,Dname++"not defined"}); {_,Type,[Popvalue|_Svalue],Sflag}-> case findsymbol(Dname) of false->throw({runerr,Dname++" not defined"}); {_,_,_,_}->modisymbol({Dname,Type,Popvalue,Sflag}) end end. pop({Sname,Dname},del)->%在列表首取出并删除元素 case findsymbol(Sname) of false ->throw({runerr,Dname++"not defined"}); {_,Type,[Popvalue|Svalue],Sflag}-> case findsymbol(Dname) of false->throw({runerr,Dname++" not defined"}); {_,_,_,_}-> modisymbol({Sname,Type,Svalue,Sflag}), modisymbol({Dname,Type,Popvalue,Sflag}) end end. trans(ErlTokens,Stk,NewErlTokens)->%处理表达式中的变量 [Stoken|Et]=ErlTokens, case Stoken of {atom,_,Name}->%变量 NewEtoken=[{var,1,list_to_atom(to_upper(atom_to_list(Name)))}|NewErlTokens], case findsymbol(atom_to_list(Name)) of false->throw({runerr,atom_to_list(Name)++" not defined"}); {_Name,Type,Val,_Flag}-> case Type of list-> NewVal=concat([Stk,to_upper(atom_to_list(Name)),"=",concat(io_lib:format("~p",[Val])),","]); _Other->NewVal=concat([Stk,to_upper(atom_to_list(Name)),"=",Val,","]) end, trans(Et,NewVal,NewEtoken) end; {dot,Flag}->%结束 NewEtoken=[{dot,Flag}|NewErlTokens], Etoken=reverse(NewEtoken), {ok,VarEtoken,_}=erl_scan:string(Stk),%转换变量声明为erlang内部的方式VarEtoken EndToken=addexpress(VarEtoken,Etoken),%将erlang内部方式声明的变量加入到现有表达式中 EndToken; Val->%普通运算 NewEtoken=[Val|NewErlTokens], trans(Et,Stk,NewEtoken) end. addexpress(VarEtoken,Etoken)->%将erlang内部方式声明的变量加入到现有表达式中 case VarEtoken of []->Etoken; Val-> EndEtoken=Val++Etoken, EndEtoken end. eval(S) ->%计算表达式 case findsymbol(S) of {_,_,Value,_}->Value; false-> begin {ok,ErlTokens,_}=erl_scan:string(S++"."), SErlTokens=trans(ErlTokens,[],[]), {ok,ErlAbsForm}=erl_parse:parse_exprs(SErlTokens), {value,Value,_}=erl_eval:exprs(ErlAbsForm,[]), Value end end. qsort({Sname,Dname})->%排序list case findsymbol(Sname) of false->throw({runerr,Dname++"not defined"}); {_,Type,Svalue,Sflag}-> case findsymbol(Dname) of false->throw({runerr,Dname++" not defined"}); {_,_,_,_}-> Sortvalue=qsort3(Svalue), modisymbol({Dname,Type,Sortvalue,Sflag}) end end. getcurln()->%取得当前行号 begin case findsymbol(sys__line) of false->modisymbol({sys__line,runsys,1,null}),1; {sys__line,runsys,Line,null}->Line end end. inccurln()->%当前行号++ Curline=getcurln()+1, modisymbol({sys__line,runsys,Curline,null}). findsymbol(Name)->%找到符号,并返回值 case get(Name) of undefined->false; Val->Val end.
-module(sfile). -export([load/1,readline/1,unload/1]). -import(io,[get_line/2,atom/0]). -import(file,[open/2,close/1]). -vsn(0.1001). -author({deepfuture}). %源代码文件操作 %load读取源文件,readline读取一行,unload关闭源文件 load(Sfilename)-> case open(Sfilename,read) of {ok,Sf}->Sf; {error,Why}->throw(err) end. readline(Sf)->get_line(Sf,""). unload(Sf)->close(Sf).
% Copyright (c) 2010 the authors listed at the following URL, and/or % the authors of referenced articles or incorporated external code: % http://en.literateprograms.org/Quicksort_(Erlang)?action=history&offset=20060711142841 % % Permission is hereby granted, free of charge, to any person obtaining % a copy of this software and associated documentation files (the % "Software"), to deal in the Software without restriction, including % without limitation the rights to use, copy, modify, merge, publish, % distribute, sublicense, and/or sell copies of the Software, and to % permit persons to whom the Software is furnished to do so, subject to % the following conditions: % % The above copyright notice and this permission notice shall be % included in all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, % EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF % MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. % IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY % CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, % TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE % SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. % % Retrieved from: http://en.literateprograms.org/Quicksort_(Erlang)?oldid=6960 -module(qsort). -export([qsort1/1, qsort2/1, qsort3/1]). qsort1([]) -> []; qsort1([H | T]) -> qsort1([ X || X <- T, X < H ]) ++ [H] ++ qsort1([ X || X <- T, X >= H ]). qsort2([]) -> []; qsort2([H | T]) -> {Less, Equal, Greater} = part(H, T, {[], [H], []}), qsort2(Less) ++ Equal ++ qsort2(Greater). part(_, [], {L, E, G}) -> {L, E, G}; part(X, [H | T], {L, E, G}) -> if H < X -> part(X, T, {[H | L], E, G}); H > X -> part(X, T, {L, E, [H | G]}); true -> part(X, T, {L, [H | E], G}) end. qsort3([]) -> []; qsort3([H | T]) -> qsort3_acc([H | T], []). qsort3_acc([], Acc) -> Acc; qsort3_acc([H | T], Acc) -> part_acc(H, T, {[], [H], []}, Acc). part_acc(_, [], {L, E, G}, Acc) -> qsort3_acc(L, (E ++ qsort3_acc(G, Acc))); part_acc(X, [H | T], {L, E, G}, Acc) -> if H < X -> part_acc(X, T, {[H | L], E, G}, Acc); H > X -> part_acc(X, T, {L, E, [H | G]}, Acc); true -> part_acc(X, T, {L, [H | E], G}, Acc) end.
一、将代码开源(遵守LGPL协议)
当前版本的语言规范
代码以三指令和四指令为主,以TAB分割每行代码的元素
list 变量名 声明列表变量
var 变量名 声明单变量
push 表达式 列表变量 为将表达式的值放入列表首部
pop 列表变量 变量 为获得列表首部的值并放入变量
pop 列表变量 变量 del 为将列表首部的变量弹出放入变量
以#开头表示注释,注释必须单独占一行
pushlist 列表变量 列表变量 为将列表放入列表首部
say 表达式 带回车输出
print 表达式 输出
mov 表达式 变量 赋值到变量
表达式计算支持erlang格式的标准表达式,包括列表计算,不支持表达式直接调用erlang的函数
四、脚本代码示例
#test2.po
#代码以三指令和四指令为主,以TAB分割每行代码的元素
list a
list b
pushlist [88,89] a
#取余
push 5 rem 2 b
#a++[90,91]和a--[89]完成2个列表的计算
pushlist a++[90,91] b
pushlist a--[89] b
say "===="
say b
任务
1、调试和完善现在指令
2、增加部分顺序执行指令
3、尝试编写对条件语句的解析
4、完成函数
5、继续并行计算架构代码
三、当前版本的语言规范
代码以三指令和四指令为主,以TAB分割每行代码的元素
list 变量名 声明列表变量
var 变量名 声明单变量
push 表达式 列表变量 为将表达式的值放入列表首部
pop 列表变量 变量 为获得列表首部的值并放入变量
pop 列表变量 变量 del 为将列表首部的变量弹出放入变量
以#开头表示注释,注释必须单独占一行
pushlist 列表变量 列表变量 为将列表放入列表首部
say 表达式 带回车输出
print 表达式 输出
mov 表达式 变量 赋值到变量
表达式计算支持erlang格式的标准表达式,包括列表计算,不支持表达式直接调用erlang的函数
四、脚本代码示例
1、
#test2.po
#代码以三指令和四指令为主,以TAB分割每行代码的元素
list a
list b
pushlist [88,89] a
#取余
push 5 rem 2 b
#a++[90,91]和a--[89]完成2个列表的计算
pushlist a++[90,91] b
pushlist a--[89] b
say "===="
say b
2、
进入erlang,将pparser.beam等目录下的beam文件列入erlang的搜索目录,然后运行脚本
pparser:start("脚本文件名称").
比如:
1>pparser:start("test2.po").
Poles 0.1005
Contact us:deepfuturelx@gmail.com
load.....
load ../test/test2.po finished.
"===="
[88,88,89,90,91,1]
run finished
ok
发表评论
-
pb串口编程
2013-03-21 16:08 2867powerbuilder串口编程的实 ... -
Firebug-firefox下的编辑JS的利器
2013-02-10 18:54 4705Firebug是一个Firefox插件,集HTML查看和编辑 ... -
15 个顶级 HTML5 游戏引擎
2013-02-10 12:30 54361) HTML5 Game Engine Constr ... -
perl-opengl几何变换函数
2013-02-01 10:48 1778#!/usr/bin/perl -w use strict ... -
lisp-format初步格式输出和数字判定
2012-12-24 16:46 20160] (format t "~a~%~a" ... -
lisp-学习笔记(1)
2012-12-21 17:24 1100入门 -
Silverlight 5 轻松开启绚丽的网页3D世界
2012-04-13 16:00 6029Silverlight 5已正式发布,新版本的最大亮点是通过引 ... -
flex连接mysql数据库
2012-03-31 20:30 3704<?xml version="1.0&qu ... -
Flex导出Excel
2012-03-31 20:19 11012Flex前端+Java后台,要将Flex界面中Advanced ... -
内存的常用分配方式
2012-03-19 13:45 1456第一,静态分配,所有名字在编译时绑定某个存储位置。不能在运行时 ... -
弹出窗口的命令总结
2011-08-15 17:21 1512弹出窗口的命令总结 window.open win ... -
erlang-读取文件-2
2010-12-16 21:36 34061.compile and run Eshell ... -
erlang-读取文件
2010-12-14 21:28 2390List a a.push(x) 为tes ... -
ubuntu手动安装erlang R14B01-亲自实验可行无报错
2010-12-14 20:40 2228erlang R14B01不能通过新立得安装,因此必须进行手动 ... -
erlang-fun匿名函数做参数和返回
2010-12-04 19:48 4651一、做参数 1> Mynum=fun(X)->( ... -
erlang-函数-递归
2010-12-02 22:28 16269> c(myadd). {ok ... -
erlang-模块与函数
2010-12-01 21:54 1699-module(myadd). -export([madd/ ... -
java-package-转
2010-09-19 11:55 1667在刚开始学java的时候,有很多人搞不清: 在java中,含有 ... -
神奇的Perl-哈希和数组(7)
2010-07-17 20:20 2464声明:本神奇的Perl系列为刘兴(http://deepfut ... -
java-面向连接数据包socket api
2010-03-14 10:42 2656类 DatagramSocket 可以做 ...
相关推荐
总结,"erlang-22.3-1.el7.x86_64.rpm"是一个专为RabbitMQ准备的Erlang版本,适合在RHEL 7或类似系统上运行,利用Erlang的并发、分布式和容错特性来保证RabbitMQ的稳定性和效率。通过RPM包的形式,用户可以便捷地在...
宝塔安装RabbitMQ提示elang环境没有解决方法 ...------------------------------------------------------------------ 大家一定要看自己的日志报错,是缺少了...那就将这个 文件名字改成 esl-erlang_26.0.2-1~alinux~3_x
描述中提到的"rabbitmq-server-3.8.17-1.el8.noarch.rpm"是RabbitMQ服务器的一个版本,RabbitMQ是一个基于AMQP(Advanced Message Queuing Protocol)的消息代理,它使用Erlang语言编写。RabbitMQ允许应用程序通过...
1. **Reia**: Reia是一种类似于Ruby和Python的脚本语言,旨在提供更友好的语法同时利用Erlang VM的特性。Reia的特色包括单一及多重赋值(Single & Multiple Assignment, MA),以及静态单赋值(Static Single ...
标题中的“用Erlang写了个解八数码的小程序”指的是使用Erlang编程语言实现的一个解决8数码问题(也称为滑动拼图)的算法。8数码问题是一个经典的计算机科学问题,它涉及到在一个3x3的网格上,通过空格与其他数字...
在Windows操作系统上,Erlang OTP通常提供为预编译的64位版本,如"erlang-otp-win64位 25.3版本",这确保了它能在Windows 64位环境下高效运行。 Erlang OTP(Open Telephony Platform)是一个开放源码的软件框架,...
Erlang是一种面向并发的、基于actor模型的编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、容错性和可扩展性的分布式系统。在Web服务器领域,Erlang由于其天然的并发处理能力和强大的错误恢复...
Erlang是一种高级编程语言,特别为并发、分布式计算和实时系统设计,广泛应用于电信、银行、互联网服务和软件开发领域。"erlang-rpm-21.3.4.zip"是一个包含Erlang版本21.3.4的RPM(Red Hat Package Manager)包的...
在这个案例中,Erlang 18.3的RPM包被用作安装RabbitMQ的前提条件,RabbitMQ是一个用Erlang编写的消息队列服务器,广泛应用于微服务架构和企业级应用中,提供高效、可靠的消息传递服务。 Erlang之所以成为RabbitMQ的...
由于RabbitMQ是用Erlang语言开发的,因此在部署RabbitMQ之前,首先需要确保系统上安装了Erlang环境。 对于Linux系统来说,安装Erlang有多种方法,但推荐使用最新版本,因为新版本通常包含更多的功能增强和安全修复...
Erlang在Windows上安装RabbitMQ,这是一个流行的开源消息队列系统,广泛应用于微服务架构和分布式系统中。RabbitMQ需要依赖Erlang环境才能运行。安装RabbitMQ的步骤如下: 1. **下载RabbitMQ**:访问RabbitMQ官网,...
在安装RabbitMQ,一个广泛使用的开源消息代理和队列服务器之前,通常需要先安装Erlang环境。Erlang OTP 23.0是针对Windows 64位操作系统的一个版本,它包含了运行RabbitMQ所需的全部组件。 首先,Erlang OTP(Open ...
Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、分布式和实时系统。版本24.3.4.4是Erlang的一个更新版本,包含了对先前版本的改进和修复。Erlang以其强大的错误...
实验结果显示,尽管Erlang在性能上存在一定的损失,但考虑到开发速度(Erlang的优势)与运行效率(C语言的优势)之间的权衡,对于某些实际的机器学习任务,Erlang可能是C语言的一个可行替代方案。 1. 并发与分布式...
Erlang是一种高级编程语言,特别为并发、分布式计算和容错设计,广泛应用于网络通信、实时系统和大型分布式计算环境中。最新版的Erlang是23.3.4.3-1.el7.x86_64.rpm,这个版本针对CentOS 7进行了优化。Erlang以其轻...
Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ ...
●外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。 ●Fail-fast(中文译为速错),即尽可能快的暴露程序中的错误。 ●面向并发的编程(COP concurrency-oriented programming) ...
Erlang 是一种高级并发编程语言,以其在分布式系统、实时和容错计算中的卓越表现而闻名。Mochiweb 是一个用 Erlang 编写的轻量级 Web 服务器和 HTTP 客户端库,它提供了处理 HTTP 请求和响应的能力。这个 "erlang ...
在本文中,我们将介绍如何使用Erlang开发一个简单的游戏服务器,并讨论其优点和实现细节。 Why Erlang? Erlang是一种轻量级的语言,非常适合开发高性能的服务器应用程序。其主要优点有: * 轻量级process:...
RabbitMQ是一种广泛使用的开源消息代理和队列服务器,它基于Erlang编程语言构建。Erlang以其并发能力、容错性和分布式特性而闻名,是实现RabbitMQ的理想选择。正确地匹配RabbitMQ和Erlang的版本对于确保系统的稳定性...