首页 > 代码库 > 60行R++代码实现Lisp解释器
60行R++代码实现Lisp解释器
还没有处理lambda、上下文等。有待完好。
main { for putsl(eval(getsl)) } rstr eval(rstr s) { return eval(tokenize(s).split(‘ ‘)) } rstr eval(rbuf<rstr>& v) { if v.get(0)!=‘(‘ return v.get(0) next=find(v.sub(2))+2 switch v.get(1) case ‘+‘ return eval(v.sub(2,next)).toint+eval(v.sub(next,v.count-1)).toint case ‘-‘ return eval(v.sub(2,next)).toint-eval(v.sub(next,v.count-1)).toint case ‘*‘ return eval(v.sub(2,next)).toint*eval(v.sub(next,v.count-1)).toint case ‘/‘ return eval(v.sub(2,next)).toint/eval(v.sub(next,v.count-1)).toint return ‘‘ } int find(rbuf<rstr>& v) { return r_cond(v.get(0)==‘(‘,find_sbk(v)+1,1) } int find_sbk(rbuf<rstr>& v) { count=0 for i in v if ‘(‘==v[i] ++count if ‘)‘==v[i] --count if 0==count return i return v.count } rstr tokenize(rstr s) { rstr ret for i in s if s[i]==`( ret+=‘ ( ‘ elif s[i]==`) ret+=‘ ) ‘ elif s[i]==0xa||s[i]==0xd||s[i]==9 ret+=‘ ‘ else ret+=s[i] return ret }
60行R++代码实现Lisp解释器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。