[JavaScript] Objective-C參數列表文法轉換工具。可轉為UML或C++文法,用於繪製UML

來源:互聯網
上載者:User

作者:zyl910

一、背景

  現在很多常用的UML工具不支援Objective-C,在繪製UML時很不方便。得手工將Objective-C文法的參數列表,轉為UML文法或C++文法。比較費力且容易出錯。
  於是我想編寫一個工具,自動的將Objective-C文法的參數列錶轉為UML或C++文法。

  用什麼語言開發呢?
  為了跨平台,我決定採用JavaScript來編寫該工具。
  現在只是一個字串分析與產生的小工具,JavaScript足以勝任。

二、功能設計

  介面如下——

  基本使用方法——
1. 在“源參數列表”填寫Objective-C方法的聲明;
2. 點擊“轉換”按鈕,UML與C++文字框出現轉換結果;
3. 將UML與C++文字框的轉換結果複製到剪貼簿,再粘貼到UML工具中。

  協助工具功能——
1. 在“源參數列表”旁邊有一個“粘貼”按鈕。點擊它便會將剪貼簿中的文本張貼到“源參數列表”文字框中。
2. 在“轉換”按鈕旁邊有一個“自動”複選框。若複選框勾選,當“源參數列表”文字框修改完成時,會自動進行轉換。
3. 在“UML”、“C++”旁邊有一個“複製”按鈕。點擊它可將該文字框的內容複寫到剪貼簿。
4. 在“UML”、“C++”旁邊有一個“粘貼轉換再複製”按鈕。點擊它,將會依次執行“將剪貼簿中的文本張貼到源參數列表”、“轉換”、“將該文字框的內容複寫到剪貼簿”這三項功能。

三、關鍵代碼

  該工具的關鍵代碼在paramsFromObjc函數中,用狀態機器去解析Objective-C參數列表字串。

  代碼如下——

// 儲存函數參數的類.function FunctionParam(paramname, paramtype) {    this.paramname = paramname;    this.paramtype = paramtype;}// 將 Objective-C參數列表代碼字串 轉為 FunctionParam 數組.function paramsFromObjc(s) {    // == const    // 狀態機器的狀態.    var STATE_DEFAULT = 0;    // 預設. 遇到':'時變為 STATE_WILLPARAMTYPE.    var STATE_WILLPARAMTYPE = 1;    // 期望參數類型. 遇到'('時變為 STATE_PARAMTYPE.    var STATE_PARAMTYPE = 2;    // 參數類型. 遇到')'時變為 STATE_WILLPARAMNAME.    var STATE_WILLPARAMNAME = 3;    // 期望參數名. 遇到非空白時變為 STATE_PARAMNAME.    var STATE_PARAMNAME = 4;    // 參數名. 遇到非“英文/數字/底線”時提交,並變回 STATE_DEFAULT.    // == var    var rt = new Array();    var i;    do {        if (!s) break;        var len = s.length;        if (!len) break;        // 使用狀態機器來解析字串        var state = STATE_DEFAULT;        var paramname;        var paramtype;        for(i=0; i<len; ++i) {            //alert(s[i]);            var ch = s[i];            switch(state) {                case STATE_DEFAULT:                {                    if (':'==ch) {                        paramname = "";                        paramtype = "";                        state = STATE_WILLPARAMTYPE;                    }                }                break;                case STATE_WILLPARAMTYPE:                {                    if ('('==ch) {                        state = STATE_PARAMTYPE;                    }                }                break;                case STATE_PARAMTYPE:                {                    if (')'==ch) {                        state = STATE_WILLPARAMNAME;                    }                    else {                        paramtype = paramtype + ch;                    }                }                break;                case STATE_WILLPARAMNAME:                {                    if (' '==ch || '\t'==ch || '\r'==ch || '\n'==ch) {                    }                    else {                        paramname = ch;                        state = STATE_PARAMNAME;                    }                }                break;                case STATE_PARAMNAME:                {                    if ( ('_'==ch) || ('0'<=ch && ch<='9') || ('A'<=ch && ch<='Z') || ('a'<=ch && ch<='z') ) {                        paramname = paramname + ch;                    }                    else {                        // 提交.                        //alert(paramtype + " " + paramname);                        var p = new FunctionParam(paramname, paramtype);                        rt.push(p);                        // 恢複狀態.                        state = STATE_DEFAULT;                    }                }                break;            }        }        // 完成最後一項.        if (STATE_PARAMNAME==state) {            // 提交.            //alert(paramtype + " " + paramname);            var p = new FunctionParam(paramname, paramtype);            rt.push(p);            // 恢複狀態.            state = STATE_DEFAULT;        }    }while(0);    return rt;}

 

 

四、線上工具

 

源碼下載——
http://files.cnblogs.com/zyl910/convparam_objc.rar

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.