JAVA编程规范_6.如何格式化类语法结构

如何格式化类语法结构

使用jrscript脚本可以格式化类语法结构。

脚本实现如下 (语法规范参考jrscript.cn

#include "java.h"
#include "sys.h"
#include "style.h"
void processCLASS(token pretk, token curtk, symbol firstSym, symbol prevSym, symbol curSym);
string formateCLASS() hooks tk : @"CLS" {
	
	if(tk == null) return;
	
	PREFIX = false;
	BODY = false;
	PART = PREV;
	BODYNUM = ZERO;
	
	symbol firstSym = null;
	symbol prevSym = null;

	token pretk=null;
	token [] tkList = tk.childs;
	var i=0; 
	while(i<tkList.length){

		token ttk=tkList[i];		
		symbol [] tkSymList = ttk.values;
		symbol curSSym = tkSymList[0];
		symbol curESym = tkSymList[tkSymList.length-1];
		
		if(firstSym == null) firstSym = curSSym;
		
		if(pretk!=null && tkSymList.length>0){
			processCLASS(pretk, ttk, firstSym, prevSym, curSSym);
		}

		prevSym = curESym;
		pretk=ttk;
		i=i+1;
	}
	return null;
}

void processCLASS(token pretk, token curtk, symbol firstSym, symbol prevSym, symbol curSym) {

	if(PART == PREV && pretk.type != COMMONS) PREFIX = true;
	if(PART == PREV && pretk.type != COMMONS) PART = MIDE;

	string s=toString(pretk.values);

	if("class"==s)	PREFIX = false;

	if(PREFIX || "class"==s || "extends"==s || "implements"==s || ","==s || pretk.name == "ADCL"){

		if(pretk.name == "ADCL"){
			replaceIndentWithOutNLine(pretk, curtk, firstSym.col-1);	
		} else {
			symbol sym=createSymbol(' ');
			replace(sym, prevSym.line, prevSym.col, curSym.line, curSym.col);
		}
		if("class"==s) {
			string s=toString(curtk.values);
			marker('C', s, curSym.line, curSym.col);
		}
	}else{
		string s=toString(curtk.values);

		if("extends"==s || "implements"==s || "{"==s){
			symbol sym=createSymbol(' ');
			replace(sym, prevSym.line, prevSym.col, curSym.line, curSym.col);	
			if("{" == s ) BODY = true;
			if("{" == s ) BODYNUM = ZERO;
		}else{
			if("}"==s) {
				BODY = false;
				BODYNUM = ZERO;
				PART = TAIL;
				replaceIndentWithOutNLine(pretk, curtk, firstSym.col-1);
			}else{
				processBody(pretk, curtk, firstSym);
			}
		}
	}
}

void processCLASS(token pretk, token curtk, symbol firstSym, symbol prevSym, symbol curSym) 声明一个处理函数;
replaceIndentWithOutNLine(pretk, curtk, firstSym.col-1) 单词间空白区域处理,换行、缩进。replace(sym, prevSym.line, prevSym.col, curSym.line, curSym.col); 处理单词间空白区域处理,空格。
processBody(pretk, curtk, firstSym);处理{}内语法元素的缩进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值