我如何使文本=整数



我有一个问题,我已经试图解决了几天。我想知道是否有可能让文本变成整数。所以每次我在我的textarea("ALC")中写入Load,然后在textarea("MLC")上写入001。最后还包括1-15到二进制例如,负载#1将显示001 0 00001

<html>
<head>
<center><font size ="24"> Simple Assembler </font></center>
<script type="text/javascript">
    var Load = "001";
    var Store = "010";
    var Add = "011";
    var Sub = "100";
    var Equal = "101";
    var Jump = "110";
    var Halt = "111";
    var # = "1";

</script>
</head>
<body>
<form name="AssemblyLanguagecode" action="" method="">
<textarea Id="ALC" style="resize:none;width:35%;height:35%;margin-left:15%" value="">Insert Assembly Language Code</textarea>
<textarea Id="MLC" style="resize:none;width:35%;height:35%;" ReadOnly="True">Machine Language Code will be displayed here</textarea><br  />
<p align="center"><input type="button" value="Assemble" onclick="ALCtoMLC()";" /></p>
</form>

<script type= "text/javascript">
function ALCtoMLC() {   
    var x = document.getElementById("ALC").value;
    x = parseInt(x);
    var bin = x.toString(2);

document.getElementById("MLC").innerHTML = bin;
}
</script>
</body>
</html>

我想我明白你想做什么。您希望使用在"ALC"中键入的内容作为指向值的键。在这种情况下,您希望使用javascript对象并将指令分配为键,并将二进制文件分配给值。例如

var instruction_set = {
    "Load" : "001",
    "Store" : "010",
    "Add" : "011",
    "Sub" : "100",
    "Equal" : "101",
    "Jump" : "110",
    "Halt" : "111"
}
function ALCtoMLC() {
    var x = document.getElementById("ALC").value;
    x = instruction_set[x];
}

更新:

试试这个:

<html>
<head>
<center><font size ="24"> Simple Assembler </font></center>
<script type="text/javascript">
    var Load = "001";
    var Store = "010";
    var Add = "011";
    var Sub = "100";
    var Equal = "101";
    var Jump = "110";
    var Halt = "111";
    var # = "1";

</script>
</head>
<body>
<form name="AssemblyLanguagecode" action="" method="">
<textarea Id="ALC" style="resize:none;width:35%;height:35%;margin-left:15%" value="">Insert Assembly Language Code</textarea>
<textarea Id="MLC" style="resize:none;width:35%;height:35%;" ReadOnly="True">Machine Language Code will be displayed here</textarea><br  />
<p align="center"><input type="button" value="Assemble" onclick="ALCtoMLC();" /></p>
</form>

<script type= "text/javascript">
var Dict = { 'Load':"001",'Store':"010"}; //example Instruction set
function ALCtoMLC() {   
    var x = document.getElementById("ALC").value;
    var instrType = '';
    for (var instr in Dict){
        var ind = x.indexOf(instr);
        if( ind > -1){
            instrType = instrType + Dict[instr];
            x = x.replace(instr,'');
        }
    }
    console.log(instrType, "::", x);
    x = parseInt(x);
    var bin = x.toString(2);
    bin = instrType + bin; 
    document.getElementById("MLC").innerHTML = bin;
}
</script>
</body>
</html>

假设您有一种获取令牌的方法。那么你的函数应该是这样的

var tokens = getTokens( document.getElementById("ALC").value ) ;
var vocabulary = { "Load" : "001" , " ... " } ;
var output = []
var i = 0;
var tokensLength = tokens.length;
for ( ; i < tokensLength; i++){
     var token = tokens[i];
     if ( isNaN(token) && typeof(vocabulary[token]) != "undefined" ){
           output.push( vocabulary[token] );
     }else if ( !isNaN(token) ){
          output.push( Number(token).toString(2) );
     }else{
          console.log(["error : unknown token ", token]);
     }
}
document.getElementById("MLC").value = output.join(" "); 

我在问题中看到Load翻译为0010而不是001,因此我将简单地修改词汇表。

说明:

  • 我假设您有一种方法将输入拆分为令牌。(我仍然不清楚ALC语法)。
  • 令牌数组将包含,例如["Load","#","15", "Load","#","16"]等。
  • 然后循环标记。
  • 如果一个令牌是一个数字-我把它变成二进制字符串。
  • 如果令牌是可翻译的词汇表-我切换到它的二进制表示。
  • 否则打印错误。

注意:如果输出应该用"0"填充-即使问题中没有指定,我也会使用"0000".substring(n.length) + n

我是这样做的:

var opcodes = {
    Load:  1,
    Store: 2,
    Add:   3,
    Sub:   4,
    Equal: 5,
    Jump:  6,
    Halt:  7
};
var assemblyTextarea = document.querySelector("#assembly");
var machineTextarea = document.querySelector("#machine");
document.querySelector("#assemble").addEventListener("click", function () {
    var instruction = assemblyTextarea.value.split(" ");
    var operand =+ instruction[1].slice(1);
    var opcode = instruction[0];
    var code = opcodes[opcode] * 16 + operand;
    var bits = ("0000000" + code.toString(2)).slice(-8);
    machineTextarea.value = bits;
}, false);

请看这里的演示:http://jsfiddle.net/fs5mb/1/

输入格式如下:Load #15

最新更新