亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? executor.java

?? 一種CMM語言的詞法分析
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
/*
*  呂淵 200532580144
*  使用工具:eclipse
*  Java SE 6
*  
*  完成日期:2007-11-15
*  最后修改:2007-12-12
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class Executor extends Analyzer{
	//圖標(biāo)
	ImageIcon ExecuteIcon = new ImageIcon("Icon/Execute.png");
	
	//菜單項(xiàng)
	private JMenuItem jmiExecute = new JMenuItem("執(zhí)行代碼", ExecuteIcon);
	private JMenuItem jmiExplain = new JMenuItem("更新及使用說明");
	private JMenuItem jmiAboutExe = new JMenuItem("關(guān)于執(zhí)行代碼");
	
	private ArrayList<Variable> intList = new ArrayList<Variable>();//當(dāng)前可用普通變量
	private ArrayList<ArrayVariable> arrList = new ArrayList<ArrayVariable>();//當(dāng)前可用數(shù)組變量
	
	public Executor() {
		//菜單
		jMenuExe.removeAll();
		jMenuExe.add(lexicalAnalyzer);
		jMenuExe.add(syntaxAnalyzer);
		jMenuExe.add(jmiExecute);
		jMenuExe.addSeparator();
		jMenuExe.add(jMenuClean);
		
		JMenu jmiAbout = new JMenu("關(guān)于(A)");
		jmiAbout.setMnemonic('A');
		jmiAbout.add(jmiExplain);
		jmiAbout.addSeparator();
		jmiAbout.add(jmiAboutExe);
		
		jMenuBar.add(jmiAbout);
		
		//操作快捷鍵
		jmiExecute.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, ActionEvent.CTRL_MASK));
		
		/** 執(zhí)行*/
		jmiExecute.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				//輸入為空
				if (jta.getText().trim().equals(""))
					JOptionPane.showMessageDialog (null, "請輸入!", 
							"Notice", JOptionPane.INFORMATION_MESSAGE);
				else {
					SyntaxAnalyze syntax = new SyntaxAnalyze(jta.getText());
					
					//語法分析發(fā)現(xiàn)錯(cuò)誤
					if (syntax.syntaxError == true) {
						center.setLeftComponent(new JScrollPane(
								new JTree(new DefaultMutableTreeNode("Syntax Tree"))));
						for(String value: syntax.toArrayList())
							listModel.addElement(value);
						change = false;
						if (syntax.lexicalError == true) {
							JOptionPane.showMessageDialog (null, "詞法分析發(fā)現(xiàn)錯(cuò)誤!", 
									"Notice", JOptionPane.INFORMATION_MESSAGE);
							tokenStart = syntax.tokenStart;
							tokenEnd = syntax.tokenEnd;
						}
						else if (syntax.syntaxError == true) {
							JOptionPane.showMessageDialog (null, "含有語法錯(cuò)誤!", 
									"Notice", JOptionPane.INFORMATION_MESSAGE);
							tokenStart = syntax.tokenErrorStart;
							tokenEnd = syntax.tokenErrorEnd;
						}
					}
					//語法分析正確
					else {
						center.setLeftComponent(new JScrollPane(
								new JTree(new DefaultTreeModel(syntax.syntaxTree))));
						Execute(syntax);
					}
					change = false;
				}
			}
		});
		
		//更新及使用說明
		jmiExplain.addActionListener(new DialogAdapter(1));
		
		//關(guān)于執(zhí)行代碼
		jmiAboutExe.addActionListener(new DialogAdapter(2));
	}	
	
	public static void main(String[] args) {
		Executor applet = new Executor();
		
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(3);
		frame.setTitle("CMM Executor Beta2");
		frame.getContentPane().add(applet, BorderLayout.CENTER);
		applet.init();
		applet.start();
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		frame.setSize(d.width*4/5,d.height*9/10);
		frame.setLocation(d.width / 10, d.height / 20);
		frame.setVisible(true);
	}
	
	/** 執(zhí)行代碼*/
	public void Execute(SyntaxAnalyze syntax) {
		//執(zhí)行代碼
		try {
			intList.clear();
			arrList.clear();
			tokenStart.clear();
			tokenEnd.clear();
			listModel.clear();
			execute(purify(syntax.syntaxTree), syntax.deep, syntax.tokenRightStart, syntax.tokenRightEnd);
		}
		//執(zhí)行過程中發(fā)現(xiàn)錯(cuò)誤
		catch (MyRuntimeException e) {
			listModel.addElement("執(zhí)行過程發(fā)現(xiàn)錯(cuò)誤!");
			tokenStart.add(e.start);
			tokenEnd.add(e.end);
			listModel.addElement("    " + e);
			tokenStart.add(e.start);
			tokenEnd.add(e.end);
			JOptionPane.showMessageDialog (null, "執(zhí)行過程發(fā)現(xiàn)錯(cuò)誤!", 
					"Notice", JOptionPane.INFORMATION_MESSAGE);
		}
	}
		
	/** 使用語法分析生成的tree圖形(syntaxTree屬性)生成程序可運(yùn)行代碼部分
	 *結(jié)合同時(shí)生成的代碼屬性即可執(zhí)行*/
	private LinkedList<String> purify (DefaultMutableTreeNode tree) {
		LinkedList<String> listT = new LinkedList<String>();
			
		//遍歷語法樹,添加每個(gè)節(jié)點(diǎn)到listT中(除數(shù)組聲明時(shí)若指定長度則添加時(shí)保留":"外其他含有":"的全部只保留":"之后的部分)
		Enumeration preorder = tree.preorderEnumeration();
		while(preorder.hasMoreElements()) {
			String str = preorder.nextElement().toString();
				
			if (str.indexOf(':')!=-1) {
				if (str.substring(0, str.indexOf(':')).endsWith("長度")) 
					str = str.substring(str.indexOf(':'));
				else 
					str = str.substring(str.indexOf(':')+1);
			}
				
			listT.add(str.trim());
		}
		
		listT.removeFirst();//移除無用內(nèi)容:"Tree"
			
		return listT;
	}
	
	/** 執(zhí)行語句塊(參數(shù)含義以下函數(shù)中相同)
	 * @param listT 經(jīng)過濾后的生成的本函數(shù)可識別的執(zhí)行語句
	 * @param deepT 語句的嵌套層次
	 * @param startIndex 輸入中的開始位置
	 * @param endIndex 輸入中的結(jié)束位置
	 * @throws MyRuntimeException
	 */
	private void execute(LinkedList<String> listT, LinkedList<Integer> deepT, 
			ArrayList<Integer> startIndex, ArrayList<Integer> endIndex) 
		throws MyRuntimeException{
		//進(jìn)入block時(shí)將當(dāng)前可用變量的個(gè)數(shù)備份
		int length1 = intList.size();
		int length2 = arrList.size();
		
		//進(jìn)行語句的順序執(zhí)行
		matchingExecute(listT, deepT, startIndex, endIndex);
			
		//block結(jié)束時(shí)將當(dāng)前可用變量的線性表還原
		intList = new ArrayList<Variable>(intList.subList(0, length1));
		arrList = new ArrayList<ArrayVariable>(arrList.subList(0, length2));
	}
		
	/** 語句的順序執(zhí)行*/
	private void matchingExecute(LinkedList<String> listT, LinkedList<Integer> deepT, 
		ArrayList<Integer> startIndex, ArrayList<Integer> endIndex) throws MyRuntimeException{
		//含有待執(zhí)行語句
		while (listT.size()!=0) {
			//第一個(gè)待執(zhí)行語句的嵌套層次
			int startDeep = deepT.getFirst();
			/** int型變量聲明*/
			if (listT.getFirst().equals("int型變量聲明")) {
				//錯(cuò)誤:變量已聲明
				if (isDeclared(listT.get(1))) 
					throw new MyRuntimeException("變量 “" + listT.get(1) + "” 已聲明",
						startIndex.get(1), endIndex.get(1));
					
				//聲明int型變量而不初始化
				if (listT.size()==2) {
					//向當(dāng)前變量數(shù)據(jù)集添加變量
					intList.add(new Variable(listT.get(1)));
						
					//剩余待執(zhí)行語句
					listT.clear();
				}
				//聲明int型變量而不初始化
				else if (deepT.get(2) == startDeep) {
					//向當(dāng)前變量數(shù)據(jù)集添加變量
					intList.add(new Variable(listT.get(1)));
						
					//剩余待執(zhí)行語句
					listT.removeFirst();listT.removeFirst();
					deepT = new LinkedList<Integer>(deepT.subList(2, deepT.size()));
					startIndex = new ArrayList<Integer>(startIndex.subList(2, startIndex.size()));
					endIndex = new ArrayList<Integer>(endIndex.subList(2, endIndex.size()));
				}
				//聲明int型變量并進(jìn)行初始化
				else {
					//向當(dāng)前變量數(shù)據(jù)集添加變量(含有變量值)
					intList.add(new Variable(listT.get(1), 
							computeArithmetic(listT.get(2), startIndex.get(2), endIndex.get(2))));
						
					//剩余待執(zhí)行語句
					listT.removeFirst();listT.removeFirst();listT.removeFirst();
					if (deepT.size() != 3) {
						deepT = new LinkedList<Integer>(deepT.subList(3, deepT.size()));
						startIndex = new ArrayList<Integer>(startIndex.subList(3, startIndex.size()));
						endIndex = new ArrayList<Integer>(endIndex.subList(3, endIndex.size()));
					}
				}
			}
			/** array型變量聲明*/
			else if (listT.getFirst().equals("array型變量聲明")) {
				//錯(cuò)誤:變量已聲明
				if (isDeclared(listT.get(1))) 
					throw new MyRuntimeException("變量 “" + listT.get(1) + "” 已聲明",
							startIndex.get(1), endIndex.get(1));
				
				String value = listT.get(2);
				//根據(jù)指定長度創(chuàng)建數(shù)組變量
				if (value.charAt(0)==':') {
					int length = computeArithmetic(value.substring(1).trim(), 
								startIndex.get(2), endIndex.get(2));
					if (length <= 0) throw new MyRuntimeException("不能聲明長度為" + length + "的數(shù)組變量",
								startIndex.get(2), endIndex.get(2));
					arrList.add(new ArrayVariable(listT.get(1), length));
				}
					
				//根據(jù)指定值創(chuàng)建數(shù)組變量
				else if (value.charAt(0)=='{') 
					arrList.add(new ArrayVariable(listT.get(1), computeArrayData("", 
								listT.get(2).substring(1, listT.get(2).length()-1), false, 
								startIndex.get(2), endIndex.get(2))) );
				//其他:使用現(xiàn)有變量創(chuàng)建數(shù)組變量
				//錯(cuò)誤:變量未聲明
				else if (!isDeclared(value)) 
					throw new MyRuntimeException("變量 “" + value + "” 使用前未聲明", 
							startIndex.get(2), endIndex.get(2));
				//錯(cuò)誤:變量類型不同
				else if (!isArrDeclared(value)) 
					throw new MyRuntimeException("將int型變量 “" + value + "” 賦值給array型變量", 
							startIndex.get(2), endIndex.get(2));
				//創(chuàng)建數(shù)組變量
				else arrList.add(new ArrayVariable(listT.get(1), getArrVar(value)));
				
				//剩余待執(zhí)行語句
				
				listT.removeFirst();listT.removeFirst();listT.removeFirst();
				if (deepT.size() != 3) {
					deepT = new LinkedList<Integer>(deepT.subList(3, deepT.size()));
					startIndex = new ArrayList<Integer>(startIndex.subList(3, startIndex.size()));
					endIndex = new ArrayList<Integer>(endIndex.subList(3, endIndex.size()));
				}
			}
			/** 賦值語句*/
			else if (listT.getFirst().equals("賦值語句")) {
				//執(zhí)行賦值語句
				evaluateExe(new LinkedList<String>(listT.subList(0, 3)), 
						startIndex.get(1), endIndex.get(1), startIndex.get(2), endIndex.get(2));
				
				//剩余待執(zhí)行語句
				listT.removeFirst();listT.removeFirst();listT.removeFirst();
				if (deepT.size() != 3) {
					deepT = new LinkedList<Integer>(deepT.subList(3, deepT.size()));
					startIndex = new ArrayList<Integer>(startIndex.subList(3, startIndex.size()));
					endIndex = new ArrayList<Integer>(endIndex.subList(3, endIndex.size()));
				}
			}
			/** 輸出語句*/
			else if (listT.getFirst().equals("輸出")) {
				//分別進(jìn)行數(shù)組的完整輸出與表達(dá)式的輸出
				String ouput = (isArrDeclared(listT.get(1))) ? 
						getArrVar(listT.get(1)).toString() : 
						computeArithmetic(listT.get(1), startIndex.get(1), endIndex.get(1)) + "";
				tokenStart.add(startIndex.get(1));
				tokenEnd.add(endIndex.get(1));
				listModel.addElement(ouput);
				//剩余待執(zhí)行語句
				listT.removeFirst();listT.removeFirst();
				if (deepT.size() != 2) {
					deepT = new LinkedList<Integer>(deepT.subList(2, deepT.size()));
					startIndex = new ArrayList<Integer>(startIndex.subList(2, startIndex.size()));
					endIndex = new ArrayList<Integer>(endIndex.subList(2, endIndex.size()));
				}
			}
			/** 讀入語句*/
			else if (listT.getFirst().equals("讀入")) {
				//執(zhí)行讀入語句
				readExe(new LinkedList<String>(listT.subList(0, 2)), startIndex.get(1), endIndex.get(1));
				
				//剩余待執(zhí)行語句
				listT.removeFirst();listT.removeFirst();
				if (deepT.size() != 2) {
					deepT = new LinkedList<Integer>(deepT.subList(2, deepT.size()));
					startIndex = new ArrayList<Integer>(startIndex.subList(2, startIndex.size()));
					endIndex = new ArrayList<Integer>(endIndex.subList(2, endIndex.size()));
				}
			}
			/** 循環(huán)語句*/
			else if (listT.getFirst().equals("循環(huán)語句")) {
				//計(jì)算語句體結(jié)束位置
				int end = new LinkedList<Integer>(
						deepT.subList(1, deepT.size())).indexOf(startDeep);
				if (end == -1) end = deepT.size();
				else end += 1;
				
				boolean booleanT = computeRelation (listT.get(1), startIndex.get(1), endIndex.get(1));
				//錯(cuò)誤:布爾值為true而無執(zhí)行語句,進(jìn)入死循環(huán)
				if (end==2 && booleanT) 
					throw new MyRuntimeException("沒有執(zhí)行語句,循環(huán)無法結(jié)束",
							startIndex.get(0), endIndex.get(0));
				//錯(cuò)誤:布爾值為true而表達(dá)式不含有變量,進(jìn)入死循環(huán)
				if (booleanT && !containVar(listT.get(1))) 
					throw new MyRuntimeException("不含有變量,布爾表達(dá)式的值永遠(yuǎn)為真,循環(huán)無法結(jié)束",
							startIndex.get(0), endIndex.get(0));
				
				//執(zhí)行循環(huán)語句
				while(computeRelation (listT.get(1), startIndex.get(1), endIndex.get(1))) 
					execute(new LinkedList<String>(listT.subList(2, end)), 
							new LinkedList<Integer>(deepT.subList(2, end)),
							new ArrayList<Integer>(startIndex.subList(2, end)),
							new ArrayList<Integer>(endIndex.subList(2, end)));
				
				//剩余待執(zhí)行語句
				if (end==deepT.size())	listT.clear();
				else {
					listT = new LinkedList<String>(listT.subList(end, listT.size()));
					deepT = new LinkedList<Integer>(deepT.subList(end, deepT.size()));
					startIndex = new ArrayList<Integer>(startIndex.subList(end, startIndex.size()));
					endIndex = new ArrayList<Integer>(endIndex.subList(end, endIndex.size()));
				}
			}
			/** 條件語句*/
			else {
				//計(jì)算語句塊結(jié)束位置
				int end = new LinkedList<Integer>(deepT.subList(1, deepT.size())).indexOf(startDeep);
				if (end == -1) end = deepT.size();
				else end += 1;

				//執(zhí)行條件語句
				ifClauseExe(new LinkedList<String>(listT.subList(1, end)), 
						new LinkedList<Integer>(deepT.subList(1, end)),
						new ArrayList<Integer>(startIndex.subList(1, end)),
						new ArrayList<Integer>(endIndex.subList(1, end)));
				
				//剩余待執(zhí)行語句
				if (end==deepT.size())
					listT.clear();
				else {
					listT = new LinkedList<String>(listT.subList(end, listT.size()));
					deepT = new LinkedList<Integer>(deepT.subList(end, deepT.size()));
					startIndex = new ArrayList<Integer>(startIndex.subList(end, startIndex.size()));
					endIndex = new ArrayList<Integer>(endIndex.subList(end, endIndex.size()));
				}
			}
		}
	}
		
	/** 檢查布爾表達(dá)式是否含有變量*/
	private boolean containVar (String str) {
		for (Variable value:intList) if (str.contains(value.name)) return true;
		for (ArrayVariable value:arrList) if (str.contains(value.name)) return true;
			
		return false;
	}
		
		
	/** 條件語句的執(zhí)行*/
	private void ifClauseExe (LinkedList<String> ifClause, LinkedList<Integer> deepT, 
			ArrayList<Integer> startIndex, ArrayList<Integer> endIndex) throws MyRuntimeException{
		//第一個(gè)待執(zhí)行語句的嵌套層次
		int startDeep = deepT.getFirst();
			
		//一次遍歷布爾表達(dá)式

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品亚洲国内自在自线福利| 亚洲人成精品久久久久| 国产真实乱对白精彩久久| 精品理论电影在线观看 | 亚洲婷婷国产精品电影人久久| 高清免费成人av| 国产精品国产三级国产| 91国偷自产一区二区使用方法| 亚洲动漫第一页| 日韩欧美在线观看一区二区三区| 久久精品国产99| 欧美激情综合在线| 欧美在线免费观看视频| 免费成人美女在线观看| 日本一区二区免费在线| 色综合夜色一区| 国产精品一二三四区| 国产精品美女久久久久久久久| 色综合天天天天做夜夜夜夜做| 亚洲国产aⅴ成人精品无吗| 精品国产精品网麻豆系列| 高清不卡在线观看av| 亚洲夂夂婷婷色拍ww47| 日韩精品一区二区三区视频在线观看| 激情综合亚洲精品| 亚洲一区二区视频| 久久精品欧美日韩| 欧美日韩精品免费| 成人美女在线观看| 免费视频一区二区| 亚洲美女视频在线观看| 欧美一区二区三区在线看| yourporn久久国产精品| 免费的国产精品| 一区二区三区鲁丝不卡| 欧美成人一区二区三区在线观看| 暴力调教一区二区三区| 视频在线在亚洲| 亚洲欧美综合色| 精品成人一区二区| 欧美日韩一区在线观看| 成人小视频在线观看| 三级一区在线视频先锋| 秋霞av亚洲一区二区三| 中文一区一区三区高中清不卡| 日韩一级欧美一级| 色香蕉成人二区免费| 国产精品一级片在线观看| 日本不卡在线视频| 亚洲一区二区三区四区在线 | 717成人午夜免费福利电影| 国产精品一区二区在线观看不卡| 天堂在线亚洲视频| 一区二区三区在线观看网站| 久久久久国产精品厨房| 欧美不卡视频一区| 欧美一区二视频| 欧美日韩精品欧美日韩精品| 91麻豆精品在线观看| 国产成人在线色| 极品销魂美女一区二区三区| 五月婷婷色综合| 亚洲自拍与偷拍| 一区二区三区精密机械公司| 国产精品另类一区| 久久伊99综合婷婷久久伊| 精品少妇一区二区三区在线播放| 欧美日韩亚洲综合在线 | 中文字幕欧美国产| 久久女同互慰一区二区三区| 日韩欧美在线一区二区三区| 日韩一级视频免费观看在线| 日韩一区二区中文字幕| 日韩三级视频中文字幕| 欧美r级在线观看| 久久综合久久综合久久综合| 久久亚区不卡日本| 国产亚洲1区2区3区| 国产精品美女一区二区在线观看| 国产视频一区在线观看| 中文字幕第一区第二区| 亚洲欧美综合色| 亚洲男人天堂av网| 亚洲午夜精品网| 日韩二区三区四区| 久久99久久久欧美国产| 国产成人精品一区二区三区四区 | 美美哒免费高清在线观看视频一区二区 | 国产精品久久久一本精品| 中文字幕五月欧美| 亚洲一区成人在线| 三级影片在线观看欧美日韩一区二区| 婷婷国产在线综合| 久久国产免费看| 从欧美一区二区三区| 色综合天天做天天爱| 欧美亚洲国产一区二区三区| 91麻豆精品国产91久久久久久 | 欧美精品在线视频| 日韩欧美的一区二区| 国产视频一区在线播放| 亚洲欧美一区二区三区孕妇| 亚洲一区二区精品久久av| 免费在线观看一区| 国产电影一区二区三区| 色综合久久综合网| 日韩一级片网址| 中文字幕制服丝袜一区二区三区| 亚洲国产一区二区a毛片| 久久 天天综合| 91美女在线观看| 91麻豆精品国产91| 国产亚洲一二三区| 亚洲18色成人| 成人亚洲一区二区一| 欧美自拍偷拍午夜视频| ww亚洲ww在线观看国产| 亚洲欧美日韩一区二区三区在线观看 | 日韩成人午夜精品| 成人一区在线看| 欧美日韩免费观看一区二区三区| 2023国产一二三区日本精品2022| 亚洲欧洲日韩av| 青青草国产成人99久久| 99久久精品一区| 日韩欧美不卡在线观看视频| 亚洲婷婷综合色高清在线| 麻豆成人在线观看| 在线中文字幕一区二区| 国产欧美一区二区三区鸳鸯浴 | 欧美zozo另类异族| 亚洲一区中文日韩| 国产风韵犹存在线视精品| 91精品国产手机| 亚洲私人影院在线观看| 国产激情视频一区二区三区欧美| 欧美午夜在线一二页| 国产精品免费久久| 紧缚捆绑精品一区二区| 欧美精品一二三| 亚洲欧美日韩一区| av日韩在线网站| 久久久亚洲精品一区二区三区| 天天av天天翘天天综合网色鬼国产| 成人一区在线观看| 国产日韩视频一区二区三区| 麻豆成人av在线| 欧美猛男gaygay网站| 一区二区三区欧美| 99视频精品全部免费在线| 国产三级精品在线| 国产精品亚洲一区二区三区在线| 日韩精品一区二区三区三区免费 | 麻豆成人综合网| 欧美一区欧美二区| 日韩精品视频网站| 91精品国产91久久久久久一区二区 | 久久久亚洲精品一区二区三区| 日韩影院免费视频| 欧美裸体bbwbbwbbw| 亚洲一区二区美女| 欧美性做爰猛烈叫床潮| 亚洲线精品一区二区三区 | 青青草国产成人av片免费| 欧美巨大另类极品videosbest| 亚洲成人一区二区在线观看| 91福利视频在线| 亚洲高清在线视频| 欧美日韩成人高清| 青青草国产精品亚洲专区无| 日韩免费视频一区| 国产精品羞羞答答xxdd| 国产精品久久久爽爽爽麻豆色哟哟 | 日韩va亚洲va欧美va久久| 在线播放中文字幕一区| 日本va欧美va瓶| 精品嫩草影院久久| 国产精品 日产精品 欧美精品| 久久婷婷久久一区二区三区| 大桥未久av一区二区三区中文| 中文字幕成人av| 在线中文字幕不卡| 日韩高清在线电影| 精品成人免费观看| 99精品视频中文字幕| 一区二区三区日韩在线观看| 欧美精品视频www在线观看| 午夜精品影院在线观看| 精品盗摄一区二区三区| 波多野结衣的一区二区三区| 亚洲码国产岛国毛片在线| 欧美日韩小视频| 精品无人码麻豆乱码1区2区| 国产欧美综合在线观看第十页| 91免费版在线看| 狂野欧美性猛交blacked| 国产精品美女久久久久aⅴ| 欧美性一二三区| 精品一区二区三区在线观看 | 国产午夜精品久久|