Convert From JavaScript to Vb.net

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Stephen Obi
    New Member
    • Dec 2011
    • 1

    Convert From JavaScript to Vb.net

    I need help converting the fallowing code to vb.net, or if any one knows where i can download LISP Interpreter (VB.NET)
    Thanks


    Code:
    <html>
    <head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
    
    var DEBUG = 1;
    var TEST = [
      "(cons 1 nil)",
      "(+ 1 2 (* 3 4))"
    ][0]
    var _text = null;
    var _balanced = 0;
    var _env = null;
    var b = 0;
    function init() 
    {
    	//(defun fact (x) (if (<= x 1) 1 (* x (fact (- x 1))))) (fact 3)
      document.getElementById("demo").innerHTML= read("(defun fact (x) (if (<= x 1) 1 (* x (fact (- x 1))))) (fact 3)");
    }
    
    function read(text) 
    {
    	try 
    	{
    		_balanced = 0;
    		_text = $.trim(text);
    		
    		var code = ["list"];
    		while (_text.length)
    		{
    			var s = parser();
    			//alert(s.length)
    			code = code.concat(s);
    			//alert(code)
    		  }
    		  
    		if (_balanced > 0)
    		  throw "The expression is not balanced. Add "+_balanced+" parentheses.";
    		else if (_balanced < 0)
    		  throw "The expression is not balanced. Remove "+_balanced+" parentheses.";
    		// trace(code);
    		if (!_env) _env = {};
    		return (eval_(code, _env)).pop();
    	  } 
    	  catch (e) 
    	  {
    		return "Error: "+e;
    	}
    }
    
    function eval_(expr, env) 
    {
    		//alert(b+": "+expr+" : env: "+env);
    		
    		// atoms
    		b +=1
    		if (!isNaN(expr)) 
    		{
    			return Number(expr);
    		} 
    		else if (expr == "nil") 
    		{
    			return null;
    		} 
    		else if (expr[0] == '"') 
    		{
    			return expr.slice(1);
    
    		// list
    		} 
    		else if (expr[0] == "list") 
    		{
    			return $.map(expr.slice(1),
                     function(x) 
    				 {
    				//alert(x)
                       var v = eval_(x, env);
    				
                       if ($.isArray(v))
                         return Array(v);
    					 
                       return v;
                     });
    
    		// variables
    	    } 
    		else if (getenv(expr, env)) 
    		{
    			return getenv(expr, env);
    		} 
    		else if (expr[0] == "setq" || expr[0] == "set!") 
    		{
    			env[expr[1]] = eval_(expr[2], env);
    			return env[expr[1]];
    
    		// conditional
    		} 
    		else if (expr[0] == "if") 
    		{
    			if (eval_(expr[1], env))
    				return eval_(expr[2], env);
    			$.each(expr.slice(2, expr[expr.length - 2]),
    				function(i, x) { eval_(x, env); });
    				return eval_(expr[expr.length - 1], env);
    
    		// procedures
    		} 
    		else if (expr in operators) 
    		{
    			var z = operators[expr];
    			
    			return z; //operators[expr];
    		} 
    		else if (expr[0] == "lambda") 
    		{
    			return makeproc(expr[1], expr.slice(2), env);
    		} 
    		else if (expr[0] == "defun") 
    		{
    			alert(expr)
    			env[expr[1]] = makeproc(expr[2], expr.slice(3), env);
    			
    			return env[expr[1]];
    		} 
    		else if (expr[0] == "js") 
    		{ 
    			// call a javascript function
    			return eval(expr[1]);
    
    		// apply
    		} 
    		else if ($.isArray(expr)) 
    		{	  
    			return apply_(
    				eval_(expr[0], env),
    				  $.map(expr.slice(1), function(x, i) 
    				  {
    					var v = eval_(x, env);
    					if ($.isArray(v))
    					  return Array(v);
    					return v;
    				  })
    				);
    
    		// error
    		} 
    		else 
    		{
    			throw expr+" is not defined"
    		}
    }
    
    function apply_(proc, args) 
    {
      if ($.isFunction(proc)) {
        return proc.apply(this, args);
      }
      throw "Procedure "+proc+" is not defined";
    }
    
    function makeproc(args, body, env) {
      return function() {
        // extend the env
    	//alert(arguments)
        var arguments_ = arguments;
        var newenv = {};
        newenv["__up__"] = env;
        $.each(args, function(i, x) { newenv[x] = arguments_[i]; });
        $.each(body.slice(0, body.length - 1),
               function(i, x) { eval_(x, newenv); });
        return eval_(body[body.length - 1], newenv);
      };
    }
    
    function getenv(expr, env) 
    {
      if (typeof expr != "string") return false;
      if (expr in env) return env[expr];
      if ("__up__" in env) return getenv(expr, env["__up__"]);
      return false;
    };
    
    ////////////////
    // primitives //
    ////////////////
    
    var operators = {
      // list
      "car":function() {
        var l = arguments[0];
        if (!l || !l.length) return null;
        return l[0];
      },
      "cdr":function() {
        var l = arguments[0];
        if (!l || !l.length) return [];
        return l.slice(1);
      },
      "cons":function() {
        var a = arguments[1];
        if (a == null) return [arguments[0]];
        a.unshift(arguments[0])
        return a;
      },
    
      // logical
      "not":function() {
        return !arguments[0];
      },
      "and":function() {
        for (var i = 0; i < arguments.length; i++) {
          if (!arguments[i]) return false;
        }
        return true;
      },
      "or":function() {
        for (var i = 0; i < arguments.length; i++) {
          if (arguments[i]) return true;
        }
        return false;
      },
    
      // comparison
      "<=":function(x, y) { return x <= y; },
      "<":function(x, y) { return x < y; },
      ">=":function(x, y) { return x >= y; },
      ">":function(x, y) { return x > y; },
      "=":function(x, y) { return x == y; },
      "eq":function(x, y) { return x === y; },
    
      // arithmetic
      "+":function() {
        var res = 0;
        $.each(arguments, function(i, x) { res += x; });
        return res;
      },
      "-":function() {
        var res = arguments[0] * 2;
        $.each(arguments, function(i, x) { res -= x; });
        return res;
      },
      "*":function() {
        var res = 1;
        $.each(arguments, function(i, x) { res *= x; });
        return res;
      },
      "/":function() {
        var res = arguments[0] * arguments[0];
        $.each(arguments, function(i, x) { res /= x; });
        return res;
      }
    };
    
    ///////////////////////////
    // convert text to lists //
    ///////////////////////////
    
    function scanner() 
    {
    	if (!_text.length) return "";
    	var start = 0, index = 1;
    	if (_text.charAt(0) == "(" || _text.charAt(0) == ")") 
    	{
    		index = 1;
    		// check the text is balanced
    		_balanced += _text.charAt(0) == "(" ? 1 : -1;
    	} 
    	else if (_text.charAt(0) == '"') 
    	{
    		index = _text.search(/[^\\]"/) + 1;
    	} 
    	else
    	{
    		index = _text.search(/[ \n)]/);
    	}
    	//alert(index)	
    	if (index < 1) index = _text.length;
    	
    	var t = _text.substring(start, index);
    	_text = $.trim(_text.substring(index));
    	return t;
    }
    
    function parser() 
    {
    	var result = [];
    	var token = scanner();
    	while (token != ")" && token != "") 
    	{
    		var expr = null;
    		if (token == "(")
    		  expr = parser();
    		else
    		  expr = token;
    		
    		result.push(expr);
    		token = scanner();
    	}
    	return result;
    }
    </script>
    </head>
    <body>
    
    <h1>My First Web Page</h1>
    <p id="demo">This is a paragraph.</p>
    
    <button type="button" onclick="init()">Display Date</button>
    
    </body>
    </html>
    Last edited by acoder; Dec 6 '11, 08:35 AM. Reason: Added [code] tags
  • omerbutt
    Contributor
    • Nov 2006
    • 638

    #2
    Hi,
    post the question in the .net framework section you might get help there?
    regards,
    Omer Aslam

    Comment

    • johny10151981
      Top Contributor
      • Jan 2010
      • 1059

      #3
      Javascript and .net run in two different platform,

      Javascript run on Clinet Site on the other hand .Net Run on server Side(Arguably, If you develop a plugin with .Net to run on Clint site, like Java, Its another story).

      So far, its an ambiguous conversion

      Comment

      Working...