我正在尝试从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
感谢您的阅读!希望您能提供帮助!