gen.java

来自「用java语言做的L语言编译器」· Java 代码 · 共 482 行 · 第 1/2 页

JAVA
482
字号
						dx=true;
						outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
						outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
						outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
						outDesFile.writeBytes(lineNum+++" : jl "+genNum[gs.getAddress()]+"\r\n");
					}
					else {
						if (bx==true && dx==true){
							outDesFile.writeBytes(lineNum+++" : push bx\r\n");
							outDesFile.writeBytes(lineNum+++" : push dx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jl "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop dx\r\n");
							outDesFile.writeBytes(lineNum+++" : pop bx\r\n");						
						}
						else if (bx==true){
							dx=true;
							outDesFile.writeBytes(lineNum+++" : push bx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jl "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop bx\r\n");
						}
						else{
							bx=true;
							outDesFile.writeBytes(lineNum+++" : push dx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jl "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop dx\r\n");
						}
					}
					break;
				case 32://=
					if (bx==false && dx==false){
						bx=true;
						dx=true;
						outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
						outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
						outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
						outDesFile.writeBytes(lineNum+++" : jz "+genNum[gs.getAddress()]+"\r\n");
					}
					else {
						if (bx==true && dx==true){
							outDesFile.writeBytes(lineNum+++" : push bx\r\n");
							outDesFile.writeBytes(lineNum+++" : push dx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jz "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop dx\r\n");
							outDesFile.writeBytes(lineNum+++" : pop bx\r\n");						
						}
						else if (bx==true){
							dx=true;
							outDesFile.writeBytes(lineNum+++" : push bx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jz "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop bx\r\n");
						}
						else{
							bx=true;
							outDesFile.writeBytes(lineNum+++" : push dx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jz "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop dx\r\n");
						}
					}
					break;
				case 35://<>
					if (bx==false && dx==false){
						bx=true;
						dx=true;
						outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
						outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
						outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
						outDesFile.writeBytes(lineNum+++" : jnz "+genNum[gs.getAddress()]+"\r\n");
					}
					else {
						if (bx==true && dx==true){
							outDesFile.writeBytes(lineNum+++" : push bx\r\n");
							outDesFile.writeBytes(lineNum+++" : push dx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jnz "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop dx\r\n");
							outDesFile.writeBytes(lineNum+++" : pop bx\r\n");						
						}
						else if (bx==true){
							dx=true;
							outDesFile.writeBytes(lineNum+++" : push bx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jnz "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop bx\r\n");
						}
						else{
							bx=true;
							outDesFile.writeBytes(lineNum+++" : push dx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jnz "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop dx\r\n");
						}
					}
					break;
				case 36://>
					if (bx==false && dx==false){
						bx=true;
						dx=true;
						outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
						outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
						outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
						outDesFile.writeBytes(lineNum+++" : jg "+genNum[gs.getAddress()]+"\r\n");
					}
					else {
						if (bx==true && dx==true){
							outDesFile.writeBytes(lineNum+++" : push bx\r\n");
							outDesFile.writeBytes(lineNum+++" : push dx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jg "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop dx\r\n");
							outDesFile.writeBytes(lineNum+++" : pop bx\r\n");						
						}
						else if (bx==true){
							dx=true;
							outDesFile.writeBytes(lineNum+++" : push bx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jg "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop bx\r\n");
						}
						else{
							bx=true;
							outDesFile.writeBytes(lineNum+++" : push dx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jg "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop dx\r\n");
						}
					}
					break;
				case 37://>=
					if (bx==false && dx==false){
						bx=true;
						dx=true;
						outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
						outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
						outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
						outDesFile.writeBytes(lineNum+++" : jnl "+genNum[gs.getAddress()]+"\r\n");
					}
					else {
						if (bx==true && dx==true){
							outDesFile.writeBytes(lineNum+++" : push bx\r\n");
							outDesFile.writeBytes(lineNum+++" : push dx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jnl "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop dx\r\n");
							outDesFile.writeBytes(lineNum+++" : pop bx\r\n");						
						}
						else if (bx==true){
							dx=true;
							outDesFile.writeBytes(lineNum+++" : push bx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jnl "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop bx\r\n");
						}
						else{
							bx=true;
							outDesFile.writeBytes(lineNum+++" : push dx\r\n");
							outDesFile.writeBytes(lineNum+++" : mov bx,"+gs.getVarA()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : mov dx,"+gs.getVarB()+"\r\n");
							outDesFile.writeBytes(lineNum+++" : cmp bx,dx\r\n");
							outDesFile.writeBytes(lineNum+++" : jnl "+genNum[gs.getAddress()]+"\r\n");
							outDesFile.writeBytes(lineNum+++" : pop dx\r\n");
						}
					}
					break;
				case 38://j
						outDesFile.writeBytes(lineNum+++" : jmp "+genNum[gs.getAddress()]+"\r\n");
					
					break;
					default:JOptionPane.showMessageDialog(null,"Gen error");
				}
				
			}
			outDesFile.writeBytes("\r\nmov ax,4c00h\r\n"+
                    "int 21h\r\n"+
                    "end start");
			
			outDesFile.close();
			BuildWindow.getBuildWindow().gettaProName().append("The DestinationFile is finish\nPlease see over it");
		} catch (FileNotFoundException e) {
			JOptionPane.showMessageDialog(null,"FileNotFoundException is occurred--Create RandomAccessFile");
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null,"IOException is occurred--write DesFile");
		}
		
	}
	private void createDestinationFile() {//创建目的文件
		
		if(desFile.exists()){
			desFile.delete();
			try {
				desFile.createNewFile();
				BuildWindow.getBuildWindow().gettaProName().append("The DestinationFile is created\n");
			} catch (IOException e) {
				JOptionPane.showMessageDialog(null,"Create festinationFile is failed");
			}
		}
		else{
			try {
				desFile.createNewFile();
				BuildWindow.getBuildWindow().gettaProName().append("The DestinationFile is created\n");
			} catch (IOException e) {
				JOptionPane.showMessageDialog(null,"Create festinationFile is failed");
			}
		}
		
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?