锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲天堂中文字幕在线,在线aⅴ亚洲中文字幕,亚洲av无码成人精品区http://www.tkk7.com/chaocai/category/41392.htmlzh-cnTue, 06 Apr 2010 10:35:37 GMTTue, 06 Apr 2010 10:35:37 GMT60DSL瀹炵幇瑕佺偣(3)--鍒╃敤鑴氭湰璇█瀹炵幇DSLhttp://www.tkk7.com/chaocai/archive/2010/04/06/317576.html瓚呰秺宸呭嘲瓚呰秺宸呭嘲Tue, 06 Apr 2010 10:21:00 GMThttp://www.tkk7.com/chaocai/archive/2010/04/06/317576.htmlhttp://www.tkk7.com/chaocai/comments/317576.htmlhttp://www.tkk7.com/chaocai/archive/2010/04/06/317576.html#Feedback0http://www.tkk7.com/chaocai/comments/commentRss/317576.htmlhttp://www.tkk7.com/chaocai/services/trackbacks/317576.html闃呰鍏ㄦ枃

]]>
DSL鐨勫疄鐜拌鐐?2)http://www.tkk7.com/chaocai/archive/2009/08/25/292526.html瓚呰秺宸呭嘲瓚呰秺宸呭嘲Tue, 25 Aug 2009 08:24:00 GMThttp://www.tkk7.com/chaocai/archive/2009/08/25/292526.htmlhttp://www.tkk7.com/chaocai/comments/292526.htmlhttp://www.tkk7.com/chaocai/archive/2009/08/25/292526.html#Feedback1http://www.tkk7.com/chaocai/comments/commentRss/292526.htmlhttp://www.tkk7.com/chaocai/services/trackbacks/292526.html瀹炵幇澶栭儴DSL

涓庝笂涓綃囦腑鎵鎻愬強(qiáng)鍐呴儴DSL涓嶅悓錛屼嬌鐢ㄨ呬笉鏄氳繃API璋冪敤鏉ヤ嬌鐢?/span>DSL錛岃屾槸閫氳繃鎴戜滑瀹氫箟鐨勭壒瀹氳娉曠殑棰嗗煙璇█鏉ヤ嬌鐢?/span>DSL銆?/span>

1 XML褰㈠紡鐨?/span>DSL

鑴氭湰鏂囦歡

<process name="Auto-Door">

      <state name="Open">

            <transition event="time-out" next_state="Close"/>

      </state>

      <state name="Close">

            <transition event="people-closer" next_state="Open"/>

      </state>         

</process>

瀹炵幇

publicclass XmlConfigParser {

      //followings are context variables

      private Machine currentMachine;

      private State currentState;

      class ElementHandler extends DefaultHandler{

            private String getAttributeValue(String elemName,String attributeName,Attributes attris){

                  String attrValue=attris.getValue(attributeName);

                  if (attrValue==null){

                        thrownew XmlConfigParseException("Element "+elemName+" shoudle have the attribute:"+attributeName);

                  }

                  return attrValue;

            }

            @Override

            publicvoid endElement(String arg0, String arg1, String elemName)

            throws SAXException {

                  if (elemName.equals("state")){

                        currentMachine.getStates().add(currentState);

                  }

            }

            @Override

            publicvoid startElement(String arg0, String arg1, String elemName,

                        Attributes attris) throws SAXException{              

                  if (elemName.equals("process")){

                        String processName=getAttributeValue(elemName,"name",attris);

                        currentMachine=new Machine(processName);

                  }

                  if (elemName.equals("state")){

                        String stateName=getAttributeValue(elemName,"name",attris);

                        currentState=new State(stateName);

                  }

                  if (elemName.equals("transition")){

                        String eventName=getAttributeValue(elemName,"event",attris);

                        String nextState=getAttributeValue(elemName,"next_state",attris);

                        Transition transition=new Transition();

                        transition.setEvent(new Event(eventName));

                        transition.setNextState(nextState);

                        currentState.getTransitions().add(transition);

                  }

            }

      }

      public Machine parser(String fileName){

            SAXParserFactory spfactory =

                 SAXParserFactory.newInstance();                 

                       

            try{

             SAXParser saxParser =

                       spfactory.newSAXParser();

             XMLReader reader=saxParser.getXMLReader();

             reader.setContentHandler(new ElementHandler());

             reader.parse(fileName);                 

             returncurrentMachine;

            }catch(Exception e){          

             thrownew XmlConfigParseException("parsing is failed",e);

            }    

      }

}

瀹炵幇瑕佺偣

涓婅堪瀹炵幇鏄氳繃SAX鏉ヨ繘琛?/span>XML瑙f瀽鐨勩?/span>

1 灝嗛鍩熸ā鍨嬬粨鏋勭洿鎺ユ槧灝勪負(fù)XML鍏冪礌鐨勭粨鏋?/span>

鎴戜滑鐢ㄨ繖縐嶆柟寮忔潵璁捐鎴戜滑鐨?/span>DSL錛岃繖鏍峰仛鐨勫ソ澶勬槸DSL姣旇緝瀹規(guī)槗浣跨敤錛堟洿鎺ヨ繎棰嗗煙妯″瀷錛夛紝鍚屾椂瑙f瀽紼嬪簭涔熶細(xì)鐩稿綆鍗曪紝姣旇緝瀹規(guī)槗鐢熸垚鐩稿簲鐨勮涔夋ā鍨嬨?/span>

2 浣跨敤涓婁笅鏂囧彉閲?/span>

濡備笂闈㈢▼搴忎腑鐨勶細(xì)

private Machine currentMachine;

private State currentState;

浠栦滑灝辨槸涓婁笅鏂囧彉閲忥紝鐢變簬SAX鏄『搴忚В鏋愮殑錛屾墍浠ュ繀欏諱繚鎸佹紜殑宸ヤ綔涓婁笅鏂囷紝濡傛妸鐢熶駭Transition瀵硅薄鍔犲叆鍒版紜殑State涓?/span>

2 鑷畾涔夎璦

鑴氭湰鏂囦歡

Machine   (Auto-Door){

               State(Open){

                              Transition{

                                             event : time-out ,

                                             next-state : Close

                              }             

               }

               State (Close){

                              Transition{

                                             event : people-closer ,

                                             next-state : Open

                              }

               }

}

瀹炵幇

鑷繁璁捐璇硶騫跺疄鐜拌В鏋愬櫒錛岄氬父闇瑕佹垜浠叿澶囦竴瀹氱殑緙栬瘧鍘熺悊鐭ヨ瘑騫朵笖鍊熺敤涓瀹氱殑瑙f瀽鍣ㄧ敓鎴愬伐鍏鋒潵甯姪鎴戜滑鐢熶駭瑙f瀽鍣ㄤ唬鐮併?/span>

瀹炵幇涓湰浜轟嬌鐢ㄤ簡 Antlr

Antlr鐨勮娉曟弿榪版枃浠訛細(xì)

grammar StateMachineG;

@header {

import org.ccsoft.statemachine.models.Machine;

import org.ccsoft.statemachine.models.State;

import org.ccsoft.statemachine.models.Transition;

import org.ccsoft.statemachine.models.Event;

}

@members {

               public void emitErrorMessage(String msg) {

                              throw new RuntimeException(msg);

                              //super.emitErrorMessage(msg);

               }

}

machine returns [Machine value]               :              'Machine''('NAME')''{'{$value=new Machine($NAME.text);} (e=state{$value.getStates().add($e.value);})+'}';

state returns [State value]             :              'State''('NAME')''{'{$value=new State($NAME.text);}(e=transition{$value.getTransitions().add($e.value);})+'}';

transition returns [Transition value]

               :              'Transition''{'{$value=new Transition();}e=event{$value.setEvent($e.value);}','f=nextState{$value.setNextState($f.value);}'}';

event     returns [Event value] :     'event'':'e=NAME{$value=new Event($NAME.text);};

nextState returns [String value]

               :              'next-state'':'e=NAME{$value=$NAME.text;};

NAME    :              ('a'..'z' |'A'..'Z'|'0'..'9')+   ;

WS : (' ' |'"t' |'"n' |'"r' )+ {skip();} ;

瀹炵幇瑕佺偣

1 閲囩敤Antlr鐨勫唴宓?/span>Action

瀵逛簬DSL鐨勯氬父搴旂敤鍗抽氳繃澶栭儴鑴氭湰鐢熶駭鐩稿叧閮ㄥ垎璇箟妯″瀷瀵硅薄錛屼嬌鐢?/span>Antlr鐨勫唴宓?/span>Action姣旈噰鐢ㄨ娉曟爲(wèi)鏂瑰紡綆鍗曞緱澶氥?/span>



]]>
DSL鐨勫疄鐜拌鐐?1)http://www.tkk7.com/chaocai/archive/2009/08/24/292397.html瓚呰秺宸呭嘲瓚呰秺宸呭嘲Mon, 24 Aug 2009 07:45:00 GMThttp://www.tkk7.com/chaocai/archive/2009/08/24/292397.htmlhttp://www.tkk7.com/chaocai/comments/292397.htmlhttp://www.tkk7.com/chaocai/archive/2009/08/24/292397.html#Feedback2http://www.tkk7.com/chaocai/comments/commentRss/292397.htmlhttp://www.tkk7.com/chaocai/services/trackbacks/292397.html闃呰鍏ㄦ枃

]]>
主站蜘蛛池模板: 亚洲色最新高清av网站| 国产乱子伦片免费观看中字| 亚洲精品专区在线观看| 国产免费人成视频尤勿视频| 亚洲一区二区三区日本久久九| 精品免费久久久久国产一区| 久久久久亚洲AV片无码下载蜜桃 | 亚洲色WWW成人永久网址| 久久久久久久岛国免费播放| 亚洲高清国产拍精品熟女| 337p日本欧洲亚洲大胆裸体艺术 | 一级白嫩美女毛片免费| 久久精品国产亚洲AV无码娇色 | 国产精品高清全国免费观看| a级在线观看免费| 亚洲乱码在线卡一卡二卡新区 | 日韩国产精品亚洲а∨天堂免| A在线观看免费网站大全| 思思久久99热免费精品6| 亚洲国产精品美女| 亚洲精品无码日韩国产不卡?V | 日韩亚洲国产二区| **aaaaa毛片免费| 久久一区二区三区免费| 亚洲人成电影网站色www| 亚洲精品高清国产一久久| mm1313亚洲精品国产| 国产福利在线观看免费第一福利| aaa毛片视频免费观看| 亚洲av无码av在线播放| 亚洲综合精品香蕉久久网97| 亚洲国产精品嫩草影院久久| 手机看黄av免费网址| 嫩草在线视频www免费观看| 国产亚洲日韩在线a不卡| 亚洲五月丁香综合视频| 免费国产美女爽到喷出水来视频| 中文字幕在线观看免费| 亚洲AV电影天堂男人的天堂| 亚洲国产品综合人成综合网站| 日本免费中文字幕在线看|