日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ANTLR教程– Hello Word

發布時間:2023/12/3 编程问答 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ANTLR教程– Hello Word 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Antlr代表另一種語言識別工具。 該工具能夠為任何計算機語言生成編譯器或解釋器。 除了明顯的用途(例如需要解析一種真正的“大型”編程語言,例如Java,PHP或SQL)外,它還可以幫助執行更小,更常見的任務。

每當您需要評估編譯時未知的表達式,或者解析奇怪的用戶輸入或文件時,這都是有用的。 當然,可以為任何這些任務創建定制的手工分析器。 但是,通常需要更多時間和精力。 對良好的解析器生成器的一點了解可能會將這些耗時的任務變成簡單而又快速的練習。

這篇文章從ANTLR有用性的一個小例子開始。 然后,我們解釋什么是ANTLR以及它如何工作。 最后,我們展示如何編譯一個簡單的“ Hello word!” 語言轉換成抽象語法樹。 文章還說明了如何添加錯誤處理以及如何測試語言。

下一篇文章展示了如何創建一種真實的表達語言。

實詞示例

ANTLR在開源單詞中似乎很流行。 其中, Apache Camel , Apache Lucene , Apache Hadoop , Groovy和Hibernate都使用它 。 他們都需要用于自定義語言的解析器。 例如,Hibernate使用ANTLR解析其查詢語言HQL。

所有這些都是大型框架,因此與小型應用程序相比,它們更可能需要特定領域的語言。 使用ANTLR的較小項目的列表可在其展示列表中找到 。 我們還找到了一個關于該主題的stackoverflow討論。

若要查看ANTLR可能在哪里有用以及如何節省時間,請嘗試估算以下要求:

  • 將公式計算器添加到會計系統中。 它將計算公式的值,例如(10 + 80)*sales_tax 。
  • 將擴展的搜索字段添加到配方搜索引擎中。 它將搜索匹配表達式的收據,例如(chicken and orange) or (no meat and carrot) 。

我們的安全評估需要一天半的時間,其中包括文檔,測試以及與項目的集成。 如果您面臨類似的要求并且做出了更高的估計,那么ANTLR值得一看。

總覽

ANTLR是代碼生成器。 它以所謂的語法文件作為輸入,并生成兩個類:lexer和parser。

Lexer首先運行,然后將輸入分成稱為令牌的部分。 每個令牌代表或多或少有意義的輸入。 代幣流被傳遞到解析器,解析器完成所有必要的工作。 解析器負責構建抽象語法樹,解釋代碼或將其轉換為其他形式。

語法文件包含ANTLR生成正確的詞法分析器和解析器所需的所有內容。 它是否應該生成Java或python類,解析器是否生成抽象語法樹,匯編代碼或直接解釋代碼等。 正如本教程顯示如何構建抽象語法樹一樣,在以下說明中我們將忽略其他選項。

最重要的是,語法文件描述了如何將輸入分為令牌以及如何從令牌構建樹。 換句話說,語法文件包含詞法分析器規則和解析器規則。

每個詞法分析器規則描述一個令牌:

TokenName: regular expression;

解析器規則更加復雜。 最基本的版本類似于lexer規則中的版本:

ParserRuleName: regular expression;

它們可能包含修飾符,這些修飾符在結果抽象語法樹中指定輸入,根和子元素上的特殊轉換,或在使用規則時執行的操作。 幾乎所有工作通常都在解析器規則內完成。

基礎設施

首先,我們展示使ANTLR開發更容易的工具。 當然,本章中所描述的內容都不是必需的。 所有示例僅適用于maven,文本編輯器和Internet連接。

ANTLR項目制作了獨立的IDE , Eclipse插件和Idea插件 。 我們沒有找到NetBeans插件。

ANTLRWorks

獨立的想法稱為ANTLRWorks 。 從項目下載頁面下載 。 ANTLRWorks是單個jar文件,請使用java -jar antlrworks-1.4.3.jar命令運行它。

IDE具有更多功能,并且比Eclipse插件更穩定。

Eclipse插件

從ANTLR 下載頁面下載并解壓縮ANTLR v3。 然后,從Eclipse Marketplace安裝ANTLR插件:

轉到“首選項”并配置ANTLR v3安裝目錄:

要測試配置,請下載示例語法文件并在eclipse中打開它。 它將在ANTLR編輯器中打開。 編輯器具有三個選項卡:

  • 語法–具有語法突出顯示,代碼完成等功能的文本編輯器。
  • 解釋器–將測試表達式編譯成語法樹,可能會產生與生成的解析器不同的結果。 它傾向于在正確的表達式上拋出失敗的謂詞異常。
  • 鐵路視圖–繪制詞法分析器和解析器規則的漂亮圖形。

空項目– Maven配置

本章說明如何將ANTLR添加到Maven項目中。 如果您使用Eclipse且尚未安裝m2eclipse插件,請從http://download.eclipse.org/technology/m2e/releases更新站點進行安裝。 這將使您的生活更加輕松。

建立專案

創建一個新的Maven項目,并在“選擇原型”屏幕上指定maven-archetype-quickstart。 如果不使用Eclipse,則命令mvn archetype:generate可以達到相同的效果。

相依性

將ANTLR依賴項添加到pom.xml中 :

org.antlrantlr3.3jarcompile

注意:由于ANTLR沒有向后兼容的歷史記錄,因此最好指定所需的版本。

外掛程式

Antlr maven插件在generate-sources階段運行,并從語法(.g)文件生成lexer和parser java類。 將其添加到pom.xml中 :

org.antlrantlr3-maven-plugin3.3run antlrgenerate-sourcesantlr

創建src/main/antlr3文件夾。 該插件希望其中包含所有語法文件。

生成的文件放在target/generated-sources/antlr3目錄中。 由于此目錄不在默認的maven構建路徑中,因此我們使用build-helper-maven-plugin將其添加到該目錄中:

org.codehaus.mojobuild-helper-maven-pluginadd-sourcegenerate-sourcesadd-source${basedir}/target/generated-sources/antlr3

如果使用eclipse,則必須更新項目配置:右鍵單擊項目->'maven'->'更新項目配置'。

測試一下

調用maven以測試項目配置:右鍵單擊項目->'Run As'->'Maven generate-sources'。 或者,使用mvn generate-sources命令。

構建應該成功。 控制臺輸出應包含antlr3-maven-plugin插件輸出:

[INFO] --- antlr3-maven-plugin:3.3:antlr (run antlr) @ antlr-step-by-step --- [INFO] ANTLR: Processing source directory C:\meri\ANTLR\workspace\antlr-step-by-step\src\main\antlr3 [INFO] No grammars to process ANTLR Parser Generator Version 3.3 Nov 30, 2010 12:46:29

它之后應該是build-helper-maven-plugin插件輸出:

[INFO] --- build-helper-maven-plugin:1.7:add-source (add-source) @ antlr-step-by-step --- [INFO] Source directory: C:\meri\ANTLR\workspace\antlr-step-by-step\target\generated-sources\antlr3 added.

此階段的結果位于github上,標記為001-configured_antlr 。

你好字

我們將創建最簡單的語言解析器– hello word解析器。 它通過一個表達式構建一個小的抽象語法樹:“ Hello word!”。

我們將使用它來顯示如何創建語法文件并從中生成ANTLR類。 然后,我們將展示如何使用生成的文件并創建單元測試。

第一個語法文件

Antlr3-maven-plugin在src/main/antlr3目錄中搜索語法文件。 它使用語法為每個子目錄創建新程序包,并在其中生成解析器和詞法分析器類。 由于我們希望將類生成到org.meri.antlr_step_by_step.parsers包中,因此我們必須創建src/main/antlr3/org/meri/antlr_step_by_step/parsers目錄。

語法名稱和文件名必須相同。 文件必須帶有.g后綴。 此外,每個語法文件都以語法名稱聲明開頭。 我們的S001HelloWord語法從以下幾行開始:

grammar S001HelloWord;

聲明之后始終是生成器選項。 我們正在研究Java項目,希望將表達式編譯成抽象語法樹:

options {// antlr will generate java lexer and parserlanguage = Java;// generated parser should create abstract syntax treeoutput = AST; }

Antlr不會在生成的類之上生成包聲明。 我們必須使用@parser::header和@lexer::header塊來實施它。 標頭必須遵循選項塊:

@lexer::header {package org.meri.antlr_step_by_step.parsers; }@parser::header {package org.meri.antlr_step_by_step.parsers; }

每個語法文件必須至少具有一個詞法分析器規則。 每個詞法分析器規則必須以大寫字母開頭。 我們有兩個規則,第一個定義一個稱呼令牌,第二個定義一個endsymbol令牌。 稱呼必須為“ Hello word”,并且結尾符號必須為“!”。

SALUTATION:'Hello word'; ENDSYMBOL:'!';

同樣,每個語法文件必須至少具有一個解析器規則。 每個解析器規則必須以小寫字母開頭。 我們只有一個解析器規則:我們語言中的任何表達式都必須由稱呼后跟一個結尾符號組成。

expression : SALUTATION ENDSYMBOL;

注意:語法文件元素的順序是固定的。 如果更改它,則antlr插件將失敗。

生成詞法分析器和解析器

使用mvn generate-sources命令或從Eclipse從命令行生成詞法分析器和解析器:

  • 右鍵單擊該項目。
  • 點擊“運行方式”。
  • 單擊“ Maven生成源”。

Antlr插件將創建target / generated-sources / antlr / org / meri / antlr_step_by_step / parsers文件夾,并將S001HelloWordLexer.java和S001HelloWordParser.java文件放入其中。

使用Lexer和Parser

最后,我們創建編譯器類。 它只有一種公共方法,該方法:

  • 調用生成的詞法分析器將輸入拆分為令牌,
  • 調用生成的解析器以根據令牌構建AST,
  • 將結果AST樹打印到控制臺中,
  • 返回抽象語法樹。

編譯器位于S001HelloWordCompiler類中:

public CommonTree compile(String expression) {try {//lexer splits input into tokensANTLRStringStream input = new ANTLRStringStream(expression);TokenStream tokens = new CommonTokenStream( new S001HelloWordLexer( input ) );//parser generates abstract syntax treeS001HelloWordParser parser = new S001HelloWordParser(tokens);S001HelloWordParser.expression_return ret = parser.expression();//acquire parse resultCommonTree ast = (CommonTree) ret.tree;printTree(ast);return ast;} catch (RecognitionException e) {throw new IllegalStateException("Recognition exception is never thrown, only declared.");}

注意:不必擔心在S001HelloWordParser.expression()方法上聲明的RecognitionException異常。 它永遠不會被拋出。

測試它

在本章結束時,我們將使用一個針對新編譯器的小測試用例。 創建S001HelloWordTest類:

public class S001HelloWordTest {/*** Abstract syntax tree generated from "Hello word!" should have an * unnamed root node with two children. First child corresponds to * salutation token and second child corresponds to end symbol token.* * Token type constants are defined in generated S001HelloWordParser * class.*/@Testpublic void testCorrectExpression() {//compile the expressionS001HelloWordCompiler compiler = new S001HelloWordCompiler();CommonTree ast = compiler.compile("Hello word!");CommonTree leftChild = ast.getChild(0);CommonTree rightChild = ast.getChild(1);//check ast structureassertEquals(S001HelloWordParser.SALUTATION, leftChild.getType());assertEquals(S001HelloWordParser.ENDSYMBOL, rightChild.getType());}}

測試將成功通過。 它將抽象語法樹打印到控制臺:

0 null-- 4 Hello word-- 5 !

IDE中的語法

在編輯器中打開S001HelloWord.g并進入解釋器選項卡。

  • 在左上方視圖中突出顯示表達式規則。
  • 寫下“你好字!” 進入右上視圖。
  • 按左上角的綠色箭頭。

解釋器將生成解析樹:

復制語法

本教程中的每個新語法都基于先前的語法。 我們匯總了將舊語法復制到新語法所需的步驟列表。 使用它們將OldGrammar復制到NewGrammar:

  • 將OldGrammar.g復制到同一目錄中的NewGrammar.g 。
  • 將語法聲明更改為grammar NewGrammar;
  • 生成解析器和詞法分析器。
  • 創建類似于先前的OldGrammarCompiler類的新類NewGrammarCompiler 。
  • 創建類似于先前的OldGrammarTest類的新測試類NewGrammarTest 。

錯誤處理

沒有適當的錯誤處理,沒有任何任務真正完成。 生成的ANTLR類盡可能嘗試從錯誤中恢復。 它們的確向控制臺報告錯誤,但是沒有現成的API可以以編程方式查找語法錯誤。

如果我們只構建命令行編譯器,那可能很好。 但是,假設我們正在為我們的語言構建GUI,或將結果用作其他工具的輸入。 在這種情況下,我們需要對所有生成的錯誤進行API訪問。

在本章的開始,我們將嘗試默認錯誤處理并為其創建測試用例。 然后,我們將添加一個簡單的錯誤處理,只要發生第一個錯誤,該處理都會引發異常。 最后,我們將轉到“真實”解決方案。 它將在內部列表中收集所有錯誤并提供訪問它們的方法。

作為副產品,本章介紹了如何:

  • 將自定義catch子句添加到解析器規則中 ,
  • 向生成的類中添加新的方法和字段 ,
  • 覆蓋生成的方法 。

默認錯誤處理

首先,我們將嘗試解析各種不正確的表達式。 目的是了解默認的ANTLR錯誤處理行為。 我們將從每個實驗中創建測試用例。 所有測試用例都位于S001HelloWordExperimentsTest類中。

表達式1 : Hello word?

結果樹與正確的樹非常相似:

0 null-- 4 Hello word-- 5 ?<missing ENDSYMBOL>

控制臺輸出包含錯誤:

line 1:10 no viable alternative at character '?' line 1:11 missing ENDSYMBOL at '<eof>'

測試用例 :以下測試用例通過均沒有問題。 不會引發異常,并且抽象語法樹節點類型與正確的表達式中的相同。

@Testpublic void testSmallError() {//compile the expressionS001HelloWordCompiler compiler = new S001HelloWordCompiler();CommonTree ast = compiler.compile("Hello word?");//check AST structureassertEquals(S001HelloWordParser.SALUTATION, ast.getChild(0).getType());assertEquals(S001HelloWordParser.ENDSYMBOL, ast.getChild(1).getType());}

表情2 : Bye!

結果樹與正確的樹非常相似:

0 null-- 4 <missing>-- 5 !</missing>

控制臺輸出包含錯誤:

line 1:0 no viable alternative at character 'B' line 1:1 no viable alternative at character 'y' line 1:2 no viable alternative at character 'e' line 1:3 missing SALUTATION at '!'

測試用例 :以下測試用例通過均沒有問題。 不會引發異常,并且抽象語法樹節點類型與正確的表達式中的相同。

@Testpublic void testBiggerError() {//compile the expressionS001HelloWordCompiler compiler = new S001HelloWordCompiler();CommonTree ast = compiler.compile("Bye!");//check AST structureassertEquals(S001HelloWordParser.SALUTATION, ast.getChild(0).getType());assertEquals(S001HelloWordParser.ENDSYMBOL, ast.getChild(1).getType());}

表達式3 : Incorrect Expression

結果樹只有根節點,沒有子節點:

0

控制臺輸出包含很多錯誤:

line 1:0 no viable alternative at character 'I' line 1:1 no viable alternative at character 'n' line 1:2 no viable alternative at character 'c' line 1:3 no viable alternative at character 'o' line 1:4 no viable alternative at character 'r' line 1:5 no viable alternative at character 'r' line 1:6 no viable alternative at character 'e' line 1:7 no viable alternative at character 'c' line 1:8 no viable alternative at character 't' line 1:9 no viable alternative at character ' ' line 1:10 no viable alternative at character 'E' line 1:11 no viable alternative at character 'x' line 1:12 no viable alternative at character 'p' line 1:13 no viable alternative at character 'r' line 1:14 no viable alternative at character 'e' line 1:15 no viable alternative at character 's' line 1:16 no viable alternative at character 's' line 1:17 no viable alternative at character 'i' line 1:18 no viable alternative at character 'o' line 1:19 no viable alternative at character 'n' line 1:20 mismatched input '&ltEOF>' expecting SALUTATION

測試用例 :我們終于找到一個表達式,該表達式導致不同的樹結構。

@Testpublic void testCompletelyWrong() {//compile the expressionS001HelloWordCompiler compiler = new S001HelloWordCompiler();CommonTree ast = compiler.compile("Incorrect Expression");//check AST structureassertEquals(0, ast.getChildCount());}

Lexer中的錯誤處理

每個詞法分析器規則“ RULE”對應于生成的詞法分析器中的“ mRULE”方法。 例如,我們的語法有兩個規則:

SALUTATION:'Hello word'; ENDSYMBOL:'!';

并且生成的詞法分析器有兩種相應的方法 :

public final void mSALUTATION() throws RecognitionException {// ... }public final void mENDSYMBOL() throws RecognitionException {// ... }

根據拋出的異常,lexer可能會也可能不會嘗試從中恢復。 但是,每個錯誤都以reportError(RecognitionException e)方法結尾。 生成的詞法分析器繼承它:

public void reportError(RecognitionException e) {displayRecognitionError(this.getTokenNames(), e);}

結果:我們必須在lexer中更改reportError或displayRecognitionError方法。

解析器中的錯誤處理

我們的語法只有一個解析器規則“表達式”:

expression SALUTATION ENDSYMBOL;

該表達式對應于生成的解析器中的expression()方法:

public final expression_return expression() throws RecognitionException {//initializationtry {//parsing}catch (RecognitionException re) {reportError(re);recover(input,re);retval.tree = (Object) adaptor.errorNode(input, retval.start, input.LT(-1), re);} finally {}//return result; }

如果發生錯誤,解析器將:

  • 向控制臺報告錯誤,
  • 從錯誤中恢復
  • 將錯誤節點(而不是普通節點)添加到抽象語法樹。

解析器中的錯誤報告比lexer中的錯誤報告稍微復雜一些:

/** Report a recognition problem.** This method sets errorRecovery to indicate the parser is recovering* not parsing. Once in recovery mode, no errors are generated.* To get out of recovery mode, the parser must successfully match* a token (after a resync). So it will go:** 1. error occurs* 2. enter recovery mode, report error* 3. consume until token found in resynch set* 4. try to resume parsing* 5. next match() will reset errorRecovery mode** If you override, make sure to update syntaxErrors if you care about that.*/public void reportError(RecognitionException e) {// if we've already reported an error and have not matched a token// yet successfully, don't report any errors.if ( state.errorRecovery ) {return;}state.syntaxErrors++; // don't count spuriousstate.errorRecovery = true;displayRecognitionError(this.getTokenNames(), e);}

這次我們有兩個可能的選擇:

  • 通過自己的處理替換解析器規則方法中的catch子句,
  • 覆蓋解析器方法。

在解析器中更改捕獲

Antlr提供了兩種方法來更改解析器中生成的catch子句。 我們將創建兩個新的語法,每個語法都演示一種方法。 在這兩種情況下,我們都會使解析器在第一個錯誤時退出。

首先,我們可以將rulecatch添加到新S002HelloWordWithErrorHandling語法的解析器規則中:

expression : SALUTATION ENDSYMBOL; catch [RecognitionException e] {//Custom handling of an exception. Any java code is allowed.throw new S002HelloWordError(":(", e); }

當然,我們必須將S002HelloWordError異常的導入添加到headers塊中 :

@parser::header {package org.meri.antlr_step_by_step.parsers;//add imports (see full line on Github)import ... .S002HelloWordWithErrorHandlingCompiler.S002HelloWordError; }

編譯器類與以前幾乎相同。 它聲明了新的異常:

public class S002HelloWordWithErrorHandlingCompiler extends AbstractCompiler {public CommonTree compile(String expression) {// no change here}@SuppressWarnings("serial")public static class S002HelloWordError extends RuntimeException {public S002HelloWordError(String arg0, Throwable arg1) {super(arg0, arg1);}} }

然后,ANTLR將用我們自己的處理方式替換表達式規則方法中的默認catch子句:

public final expression_return expression() throws RecognitionException {//initializationtry {//parsing}catch (RecognitionException re) {//Custom handling of an exception. Any java code is allowed.throw new S002HelloWordError(":(", e); } finally {}//return result; }

通常, 語法 , 編譯器類和測試類在Github上都可用。

或者,我們可以將rulecatch規則放在標題塊和第一個lexer規則之間。 S003HelloWordWithErrorHandling語法演示了此方法:

//change error handling in all parser rules @rulecatch {catch (RecognitionException e) {//Custom handling of an exception. Any java code is allowed.throw new S003HelloWordError(":(", e);} }

我們必須將S003HelloWordError異常的導入添加到標頭塊中:

@parser::header {package org.meri.antlr_step_by_step.parsers;//add imports (see full line on Github)import ... .S003HelloWordWithErrorHandlingCompiler.S003HelloWordError; }

編譯器類與前面的情況完全相同。 ANTLR將替換所有解析器規則中的默認catch子句:

public final expression_return expression() throws RecognitionException {//initializationtry {//parsing}catch (RecognitionException re) {//Custom handling of an exception. Any java code is allowed.throw new S003HelloWordError(":(", e); } finally {}//return result; }

同樣,Github提供了語法 , 編譯器類和測試類 。

不幸的是,這種方法有兩個缺點。 首先,它僅在解析器中不適用于lexer。 其次,默認報告和恢復功能以合理的方式工作。 它嘗試從錯誤中恢復。 一旦開始恢復,就不會產生新的錯誤。 僅當解析器未處于錯誤恢復模式時,才會生成錯誤消息。

我們喜歡此功能,因此我們決定僅更改錯誤報告的默認實現。


將方法和字段添加到生成的類

我們會將所有詞法分析器/解析器錯誤存儲在私有列表中。 此外,我們將在生成的類中添加兩個方法:

  • hasErrors –如果發生至少一個錯誤,則返回true,
  • getErrors –返回所有生成的錯誤。

在@members塊內添加了新的字段和方法:

@lexer::members {//everything you need to add to the lexer }@parser::members {//everything you need to add to the parser }

成員塊必須放在標題塊和第一個詞法分析器規則之間。 該示例的語法為S004HelloWordWithErrorHandling :

//add new members to generated lexer @lexer::members {//add new fieldprivate List<RecognitionException> errors = new ArrayList <RecognitionException> ();//add new methodpublic List<RecognitionException> getAllErrors() {return new ArrayList<RecognitionException>(errors);}//add new methodpublic boolean hasErrors() {return !errors.isEmpty();} }//add new members to generated parser @parser::members {//add new fieldprivate List<RecognitionException> errors = new ArrayList <RecognitionException> ();//add new methodpublic List<RecognitionException> getAllErrors() {return new ArrayList<RecognitionException>(errors);}//add new methodpublic boolean hasErrors() {return !errors.isEmpty();} }

生成的詞法分析器和生成的解析器都包含用member塊編寫的所有字段和方法。

覆蓋生成的方法

要覆蓋生成的方法,請執行與要添加新方法相同的操作,例如,將其添加到@members塊中:

//override generated method in lexer @lexer::members {//override methodpublic void reportError(RecognitionException e) {errors.add(e);displayRecognitionError(this.getTokenNames(), e);} }//override generated method in parser @parser::members {//override methodpublic void reportError(RecognitionException e) {errors.add(e);displayRecognitionError(this.getTokenNames(), e);} }

現在,reportError方法將覆蓋lexer和parser中的默認行為。

收集編譯器中的錯誤

最后,我們必須更改編譯器類。 新版本將在輸入解析階段之后收集所有錯誤:

private List<RecognitionException> errors = new ArrayList<RecognitionException>();public CommonTree compile(String expression) {try {... init lexer ...... init parser ...ret = parser.expression();//collect all errorsif (lexer.hasErrors())errors.addAll(lexer.getAllErrors());if (parser.hasErrors())errors.addAll(parser.getAllErrors());//acquire parse result... as usually ...} catch (RecognitionException e) {...} }/** * @return all errors found during last run */ public List<RecognitionException> getAllErrors() {return errors; }

解析器完成工作后,我們必須收集詞法分析器錯誤。 從它調用詞法分析器,之前沒有任何錯誤。 像往常一樣,我們將語法 , 編譯器類和測試類放在Github上。

下載antlr分步項目的標記003-S002-to-S004HelloWordWithErrorHandling ,以查找同一java項目中的所有三種錯誤處理方法。

參考: ANTLR教程–我們的JCG合作伙伴 Maria Jurcovicova在This is Stuff博客上的問候語。


翻譯自: https://www.javacodegeeks.com/2012/04/antlr-tutorial-hello-word.html

總結

以上是生活随笔為你收集整理的ANTLR教程– Hello Word的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

av丝袜天堂| 国产在线精 | 国产精品久久久免费看 | 久久99亚洲网美利坚合众国 | av.com在线| 日本性动态图 | 一二三四精品 | 中文在线免费观看 | 香蕉视频久久久 | 激情综合网色播五月 | 国产色综合天天综合网 | 97国产在线视频 | 国产黄色在线看 | 婷婷激情综合 | 天天操夜操视频 | 亚洲精品玖玖玖av在线看 | 国产精品久久久久av福利动漫 | 香蕉视频网址 | 正在播放 国产精品 | 成年人视频免费在线 | www.夜夜爱 | 日韩欧美一区二区三区在线 | 婷婷夜夜 | 亚洲黄色影院 | 涩涩网站免费 | 色欧美日韩 | 99这里有精品 | 97精品超碰一区二区三区 | 五月丁香| 精品视频一区在线 | 人人舔人人干 | 久久久久精| 久久久久激情电影 | 精品国产美女在线 | 狠狠干夜夜 | 天天综合网在线观看 | 狠狠干婷婷 | 国产无遮挡又黄又爽馒头漫画 | 中文字幕.av.在线 | 色综合五月 | 激情欧美日韩一区二区 | 国产午夜剧场 | 天天色综合久久 | 激情久久久久久久久久久久久久久久 | 91视频 - 114av | 久草久热 | 亚洲成人av在线电影 | 香蕉久草| 91片黄在线观看动漫 | 337p西西人体大胆瓣开下部 | 最新av在线免费观看 | 久久免费a | 99久久99久久免费精品蜜臀 | 日韩免费播放 | 国产精品成人av在线 | 中文免费 | 免费a网址| 日韩精品在线免费播放 | 九九国产精品视频 | 国产欧美最新羞羞视频在线观看 | 国产精品欧美在线 | 色噜噜在线观看 | 国产精品久久久久久久电影 | 国产亚洲精品精品精品 | 一区二区不卡在线观看 | 99精品国产福利在线观看免费 | 最近中文字幕在线中文高清版 | 国产伦理久久精品久久久久_ | 五月天久久久 | 亚洲精品成人av在线 | 久久国产精品99国产 | 在线小视频你懂的 | av电影中文字幕在线观看 | 狠狠干天天操 | 亚洲综合在线五月 | 国产日韩高清在线 | 国内精品二区 | 在线精品视频免费播放 | 久久1区| 美女久久网站 | 午夜少妇一区二区三区 | 亚洲精选国产 | 成年人在线观看 | 成人av在线直播 | 欧美一二三区在线观看 | 亚洲国产精品人久久电影 | 日韩18p| 色激情五月| av在线之家电影网站 | 日本黄色大片免费看 | 成人午夜影院 | 成人手机在线视频 | 国产精品2区| 精油按摩av| 手机av观看 | 亚洲成人黄色 | 国产97在线播放 | 在线免费观看视频你懂的 | 在线视频黄 | 久久精品久久久久久久 | 2023亚洲精品国偷拍自产在线 | 久久久久久久99 | 国产成人精品一区二区三区免费 | 在线国产专区 | 四季av综合网站 | av五月婷婷 | 91视频在线国产 | 亚洲成人网在线 | 欧美精品v国产精品v日韩精品 | 久久成人国产精品一区二区 | www.91国产 | 中文字幕免费观看 | 久久免费美女视频 | 婷婷伊人综合亚洲综合网 | 99riav1国产精品视频 | 国产精品 欧美 日韩 | 国产破处精品 | 999成人精品| 欧美a免费 | 91av在线国产| 国产在线va | www操操 | 香蕉视频久久久 | 91片黄在线观 | 中文字幕日本电影 | 色悠悠久久综合 | 国产亚洲91 | 久久精品成人欧美大片古装 | 99久久精品免费看 | 青青草视频精品 | 中国一级片在线 | 亚洲日韩欧美一区二区在线 | 69xxxx欧美| 免费日韩 精品中文字幕视频在线 | 国产欧美在线一区二区三区 | 欧美日韩亚洲精品在线 | 欧美日韩二区在线 | 特片网久久 | 婷婷激情久久 | 99久久er热在这里只有精品66 | 成人在线你懂得 | 亚洲天天看 | 在线观看视频黄 | 久草在线视频网站 | 又黄又爽又无遮挡的视频 | 中文字幕在线观看视频一区 | 免费看黄网站在线 | 四虎国产精品成人免费影视 | 国产在线自 | 亚洲精品乱码久久久久久写真 | 亚洲女欲精品久久久久久久18 | 久久久91精品国产一区二区三区 | 日韩理论电影在线观看 | 国产精品久久精品国产 | 国内精品免费 | 国产手机av| 高清精品在线 | 国产第页 | 日韩在线高清视频 | 狠狠色丁香久久婷婷综合丁香 | 亚洲美女精品区人人人人 | 探花视频免费在线观看 | 成人在线一区二区 | 天天激情天天干 | 久久久黄色av | 欧美午夜精品久久久久 | 黄色亚洲免费 | 国产高清在线免费观看 | 天天色天天射天天干 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 国产成人精品一区二区三区福利 | 91在线91拍拍在线91 | 在线观看v片 | 亚洲aⅴ一区二区三区 | 一区二区视频播放 | 欧美精品v国产精品v日韩精品 | 麻豆精品传媒视频 | 日本性久久 | 97国产情侣爱久久免费观看 | 久久精品看片 | 国产999在线 | 99热国产在线观看 | 国产在线观看99 | 黄色av一级 | 丁香狠狠| 久久人人97超碰国产公开结果 | 久久免费精品一区二区三区 | 五月天六月丁香 | 日本精品视频一区二区 | 96av视频| 久久精品99国产精品日本 | 免费在线观看黄 | 成人性生爱a∨ | 欧美亚洲成人xxx | 91色在线观看 | 在线黄色观看 | 四虎国产免费 | 日韩在线影视 | 免费又黄又爽的视频 | 国产精品一区二区三区久久久 | 日韩在线视频国产 | www.com操| 国内成人av| 国产精品美女久久久久久网站 | 伊人婷婷网 | 欧美日韩在线观看不卡 | 99精品视频网 | 国产一区不卡在线 | 色姑娘综合天天 | 亚洲视频在线看 | 日韩高清三区 | 91在线视频网址 | 91九色老| 日韩有码专区 | 国产免费一区二区三区最新 | 天天综合中文 | 99精品国产免费久久久久久下载 | 91在线精品观看 | 操夜夜操 | 日韩精品中文字幕在线 | 91探花系列在线播放 | 丁香婷婷激情 | 日韩高清免费观看 | 天天操人人干 | av中文字幕免费在线观看 | 久久国产影视 | 免费高清看电视网站 | 久久综合狠狠综合久久综合88 | 91亚洲欧美激情 | 美女网站色免费 | 日韩免费播放 | 国产成人精品一区二三区 | 久久婷婷色综合 | 久久久影院一区二区三区 | 成人黄色小视频 | 91污污 | 久久免费视频8 | 日韩试看 | 久久99亚洲精品 | 91精品综合在线观看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 亚洲天堂精品视频在线观看 | 久久亚洲福利 | 天天色天天射综合网 | 99久久精品免费 | 精品一区二区综合 | 亚洲成人动漫在线观看 | 亚洲精品电影在线 | 国产精品1区2区在线观看 | 色网免费观看 | 九九视频免费观看视频精品 | 狠狠做深爱婷婷综合一区 | 欧美高清成人 | 亚洲精品综合欧美二区变态 | 午夜视频免费播放 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 在线免费黄色av | 中文字幕一区av | 在线中文字幕网站 | 日韩免费在线看 | 狂野欧美激情性xxxx | 毛片网站在线看 | 国产精品久久久久9999吃药 | .国产精品成人自产拍在线观看6 | 免费高清在线视频一区· | 97在线观看视频免费 | 美女黄频 | 午夜精品电影一区二区在线 | 日韩高清毛片 | 日韩伦理片hd | 久久精品人 | 乱男乱女www7788 | 中文字幕在线看视频国产 | 天天操夜 | 中文字幕在线国产 | 在线观看免费黄视频 | av黄色免费在线观看 | 成人免费网站在线观看 | 国产麻豆精品久久 | 午夜在线观看影院 | 国产一区二区在线观看视频 | 免费av大片| a黄色大片 | 91免费观看视频网站 | 国产精品9区 | 久久免费视频2 | 一区二区视频在线观看免费 | 日韩在线观看影院 | 久久久久中文 | 91精品视频在线免费观看 | 一本大道久久精品懂色aⅴ 五月婷社区 | 婷婷中文在线 | 国产精品第一视频 | 国产精品一区二区三区久久 | 婷婷六月中文字幕 | 射久久久 | 婷婷在线看 | 国产成人精品网站 | 婷婷中文字幕 | 999久久久精品视频 日韩高清www | 亚洲精品国产麻豆 | 在线观看mv的中文字幕网站 | 五月综合 | 国产最新视频在线 | 人人玩人人添人人 | 日韩精品一区二区三区在线播放 | 久久久免费毛片 | 一区二区三区免费网站 | 丁香色综合| 精品国产一区二区三区免费 | 亚洲六月丁香色婷婷综合久久 | 久久精品91久久久久久再现 | 国产黄色片久久 | 国产.精品.日韩.另类.中文.在线.播放 | 9热精品 | 手机在线看片日韩 | 四虎永久国产精品 | 国产精品久久久久久久久久 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | www.在线观看av | 亚洲人成免费 | 亚洲区另类春色综合小说 | 夜夜高潮夜夜爽国产伦精品 | 久久久久久久久久影视 | 99在线热播 | 国产中文在线视频 | 日韩欧美在线观看一区二区三区 | 蜜臀av免费一区二区三区 | 久久激情五月婷婷 | 亚洲国产小视频在线观看 | 91av视频在线免费观看 | 精品国产欧美一区二区 | 一区二区三区中文字幕在线观看 | 日韩精品中文字幕av | 中文字幕免费在线 | 国产精品久久久久久久久久久久午夜 | 久久免费看毛片 | 久视频在线播放 | 日韩精品一区二区三区丰满 | 在线 视频 一区二区 | 天天天色综合 | 国产精品国产三级国产aⅴ无密码 | 97久久精品午夜一区二区 | 天天操天天综合网 | 国产精品淫 | 国产亚洲一区二区三区 | 日韩精品一区二区三区丰满 | 久久高清| 亚洲日韩欧美一区二区在线 | 97超碰网| www色 | 日本一区二区三区免费观看 | 精品国产色 | 国产一区二区三区免费观看视频 | 日韩性xxx | 国产一区视频导航 | 成人av电影免费在线观看 | 91九色网站 | 九九热免费观看 | 日韩欧美xxx | 91精品国产一区二区三区 | 91在线精品秘密一区二区 | 中文字幕高清免费日韩视频在线 | 日韩三级不卡 | 91毛片在线 | 国产精品九九久久久久久久 | 国产精彩视频一区二区 | 国产精品网址在线观看 | 日韩精品免费专区 | 亚洲国产片色 | 国产日韩精品欧美 | 在线看片视频 | 91中文字幕在线视频 | 亚洲精品国产精品国产 | 国产日产欧美在线观看 | 亚洲一级黄色片 | 免费福利片 | 综合伊人久久 | 蜜臀91丨九色丨蝌蚪老版 | 色精品视频 | 夜夜操天天 | 午夜精品婷婷 | 欧美人牲 | 成年人看片网站 | 五月开心六月伊人色婷婷 | a√天堂中文在线 | 亚洲h在线播放在线观看h | 18久久久久久 | 男女靠逼app| 国产黄色精品视频 | 一区二区三区在线免费观看 | 国产精品理论视频 | 欧美日韩二区在线 | 久99久视频 | 99热精品国产一区二区在线观看 | 欧美在线资源 | 国产成人精品一区二区在线 | 国产精品中文在线 | 美女在线黄 | 欧美色图东方 | 亚洲国产欧洲综合997久久, | av免费福利 | 四虎国产精品成人免费4hu | 日韩电影一区二区在线观看 | 亚洲精品中文在线资源 | 国产日本高清 | 欧美在线视频a | 国产精品第72页 | 精品国产一区二区久久 | 国产精品免费人成网站 | 激情久久五月天 | 国产精品中文在线 | 国产精品久久久久久麻豆一区 | 欧美激情视频在线免费观看 | 精品999| 国产xx视频| 精品久久久久久国产 | 91精品视频在线看 | 最新av电影网址 | 久久九九网站 | 日韩激情小视频 | 国产精品福利小视频 | bbbb操bbbb| 99国产一区 | 一个色综合网站 | 国产男女无遮挡猛进猛出在线观看 | av电影免费在线看 | 精品亚洲成a人在线观看 | 一本一本久久a久久精品综合 | 91视频在线国产 | 国产激情免费 | 国产成人精品av在线 | 日韩三区在线观看 | www视频免费在线观看 | 中文字幕免 | 亚洲涩综合 | 久草在线资源观看 | 国产网站色 | 成人看片| 天天插狠狠干 | 色94色欧美 | 亚洲精品乱码久久久久久蜜桃动漫 | 亚洲国产三级在线观看 | 中文区中文字幕免费看 | 国产在线黄色 | 免费av影视 | 亚洲 欧洲 国产 精品 | 久章操 | 国产中文字幕在线 | www国产亚洲精品久久网站 | 久久精品国产一区二区三区 | 欧美精品在线观看免费 | 91九色综合 | 黄色激情网址 | 欧美亚洲成人免费 | www.干| 一级免费片 | 天天干天天操天天 | 国产精品久久久久久久久婷婷 | 黄色av大片 | 国产成人综合在线观看 | 三级a视频 | 日黄网站 | 一区二区三区免费在线播放 | 国产午夜精品一区二区三区四区 | av资源免费观看 | 人人超碰人人 | 久久精品免费播放 | 亚洲综合少妇 | 91在线观看视频 | 久久久18 | 国产直播av | 97超碰精品 | 99视频精品免费观看, | 久久艹在线观看 | 久久久久久久久久久网 | 国产在线欧美在线 | 美女黄网站视频免费 | 成人午夜黄色影院 | 美女福利视频在线 | 天天狠狠操 | 精品久久久99 | 91日韩免费 | 国产偷国产偷亚洲清高 | 在线免费观看羞羞视频 | 在线视频欧美日韩 | 日日日日日 | 日韩在线视频国产 | 中文字幕色网站 | 日韩美女黄色片 | 国产又粗又猛又爽又黄的视频先 | 亚洲欧美日韩精品一区二区 | 黄色字幕网 | 精品国产乱码久久久久久1区二区 | 毛片在线播放网址 | 国产成人精品不卡 | 丁香婷婷综合激情 | 欧美激情视频在线免费观看 | 天天av在线播放 | 国产精品青草综合久久久久99 | 亚洲经典视频 | 免费日韩 | 久久少妇免费视频 | 免费a v视频 | 免费看黄色毛片 | 国产视频不卡 | 四虎永久免费在线观看 | 免费欧美精品 | 久久综合久久综合这里只有精品 | 久久精品第一页 | 91成人看片 | 久草a视频 | 五月在线| 欧美亚洲国产精品久久高清浪潮 | 欧美综合在线观看 | 亚洲一级免费观看 | 国产成人三级在线 | 99精品免费| 欧美日韩精品国产 | 国产精品一区二区三区在线免费观看 | 人人射人人射 | 国产视频在线播放 | 婷婷丁香视频 | 久久黄色网址 | 国产日韩中文字幕在线 | 国产成人精品综合 | 亚洲精品高清视频在线观看 | 国产中文字幕视频 | 豆豆色资源网xfplay | 狠狠伊人 | 草久在线 | 国产精品成久久久久 | 国产二区av | 99久久9 | 国产一区视频在线 | 麻豆91在线看 | 人人玩人人添人人澡97 | 国产男女无遮挡猛进猛出在线观看 | 亚洲精品久久久久中文字幕m男 | 五月综合激情网 | 日日狠狠| 美女久久久久久久久久久 | 在线免费观看视频 | 最新av观看 | 成人午夜剧场在线观看 | 麻豆91精品视频 | 999国内精品永久免费视频 | 精品久久久久久国产偷窥 | 国产一区二区手机在线观看 | 久日精品 | 精品国产一区二区三区久久久蜜臀 | 久久不射电影院 | 成人免费亚洲 | 免费在线观看成人 | 成年人免费观看在线视频 | 国产精品毛片一区 | 日韩午夜电影网 | 999久久国产 | 天天操天天能 | 国产精品美女免费看 | 国产成人久久77777精品 | 大片网站久久 | 国产亚洲无 | 中文字幕丰满人伦在线 | 亚洲va韩国va欧美va精四季 | 国产精品久久久免费 | 中文日韩在线 | 蜜桃传媒一区二区 | 欧美精品做受xxx性少妇 | 亚洲永久免费av | 探花视频在线观看免费 | 黄色毛片在线观看 | 欧美日韩在线看 | 人人干网 | 国产精品久久久久久久午夜片 | 在线观看精品 | 久久大片 | 91在线免费观看国产 | 国产91成人在在线播放 | av中文字幕在线免费观看 | 在线天堂中文在线资源网 | 狠狠色噜噜狠狠 | 91超碰免费在线 | 国产精品久久久久久五月尺 | 日韩美在线观看 | 国产精品自产拍 | 欧美孕交vivoestv另类 | 久久免费99精品久久久久久 | 国产一区二区三区视频在线 | 一区二区av | 黄色小说网站在线 | 99免费在线观看视频 | 久久99国产精品久久 | 国产91精品看黄网站在线观看动漫 | 99色亚洲 | 免费观看一区二区三区视频 | 精品国产免费一区二区三区五区 | 五月婷婷综合在线观看 | 国产剧情一区二区 | 成人网页在线免费观看 | 国产视频中文字幕 | 中文字幕av日韩 | 国产精品视频 | 91看片在线免费观看 | 亚洲成人二区 | 国产精品久久一卡二卡 | 国产精品成人品 | 日本在线视频一区二区三区 | 国产成人亚洲精品自产在线 | 亚洲精品国产精品乱码在线观看 | 欧美网址在线观看 | 人人舔人人舔 | 手机看片国产日韩 | 免费看三级 | 久久99精品热在线观看 | 视频成人| 国产精品久久久久999 | 2019天天干夜夜操 | 亚洲久草网 | 2022中文字幕在线观看 | 日韩色综合网 | 日日操日日插 | 日韩欧美一区视频 | 91av美女| 日韩精品一区二区三区第95 | 日韩av电影手机在线观看 | 激情视频在线高清看 | 免费久久网 | 麻豆国产在线播放 | 久久久免费网站 | 久久精品久久99精品久久 | 日本在线成人 | 色资源网免费观看视频 | 久久久久久久久久毛片 | 午夜美女福利 | 99精品国产一区二区三区麻豆 | 97色资源 | 日韩欧美电影网 | 探花视频免费观看高清视频 | 国产成人333kkk | 中文字幕一区三区 | 99自拍视频在线观看 | 久久久久久免费毛片精品 | 国产 日韩 在线 亚洲 字幕 中文 | 久久久久久久国产精品影院 | 久久久久久影视 | 久久久久亚洲精品国产 | 天天av综合网 | 久久精品国产亚洲aⅴ | 在线视频观看成人 | 亚洲一区二区精品3399 | 色网站在线免费 | 国产成人精品一区二区三区福利 | 中文视频在线看 | 丁香五香天综合情 | 久久国产手机看片 | 日韩欧美一区二区三区视频 | 在线观看小视频 | 在线免费中文字幕 | 欧美成人h版 | 国产精品第一页在线 | 欧美日产一区 | 婷婷六月网 | 日韩中文字幕第一页 | a√国产免费a | 成人av免费看 | 欧美va天堂在线电影 | 国产在线一线 | 99re视频在线观看 | 日韩欧美在线免费观看 | 欧美午夜激情网 | 天天艹天天操 | 91av在线视频播放 | 国产在线成人 | 久艹视频在线观看 | 午夜精品久久久久久久久久久久久久 | 91视视频在线直接观看在线看网页在线看 | 免费观看v片在线观看 | 国产又粗又猛又黄又爽的视频 | 久热久草在线 | 成人av一区二区在线观看 | 久久99精品久久久久久 | 96久久| 国产欧美精品一区二区三区 | 亚洲精品大片www | 激情视频区| 国产不卡在线播放 | 91av资源在线 | 最近最新中文字幕视频 | 日韩高清一二三区 | 四虎成人精品永久免费av | 国产高清在线免费观看 | 免费看污污视频的网站 | 亚洲国产一区二区精品专区 | 亚洲国产97在线精品一区 | 国产黄色在线观看 | 二区三区在线观看 | 九九热视频在线 | 久久不见久久见免费影院 | 亚州精品天堂中文字幕 | 波多野结衣视频一区 | 人人爽影院 | 国产精品99久久久久久小说 | 久久精品日韩 | 亚洲在线黄色 | av网址最新 | 麻豆免费在线视频 | 狠狠色丁香婷婷综合橹88 | 国产无遮挡猛进猛出免费软件 | 麻豆成人精品 | 久久精品日产第一区二区三区乱码 | www.69xx| 久草视频免费播放 | 四虎影视国产精品免费久久 | 一区二区三区动漫 | 久久久一本精品99久久精品66 | 亚洲资源在线网 | 国产第一页在线观看 | 免费亚洲片 | 欧美精品久久久久久久久久丰满 | 国产一级电影免费观看 | 天堂黄色片 | 国产高清视频在线播放一区 | 97av免费视频 | 青青草国产免费 | 天天摸天天弄 | 天天操网| 天天干夜夜夜 | www在线观看国产 | 欧美亚洲xxx | 最新日韩视频 | 国际精品网 | 九九热.com | 高清av网站| 玖玖在线视频观看 | 麻豆成人小视频 | 久久99婷婷| 婷婷在线免费视频 | 91av在线看| 婷婷国产v亚洲v欧美久久 | 二区三区中文字幕 | 一区二区国产精品 | 伊人网av| 日韩v欧美v日本v亚洲v国产v | av成人在线电影 | 国产成人精品日本亚洲999 | 亚洲福利精品 | 午夜久久影院 | 国产精品岛国久久久久久久久红粉 | 在线观看视频你懂 | 精品美女在线观看 | 成人av网站在线观看 | 麻豆视频免费在线播放 | 国产无遮挡猛进猛出免费软件 | 成年人视频在线免费播放 | 中文字幕在线高清 | 国产不卡av在线 | 91视频三区 | 中文字幕黄色网 | 久久久穴 | 五月婷婷色 | 欧美一区二区三区免费看 | 欧美aa一级| 一区二区日韩av | 国产一区二区三区黄 | 国产a网站| 国产欧美在线一区二区三区 | 91久久精品日日躁夜夜躁国产 | 三级av在线免费观看 | 国产精品九九久久99视频 | 色天天综合久久久久综合片 | 久久久久久久99精品免费观看 | av午夜电影 | 国产精品毛片一区视频播不卡 | 精品国产一区二区三区久久久蜜臀 | 五月婷婷播播 | 成人免费一级 | 久草在线视频首页 | 人人操日日干 | 亚洲精品系列 | 天天爱综合 | 在线91视频 | 国产精品久久久久久99 | 国产又粗又硬又爽的视频 | 在线小视频你懂的 | 中文字幕亚洲情99在线 | 久久久久国产a免费观看rela | 成人一区在线观看 | 免费在线电影网址大全 | 中文在线字幕免 | av高清一区二区三区 | 在线观看国产日韩 | av一区在线| 久久免费电影网 | 久久国产精品99久久人人澡 | 99久久精品费精品 | 精品一区精品二区 | 综合久久久久久 | 久久综合国产伦精品免费 | 国产黄大片 | 人人爱人人射 | 蜜臀久久99精品久久久酒店新书 | 97超碰在 | a精品视频 | 97色国产 | 波多野结衣综合网 | 免费无遮挡动漫网站 | 国产精品黑丝在线观看 | 欧美在线视频精品 | 久久国内视频 | 亚洲一区美女视频在线观看免费 | 日韩最新理论电影 | 亚洲高清视频在线播放 | 91九色最新 | 国产高清永久免费 | 日韩久久久久久久久久久久 | 天天曰夜夜爽 | 香蕉视频免费在线播放 | 中文字幕一区三区 | 91视频三区 | 亚洲精品午夜视频 | 操操碰 | 欧美精品二 | 99精品视频免费看 | 特黄特色特刺激视频免费播放 | 亚洲视频精品 | 在线免费观看黄色大片 | 狠狠干狠狠插 | 免费看片网站91 | 97超级碰碰碰碰久久久久 | 亚洲精品国产拍在线 | 国产原创av片 | 国产伦理一区 | 日韩免费在线观看视频 | 日日夜夜天天人人 | 久久视频精品在线观看 | 亚洲综合色丁香婷婷六月图片 | 中文字幕观看在线 | 黄色成人影视 | 天天激情站 | 国产精品久久久久久一区二区 | 天天色棕合合合合合合 | 久久999精品 | 久久国产精品影片 | 91pony九色丨交换 | av电影一区二区三区 | 久久久久久国产精品免费 | 亚洲高清在线视频 | 91精品一区在线观看 | 国产精品精品国产 | www视频在线观看 | 日韩黄色大片在线观看 | 十八岁免进欧美 | 国产视频2区 | 中文字幕婷婷 | 人人狠狠综合久久亚洲 | 天天干天天搞天天射 | www.成人精品 | 在线视频电影 | 不卡电影一区二区三区 | 国产成人黄色av | 激情综合亚洲 | 最近中文字幕完整高清 | 免费一级片在线观看 | 奇米7777狠狠狠琪琪视频 | 久久久国产精品成人免费 | 精品国产三级 | 91av视频观看 | 精品国产乱码久久久久 | 在线天堂日本 | 久热国产视频 | 人人讲| 久久精品一区八戒影视 | 97涩涩视频 | 中文字幕频道 | 成人a级免费视频 | 国产免费久久精品 | 黄色软件视频大全免费下载 | 日韩电影一区二区在线 | 日韩免费一区二区 | 99久久精品免费看国产麻豆 | 天天综合久久 | 久久久久久久久爱 | 中文字幕影片免费在线观看 | 免费三级a | www.夜夜草| 在线观看久久久久久 | 91黄色在线视频 | 婷婷伊人网 | 九九一级片 | 色综合天天狠狠 | 国产精品一区二区三区99 | 亚洲五月 | 日韩中文字幕网站 | 久久精品美女 | av一二三区 | 中国成人一区 | 国产精品一区二区av影院萌芽 | 国产成年免费视频 | 国产精品视频免费在线观看 | 天天插伊人| 久久看片 | 精品美女在线观看 | 日本婷婷色 | 国产99在线播放 | 免费久久网| 久久精品欧美一区 | 97av影院| 日韩精品中文字幕在线 | 91麻豆免费视频 | 美女网站色 | 色婷婷导航 | 91亚洲欧美激情 | 国产精品久久久亚洲 | 久久99精品国产麻豆婷婷 | 国产精品欧美一区二区 | 一区二区三区在线观看免费 | 丁香在线视频 | 狠色在线 | www.com黄色 | 91国内产香蕉 | 国产精品理论片在线观看 | 日韩高清片| 色婷婷精品大在线视频 | 一区二区三区四区精品视频 | 亚洲人人爱 | 中文字幕免费不卡视频 | 亚洲精品在线观看av | 色网站在线免费 | 久久精品老司机 | av片中文字幕 | 成人中文字幕+乱码+中文字幕 | 欧美国产在线看 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 日本精品在线视频 | 国产亚洲精品v | 成人福利在线观看 | 久久九精品 | 亚洲精品毛片一级91精品 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 在线电影中文字幕 | 人人澡超碰碰97碰碰碰软件 | 国产成人性色生活片 | 婷婷在线免费视频 | 91久久丝袜国产露脸动漫 | 亚洲成人软件 | 久久久久女教师免费一区 | 欧美日韩一区二区视频在线观看 | 国模精品一区二区三区 | 97av视频 | 91av视频在线观看免费 | 911精品美国片911久久久 | 1024手机基地在线观看 | 久久手机看片 | 国产一区二区在线免费观看 | 成人在线一区二区 | 国产日韩精品一区二区在线观看播放 | 中文字幕在线免费看线人 | 国产免费xvideos视频入口 | 成人免费视频播放 | 久久不见久久见免费影院 | 天天综合网 天天 | 女人魂免费观看 | 亚洲成av片人久久久 | 国产精品一区二区三区在线 | 66av99精品福利视频在线 | 国产在线观看一区 | 操碰av| 99精品欧美一区二区三区黑人哦 | 国产午夜精品av一区二区 | 日韩欧美视频免费观看 | 久久五月激情 | 97在线免费观看 | 日日夜夜精品视频天天综合网 | 日韩免费三级 | 亚洲国产精品成人av | 中国一级特黄毛片大片久久 | 奇米777777 | 国产精品自产拍在线观看 | 国产美女在线精品免费观看 | 91自拍成人 | 国产96精品 | 精品国产乱码 | 久久久亚洲影院 | 最新日韩在线 | 中文字幕永久在线 | avcom在线| 五月天天色 | 超碰在线最新 | 99久久999久久久精玫瑰 | ,午夜性刺激免费看视频 | 久久成熟 | 亚洲精品一区二区三区四区高清 | 99精品国产免费久久久久久下载 | 超碰电影在线观看 | 日韩精品久久久久久中文字幕8 | 99视频国产在线 | 丁香视频在线观看 |