我的编程语言的词法分析器不会处理输入
My programming language's lexer will not process input
我正在用 Javascript 编写一种非常 简单的编程语言。它只有一个词的词法分析器。当调用单词时,词法分析器应该将输入框的内容放入警告框中。相反,什么也没有发生。控制台没有错误,什么都没有。我在一个单独的文件中将词法分析器写入解释器。这是我的代码。
词法分析器:
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>
您的 <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" />
我正在用 Javascript 编写一种非常 简单的编程语言。它只有一个词的词法分析器。当调用单词时,词法分析器应该将输入框的内容放入警告框中。相反,什么也没有发生。控制台没有错误,什么都没有。我在一个单独的文件中将词法分析器写入解释器。这是我的代码。 词法分析器:
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>
您的 <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" />