【后端】Popush后端添加对Haskell语言的支持

来源:互联网 发布:淘宝店首页装修教程 编辑:程序博客网 时间:2024/06/06 05:02

配置好Linux环境后,要添加Haskell语言支持,首先需要安装Haskell Platform;

根据自己的操作系统,在http://www.haskell.org/platform/上选择相应的Haskell Platform安装即可。

其次,我们需要知道Popush如何调用外部解释器。

在models/runner.js中

function Runner(name, type, src){    if (!(this instanceof Runner)) return new Runner(type, src);var that = this;that.name = name;that.src = src;that.dir = prefix + '/' + new Date().getTime().toString();that.path = that.dir + '/' + that.name;that.clean = 'rm -rf ' + that.dir;if(process.platform == 'linux'){switch(type){case 'c':that.script = [{cmd:'gcc', args:['-o', that.name + '.out', that.name]},{cmd:A, args:['0', that.name + '.out'], start:true}];break;case 'cpp':that.script = [{cmd:'g++', args:['-o', that.name + '.out', that.name]},{cmd:A, args:['0', that.name + '.out'], start:true}];break;case 'js':that.script  = [{cmd:A, args:['1', NODE, that.name], start:true, filter:function(data){return data.replace(new RegExp(cwd + '/' + that.dir + '/', 'gm'), '');}}];break;case 'py':that.script = [{cmd:A, args:['0', PYTHON, that.name], start:true}];break;case 'pl':that.script = [{cmd:A, args:['0', PERL, that.name], start:true}];break;case 'rb':that.script = [{cmd:A, args:['1', RUBY, that.name], start:true}];break;case 'lua':that.script = [{cmd:A, args:['0', LUA, that.name], start:true, filter:function(data){return data.replace(new RegExp(LUA, 'gm'), 'lua');}}];break;case 'java':that.class = that.name.substr(0, that.name.lastIndexOf('.'));that.script = [{cmd:'javac', args:[that.name]},{cmd:A, args:['1', JAVA, that.class], start:true, filter:function(data){return data.replace(new RegExp(JAVA, 'gm'), 'java');}}];break;}}else{switch(type){case 'c':that.script = [{cmd:'gcc', args:['-o', that.name + '.out', that.name]},{cmd:'./' + that.name + '.out', args:[], start:true}];break;case 'cpp':that.script = [{cmd:'g++', args:['-o', that.name + '.out', that.name]},{cmd:'./' + that.name + '.out', args:[], start:true}];break;case 'js':that.script  = [{cmd:'node', args:[that.name], start:true, filter:function(data){return data.replace(new RegExp(cwd + '/' + that.dir + '/', 'gm'), '');}}];break;case 'py':that.script = [{cmd:'python', args:[that.name], start:true}];break;case 'pl':that.script = [{cmd:'perl', args:[that.name], start:true}];break;case 'rb':that.script = [{cmd:'ruby', args:[that.name], start:true}];break;case 'lua':that.script = [{cmd:'lua', args:[that.name], start:true/* , filter:function(data){return data.replace(new RegExp(LUA, 'gm'), 'lua');} */}];break;case 'java':that.class = that.name.substr(0, that.name.lastIndexOf('.'));that.script = [{cmd:'javac', args:[that.name]},{cmd:'java', args:[that.class], start:true}];break;}}};
可以看到这里分别对后缀为c, cpp, js等文件调用了解释器。因此我们只需要在中间添加一个对hs后缀调用haskell解释器的代码段即可。

添加如下:

case 'hs':that.script = [{cmd:'ghc', args:['-o', that.name + '.out', that.name]},{cmd:A, args:['0', that.name + '.out'], start:true}];break;

另一方面,在创建.hs文件时发现他的编译按钮是灰色不可点击的。因此我们需要找到能够允许我们点击按钮的代码段。

在/static/js/room/data.js中,我们可以看到如下代码

app.RunableExt = ['c','cpp', 'js', 'py', 'pl','rb','lua', 'java'];
通过阅读代码我们知道RunableExt中含有的后缀即为当前允许编译的文件后缀,因此只需要在其中添加hs即可。

添加完成如下:

app.RunableExt = ['c','cpp', 'js', 'py', 'pl','rb','lua', 'java', 'hs'];
将这两段代码添加完毕后即在Popush里添加了对Haskell语言的支持。


 

0 0
原创粉丝点击