130242014017

编程入门 行业动态 更新时间:2024-10-26 06:38:42

130242014017

130242014017

一、实验目的

1.熟悉体系结构的风格的概念

2.理解和应用管道过滤器型的风格。

3、理解解释器的原理

4、理解编译器模型

二、实验环境

硬件: 

软件:Python或任何一种自己喜欢的语言

三、实验内容

1、实现“四则运算”的简易翻译器。

结果要求:

1)实现加减乘除四则运算,允许同时又多个操作数,如:2+3*5-6 结果是11

2)被操作数为整数,整数可以有多位

3)处理空格

4)输入错误显示错误提示,并返回命令状态“CALC”

  图1    实验结果示例

四、实验步骤:

     要求写具体实现代码,并根据实际程序,画出程序的总体体系结构图和算法结构图。

总体结构图参照体系结构风格。

算法结构图参照如下:

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head><body>输入表达式计算,例如:5+9=<br>
输入:<input id="input"/>
结果:<input id="output"/>
</body>
<script src=".1.0.js"></script>
<script>$("#input").bind('input porpertychange',function(){if($(this).val().substr($(this).val().length-1) == '='){var oIn = document.getElementById("input");var oOut = document.getElementById("output");var numArr = [];var opArr = [];var numStr = "";//字符串去空格和等于号var val = oIn.value.substr(0,oIn.value.length-1).replace(/\s+/g,"");if(!checkOperator(val)||!checkFloat(val)){oOut.value="格式错误,请重新输入";return;}for(var i in val){var str = val[i];if(isNaN(str)){opArr.push(str);numStr+=" ";}else{numStr+=str;}}numArr = numStr.split(' ');//计算乘除法for(var i = opArr.length;i>=0;i--){if(opArr[i] == '*'){numArr[i] = numArr[i] * numArr[i+1];numArr.splice(i+1,1);opArr.splice(i,1);}else if(opArr[i] == '/'){numArr[i] = numArr[i] / numArr[i+1];numArr.splice(i+1,1);opArr.splice(i,1);}}//计算加减法for(var i = opArr.length;i>=0;i--){if(opArr[i] == '+'){numArr[i] = numArr[i]*1.0 + numArr[i+1]*1.0;numArr.splice(i+1,1);opArr.splice(i,1);}else if(opArr[i] == '-'){numArr[i] = numArr[i] - numArr[i+1];numArr.splice(i+1,1);opArr.splice(i,1);}}oOut.value = numArr[0];}});// 检查运算符是否合法,第一个字符是除“-”意外的运算符都是非法的,最后一个字符是运算符,也是非法的;// 检查是否含有不合法的多运算符 “**”,“*\/”,"*+","*-","+*","++","+\/"以及两以上的连续运算符都是不允许的// 在多运算符里面除了 “--”,“+-”都是不合法的多运算符//
    function checkOperator(expression) {/*** (^[\+\*\/])|([\+\-\*\/\^\√]$) 匹配首字符或是最后一个字符是不是运算符* ([\+\-\*\/][\+\*\/]+) [+,*,-,/]搭配一个或是多个[+,*,/]* ([\*\/](\-)+) [*,/]搭配一个或是多个[-]* ([\+\-](\-){2,}) [+,-]搭配两个以上的[-]* (\√[^\d\(]+) 表示后面不能有除了数数字及括号意外的东西* ((?:[^\d\)]+)\^)* (\^[^\d\(]+)* ((?:[^\d\)]+)\^[^\d\(]+) 表示前面和后面不能有数字及括号意外的字符* ([\√\^]{2,}) 这个两个符号不可以连续* ([\√\^]\d+[\√\^]) √2^,^22√222这样也是不允许的* @type RegExp*/var reg = /(^[\+\*\/])|([\+\-\*\/\^\√]$)|([\+\-\*\/][\+\*\/]+)|([\*\/](\-)+)|([\+\-](\-){2,})|((?:[^\d\+\-\*\/])\√)|(\√[^\d\(]+)|((?:[^\d\)]+)\^)|(\^[^\d\(]+)|([\√\^]{2,})|([\√\^]\d+[\√\^])/;if(reg.test(expression)) {return false;}return true;};/*** * 检查“.”是否在正确位置,".+","+.","^.",".$","2.2.3.4.5","..","..."都是不允许的。*/function checkFloat(expression) {/*** (^\.)|(\.$) expression以.开头或结尾* ([\+\-\*\/]\.)|(\.[\+\-\*\/]) expression出现".+","+."等情况* ((\d+\.+){2,}\d*) expression出现"2.2.3.4.5","..","..."等情况*/var reg = /(^\.)|(\.$)|([\+\-\*\/\^\√]\.)|(\.[\+\-\*\/\^\√])|((\d+\.+){2,}\d*)/;if (reg.test(expression)) {return false;}return true;};</script>
</html>

 

五、实验总结

熟悉体系结构的风格的概念,理解解释器的原理

转载于:.html

更多推荐

130242014017

本文发布于:2024-02-08 21:58:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1675529.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!