我的编程语言的词法分析器不会处理输入

时间:2019-01-30 20:22:31

标签: javascript interpreter lexer

我正在用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>

1 个答案:

答案 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" />