• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

[JavaScript] Objective-C参数列表语法转换工具。可转为UML或C++语法,用于绘制UML ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

作者: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;
}

 

 


四、在线工具

源参数列表:

自动

UML:

C++:

 

源码下载——
https://files.cnblogs.com/zyl910/convparam_objc.rar


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
How to Create a Class in Objective-C发布时间:2022-07-12
下一篇:
【转】Objective-C学习笔记三:基本数据类型和表达式发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap