用脚本语言打造求解器
㈠ 求高手帮忙,用javascript脚本语言编写个最简单的计算器,如图所示
Calculator.java:
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.applet.*;
public class Calculator extends Applet implements ActionListener{
Panel buttonPanel;
TextField tf; //用于显示输入的数字的文本框
Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,bDot,bPlus,bSub,bDiv,bMulti,bEqual; //按键
String onDisplay=""; //显示在文本框中的字符串
boolean isDotPressed=false; //按键'.'是否被按下
float operand; //通过按键输入的数
float operand1,operand2;//operand1和operand2为计算用的操作数
char operator; //计录所用的操作符
float result; //计算结果
int times=1; //小数点后有几位的10次方幂
public void init(){
setLayout(new BorderLayout(5,5));
tf=new TextField(30);
add(tf,BorderLayout.NORTH);
buttonPanel=new Panel();
buttonPanel.setLayout(new GridLayout(4,4,5,5));
add(buttonPanel,BorderLayout.CENTER);
//下面依次把按钮添加上去
b1=new Button("1");
buttonPanel.add(b1);
b1.addActionListener(this);
b1.setActionCommand("1");
b2=new Button("2");
buttonPanel.add(b2);
b2.addActionListener(this);
b2.setActionCommand("2");
b3=new Button("3");
buttonPanel.add(b3);
b3.addActionListener(this);
b3.setActionCommand("3");
bPlus=new Button("+");
buttonPanel.add(bPlus);
bPlus.addActionListener(this);
bPlus.setActionCommand("+");
b4=new Button("4");
buttonPanel.add(b4);
b4.addActionListener(this);
b4.setActionCommand("4");
b5=new Button("5");
buttonPanel.add(b5);
b5.addActionListener(this);
b5.setActionCommand("5");
b6=new Button("6");
buttonPanel.add(b6);
b6.addActionListener(this);
b6.setActionCommand("6");
bSub=new Button("-");
buttonPanel.add(bSub);
bSub.addActionListener(this);
bSub.setActionCommand("-");
b7=new Button("7");
buttonPanel.add(b7);
b7.addActionListener(this);
b7.setActionCommand("7");
b8=new Button("8");
buttonPanel.add(b8);
b8.addActionListener(this);
b8.setActionCommand("8");
b9=new Button("9");
buttonPanel.add(b9);
b9.addActionListener(this);
b9.setActionCommand("9");
bMulti=new Button("*");
buttonPanel.add(bMulti);
bMulti.addActionListener(this);
bMulti.setActionCommand("*");
b0=new Button("0");
buttonPanel.add(b0);
b0.addActionListener(this);
b0.setActionCommand("0");
bDot=new Button(".");
buttonPanel.add(bDot);
bDot.addActionListener(this);
bDot.setActionCommand(".");
bEqual=new Button("=");
buttonPanel.add(bEqual);
bEqual.addActionListener(this);
bEqual.setActionCommand("=");
bDiv=new Button("/");
buttonPanel.add(bDiv);
bDiv.addActionListener(this);
bDiv.setActionCommand("/");
}
public void actionPerformed(ActionEvent e){
String str=e.getActionCommand();
char b=str.charAt(0);
switch(b){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': onDisplay+=b;
operand=operand*10+Integer.parseInt(str);
if(isDotPressed) times*=10;
tf.setText(onDisplay);
break;
case '.': onDisplay+=b;
isDotPressed=true;
tf.setText(onDisplay);
break;
case '+':
case '-':
case '*':
case '/': operator=b;
operand1=operand/times;
System.out.println(operand1);
onDisplay="";
times=1;
isDotPressed=false;
operand=0;
break;
case '=': operand2=operand/times;
System.out.println(operand2);
switch(operator){
case '+': result=operand1+operand2;break;
case '-': result=operand1-operand2;break;
case '*': result=operand1*operand2;break;
case '/': result=operand1/operand2;break;
}
tf.setText(float.toString(result));
onDisplay="";
times=1;
isDotPressed=false;
operand=0;
break;
}
}
}
Calculator.html:
<html>
<applet code="Calculator.class" width=250 height=250>
</applet>
</html>
㈡ 利用JavaScript脚本语言编写一个简单的“网页计算器”
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language="javascript">
function jsq(fh)
{
var num1,num2;
num1=parseFloat(document.form1.text1.value);
num2=parseFloat(document.form1.text2.value);
if(fh=="+")
document.form1.text3.value=num1+num2;
if(fh=="-")
document.form1.text3.value=num1-num2;
if(fh=="*")
document.form1.text3.value=num1*num2;
if(fh=="/")
if(num2!=0)
{
document.form1.text3.value=num1/num2;
}
else
{
alert ("除数不能为零!")
}
}
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<label>
<input name="text1" type="text" id="text1" />
</label>
<p>
<label>
<input name="text2" type="text" id="text2" />
</label>
</p>
<p>
<label>
<input name="Button1" type="Button" id="Button1" value="+" onClick="jsq('+')">
<input name="Button2" type="Button" id="Button2" value="-" onClick="jsq('-')"/>
<input name="Button3" type="Button" id="Button3" value="*" onClick="jsq('*')"/>
<input name="Button4" type="Button" id="Button4" value="/" onClick="jsq('/')"/>
</label>
</p>
<p>
<label>
<input name="text3" type="text" id="text3" />
</label>
</p>
</form>
</body>
</html>
㈢ 用javascript脚本语言编写一个 计算器计算加减乘除 谢谢,很急!大家帮帮忙呀!!!
<html>
<head>
<title>runcode</title>
<scripttype="text/javascript">
functionrun(t){
varsa=parseInt(document.getElementById('sa').value);
varsb=parseInt(document.getElementById('sb').value);
varsc=document.getElementById('sc');
if(isNaN(sa)||isNaN(sb)){
alert("输入错误,请重新输入!");
return;
}
switch(t){
case1:
sc.value=sa+sb;
break;
case2:
sc.value=sa-sb;
break;
case3:
sc.value=sa*sb;
break;
case4:
if(sb==0){
alert("被除数不能为0!");
return;
}
sc.value=sa/sb;
break;
}
}
</script>
</head>
<body>
<tablewidth="255"height="136"border="1"style="background:#66CCFF;font-size:12px;">
<tr>
<tdcolspan="3">计算器</td>
</tr>
<tr>
<tdwidth="62"height="34">第一个数</td>
<tdwidth="102"><inputname="text"type="text"id="sa"width="100px"onclick="this.value=''"value=""/></td>
<tdwidth="29"rowspan="3"><inputname="button"type="button"onclick="run(1)"value="+"/>
<inputname="button2"type="button"onclick="run(2)"value="-"/>
<inputname="button3"type="button"onclick="run(3)"value="*"/>
<inputname="button4"type="button"onclick="run(4)"value="/"/></td>
</tr>
<tr>
<tdheight="32">第二个数</td>
<td><inputname="text2"type="text"id="sb"width="100px"onclick="this.value=''"value=""/></td>
</tr>
<tr>
<td>计算结果</td>
<td><inputname="text3"type="text"id="sc"width="100px"value=""/></td>
</tr>
</table>
<p> </p>
</body>
</html>
<html>
<head>
<title>runcode</title>
<scripttype="text/javascript">
functionrun(t){
varsa=parseInt(document.getElementById('sa').value);
varsb=parseInt(document.getElementById('sb').value);
varsc=document.getElementById('sc');
if(isNaN(sa)||isNaN(sb)){
alert("输入错误,请重新输入!");
return;
}
switch(t){
case1:
sc.value=sa+sb;
break;
case2:
sc.value=sa-sb;
break;
case3:
sc.value=sa*sb;
break;
case4:
if(sb==0){
alert("被除数不能为0!");
return;
}
sc.value=sa/sb;
break;
}
}
</script>
</head>
<body>
<tablewidth="255"height="136"border="1"style="background:#66CCFF;font-size:12px;">
<tr>
<tdcolspan="3">计算器</td>
</tr>
<tr>
<tdwidth="62"height="34">第一个数</td>
<tdwidth="102"><inputname="text"type="text"id="sa"width="100px"onclick="this.value=''"value=""/></td>
<tdwidth="29"rowspan="3"><inputname="button"type="button"onclick="run(1)"value="+"/>
<inputname="button2"type="button"onclick="run(2)"value="-"/>
<inputname="button3"type="button"onclick="run(3)"value="*"/>
<inputname="button4"type="button"onclick="run(4)"value="/"/></td>
</tr>
<tr>
<tdheight="32">第二个数</td>
<td><inputname="text2"type="text"id="sb"width="100px"onclick="this.value=''"value=""/></td>
</tr>
<tr>
<td>计算结果</td>
<td><inputname="text3"type="text"id="sc"width="100px"value=""/></td>
</tr>
</table>
<p> </p>
</body>
</html>
㈣ c语言写脚本解释器
记录大括号!!!
遇到if则判断语句,接下来,然后假设判断式成立,执行if紧跟着的语句,把大括号括起来的当成一个语句,执行下去,如果没有else的话就继续,有else的话跳过else所包含的范围.
㈤ 我想自己用C/C++做一个脚本语言解释器,但是不知道需要什么知识
对于脚本解释的,只是调用了系统的api吧,应该是这样子,你自己用程序写,然后调用系统api,然后获取返回内容就行了
比如普通的命令,,复制,你可以定义成其他名字,调用的api或者是直接用cmd下可以用的命令直接用
至于读取你的程序执行内容,那根读取文本一样
举个例子
包含必要头文件
if读取内容正确,先读命令,读到空格,一直往后读到参数
执行相关代码,比如特定的api函数,或者是直接用cmd下的命令,system("calc");这个是打开计算器,包含头文件windows.h
继续循环到开头重新读
㈥ 如何用 ANTLR 4 实现自己的脚本语言
在 ANTLR 里,我们写的规则,会生成解析器的代码,这个解析器,会把目标脚本,解析成一个抽象语法树。这颗抽象语法树上,越是靠近叶子节点的地方,结合优先级越高,越是靠近根的地方,结合优先级越低,根据这个特点,我们就可以让 ANTLR 帮我们完成以上的规则:
addExpression
: mulExpression (('+' | '-') mulExpression)*
;
mulExpression
: primaryExpression (('*' | '/') primaryExpression)*
;
primaryExpression
: Decimal
| '(' addExpression ')'
;
上面展示的 ANTLR 规则,在 primaryExpression
中,包括两个可选项,要么是数字,要么是括号表达式,是最高优先级,然后是 mulExpression,优先级最低的是 addExpression
。括号表达式内,是一个 addExpression ,所以,这是一个循环结构,可以处理无限长的四则运算式,比如
1+2*3-(4+5)/6+7+8,会被解析为如下的语法树:
addExpression : 1 + child1_1 - child1_2 + 7 + 8
child1_1 mulExpression : 2 * 3
child1_2 mulExpression : child1_2_1 / 6
child1_2_1 addExpression : 4 + 5