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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? interpreterpattern.htm

?? 程式設計是思維具體化的一種方式
?? HTM
?? 第 1 頁 / 共 2 頁
字號:
</ul>

<pre>public class RepeatCommandNode implements INode { <br>    private int number; <br>    private INode commandListNode; <br><br>    public void parse(Context context) { <br>        context.skipToken("REPEAT"); <br>        number = context.currentNumber(); <br>        context.nextToken(); <br>        commandListNode = new CommandListNode(); <br>        commandListNode.parse(context); <br>    }<br><br>    public String toString() {<br>        return "[REPEAT " + number + " " <br>                  + commandListNode + "]"; <br>    } <br>}<br></pre>

<br>

<ul>
  <li> PrimitiveCommandNode.java
  </li>
</ul>

<pre>// &lt;primitive command&gt; ::= PRINT &lt;string&gt; <br>//                           | SPACE | BREAK | LINEBREAK <br>public class PrimitiveCommandNode implements INode {<br>    private String name;<br>    private String text;<br><br>    public void parse(Context context) { <br>        name = context.currentToken(); <br>        context.skipToken(name); <br>        if (!name.equals("PRINT") &amp;&amp; !name.equals("BREAK") <br>             &amp;&amp; !name.equals("LINEBREAK") <br>             &amp;&amp; !name.equals("SPACE")) { <br>            System.err.println("Undefined Command"); <br>        }<br><br>        if (name.equals("PRINT")) { <br>            text = context.currentToken(); <br>            name += text; <br>            context.nextToken(); <br>        } <br>    }<br><br>    public String toString() { <br>        return name; <br>    } <br>}  <br></pre>

<br>

<ul>
  <li> Context.java
  </li>
</ul>

<pre>import java.util.*; <br><br>public class Context { <br>    private StringTokenizer tokenizer; <br>    private String currentToken; <br><br>    public Context(String text) { <br>        tokenizer = new StringTokenizer(text); <br>        nextToken(); <br>    } <br><br>    public String nextToken() { <br>        if (tokenizer.hasMoreTokens()) { <br>            currentToken = tokenizer.nextToken(); <br>        } else { <br>            currentToken = null; <br>        } <br>        return currentToken; <br>    } <br><br>    public String currentToken() { <br>        return currentToken; <br>    } <br><br>    public void skipToken(String token) { <br>        if (!token.equals(currentToken)) { <br>            System.err.println("Warning: " + token + <br>                          " is expected, but " + <br>                          currentToken + " is found."); <br>        } <br>        nextToken(); <br>    } <br><br>    public int currentNumber() { <br>        int number = 0; <br>        try { <br>            number = Integer.parseInt(currentToken); <br>        } catch (NumberFormatException e) { <br>            System.err.println("Warning: " + e); <br>        } <br>        return number; <br>    } <br>}  <br></pre>

<br>

<ul>
  <li> Main.java
  </li>
</ul>

<pre>import java.util.*; <br>import java.io.*;<br><br>public class Main { <br>    public static void main(String[] args) { <br>        try { <br>            BufferedReader reader = new <br>                  BufferedReader(new FileReader(args[0])); <br>            String text; <br>            while ((text = reader.readLine()) != null) { <br>                System.out.println("text = \"" + <br>                                       text + "\""); <br>                INode node = new ProgramNode(); <br>                node.parse(new Context(text)); <br>                System.out.println("node = " + node); <br>            } <br>        } <br>        catch (ArrayIndexOutOfBoundsException e) { <br>            System.err.println(<br>                   "Usage: java Main yourprogram.txt"); <br>        } <br>        catch (Exception e) { <br>            e.printStackTrace(); <br>        } <br>    } <br>} </pre>
<br>
假設您的程式是這樣寫的:<br>
<ul>
  <li>program.txt</li>
</ul>
<pre>PROGRAM PRINT xxx END<br>PROGRAM REPEAT 4 PRINT xxx END END <br>PROGRAM REPEAT 4 PRINT xxx PRINT "yyy" END END</pre>
<br>

則執行Intrepreter程式之后會是:<br>
<table style="text-align: left; background-color: rgb(0, 0, 0); width: 963px; height: 32px; font-family: Times New Roman,Times,serif; color: rgb(255, 255, 255);" border="0" cellpadding="2" cellspacing="2">
  <tbody>
    <tr>
      <td><small>&nbsp;$ java Main program.txt <br>
&nbsp;text = "PROGRAM PRINT xxx END" <br>
&nbsp;node = [PROGRAM [PRINTxxx]] <br>
      <br>
&nbsp;text = "PROGRAM REPEAT 4 PRINT xxx END END" <br>
&nbsp;node = [PROGRAM [[REPEAT 4 [PRINTxxx]]]] <br>
      <br>
&nbsp;text = "PROGRAM REPEAT 4 PRINT xxx PRINT "yyy" END END" <br>
&nbsp;node = [PROGRAM [[REPEAT 4 [PRINTxxx, PRINT"yyy"]]]]</small></td>
    </tr>
  </tbody>
</table>
<span style="font-weight: bold; font-family: Courier New,Courier,monospace;"></span><span style="font-weight: bold; font-family: Courier New,Courier,monospace;"></span><br>
這個范例程式基本上已經顯示了直譯器模式的工作原理,如何讓程式直譯之后能夠工作,這待會再示范,先來看一下Intrepreter模式的 UML&nbsp;類別結構圖: <br>
<div style="text-align: center;"><img style="width: 444px; height: 204px;" alt="Intrepreter" title="Intrepreter" src="images/interpreter-1.jpg"><br>
</div>
<br>
TerminalExpression就像我們的primitive
command,再剖析下去已經沒有子節點了,而NonterminalExpression就像是repeat
command,注意到其中也使用了組合模式,就如之前所說的,組合模式讓可以遞回的組合句子為更復雜的語句。<br>
<br>
您已經會剖析句子了,接下來要如何讓這個直譯器真正工作,雖然程式中使用toString()來表示每一個節點的剖析結果,但事實上,這個程式也已經說明
了如何讓剖析的結果真正運作了,既然已經記錄好剖析之后的語句順序了,只要由上而下追蹤剖析結果,就一定可以執行到 primitive
command,且順序符合自訂的程式原始碼的需求,這只要將toString()改為execute(),并作一些轉發與重復執行的修改就可以了,直接
來看程式會比較容易理解:<br>
<ul>
  <li> <span class="createlink">INode</span>.java
  </li>
</ul>

<pre>public interface INode {<br>    public void parse(Context context);<br>    public void execute();<br>} <br></pre>

<br>

<ul>
  <li> ProgramNode.java
  </li>
</ul>

<pre>// &lt;program&gt; ::= PROGRAM &lt;command list&gt;<br>public class ProgramNode implements INode {<br>    private INode commandListNode;<br><br>    public void parse(Context context) {<br>        context.skipToken("PROGRAM");<br>        commandListNode = new CommandListNode();<br>        commandListNode.parse(context);<br>    }<br><br>    public void execute() {<br>        commandListNode.execute();<br>    }<br><br>    public String toString() {<br>        return "[PROGRAM " + commandListNode + "]";<br>    }<br>} <br></pre>

<br>

<ul>
  <li> CommandListNode.java
  </li>
</ul>

<pre>import java.util.*;    <br><br>// &lt;command list&gt; ::= &lt;command&gt;* END<br>public class CommandListNode implements INode {<br>    private Vector list = new Vector();<br>    private INode commandNode;<br><br>    public void parse(Context context) {<br>        while (true) {<br>            if (context.currentToken() == null) {<br>                System.err.println("Missing 'END'");<br>                break;<br>            } else if(context.currentToken().equals("END")) {<br>                context.skipToken("END");<br>                break;<br>            } else {<br>                commandNode = new CommandNode();<br>                commandNode.parse(context);<br>                list.add(commandNode);<br>            }<br>        }<br>    }<br><br>    public void execute() {<br>        Iterator it = list.iterator();<br>        while (it.hasNext()) {<br>            ((CommandNode)it.next()).execute();<br>        }<br>    }<br><br>    public String toString() {<br>        return "" + list;<br>   }<br>} <br></pre>

<br>

<ul>
  <li> CommandNode.java
  </li>
</ul>

<pre>// &lt;command&gt; ::= &lt;repeat command&gt; | &lt;primitive command&gt;<br>public class CommandNode implements INode {<br>    private INode node;<br><br>    public void parse(Context context) {<br>        if (context.currentToken().equals("REPEAT")) {<br>            node = new RepeatCommandNode();<br>            node.parse(context);<br>        } else {<br>            node = new PrimitiveCommandNode();<br>            node.parse(context);<br>        }<br>    }<br><br>    public void execute() {<br>        node.execute();<br>    }<br><br>    public String toString() {<br>        return node.toString();<br>    }<br>} <br></pre>

<br>

<ul>
  <li> PrimitiveCommandNode.java
  </li>
</ul>

<pre>// &lt;primitive command&gt; ::= PRINT &lt;string&gt; <br>//                           | SPACE | BREAK | LINEBREAK<br>public class PrimitiveCommandNode implements INode {<br>    private String name;<br>    private String text;<br><br>    public void parse(Context context) {<br>        name = context.currentToken();<br>        context.skipToken(name);<br>        if (!name.equals("PRINT") &amp;&amp; !name.equals("BREAK") <br>                           &amp;&amp; !name.equals("LINEBREAK") <br>                           &amp;&amp; !name.equals("SPACE")) {<br>            System.err.println("Undefined Command");<br>        }<br><br>        if (name.equals("PRINT")) {<br>            text = context.currentToken();<br>            context.nextToken();<br>        }<br>    } <br><br>    public void execute() {<br>        if(name.equals("PRINT"))<br>            System.out.print(text);<br>        else if(name.equals("SPACE"))<br>            System.out.print(" ");<br>        else if(name.equals("BREAK"))<br>            System.out.println();<br>        else if(name.equals("LINEBREAK"))<br>            System.out.println(<br>                  "\n------------------------------");<br>    }<br><br>    public String toString() {<br>        return name;<br>    }<br>} <br></pre>

<br>

<ul>
  <li> RepeatCommandNode.java
  </li>
</ul>

<pre>public class RepeatCommandNode implements INode {<br>    private int number;<br>    private INode commandListNode;<br><br>    public void parse(Context context) {<br>        context.skipToken("REPEAT");<br>        number = context.currentNumber();<br>        context.nextToken();<br>        commandListNode = new CommandListNode();<br>        commandListNode.parse(context);<br>    }<br><br>    public void execute() {<br>        for(int i = 0; i &lt; number; i++)<br>            commandListNode.execute();<br>    }<br><br>    public String toString() {<br>        return "[REPEAT " + number + " " + <br>                             commandListNode + "]";<br>    }<br>} <br></pre>

<br>

<ul>
  <li> Context.java
  </li>
</ul>

<pre>import java.util.*;<br><br>public class Context {<br>    private StringTokenizer tokenizer;<br>    private String currentToken;<br><br>    public Context(String text) {<br>        tokenizer = new StringTokenizer(text);<br>        nextToken();<br>    }<br><br>    public String nextToken() {<br>        if (tokenizer.hasMoreTokens()) {<br>            currentToken = tokenizer.nextToken();<br>        } else {<br>            currentToken = null;<br>        }<br>        return currentToken;<br>    }<br><br>    public String currentToken() {<br>        return currentToken;<br>    }<br><br>    public void skipToken(String token) {<br>        if (!token.equals(currentToken)) {<br>            System.err.println("Warning: " + token + <br>                           " is expected, but " + <br>                           currentToken + " is found.");<br>        }<br>        nextToken();<br>    }<br><br>    public int currentNumber() {<br>        int number = 0;<br>        try {<br>            number = Integer.parseInt(currentToken);<br>        } catch (NumberFormatException e) {<br>            System.err.println("Warning: " + e);<br>        }<br>        return number;<br>    }<br>} <br></pre>

<br>

<ul>
  <li> Main.java
  </li>
</ul>

<pre>import java.util.*;<br>import java.io.*;<br><br>public class Main {<br>    public static void main(String[] args) {<br>        try {<br>            BufferedReader reader = new BufferedReader(<br>                               new FileReader(args[0]));<br>            String text;<br>            while ((text = reader.readLine()) != null) {<br>                System.out.println("text = \"" + text <br>                                      + "\"");<br>                INode node = new ProgramNode();<br>                node.parse(new Context(text));<br>                node.execute();<br>            }<br>        }<br>        catch (ArrayIndexOutOfBoundsException e) {<br>            System.err.println(<br>                 "Useage: java Main yourprogram.txt");<br>        }<br>        catch (Exception e) {<br>            e.printStackTrace();<br>        }<br>    }<br>}</pre>
<br>

假設您的直譯程式稿是這么撰寫的: <br>
<ul>
  <li>program.txt</li>
</ul>

<pre>PROGRAM REPEAT 4 LINEBREAK PRINT justin SPACE PRINT momor LINEBREAK END END</pre>
<br>
則程式執行的結果就是: <br>
<table style="text-align: left; background-color: rgb(0, 0, 0); width: 963px; height: 32px; font-family: Times New Roman,Times,serif; color: rgb(255, 255, 255);" border="0" cellpadding="2" cellspacing="2">
  <tbody>
    <tr>
      <td><small>&nbsp; $ java Main program.txt <br>
&nbsp;text = "PROGRAM REPEAT 4 LINEBREAK PRINT justin SPACE <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRINT momor LINEBREAK END END" <br>
&nbsp;------------------------------ <br>
&nbsp;justin momor <br>
&nbsp;------------------------------ <br>
      <br>
&nbsp;------------------------------ <br>
&nbsp;justin momor <br>
&nbsp;------------------------------ <br>
      <br>
&nbsp;------------------------------ <br>
&nbsp;justin momor <br>
&nbsp;------------------------------ <br>
      <br>
&nbsp;------------------------------ <br>
&nbsp;justin momor <br>
&nbsp;------------------------------&nbsp;</small></td>
    </tr>
  </tbody>
</table>
<span style="font-weight: bold; font-family: Courier New,Courier,monospace;"></span><span style="font-weight: bold; font-family: Courier New,Courier,monospace;"></span><br>
<a href="http://www.drmaster.com.tw/info.asp?NO=PG20214">Design Patterns于Java語言之實習應用</a> 第23章的范例中,可以讓您依指令稿直譯,畫出任何的圖案,讓范例結合了工廠(Factory)模式、外觀(Facade)模式等等,在這邊建議您看看那個范例,看看不同的設計模式之間如何組合且相互合作。<br>
<br>





</body>
</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久se这里有精品| 国产亚洲精品7777| 中文字幕av资源一区| 亚洲一区二区三区四区的 | 欧美一卡二卡三卡| 欧美国产综合一区二区| 丰满白嫩尤物一区二区| 日韩三级视频中文字幕| 久久精品99国产精品| heyzo一本久久综合| 欧美大片在线观看| 日韩国产在线一| 色综合欧美在线视频区| 久久久精品日韩欧美| 美女性感视频久久| 制服.丝袜.亚洲.另类.中文| 亚洲色图视频网站| 成人一区二区三区中文字幕| 亚洲在线中文字幕| 91美女精品福利| 国产精品福利一区| 成人黄页在线观看| 成人欧美一区二区三区1314| 成人免费看视频| 国产精品三级视频| 成人永久免费视频| 亚洲欧洲精品一区二区精品久久久 | 成人性色生活片免费看爆迷你毛片| 欧美日韩你懂得| 亚洲国产精品欧美一二99| 欧美在线视频日韩| 亚洲最大成人综合| 欧美人xxxx| 美女视频黄久久| 久久综合色综合88| 国产精品一区二区x88av| 欧美喷潮久久久xxxxx| 午夜久久久久久| 日韩免费高清视频| 国产69精品久久99不卡| 国产精品福利在线播放| 91久久精品国产91性色tv| 午夜免费欧美电影| 日韩视频在线你懂得| 精品一区二区精品| 日韩一级视频免费观看在线| 欧美国产视频在线| 成人av午夜电影| 亚洲精品高清在线| 91精品黄色片免费大全| 看片的网站亚洲| 国产精品全国免费观看高清 | 久久电影网电视剧免费观看| 久久久www成人免费毛片麻豆 | 亚洲精品视频在线观看免费| 91久久精品国产91性色tv| 亚洲电影在线免费观看| 欧美一区二区三区性视频| 久久er99精品| 亚洲日本成人在线观看| 欧美一区永久视频免费观看| 国产一区二区美女| 亚洲免费在线观看视频| 日韩精品自拍偷拍| 91免费小视频| 久久国产精品99精品国产| 国产精品久久久久毛片软件| 欧美精品三级在线观看| av色综合久久天堂av综合| 亚洲成年人网站在线观看| 久久视频一区二区| 欧美三级在线播放| 成人丝袜高跟foot| 免费成人结看片| 亚洲精品国产视频| 国产亚洲精品超碰| 欧美一区二区三区人| eeuss影院一区二区三区| 免费成人性网站| 一区二区欧美国产| 国产日韩精品视频一区| 欧美高清激情brazzers| 99精品视频在线观看| 国产最新精品免费| 日本午夜精品一区二区三区电影| 国产精品麻豆网站| 久久精品日产第一区二区三区高清版| 91福利区一区二区三区| 成人久久18免费网站麻豆| 麻豆精品蜜桃视频网站| 婷婷开心激情综合| 亚洲日本丝袜连裤袜办公室| 欧美激情中文字幕一区二区| 日韩精品在线一区二区| 555夜色666亚洲国产免| 在线视频欧美精品| 色婷婷激情久久| 91在线观看一区二区| 国产91综合一区在线观看| 精品一区二区三区免费观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲网友自拍偷拍| 亚洲午夜在线电影| 亚洲黄色av一区| 亚洲制服丝袜av| 一二三区精品福利视频| 亚洲欧美日韩成人高清在线一区| 国产三级三级三级精品8ⅰ区| 日韩午夜激情免费电影| 欧美一级二级三级蜜桃| 日韩欧美中文字幕一区| 欧美一区二区成人6969| 欧美成人精品高清在线播放| 日精品一区二区三区| 国产清纯白嫩初高生在线观看91 | 欧美日韩亚洲综合| 91视频观看视频| 91视频免费观看| 欧美亚洲图片小说| 欧美日韩美女一区二区| 欧美一区二区网站| 精品成人私密视频| 国产欧美日韩久久| 亚洲人成影院在线观看| 亚洲精品少妇30p| 午夜精品国产更新| 麻豆精品久久久| 成人免费毛片aaaaa**| 91理论电影在线观看| 在线不卡一区二区| 精品福利在线导航| 亚洲欧美在线另类| 日本va欧美va欧美va精品| 国产酒店精品激情| 99精品欧美一区| 欧美日韩aaaaa| 久久婷婷成人综合色| 亚洲日本va午夜在线影院| 天堂资源在线中文精品| 国产资源在线一区| 色偷偷久久一区二区三区| 91精品国产色综合久久不卡蜜臀| 久久久久国产精品免费免费搜索| 国产精品污污网站在线观看| 夜夜嗨av一区二区三区中文字幕 | 色爱区综合激月婷婷| 91精品一区二区三区在线观看| 久久婷婷国产综合精品青草| 亚洲美腿欧美偷拍| 久久精品国产99国产| 99国产一区二区三精品乱码| 欧美精品v国产精品v日韩精品| 久久久久国色av免费看影院| 亚洲一区二区在线视频| 国产精品18久久久久久久久久久久| 色综合久久久久综合体| 精品久久一区二区| 亚洲黄色免费电影| 福利电影一区二区三区| 91精品午夜视频| 国产精品国产三级国产a| av在线一区二区三区| 综合电影一区二区三区| 亚洲区小说区图片区qvod| 免费精品99久久国产综合精品| 本田岬高潮一区二区三区| 日韩欧美综合一区| 国内精品国产成人| 欧美性一二三区| 亚洲视频一二区| 国产精品1区2区3区在线观看| 555夜色666亚洲国产免| 亚洲一区二区三区四区在线| 成人性生交大片免费看在线播放 | 欧美日韩一区二区在线观看视频| 国产欧美一区二区精品性色 | 黄一区二区三区| 日韩午夜激情免费电影| 亚洲3atv精品一区二区三区| 91色.com| 亚洲视频在线一区二区| 懂色av一区二区三区免费观看| 欧美成人女星排名| 免费不卡在线观看| 欧美一区二区国产| 日韩专区中文字幕一区二区| 欧美丝袜丝交足nylons图片| 一区二区三区精品| 99久久精品国产导航| 亚洲国产成人午夜在线一区| 狠狠狠色丁香婷婷综合久久五月| 日韩午夜电影在线观看| 美女久久久精品| 欧美一区二区三区在线观看视频| 日本视频中文字幕一区二区三区| 欧美三级中文字| 日日夜夜精品视频免费| 日韩一二在线观看| 国产一区欧美二区| 中文字幕国产一区|