⑴ 用编译原理的思想写一个计算器,语言不限。有人会吗。
这既要语言表达能力强,又要懂得集成电路软件开发的技术才能完成,等着吧,好人会出现的,我也想看看别人怎么写
⑵ vs2010编译简单计算器窗体
先看看图片 说明以上控件动态生成的,初学可自己拖放控件,以下代码仅供参考 /*设计一个简单的四则计算器*/ string[]名称={"+","-","*","/"}; Button[]控件组=Array.ConvertAll(名称,控件=>newButton()); EventHandler[]按钮事件=newEventHandler[]{按钮加_Click,按钮减_Click,按钮乘_Click,按钮除_Click}; foreach(Button按钮in控件组) { 按钮.Text=名称[--数]; 按钮.Name="按钮"+数.ToString(); 按钮.Parent=this; 按钮.Anchor=(AnchorStyles.Top|AnchorStyles.Left); 按钮.Location=newPoint(100*数,17); 按钮.Click+=按钮事件[数]; } 名称=newstring[]{"值1","值2","结果"}; TextBox[]数字输入框=Array.ConvertAll(名称,控件=>newTextBox()); 数=3; foreach(TextBox输入框in数字输入框) { 输入框.Text=(--数+10).ToString(); 输入框.Name="输入框"+名称[数]; 输入框.Parent=this; 输入框.Anchor=(AnchorStyles.Top|AnchorStyles.Left); 输入框.Location=newPoint(100*数,0); } void按钮加_Click(objectsender,EventArgse) { 四则运算("+"); } void按钮减_Click(objectsender,EventArgse) { 四则运算("-"); } void按钮乘_Click(objectsender,EventArgse) { 四则运算("*"); } void按钮除_Click(objectsender,EventArgse) { 四则运算("/"); } void四则运算(string运算符) { Control.ControlCollection文本框=this.Controls; double值1=int.Parse(文本框[9].Text),值2=int.Parse(文本框[8].Text); switch(运算符) { case"+": {文本框[7].Text=(值1+值2).ToString();} break; case"-": {文本框[7].Text=(值1-值2).ToString();} break; case"*": {文本框[7].Text=(值1*值2).ToString();} break; case"/": {文本框[7].Text=(值1/值2).ToString();} break; default: break; } }
⑶ 用汇编语言编译简易计算器
用汇编语言太难了,如果用C51就会容易得多,
⑷ 求java编的简易计算器,急急急
//发到你邮箱了,我是用QQ邮箱发的,815611030的那个。以下是我的源代码
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class Stack
{
String s[]=new String[100];
int n=0;
public void InQuece(String str)
{
s[n]=str;
n++;
}
public String DeQuece()
{
return s[--n];
}
public String Front()
{
return s[n-1];
}
public void Sprint()
{
for(int i=n-1;i>=0;i--)
System.out.print(s[i]+" ");
System.out.println();
}
}
public class Calculator
{
static Frame frm=new Frame("Calculator");
//static TextField tff=new TextField(20);
static Label lab=new Label("0.");
static Panel pan=new Panel();
static String labelstr="";
static String ltemp="";
static int flag=1;
static Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19;
public void setFrame()
{
frm.setBounds(300,150,400,350);
frm.setLayout(null);
frm.addWindowListener(new window());
frm.setVisible(true);
b0=new Button("0");b1=new Button("1");b2=new Button("2");b3=new Button("3");b4=new Button("4");b5=new Button("5");b6=new Button("6");
b7=new Button("7");b8=new Button("8");b9=new Button("9");
b10=new Button("+");b11=new Button("-");b12=new Button("*");b13=new Button("/");b14=new Button("AC");b15=new Button("C");b16=new Button("=");
b17=new Button("(");b18=new Button(")");b19=new Button("RE");
lab.setBounds(0, 30, 400, 40);
lab.setFont(new Font("宋体",Font.PLAIN,30));
lab.setAlignment(Label.RIGHT);
pan.setBounds(0,60, 400, 300);
pan.setLayout(new GridLayout(5,4));
b0.addActionListener(new action());b1.addActionListener(new action());b2.addActionListener(new action());b3.addActionListener(new action());b4.addActionListener(new action());
b5.addActionListener(new action());b6.addActionListener(new action());b7.addActionListener(new action());b8.addActionListener(new action());b9.addActionListener(new action());
b10.addActionListener(new action());b11.addActionListener(new action());b12.addActionListener(new action());b13.addActionListener(new action());b14.addActionListener(new action());
b15.addActionListener(new action());b16.addActionListener(new action());b17.addActionListener(new action());b18.addActionListener(new action());b19.addActionListener(new action());
pan.add(b1);pan.add(b2);pan.add(b3);pan.add(b10);pan.add(b4);pan.add(b5);pan.add(b6);pan.add(b11);pan.add(b7);pan.add(b8);pan.add(b9);pan.add(b12);
pan.add(b0);pan.add(b14);pan.add(b15);pan.add(b13);pan.add(b16);pan.add(b17);pan.add(b18);pan.add(b19);
frm.add(lab);
frm.add(pan);
}
public double cal(String str)
{
str=str.trim();
StringTokenizer st=new StringTokenizer(str,"+-*/ ",true);
Stack sta=new Stack();
String s,s1,s2;
while(st.hasMoreTokens())
{
s=st.nextToken();
if(s.equals("#"))
break;
if(s.equals(" "))
continue;
if(!(s.equals("+")||s.equals("-")||s.equals("/")||s.equals("*")))
{
sta.InQuece(s);
}
else if(s.equals("+"))
{
s2=sta.DeQuece();
s1=sta.DeQuece();
Double d1=Double.parseDouble(s1);
Double d2=Double.parseDouble(s2);
d1=d1+d2;
sta.InQuece(""+d1);
}
else if(s.equals("-"))
{
s2=sta.DeQuece();
s1=sta.DeQuece();
Double d1=Double.parseDouble(s1);
Double d2=Double.parseDouble(s2);
d1=d1-d2;
sta.InQuece(""+d1);
}
else if(s.equals("/"))
{
s2=sta.DeQuece();
s1=sta.DeQuece();
Double d1=Double.parseDouble(s1);
Double d2=Double.parseDouble(s2);
d1=d1/d2;
sta.InQuece(""+d1);
}
else if(s.equals("*"))
{
s2=sta.DeQuece();
s1=sta.DeQuece();
Double d1=Double.parseDouble(s1);
Double d2=Double.parseDouble(s2);
d1=d1*d2;
sta.InQuece(""+d1);
}
}
s=sta.DeQuece();
return Double.parseDouble(s);
}
public String InfixToPostfix(String s)
{
String restr="";
String temp="";
StringTokenizer st=new StringTokenizer(s,"+-/*#() ",true);
Stack sta=new Stack();
sta.InQuece("#");
while(st.hasMoreTokens())
{
temp=st.nextToken();
if(temp.equals("#"))
{
while(true)
{
String t=sta.DeQuece();
if(t.equals("#"))
{
break;
}
restr=restr+t+" ";
}
break;
}
else if(temp.equals(" "))
continue;
else if(!(temp.equals("(")||temp.equals(")")||temp.equals("+")||temp.equals("-")||temp.equals("*")||temp.equals("/")))
{
restr=restr+temp+" ";
}
else if(temp.equals(")"))
{
while(true)
{
String t=sta.DeQuece();
if(t.equals("("))
break;
else
{
restr=restr+t+" ";
}
}
}
else if(temp.equals("(")||temp.equals("+")||temp.equals("-")||temp.equals("*")||temp.equals("/"))
{
while(icp(temp)<=isp(sta.Front()))
{
String t=sta.DeQuece();
restr=restr+t+" ";
}
sta.InQuece(temp);
}
//sta.Sprint();
}
return restr;
}
public int icp(String s)
{
if(s.equals("#"))
return 0;
else if(s.equals("("))
return 7;
else if(s.equals("*")||s.equals("/"))
return 4;
else if(s.equals("+")||s.equals("-"))
return 2;
else if(s.equals(")"))
return 1;
else
return -1;
}
public int isp(String s)
{
if(s.equals("#"))
return 0;
else if(s.equals("("))
return 1;
else if(s.equals("*")||s.equals("/"))
return 5;
else if(s.equals("+")||s.equals("-"))
return 3;
else if(s.equals(")"))
return 7;
else
return -1;
}
public static void main(String args[])
{
Calculator c=new Calculator();
c.setFrame();
System.out.println(c.cal(c.InfixToPostfix("1*(2+3/4)*10#")));
}
static class action implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Button bu=(Button)e.getSource();
//ltemp=labelstr;
if(flag==1)
{
labelstr="";
flag=0;
}
if(bu==b0)
labelstr=labelstr+"0";
else if(bu==b1)
labelstr=labelstr+"1";
else if(bu==b2)
labelstr=labelstr+"2";
else if(bu==b3)
labelstr=labelstr+"3";
else if(bu==b4)
labelstr=labelstr+"4";
else if(bu==b5)
labelstr=labelstr+"5";
else if(bu==b6)
labelstr=labelstr+"6";
else if(bu==b7)
labelstr=labelstr+"7";
else if(bu==b8)
labelstr=labelstr+"8";
else if(bu==b9)
labelstr=labelstr+"9";
else if(bu==b10)
labelstr=labelstr+"+";
else if(bu==b11)
labelstr=labelstr+"-";
else if(bu==b12)
labelstr=labelstr+"*";
else if(bu==b13)
labelstr=labelstr+"/";
else if(bu==b14)//AC
{
ltemp=labelstr;
labelstr="0.";
flag=1;
}
else if(bu==b15)//C
{
labelstr=labelstr.substring(0, labelstr.length()-1);
if(labelstr.length()==0)
{
labelstr="0.";
flag=1;
}
}
else if(bu==b16)//=
{
ltemp=labelstr;
double b=new Calculator().cal(new Calculator().InfixToPostfix(labelstr+"#"));
labelstr=""+b;
lab.setText(labelstr);
flag=1;
return;
}
else if(bu==b17)
{
labelstr=labelstr+"(";
}
else if(bu==b18)
{
labelstr=labelstr+")";
}
else if(bu==b19)
{
labelstr=ltemp;
}
lab.setText(labelstr);
}
}
static class window extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
frm.dispose();
System.exit(0);
}
}
}
⑸ 实现计算器
packagecn.hnpi;
importjava.awt.BorderLayout;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
{
JButtonb0=newJButton("0");
JButtonb1=newJButton("1");
JButtonb2=newJButton("2");
JButtonb3=newJButton("3");
JButtonb4=newJButton("4");
JButtonb5=newJButton("5");
JButtonb6=newJButton("6");
JButtonb7=newJButton("7");
JButtonb8=newJButton("8");
JButtonb9=newJButton("9");
JButtonjiaButton=newJButton("+");
JButtonjianButton=newJButton("-");
JButtonchengButton=newJButton("*");
JButtonchuButton=newJButton("/");
JButtonyuButton=newJButton("%");
JButtonjjButton=newJButton("+/-");
JButtonsqrtButton=newJButton("sqrt");
JButtondianButton=newJButton(".");
JButtondengButton=newJButton("=");
JButtonButton=newJButton("1/x");
JButtonbackButton=newJButton("Backpace");
JButtoncButton=newJButton("C");
publicdoubleop1;
publicdoubleop2;
publicstaticfinalintJIA=0;
publicstaticfinalintJIAN=1;
publicstaticfinalintCHENG=2;
publicstaticfinalintCHU=3;
publicstaticfinalintJJ=4;
publicstaticfinalintDIAN=5;
publicintcurrent0p=0;
privatebooleanopEnd=false;
JPanelpanel1=newJPanel();
JPanelpanel2=newJPanel();
JPanelpanel3=newJPanel();
JPanelpanel4=newJPanel();
JTextFieldresult=newJTextField(20);
publicCalculator(){
initPanel2();
initPanel3();
panel2.setLayout(newGridLayout(5,4));
panel1.setLayout(newBorderLayout());
panel1.add(panel3,BorderLayout.NORTH);//设置位置
panel1.add(panel2,BorderLayout.CENTER);//设置位置
getContentPane().add(panel1);
addActionListeners();
setSize(260,260);
setLocation(500,300);
setVisible(true);
setDefaultCloseOperation(Calculator.EXIT_ON_CLOSE);
this.setResizable(false);
this.setTitle("计算器");
}
privatevoidinitPanel2(){
//把组件添加到相应的panel上
panel2.add(b7);
panel2.add(b8);
panel2.add(b9);
panel2.add(chuButton);
panel2.add(b4);
panel2.add(b5);
panel2.add(b6);
panel2.add(chengButton);
panel2.add(b1);
panel2.add(b2);
panel2.add(b3);
panel2.add(jianButton);
panel2.add(b0);
panel2.add(jjButton);
panel2.add(dianButton);
panel2.add(jiaButton);
panel2.add(Button);
panel2.add(yuButton);
panel2.add(sqrtButton);
panel2.add(dengButton);
}
privatevoidaddActionListeners(){
ActionHandlerc=newActionHandler();
b0.addActionListener(c);
b1.addActionListener(c);
b2.addActionListener(c);
b3.addActionListener(c);
b4.addActionListener(c);
b5.addActionListener(c);
b6.addActionListener(c);
b7.addActionListener(c);
b8.addActionListener(c);
b9.addActionListener(c);
jiaButton.addActionListener(c);
dengButton.addActionListener(c);
chengButton.addActionListener(c);
chuButton.addActionListener(c);
jianButton.addActionListener(c);
jjButton.addActionListener(c);
dianButton.addActionListener(c);
sqrtButton.addActionListener(c);
yuButton.addActionListener(c);
Button.addActionListener(c);
backButton.addActionListener(c);
cButton.addActionListener(c);
}
{
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==b0){
if(opEnd==false){
result.setText("");
}
result.setText(result.getText()+"0");
}
if(e.getSource()==b1){
if(opEnd==false){
result.setText("");
}
result.setText(result.getText()+"1");
opEnd=true;
}
if(e.getSource()==b2){
if(opEnd==false){
result.setText("");
}
result.setText(result.getText()+"2");
opEnd=true;
}
if(e.getSource()==b3){
if(opEnd==false){
result.setText("");
}
result.setText(result.getText()+"3");
opEnd=true;
}
if(e.getSource()==b4){
if(opEnd==false){
result.setText("");
}
result.setText(result.getText()+"4");
opEnd=true;
}
if(e.getSource()==b5){
if(opEnd==false){
result.setText("");
}
result.setText(result.getText()+"5");
opEnd=true;
}
if(e.getSource()==b6){
if(opEnd==false){
result.setText("");
}
result.setText(result.getText()+"6");
opEnd=true;
}
if(e.getSource()==b7){
if(opEnd==false){
result.setText("");
}
result.setText(result.getText()+"7");
opEnd=true;
}
if(e.getSource()==b8){
if(opEnd==false){
result.setText("");
}
result.setText(result.getText()+"8");
opEnd=true;
}
if(e.getSource()==b9){
if(opEnd==false){
result.setText("");
}
result.setText(result.getText()+"9");
opEnd=true;
}
try{
if(e.getSource()==jiaButton){
op1=Double.parseDouble(result.getText());
//2、说明操作数已经输入完毕
opEnd=false;
current0p=JIA;
}
if(e.getSource()==chengButton){
op1=Double.parseDouble(result.getText());
//2、说明操作数已经输入完毕
opEnd=false;
current0p=CHENG;
}
if(e.getSource()==chuButton){
op1=Double.parseDouble(result.getText());
//2、说明操作数已经输入完毕
opEnd=false;
current0p=CHU;
}
if(e.getSource()==jianButton){
op1=Double.parseDouble(result.getText());
//2、说明操作数已经输入完毕
opEnd=false;
current0p=JIAN;
}
if(e.getSource()==jjButton){
Stringtmp=result.getText();
if(tmp.equals("")||tmp.equals("0")){
return;
}
if(tmp.charAt(0)=='-'){
tmp=tmp.substring(1);
}else{
tmp='-'+tmp;
}
result.setText(tmp);
}
if(e.getSource()==dianButton){
Stringtmp=result.getText();
if(tmp.equals("")){
return;
}
if(tmp.indexOf(".")!=-1){
return;
}
tmp=tmp+".";
result.setText(tmp);
}
if(e.getSource()==sqrtButton){
Stringtmp=result.getText();
if(tmp.equals("")){
return;
}
doubled;
d=Double.parseDouble(tmp);//先定义一个double类型的d
if(d<0){
result.setText("不能对负数求平方根!");
return;
}
op2=Math.sqrt(d);
result.setText(op2+"");
}
if(e.getSource()==backButton){
Strings=result.getText();
result.setText("");
for(inti=0;i<s.length()-1;i++){
chara=s.charAt(i);
result.setText(result.getText()+a);
}
}
if(e.getSource()==cButton){
result.setText("0");
opEnd=false;
}
if(e.getSource()==dengButton){
op2=Double.parseDouble(result.getText());
switch(current0p){
caseJIA:
result.setText(op1+op2+"");
break;
caseJIAN:
result.setText(op1-op2+"");
break;
caseCHENG:
result.setText(op1*op2+"");
break;
caseCHU:
if(op2==0){
result.setText("被除数不能为零!");
break;
}
result.setText(op1/op2+"");
break;
}
opEnd=false;
}
}catch(Exceptione1){
result.setText("Wrong");
opEnd=false;
}
}
}
privatevoidinitPanel3(){
panel3.setLayout(newGridLayout(2,1));
panel3.add(result);
panel3.add(panel4);
panel4.setLayout(newGridLayout(1,2));
panel4.add(backButton);
panel4.add(cButton);
//panel3.setPreferredSize(newDimension(260,65));
}
publicstaticvoidmain(String[]args){
Calculatorc=newCalculator();//生成类的实例
}
}
⑹ c语言设计一个简单的计算器程序
#include<stdio.h>//计算器
voidmenu()//自定义的菜单界面
{
printf("--------------------\n");
printf("请输入你的选择\n");
printf("1.+\n");
printf("2.-\n");
printf("3.*\n");
printf("4./\n");
printf("--------------------\n");
}
intmain()
{
inti=0;
intj=0;
intnum=0;//计算结果存放在nun
intselect=0;//选择的选项存放在select
do//do-while先执行再判断循环条件,即可实现重复计算功能
{
menu();//打印出菜单界面
scanf("%d",&select);//输入你的选项
printf("请输入计算值:");
scanf("%d%d",&i,&j);//输入要计算的数值
switch(select)
{
case1:
printf("%d+%d=%d\n",i,j,num=i+j);//实现加法功能
break;
case2:
printf("%d-%d=%d\n",i,j,num=i-j);//实现减法功能
break;
case3:
printf("%d*%d=%d\n",i,j,num=i*j);//实现乘法功能
break;
case4:
printf("%d-%d=%d\n",i,j,num=i/j);//实现除法功能
break;
default:
printf("输入有误重新选择");
break;
}
}while(select);
return0;
}
运行结果:
return表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。
return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。
⑺ 如何用matlab的GUI制作简易二进制计算器
1、布置控件:guide建立新的GUI界面,然后添加相应的控件;2、编写回调函数:分别为各控件添加回调函数;3、代码调试与编译:试试代码运行状况及错误代码调试,最后可以打包编译为exe文件。可以给你发个简单的计算器代码,以帮助学习gui。
⑻ (高分)求一个正确lex和yacc编的计算器(编译原理)
网上多的是,大多可以运行。关键是你要在Linux下分别将 lex和yacc文件用 flex 和 bison 编译成对应的c文件,然后在windows下用VC或者Codeblock的IDE下编写界面,连接刚才对应的c文件,生成exe交给老师。
⑼ 计算器软件
下载就够了从网上搜
(6)微机操作系统
微机操作系统随着微机硬件技术的发展而发展,从简单到复杂。Microsoft公司开发的DOS是一单用户单任务系统,而Windows操作系统则是一单用户多任务系统,经过十几年的发展,已从Windows 3.1发展到目前的Windows NT、Windows 2000和Windows XP,它是当前微机中广泛使用的操作系统之一。Linux是一个原码公开的操作系统,目前已被越来越多的用户所采用,是Windows操作系统强有力的竞争对手。
2)语言处理系统(翻译程序)
如前所述,机器语言是计算机唯一能直接识别和执行的程序语言。如果要在计算机上运行高级语言程序就必须配备程序语言翻译程序(下简称翻译程序)。翻译程序本身是一组程序,不同的高级语言都有相应的翻译程序。
对于高级语言来说,翻译的方法有两种:
一种称为“解释”。早期的BASIC源程序的执行都采用这种方式。它调用机器配备的BASIC“解释程序”,在运行BASIC源程序时,逐条把BASIC的源程序语句进行解释和执行,它不保留目标程序代码,即不产生可执行文件。这种方式速度较慢,每次运行都要经过“解释”,边解释边执行。
另一种称为“编译”,它调用相应语言的编译程序,把源程序变成目标程序(以.OBJ为扩展名),然后再用连接程序,把目标程序与库文件相连接形成可执行文件。尽管编译的过程复杂一些,但它形成的可执行文件(以.exe为扩展名)可以反复执行,速度较快。运行程序时只要键入可执行程序的文件名,再按Enter键即可。
对源程序进行解释和编译任务的程序,分别叫做编译程序和解释程序。如FORTRAN、COBOL、PASCAL和C等高级语言,使用时需有相应的编译程序;BASIC、LISP等高级语言,使用时需用相应的解释程序。
3)服务程序
服务程序能够提供一些常用的服务性功能,它们为用户开发程序和使用计算机提供了方便,像微机上经常使用的诊断程序、调试程序、编辑程序均属此类。
4)数据库管理系统
在信息社会里,社会和生产活动产生的信息很多,使人工管理难以应付,人们希望借助计算机对信息进行搜集、存储、处理和使用。数据库系统(Data Base System, DBS)就是在这种需求背景下产生和发展的。
数据库是指按照一定联系存储的数据集合,可为多种应用共享。数据库管理系统(Data Base Management System, DBMS)则是能够对数据库进行加工、管理的系统软件。其主要功能是建立、消除、维护数据库及对库中数据进行各种操作。数据库系统主要由数据库(DB)、数据库管理系统(DBMS)以及相应的应用程序组成。数据库系统不但能够存放大量的数据,更重要的是能迅速、自动地对数据进行检索、修改、统计、排序、合并等操作,以得到所需的信息。这一点是传统的文件柜无法做到的。
数据库技术是计算机技术中发展最快、应用最广的一个分支。可以说,在今后的计算机应用开发中大都离不开数据库。因此,了解数据库技术尤其是微机环境下的数据库应用是非常必要的。
2应用软件
为解决各类实际问题而设计的程序系统称为应用软件。从其服务对象的角度,又可分为通用软件和专用软件两类。
1)通用软件
这类软件通常是为解决某一类问题而设计的,而这类问题是很多人都要遇到和解决的。例如:文字
⑽ 编译原理简单文法归约计算
编译原理中的语法和文法是不一样的,但却融会贯通。
在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。
文法分成四种类型,即0型、1型、2型和3型。这几类文法的差别在于对产生式施加不同的限制。
形式语言,这种理论对计算机科学有着深刻的影响,特别是对程序设计语言的设计、编译方法和计算复杂性等方面更有重大的作用。
多数程序设计语言的单词的语法都能用正规文法或3型文法(3型文法G=(VN,VT,P,S)的P中的规则有两种形式:一种是前面定义的形式,即:A→aB或A→a其中A,B∈VN ,a∈VT*,另一种形式是:A→Ba或A→a,前者称为右线性文法,后者称为左线性文法。正规文法所描述的是VT*上的正规集)来描述。
四个文法类的定义是逐渐增加限制的,因此每一种正规文法都是上下文无关的,每一种上下文无关文法都是上下文有关的,而每一种上下文有关文法都是0型文法。称0型文法产生的语言为0型语言。上下文有关文法、上下文无关文法和正规文法产生的语言分别称为上下文有关语言、上下文无关语言和正规语言。