Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript/jQuery解释textarea中的字符串?_Javascript_Jquery_Interpreter - Fatal编程技术网

如何使用JavaScript/jQuery解释textarea中的字符串?

如何使用JavaScript/jQuery解释textarea中的字符串?,javascript,jquery,interpreter,Javascript,Jquery,Interpreter,我正在尝试用JavaScript/jQuery制作一个小的解释程序。所以我想要的是,当用户在文本区域中输入一些文本时,程序应该解释该文本并在另一个文本区域中打印输出。 到目前为止,我已经做到了: 有了它,我能够捕捉到用户在文本区域中输入的每个字符串。但现在我希望,当用户例如输入: number a =1 number b=2 number sum=0 sum =a +b print sum 在这种情况下,程序应对此进行解释,输出应为3。 谁能告诉我怎么做?我正在考虑构建一个二维数组,并将每一

我正在尝试用JavaScript/jQuery制作一个小的解释程序。所以我想要的是,当用户在文本区域中输入一些文本时,程序应该解释该文本并在另一个文本区域中打印输出。 到目前为止,我已经做到了:

有了它,我能够捕捉到用户在文本区域中输入的每个字符串。但现在我希望,当用户例如输入:

number a =1
number b=2
number sum=0
sum =a +b
print sum
在这种情况下,程序应对此进行解释,输出应为
3
。 谁能告诉我怎么做?我正在考虑构建一个二维数组,并将每一行保存在那里(每一行都有类型、名称和值),然后使用该数组进行计算。 我将感谢任何帮助。先谢谢你

更新

我使用了我的示例,特别是print语句。我可以打印多个字符串或变量(与+)连接),如果缺少+,则可以打印错误消息。 我现在有两个问题:

  • 我希望在尝试打印未定义的变量而不是像本例中那样输出未定义的变量时出现错误消息(我希望在
    #errors
    text区域中显示该消息):

    a=240
    b=120
    打印a+c
    输出为
    240未定义

  • 我想用字符
    \iri
    代替“\n”,以便print语句转到新行。我已经做了这件事
    var result2=result1.replace('\iri','\n')但它不起作用

  • 这是我的演示()

    你能帮帮我吗

    更新


    我解决了第二个问题。这是你的电话号码。你能帮我做第一个吗?

    这不是编译器/解释器的编写方式,但对于一种简单的语言来说应该是这样的:

    print "Euclidean algorithm"
    a = 240
    print "a = " a
    b = 360
    print "b = " b
    if a > 0
      while b
        if a > b
          a = a - b
        else
          b = b - a
        end if
      end while
      print "gcd: " a
    else
      print "gcd: " b
    end if
    
  • 为每条语句定义正则表达式(例如,如果只允许打印变量
    /^print([a-z]+)$/

  • 将每一行与表达式匹配,并决定要执行的操作(例如,如果将打印语句翻译为javascript,则打印语句可能会变成
    $(“#output”).append(variablename+”
    );
    ,数学公式根本不需要翻译,只需验证即可)

  • 如果一切正常,执行脚本。可能的问题:覆盖系统变量或类似关键字的变量(→ 在生成的代码中为变量添加前缀,或将它们全部存储在同一个数组/对象中)(→ 在字符串(
    \'
    )中转义
    '
    ),并用
    以及可能的其他限制替换

  • 下面是一个计算最大公约数的非常简单的示例:

    一些评论:

  • 这是一种相当愚蠢的语言,但我认为它是图灵完备的
  • 应进行各种检查(例如,仅检查单个行,如果
    正确关闭,则不检查
    )和有意义的错误消息
  • 仅支持一种数据类型:整数
  • 变量名可以有小写和大写字母,但不能有其他字母
  • 语法(不完整):

  • 这是实际执行的代码:

    myProgram=function(){var variables=[];var pOut='';pOut+='Euclidean algorithm\n';variables['a']=240;pOut+='a = '+variables['a']+'\n';variables['b']=360;pOut+='b = '+variables['b']+'\n';if(variables['a']>0){while(variables['b']){if(variables['a']>variables['b']){variables['a']=variables['a']-variables['b'];}else{variables['b']=variables['b']-variables['a'];}}pOut+='gcd: '+variables['a']+'\n';}else{pOut+='gcd: '+variables['b']+'\n';}$('#output').html(pOut);};myProgram();
    

  • 你为什么要重新发明轮子-这项任务并没有听起来那么简单。
    eval
    可能会让你有所收获。另一方面:堆栈溢出不是为您创建代码,而是帮助您解决错误或特定问题。请向我们展示您的尝试,我们将看看是否可以改进。另外,看看Matei,这可能意味着已经有一个图书馆在做这件事了。如果你想自己做,那么你需要解析表达式(构建树)并自下而上计算结果。我知道这并不简单,但我正在尝试用自己的语言制作一个简单的解释器,但为了简单起见,我已经用英语写了说明和关键字。你能给我一些提示吗?实现解释器不是一件容易的事。。此外,它对于大型语句也不有效。你为什么要这么做?另外,您没有使用变量的javascript语义,您需要将指令映射到JS指令,这本身就是一项繁琐的工作:)谢谢maraca。我正在尝试这样来构造我的代码。我可以问你一些建议材料,我可以在哪里提高我对JavaScript正则表达式的知识?一个可以玩和学习正则表达式的好网站:事实上,我对正则表达式没有什么好的经验,只是做了一些小任务。谢谢,我会努力做到的this@orsina添加了更多信息,感谢您的接受,我不能强调您必须多么小心,否则有人会做坏事,如果可以的话。@maraca非常感谢。你真的帮了我。我现在正在定义语法,然后构建一个可执行示例……再次非常感谢:)
    myProgram=function(){var variables=[];var pOut='';pOut+='Euclidean algorithm\n';variables['a']=240;pOut+='a = '+variables['a']+'\n';variables['b']=360;pOut+='b = '+variables['b']+'\n';if(variables['a']>0){while(variables['b']){if(variables['a']>variables['b']){variables['a']=variables['a']-variables['b'];}else{variables['b']=variables['b']-variables['a'];}}pOut+='gcd: '+variables['a']+'\n';}else{pOut+='gcd: '+variables['b']+'\n';}$('#output').html(pOut);};myProgram();