精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

設計模式系列—解釋器模式

開發 前端
本篇和大家一起來學習解釋器模式相關內容。

本篇和大家一起來學習解釋器模式相關內容。

 模式定義

給分析對象定義一個語言,并定義該語言的文法表示,再設計一個解析器來解釋語言中的句子。也就是說,用編譯語言的方式來分析應用中的實例。這種模式實現了文法表達式處理的接口,該接口解釋一個特定的上下文。

這里提到的文法和句子的概念同編譯原理中的描述相同,“文法”指語言的語法規則,而“句子”是語言集中的元素。例如,漢語中的句子有很多,“我是中國人”是其中的一個句子,可以用一棵語法樹來直觀地描述語言中的句子。

模式的結構和實現

解釋器模式常用于對簡單語言的編譯或分析實例中,為了掌握好它的結構與實現,必須先了解編譯原理中的“文法、句子、語法樹”等相關概念。

文法

文法是用于描述語言的語法結構的形式規則。沒有規矩不成方圓,例如,有些人認為完美愛情的準則是“相互吸引、感情專一、任何一方都沒有戀愛經歷”,雖然最后一條準則較苛刻,但任何事情都要有規則,語言也一樣,不管它是機器語言還是自然語言,都有它自己的文法規則。例如,中文中的“句子”的文法如下。

  • 〈句子〉::=〈主語〉〈謂語〉〈賓語〉
  • 〈主語〉::=〈代詞〉|〈名詞〉
  • 〈謂語〉::=〈動詞〉
  • 〈賓語〉::=〈代詞〉|〈名詞〉
  • 〈代詞〉你|我|他
  • 〈名詞〉7大學生I筱霞I英語
  • 〈動詞〉::=是|學習

注:這里的符號“::=”表示“定義為”的意思,用“〈”和“〉”括住的是非終結符,沒有括住的是終結符。

句子

句子是語言的基本單位,是語言集中的一個元素,它由終結符構成,能由“文法”推導出。例如,上述文法可以推出“我是大學生”,所以它是句子。

語法樹

語法樹是句子結構的一種樹型表示,它代表了句子的推導結果,它有利于理解句子語法結構的層次。下圖所示是“我是大學生”的語法樹。

解釋器模式的結構與組合模式相似,不過其包含的組成元素比組合模式多,而且組合模式是對象結構型模式,而解釋器模式是類行為型模式。

模式的實現 

解釋器模式實現的關鍵是定義文法規則、設計終結符類與非終結符類、畫出結構圖,必要時構建語法樹,其代碼結構如下:

  1. package com.niuh.designpattern.interpreter.v1; 
  2.  
  3. /** 
  4.  * <p> 
  5.  * 解釋器模式 
  6.  * </p> 
  7.  */ 
  8. public class InterpreterPattern { 
  9.  
  10. //抽象表達式類 
  11. interface AbstractExpression { 
  12.     public Object interpret(String info);    //解釋方法 
  13.  
  14. //終結符表達式類 
  15. class TerminalExpression implements AbstractExpression { 
  16.     public Object interpret(String info) { 
  17.         //對終結符表達式的處理 
  18.         return null
  19.     } 
  20.  
  21. //非終結符表達式類 
  22. class NonterminalExpression implements AbstractExpression { 
  23.     private AbstractExpression exp1; 
  24.     private AbstractExpression exp2; 
  25.  
  26.     public Object interpret(String info) { 
  27.         //非對終結符表達式的處理 
  28.         return null
  29.     } 
  30.  
  31. //環境類 
  32. class Context { 
  33.     private AbstractExpression exp; 
  34.  
  35.     public Context() { 
  36.         //數據初始化 
  37.     } 
  38.  
  39.     public void operation(String info) { 
  40.         //調用相關表達式類的解釋方法 
  41.     } 

解決的問題

對于一些固定文法構建一個解釋句子的解釋器。 

模式組成

實例說明

實例概況

用解釋器模式設計一個北京公交車卡的讀卡器程序。

說明:假如北京公交車讀卡器可以判斷乘客的身份,如果是“海淀區”或者“朝陽區”的“老人” “婦女”“兒童”就可以免費乘車,其他人員乘車一次扣 2 元。

分析:本實例用“解釋器模式”設計比較適合,首先設計其文法規則如下。

  1. <expression> ::= <city>的<person> 
  2. <city> ::= 海淀區|朝陽區 
  3. <person> ::= 老人|婦女|兒童 

然后,根據文法規則按以下步驟設計公交車卡的讀卡器程序的類圖。

使用步驟

步驟1:定義一個抽象表達式(Expression)接口,它包含了解釋方法 interpret(String info)。

  1. //抽象表達式類 
  2. interface Expression { 
  3.     public boolean interpret(String info); 

步驟2:定義一個終結符表達式(Terminal Expression)類,它用集合(Set)類來保存滿足條件的城市或人,并實現抽象表達式接口中的解釋方法 interpret(Stringinfo),用來判斷被分析的字符串是否是集合中的終結符。

  1. class TerminalExpression implements Expression { 
  2.     private Set<String> set = new HashSet<String>(); 
  3.  
  4.     public TerminalExpression(String[] data) { 
  5.         for (int i = 0; i < data.length; i++) { 
  6.             set.add(data[i]); 
  7.         } 
  8.     } 
  9.  
  10.     public boolean interpret(String info) { 
  11.         if (set.contains(info)) { 
  12.             return true
  13.         } 
  14.         return false
  15.     } 

步驟3:定義一個非終結符表達式(AndExpressicm)類,它也是抽象表達式的子類,它包含滿足條件的城市的終結符表達式對象和滿足條件的人員的終結符表達式對象,并實現 interpret(String info) 方法,用來判斷被分析的字符串是否是滿足條件的城市中的滿足條件的人員。

  1. class AndExpression implements Expression { 
  2.     private Expression city = null
  3.     private Expression person = null
  4.  
  5.     public AndExpression(Expression city, Expression person) { 
  6.         this.city = city; 
  7.         this.person = person; 
  8.     } 
  9.  
  10.     public boolean interpret(String info) { 
  11.         String s[] = info.split("的"); 
  12.         return city.interpret(s[0]) && person.interpret(s[1]); 
  13.     } 

步驟4:定義一個環境(Context)類,它包含解釋器需要的數據,完成對終結符表達式的初始化,并定義一個方法 freeRide(String info) 調用表達式對象的解釋方法來對被分析的字符串進行解釋。

  1. class Context { 
  2.     private String[] citys = {"海淀區""朝陽區"}; 
  3.     private String[] persons = {"老人""婦女""兒童"}; 
  4.     private Expression cityPerson; 
  5.  
  6.     public Context() { 
  7.         Expression city = new TerminalExpression(citys); 
  8.         Expression person = new TerminalExpression(persons); 
  9.         cityPerson = new AndExpression(city, person); 
  10.     } 
  11.  
  12.     public void freeRide(String info) { 
  13.         boolean ok = cityPerson.interpret(info); 
  14.         if (ok) { 
  15.             System.out.println("您是" + info + ",您本次乘車免費!"); 
  16.         } else { 
  17.             System.out.println(info + ",您不是免費人員,本次乘車扣費2元!"); 
  18.         } 
  19.     } 

步驟5:客戶端測試

  1. public class InterpreterPattern { 
  2.     public static void main(String[] args) { 
  3.         Context bus = new Context(); 
  4.         bus.freeRide("海淀區的老人"); 
  5.         bus.freeRide("海淀區的年輕人"); 
  6.         bus.freeRide("朝陽區的婦女"); 
  7.         bus.freeRide("朝陽區的兒童"); 
  8.         bus.freeRide("南京的年輕人"); 
  9.     } 

輸出結果

  • 您是海淀區的老人,您本次乘車免費!
  • 海淀區的年輕人,您不是免費人員,本次乘車扣費2元!
  • 您是朝陽區的婦女,您本次乘車免費!
  • 您是朝陽區的兒童,您本次乘車免費!
  • 南京的年輕人,您不是免費人員,本次乘車扣費2元!

優點

解釋器模式是一種類行為型模式,其主要優點如下。

  1. 擴展性好。由于在解釋器模式中使用類來表示語言的文法規則,因此可以通過繼承等機制來改變或擴展文法。
  2. 容易實現。在語法樹中的每個表達式節點類都是相似的,所以實現其文法較為容易。

缺點

  1. 執行效率較低。解釋器模式中通常使用大量的循環和遞歸調用,當要解釋的句子較復雜時,其運行速度很慢,且代碼的調試過程也比較麻煩。
  2. 會引起類膨脹。解釋器模式中的每條規則至少需要定義一個類,當包含的文法規則很多時,類的個數將急劇增加,導致系統難以管理與維護。
  3. 可應用的場景比較少。在軟件開發中,需要定義語言文法的應用實例非常少,所以這種模式很少被使用到。

應用場景

  1. 當語言的文法較為簡單,且執行效率不是關鍵問題時。
  2. 當問題重復出現,且可以用一種簡單的語言來進行表達時。
  3. 當一個語言需要解釋執行,并且語言中的句子可以表示為一個抽象語法樹的時候,如 XML 文檔解釋。

模式的擴展

在項目開發中,如果要對數據表達式進行分析與計算,無須再用解釋器模式進行設計了,Java 提供了以下強大的數學公式解析器:Expression4J、MESP(Math Expression String Parser) 和 Jep 等,它們可以解釋一些復雜的文法,功能強大,使用簡單。

現在以 Jep 為例來介紹該工具包的使用方法。Jep 是 Java expression parser 的簡稱,即 Java 表達式分析器,它是一個用來轉換和計算數學表達式的 Java 庫。通過這個程序庫,用戶可以以字符串的形式輸入一個任意的公式,然后快速地計算出其結果。而且 Jep 支持用戶自定義變量、常量和函數,它包括許多常用的數學函數和常量。 

使用前先配置依賴包:

  1. <!-- https://mvnrepository.com/artifact/jep/jep --> 
  2. <dependency> 
  3.     <groupId>jep</groupId> 
  4.     <artifactId>jep</artifactId> 
  5.     <version>2.24</version> 
  6. </dependency> 

下面來看一個案例:

  1. package com.niuh.designpattern.interpreter.v3; 
  2.  
  3.  
  4. import org.nfunk.jep.JEP; 
  5.  
  6. /** 
  7.  * <p> 
  8.  * JepDemo 
  9.  * </p> 
  10.  */ 
  11. public class JepDemo { 
  12.  
  13.     public static void main(String[] args) { 
  14.         JEP jep = new JEP(); //一個數學表達式 
  15.         String exp = "((a+b)*(c+b))/(c+a)/b"; //給變量賦值 
  16.         jep.addVariable("a", 10); 
  17.         jep.addVariable("b", 10); 
  18.         jep.addVariable("c", 10); 
  19.         try { //執行 
  20.             jep.parseExpression(exp); 
  21.             Object result = jep.getValueAsObject(); 
  22.             System.out.println("計算結果: " + result); 
  23.         } catch (Throwable e) { 
  24.             System.out.println("An error occured: " + e.getMessage()); 
  25.         } 
  26.  
  27.     } 

程序運行結果如下:

  • 計算結果: 2.0

源碼中的應用

SpelExpressionParser中解釋器模式應用分析

類圖分析

在下面的類圖中,Expression是一個接口,相當于我們解釋器模式中的非終結符表達式,而ExpressionParser相當于終結符表達式。根據不同的Parser對象,返回不同的Expression對象。

部分源碼分析 

Expression接口

  1. //抽象的非終結符表達式 
  2. public interface Expression { 
  3.  Object getValue() throws EvaluationException; 
  4.   
  5.  Object getValue(Object rootObject) throws EvaluationException; 

SpelExpression類

  1. //具體的非終結符表達式 
  2. public class SpelExpression implements Expression { 
  3.  @Override 
  4.  public Object getValue() throws EvaluationException { 
  5.   Object result; 
  6.   if (this.compiledAst != null) { 
  7.    try { 
  8.     TypedValue contextRoot = evaluationContext == null ? null : evaluationContext.getRootObject(); 
  9.     return this.compiledAst.getValue(contextRoot == null ? null : contextRoot.getValue(), evaluationContext); 
  10.    } 
  11.    catch (Throwable ex) { 
  12.     // If running in mixed mode, revert to interpreted 
  13.     if (this.configuration.getCompilerMode() == SpelCompilerMode.MIXED) { 
  14.      this.interpretedCount = 0; 
  15.      this.compiledAst = null
  16.     } 
  17.     else { 
  18.      // Running in SpelCompilerMode.immediate mode - propagate exception to caller 
  19.      throw new SpelEvaluationException(ex, SpelMessage.EXCEPTION_RUNNING_COMPILED_EXPRESSION); 
  20.     } 
  21.    } 
  22.   } 
  23.   ExpressionState expressionState = new ExpressionState(getEvaluationContext(), this.configuration); 
  24.   result = this.ast.getValue(expressionState); 
  25.   checkCompile(expressionState); 
  26.   return result; 
  27.  } 

CompositeStringExpression

  1. //具體的非終結符表達式 
  2. public class CompositeStringExpression implements Expression { 
  3.  @Override 
  4.  public String getValue() throws EvaluationException { 
  5.   StringBuilder&nbsp;sb&amp;nbsp;= new StringBuilder(); 
  6.   for (Expression expression : this.expressions) { 
  7.    String value = expression.getValue(String.class); 
  8.    if (value != null) { 
  9.    &nbsp;sb.append(value); 
  10.    } 
  11.   } 
  12.   return&nbsp;sb.toString(); 
  13.  } 

ExpressionParser接口

  1. public interface ExpressionParser { 
  2.  //解析表達式 
  3.  Expression parseExpression(String expressionString) throws ParseException; 
  4.  Expression parseExpression(String expressionString, ParserContext context) throws ParseException; 

TemplateAwareExpressionParser類

  1. public abstract class TemplateAwareExpressionParser implements ExpressionParser { 
  2.  @Override 
  3.  public Expression parseExpression(String expressionString) throws ParseException { 
  4.   return parseExpression(expressionString, NON_TEMPLATE_PARSER_CONTEXT); 
  5.  } 
  6.  //根據不同的parser返回不同的Expression對象 
  7.  @Override 
  8.  public Expression parseExpression(String expressionString, ParserContext context) 
  9.    throws ParseException { 
  10.   if (context == null) { 
  11.    context = NON_TEMPLATE_PARSER_CONTEXT; 
  12.   } 
  13.   if (context.isTemplate()) { 
  14.    return parseTemplate(expressionString, context); 
  15.   } 
  16.   else { 
  17.    return doParseExpression(expressionString, context); 
  18.   } 
  19.  } 
  20.  private Expression parseTemplate(String expressionString, ParserContext context) 
  21.    throws ParseException { 
  22.   if (expressionString.length() == 0) { 
  23.    return new LiteralExpression(""); 
  24.   } 
  25.   Expression[] expressions = parseExpressions(expressionString, context); 
  26.   if (expressions.length == 1) { 
  27.    return expressions[0]; 
  28.   } 
  29.   else { 
  30.    return new CompositeStringExpression(expressionString, expressions); 
  31.   } 
  32.  } 
  33.  //抽象的,由子類去實現 
  34.  protected abstract Expression doParseExpression(String expressionString, 
  35.    ParserContext context) throws ParseException; 

SpelExpressionParser類

  1. public class SpelExpressionParser extends TemplateAwareExpressionParser { 
  2.  @Override 
  3.  protected SpelExpression doParseExpression(String expressionString, ParserContext context) throws ParseException { 
  4.   //這里返回了一個InternalSpelExpressionParser, 
  5.   return new InternalSpelExpressionParser(this.configuration).doParseExpression(expressionString, context); 
  6.  } 

InternalSpelExpressionParser類

  1. class InternalSpelExpressionParser extends TemplateAwareExpressionParser { 
  2.  @Override 
  3.  protected SpelExpression doParseExpression(String expressionString, ParserContext context) throws ParseException { 
  4.   try { 
  5.    this.expressionString = expressionString; 
  6.    Tokenizer tokenizer = new Tokenizer(expressionString); 
  7.    tokenizer.process(); 
  8.    this.tokenStream = tokenizer.getTokens(); 
  9.    this.tokenStreamLength = this.tokenStream.size(); 
  10.    this.tokenStreamPointer = 0; 
  11.    this.constructedNodes.clear(); 
  12.    SpelNodeImpl ast = eatExpression(); 
  13.    if (moreTokens()) { 
  14.     throw new SpelParseException(peekToken().startPos, SpelMessage.MORE_INPUT, toString(nextToken())); 
  15.    } 
  16.    Assert.isTrue(this.constructedNodes.isEmpty()); 
  17.    return new SpelExpression(expressionString, ast, this.configuration); 
  18.   } 
  19.   catch (InternalParseException ex) { 
  20.    throw ex.getCause(); 
  21.   } 
  22.  } 

PS:以上代碼提交在 Github : 

https://github.com/Niuh-Study/niuh-designpatterns.git

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-05-15 08:51:46

解釋器模式定義

2010-04-21 08:38:18

解釋器模式PHP設計模式

2021-06-22 15:27:13

設計模式迭代器模式Java

2022-01-19 08:21:12

設計裝飾器模式

2020-11-03 13:05:18

命令模式

2020-11-04 08:54:54

狀態模式

2020-10-23 09:40:26

設計模式

2022-01-12 13:33:25

工廠模式設計

2020-11-06 09:01:46

迭代器模式

2023-03-03 08:12:07

設計模式語言

2020-10-20 13:33:00

建造者模式

2012-01-13 15:59:07

2021-10-26 00:21:19

設計模式建造者

2021-10-28 19:09:09

模式原型Java

2020-11-05 09:38:07

中介者模式

2020-10-28 11:56:47

橋接模式

2020-10-21 14:29:15

原型模式

2020-10-19 09:28:00

抽象工廠模式

2013-11-26 15:48:53

Android設計模式SDK

2022-01-14 09:22:22

設計模式橋接
點贊
收藏

51CTO技術棧公眾號

日韩成人在线网站| 亚洲色图欧美偷拍| 欧美在线视频免费观看| 亚洲第一综合网| 1769国产精品| 国产在线免费av| 91嫩草精品| 在线看国产日韩| 日本精品福利视频| 欧美高清成人| 国产成人小视频| 国产精品久久久久久久久久久久久久| 日本精品人妻无码77777| 免费萌白酱国产一区二区三区| 欧美艳星brazzers| 99色这里只有精品| 免费a级在线播放| 26uuu亚洲综合色| 3d精品h动漫啪啪一区二区| 欧美性猛交bbbbb精品| 五月天激情综合网| 亚洲欧美一区二区三区久久| 精产国品一二三区| 国产在线|日韩| 五月综合激情网| 欧美一级黄色录像片| 人人妻人人澡人人爽精品日本| 免费精品视频最新在线| 欧美亚洲另类视频| 久久一级黄色片| 91精品啪在线观看国产18| 亚洲美女激情视频| 国产a级黄色片| 日韩成人久久| 91超碰这里只有精品国产| 黄色一级二级三级| 成人免费无遮挡| 偷窥国产亚洲免费视频| 国产尤物av一区二区三区| 天天影视久久综合| 欧美激情一区二区三区| 日韩.欧美.亚洲| 日本一级在线观看| 91网页版在线| 久久99精品久久久久久三级| 蜜臀久久精品久久久久| 懂色av一区二区夜夜嗨| 91欧美视频网站| 91九色蝌蚪91por成人| 日韩一区精品视频| 国产精品91在线观看| 成年人视频免费| 日韩一区精品字幕| 国产精品欧美一区二区三区奶水| 中文字幕在线观看视频免费| 六月丁香综合| 欧洲亚洲免费视频| 日日夜夜操视频| 香蕉久久国产| 国产成人一区二区三区电影| 波多野结衣在线观看一区| 肉色丝袜一区二区| 国产精品久久久久久av福利软件| 国产精品露脸视频| 久久97超碰色| 亚洲最大成人在线| 亚洲男人第一天堂| 99久久精品费精品国产一区二区| 国产无套精品一区二区| 天堂av网在线| 欧美激情一区二区三区不卡| 在线天堂一区av电影| 成人影院在线看| 一区二区三区av电影| 日本欧美视频在线观看| 涩涩视频网站在线观看| 色综合色综合色综合| 一级特黄性色生活片| 亚洲一区二区av| 精品久久久三级丝袜| 亚洲av成人片色在线观看高潮| 色综合久久中文| 一本色道久久88综合日韩精品| 亚洲欧美综合7777色婷婷| 午夜精品免费| 日韩av片电影专区| 国产精品一级视频| 成人免费黄色大片| 亚洲国产一区二区三区在线播| 麻豆最新免费在线视频| 亚洲第一成年网| 男人插女人下面免费视频| 成人av在线播放| 亚洲国产精品电影| 一本在线免费视频| 一区二区三区四区五区精品视频| 国产精品视频在线播放| 精品国产18久久久久久| 国产欧美综合色| 亚洲熟妇无码av在线播放| 电影亚洲精品噜噜在线观看| 日韩欧美一区二区免费| 91成人破解版| 午夜欧美精品| 国产精品手机播放| 日韩一区免费视频| 亚洲欧美偷拍另类a∨色屁股| 免费看又黄又无码的网站| 人人玩人人添人人澡欧美| 欧美精品一区二区三区在线| 东京热无码av男人的天堂| 99精品热视频只有精品10| 成人激情视频免费在线| 你懂的视频在线| 亚洲一区二区三区不卡国产欧美| 手机视频在线观看| 蜜桃精品噜噜噜成人av| 欧美激情日韩图片| 国产尤物视频在线观看| 国产午夜亚洲精品午夜鲁丝片| 日本熟妇人妻xxxx| 91精品国产一区二区在线观看| 亚洲天堂一区二区三区| 亚洲一区欧美在线| 成人午夜电影小说| 久久久久久久久影视| 日韩毛片在线| 国产亚洲视频在线观看| 久久精品国产成人av| 成人avav在线| 丁香婷婷综合激情| 久久久久毛片免费观看| 深夜福利亚洲导航| 中文字幕手机在线视频| 久久免费美女视频| 久在线观看视频| 免费成人三级| 久久全国免费视频| 亚洲第一成人av| 亚洲精品日日夜夜| 在线观看日本www| 1024精品久久久久久久久| 国产精品羞羞答答| 欧美激情黑人| 欧美精品在线观看播放| 日本激情视频一区二区三区| 老鸭窝一区二区久久精品| 午夜精品一区二区三区四区| 外国电影一区二区| 中文字幕久久久| 在线免费观看视频网站| 国产精品日产欧美久久久久| 爱情岛论坛亚洲首页入口章节| 色喇叭免费久久综合| 国产一区视频在线播放| www在线视频| 日韩一区二区三区三四区视频在线观看| 国产又黄又粗又猛又爽的| 国产一区二区三区免费观看| 少妇熟女一区二区| 亚洲码欧美码一区二区三区| 久久久久久美女| 青青草娱乐在线| 欧美亚洲动漫精品| 97在线观看免费高| 成人手机电影网| 亚洲中文字幕无码专区| 国产一区二区三区天码| 国产在线精品播放| 欧美78videosex性欧美| 日韩高清免费观看| 国产成人精品一区二区色戒| 亚洲视频综合在线| 妖精视频一区二区| 久久亚洲美女| 一区二区三区精品国产| 香蕉成人app| 日本久久久久久久久久久| 91激情在线| 日韩欧美激情一区| 制服.丝袜.亚洲.中文.综合懂色| 国产欧美一区二区在线观看| 手机看片国产精品| 亚洲主播在线| 一区二区三区国| 欧美调教在线| 国产日韩在线播放| 麻豆视频在线观看免费网站黄| 亚洲一级黄色片| www.国产黄色| 一本大道久久a久久综合| 欧美爱爱免费视频| 91老师国产黑色丝袜在线| 亚洲欧美日本一区二区三区| 亚洲特级毛片| 亚洲成人自拍视频| 卡通动漫精品一区二区三区| 国产精品亚洲自拍| 婷婷电影在线观看| 精品少妇一区二区30p| 国产永久av在线| 精品国产乱码久久久久久浪潮| 国产一级片av| 亚洲成av人影院| 很污很黄的网站| 91亚洲精品久久久蜜桃| 男人午夜视频在线观看| 亚洲一区自拍| 日韩久久久久久久久久久久| 成人婷婷网色偷偷亚洲男人的天堂| 国产色综合一区二区三区| 欧美aaa级| 秋霞av国产精品一区| 污污视频在线| 日韩一级黄色av| 国产视频福利在线| 亚洲国产精品系列| 性一交一乱一伧老太| 精品视频在线视频| 欧美h在线观看| 亚洲福利一区二区| 久久久www成人免费毛片| 国产精品久久久久aaaa樱花| 欧美狂猛xxxxx乱大交3| 99r精品视频| 日本国产在线视频| 国产高清成人在线| 久久出品必属精品| 国产在线视频一区二区| 三级a在线观看| 狂野欧美一区| 国内外成人激情视频| 亚洲激情一区| 秋霞无码一区二区| 在线播放亚洲| 日本免费a视频| 在线不卡欧美| 国产色一区二区三区| 激情另类综合| 精品丰满人妻无套内射| 欧美精品国产一区| 黄色一级片国产| 亚洲午夜电影| 免费特级黄色片| 夜夜精品视频| 欧美日韩黄色一级片| 国内精品久久久久久久影视蜜臀| 国产精品88久久久久久妇女| 欧美一区综合| 日韩精品久久一区二区| 韩国久久久久| 成人黄色av片| 天堂久久久久va久久久久| 欧美激情国产精品日韩| 日韩国产欧美在线视频| 欧美男女交配视频| 国产自产高清不卡| 日韩av成人网| 99re66热这里只有精品3直播 | 在线视频91| 日韩在线观看| 国产成人一二三区| 狠狠综合久久| 日韩av片在线看| 免费成人在线视频观看| 欧美一级免费在线| 国产白丝精品91爽爽久久| 喷水视频在线观看| 久久久不卡网国产精品二区| 香蕉久久久久久久| 一区二区三区在线视频播放| 中文字幕亚洲高清| 欧美亚洲综合色| 国内精品久久久久久久久久久| 亚洲精品狠狠操| 国产精品二线| 欧美成人免费观看| 中文字幕成在线观看| 成人激情视频免费在线| 欧美wwwwww| 正在播放亚洲| 亚洲激情一区| www.cao超碰| 99久久伊人久久99| 91av手机在线| 亚洲国产综合91精品麻豆| 久久精品视频2| 日韩女优毛片在线| 男女视频在线观看免费| 久久天天躁日日躁| 中文av在线全新| 亚洲尤物视频网| 美女少妇全过程你懂的久久| 男女激烈动态图| 久久精品一区二区三区中文字幕| 91香蕉视频免费看| 久久精品一区二区三区四区| 久久久久久av无码免费网站| 在线观看视频一区二区欧美日韩| 亚洲国产精品二区| 深夜福利91大全| 中文在线免费视频| 3d动漫啪啪精品一区二区免费 | 中文字幕一区二区人妻痴汉电车| 日韩欧美综合在线| 91ph在线| 欧美中文字幕第一页| 亚洲综合影院| 国产精品av免费| 久久人人97超碰国产公开结果| 波多野吉衣在线视频| 中文字幕一区二区三区不卡| 激情视频网站在线观看| 成人黄视频在线观看| 国产成人+综合亚洲+天堂| 国产亚洲精品美女久久| eeuss中文| 麻豆高清免费国产一区| 久久精品无码一区| 亚洲va在线va天堂| 性一交一乱一透一a级| 久久精品2019中文字幕| 韩国理伦片久久电影网| 欧美日韩国产精品一卡| 国产日韩欧美三区| 国产伦精品一区二区三区精品| 亚洲精品成人在线| 国产日韩欧美一区二区东京热| 中文字幕欧美日韩va免费视频| 另类激情视频| 久久久久久久久久久久久久久久av| 精品91在线| 蜜臀av粉嫩av懂色av| 亚洲国产精品久久久久婷婷884 | 一区二区三区黄色| 电影一区二区三区| 欧美日韩最好看的视频| 国产一区二区高清| 亚洲天堂资源在线| 欧美日韩亚洲91| 天天干天天草天天射| 97热在线精品视频在线观看| 北条麻妃在线一区二区免费播放| av一区二区三区免费观看| 国产成人啪午夜精品网站男同| 国产探花在线播放| 日韩三级中文字幕| 欧美人与禽性xxxxx杂性| 国产98在线|日韩| 伊人影院久久| 青青草视频播放| 日韩欧美999| 国产精品影院在线| 国产精品丝袜高跟| 亚洲人metart人体| 性生交大片免费看l| 亚洲国产另类av| 三级国产在线观看| 国产成人一区二区| 99久久99久久精品国产片桃花| 图片区乱熟图片区亚洲| 亚洲国产日韩综合久久精品| 天天干视频在线| 国产精品入口免费视频一| 美女网站免费观看视频| 亚洲欧美在线高清| 免费看黄网站在线观看| 青草青草久热精品视频在线网站| 精品国产91| www.日本久久| 精品magnet| 99riav在线| 电影午夜精品一区二区三区 | 夜夜操天天操亚洲| 天天干天天插天天操| 国产精品男人的天堂| 欧美精品九九| 精品无码在线观看| 日韩一区二区视频| 亚洲综合在线电影| 中文字幕色呦呦| 久久久综合网站| 国产精品久久久久久久免费| 久久久久久国产精品三级玉女聊斋 | 精品二区视频| 亚洲黄色小说视频| 日韩视频一区二区| 欧美aaa视频| 国产精品久久久久久久久电影网| 国产日本亚洲高清| 亚洲av无码乱码国产精品| 国产v综合v亚洲欧美久久| 亚洲第一天堂| 法国空姐电影在线观看| 日韩视频在线一区二区| 日韩精品影片| 久久综合九色综合88i| 亚洲精品国产精华液| 久蕉依人在线视频| 国产在线一区二区三区播放|