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

一、背景

现在很多常用的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参数列表字符串。

代码如下——

//存储函数参数的类.

functionFunctionParam(paramname, paramtype) {this.paramname =paramname;this.paramtype =paramtype;

}//将 Objective-C参数列表代码字符串 转为 FunctionParam 数组.

functionparamsFromObjc(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 = newArray();vari;do{if (!s) break;var len =s.length;if (!len) break;//使用状态机来解析字符串

var state =STATE_DEFAULT;varparamname;varparamtype;for(i=0; i

var ch =s[i];switch(state) {caseSTATE_DEFAULT:

{if (':'==ch) {

paramname= "";

paramtype= "";

state=STATE_WILLPARAMTYPE;

}

}break;caseSTATE_WILLPARAMTYPE:

{if ('('==ch) {

state=STATE_PARAMTYPE;

}

}break;caseSTATE_PARAMTYPE:

{if (')'==ch) {

state=STATE_WILLPARAMNAME;

}else{

paramtype= paramtype +ch;

}

}break;caseSTATE_WILLPARAMNAME:

{if (' '==ch || '\t'==ch || '\r'==ch || '\n'==ch) {

}else{

paramname=ch;

state=STATE_PARAMNAME;

}

}break;caseSTATE_PARAMNAME:

{if ( ('_'==ch) || ('0'<=ch && ch<='9') || ('A'<=ch && ch<='Z') || ('a'<=ch && ch<='z') ) {

paramname= paramname +ch;

}else{//提交.

//alert(paramtype + " " + paramname);

var p = newFunctionParam(paramname, paramtype);

rt.push(p);//恢复状态.

state =STATE_DEFAULT;

}

}break;

}

}//完成最后一项.

if (STATE_PARAMNAME==state) {//提交.

//alert(paramtype + " " + paramname);

var p = newFunctionParam(paramname, paramtype);

rt.push(p);//恢复状态.

state =STATE_DEFAULT;

}

}while(0);returnrt;

}

四、在线工具

源参数列表:

自动

UML:

C++:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值