从Racket Beginning Student Language到JavaScript的最小解析器

时间:2019-12-04 21:26:15

标签: javascript parsing racket

我正在尝试从Racket(scheme)的学生语言入门到JavaScript编写一个最小的解析器。定义一个函数,该函数采用前缀表示形式的表达式并生成中缀表示形式的表达式。然后编写一个用于Racket的BSL(入门级学生语言)的最小解析器,将有效的BSL表达式转换为Javascript。下面是代码应通过的一些测试用例:

...

-bash-4.2$ node repl
htdp3e> 3
3
htdp3e> (+ 2 3)
(2 + 3)
htdp3e> (+ (- 1 2) 3)
((1 - 2) + 3)
htdp3e> (define a 3)
let a = 3;
htdp3e> (define b (+ a 1))
let b = (a + 1);
htdp3e> (define (f x) 3)
function f(x) { return 3; }
htdp3e> (define (f x y) (+ x y))
function f(x y) { return (x + y); }
htdp3e> (define (f n) (/ (* n (+ n 1)) 2))
function f(n) { return ((n * (n + 1)) / 2); }
htdp3e> bye
-bash-4.2$

...

这是我到目前为止的读评估循环:

var stdin = process.openStdin();

process.stdout.write("htdp3e> ");

stdin.addListener("data", function(input) {
        if (input.toString().trim() == "bye")
            process.exit();
        console.log("you entered: [" + input.toString().trim() + "]");
        process.stdout.write("htdp3e> ");
    }
); // end of call to addListener

感谢您的阅读!希望您能提供帮助!

0 个答案:

没有答案