我正在用Javascript编写一种非常的简单编程语言。它只有一个词的词法分析器。调用单词时,词法分析器应该将输入框的内容放入警报框。相反,什么也没有发生。控制台中没有错误,没有任何错误。我正在将词法分析器以单独的文件编写给解释器。这是我的代码。 Lexer:
function ScratchLexer(text) {
var words = text.split(/\s+/);
var next = 0;
this.nextWord = function () {
if (next >= words.length) return null;
return words[next++];
};
}
function Scratch() {
var dictionary = {};
this.addWords = function (new_dict) {
for (var word in new_dict)
dictionary[word.toUpperCase()] = new_dict[word];
};
this.run = function (text) {
var lexer = new ScratchLexer(text);
var word;
while (word = lexer.nextWord()) {
word = word.toUpperCase();
num_val = parseFloat(word);
if (dictionary[word]) {
dictionary[word](this);
} else if (!isNaN(num_val)) {
this.stack.push(num_val);
} else {
throw "Unknown word";
}
}
};
}
var PrintingWords = {
"ALERT": function (terp) {
var tos = terp.document.getElementById("Text").value.pop(); alert(tos);
}
}
翻译:
<html>
<head>
<script type="text/javascript" src="scratch-lang.js"></script>
<script type="text/javascript">
var terp = new Scratch();
terp.addWords(PrintingWords);
terp.addWords(MathWords);
var alertwords = document.getElementById("TextAlert");
</script>
<style type="text/css">
body { Margin: 2em 5em; Line-height: 2em; Font-family: serif; }
body { Background-color: #ffffff; Color: #000000; }
#TextAlert { Width: 32em; }
#Text { Width: 32em; }
</style>
</head>
<body>
<br />
<input id="TextAlert" value = ""/><input id = 'run' type = 'button' value =
'Run' />
<br />
<input id="Text" value = ""/>
</body>
</html>
答案 0 :(得分:0)
您的<input id="TextAlert" value = ""/><input id = 'run' type = 'button' value ='Run' />
按钮是否以任何方式连接到词法分析器代码?我看不到您的词汇分析是如何开始的。您可能需要将run
函数正确连接到接口。
类似这样的代码将帮助您入门。
function handleRunClick(e) {
var value = document.getElementById("TextAlert").value;
terp.run(value);
}
<input id="TextAlert" value =""/><input id="run" type="button" onClick="handleRunClick" />