分析牛人js版删除代码注释(状态机机制)
来源:互联网 发布:c语言烟花程序 编辑:程序博客网 时间:2024/06/06 15:00
function on_format(id) { var textarea = document.getElementById(id); var text = textarea.value; var obj = format_obj(); obj.init(); obj.g_trigraph_on = document.getElementById('format_trigraph').checked; len = text.length; for (var c = 0; c < len; ++c) { obj.deal(text.substring(c, c+1)); } obj.deal('EOF'); textarea.value = obj.g_output_string;}function format_obj() { return { s_normal: 0, s_char: 1, s_char_conv: 2, s_string: 3, s_string_conv: 4, s_linecomment: 5, s_linecomment_conv: 6, s_comment1: 7, s_comment: 8, s_commented1: 9, s_conv: 10, s_eof: 11, g_state: 0, g_conv_state: 0, g_convlinecnt: 0, g_trigraph: 0, g_output_string: "", g_trigraph_on: 1, put: function(c) { this.g_output_string += c; }, init: function() { this.g_state = this.s_normal; this.g_conv_state = this.s_normal; this.g_trigraph = 0; this.g_output_string = "" }, deal: function(c) { if (this.g_trigraph_on) { if (c == '?') { // trigraph pre process if (this.g_trigraph < 2) { this.g_trigraph++; return 0; } } else if (this.g_trigraph == 2 && c == '/') { c = '\\'; this.g_trigraph = 0; } else if (this.g_trigraph > 0) { var t = this.g_trigraph; this.g_trigraph = 2; while (t--) this.deal('?'); this.g_trigraph = 0; } } if (this.g_conv_state == this.s_conv) { // '\' at end of line this.g_conv_state = this.s_normal; if (c == '\n') { ++this.g_convlinecnt; return 0; } else { if (this.g_state == this.s_comment1) { this.put('/'); while (this.g_convlinecnt) --this.g_convlinecnt, this.put("\\\n"); this.put('\\'); this.g_state = this.s_normal; } else if (this.g_state == this.s_commented1) { this.g_state = this.s_comment; } } } else if (c == '\\') { if (this.g_state == this.s_comment1 || this.g_state == this.s_commented1) { this.g_conv_state = this.s_conv; return 0; } } switch(this.g_state) { case this.s_normal: if (c == '\"') this.g_state = this.s_string, this.put(c); else if (c == '\'') this.g_state = this.s_char, this.put(c); else if (c == '/') this.g_state = this.s_comment1, this.g_convlinecnt = 0; else if (c == 'EOF') this.g_state = this.s_eof; else this.put(c); break; case this.s_char: this.put(c); if (c == '\'') this.g_state = this.s_normal; else if (c == '\\') this.g_state = this.s_char_conv; else if (c == 'EOF') this.g_state = this.s_eof; break; case this.s_char_conv: this.put(c); this.g_state = this.s_char; break; case this.s_string: this.put(c); if (c == '\"') this.g_state = this.s_normal; else if (c == '\\') this.g_state = this.s_string_conv; else if (c == 'EOF') this.g_state = this.s_eof; break; case this.s_string_conv: this.put(c); this.g_state = this.s_string; break; case this.s_linecomment: if (c == '\\') this.g_state = this.s_linecomment_conv; else if (c == '\n') this.g_state = this.s_normal, this.put(c); else if (c == 'EOF') this.g_state = this.s_eof; break; case this.s_linecomment_conv: if (c == '\\') ; else if (c == 'EOF') this.g_state = this.s_eof; else this.g_state = this.s_linecomment; break; case this.s_comment1: if (c == '/') this.g_state = this.s_linecomment; else if (c == '*') this.g_state = this.s_comment; else if (c == 'EOF') this.g_state = this.s_eof; else { this.put('/'); while (this.g_convlinecnt) --this.g_convlinecnt, this.put("\\\n"); this.g_state = this.s_normal; this.deal(c); } break; case this.s_comment: if (c == '*') this.g_state = this.s_commented1; else if (c == 'EOF') this.g_state = this.s_eof; break; case this.s_commented1: if (c == '/') this.g_state = this.s_normal, this.put(' '); else if (c == 'EOF') this.g_state = this.s_eof; else this.g_state = this.s_comment; break; case this.s_eof: return -1; default: return -2; } return 0; } }}
- 分析牛人js版删除代码注释(状态机机制)
- 怎样删除C/C++代码中的所有注释?浅谈状态机的编程思想
- C 语言状态机编程-去掉代码注释
- JSP中混杂HTML、JS、CSS删除各种代码注释
- 删除代码中的注释
- 删除代码中的注释
- 删除代码中的注释
- 批量删除代码注释
- [bash]: 删除代码注释
- 状态机解决有关删除程序中的注释的问题
- eap状态机代码分析-(1)结构定义
- hostapd EAP状态机变迁代码分析
- 原生js封装AJAX(代码+注释)
- js代码注释规范
- C注释转化为C++注释(状态机模型)
- 正则表达式删除代码注释
- 删除Java代码中的注释
- eclipse中删除代码注释
- csapp2e 家庭作业 6.42 6.43 6.44
- 解函数方程
- 一个天气预报的小应用
- JVM内存管理学习总结
- 向量空间模型(VSM)介绍
- 分析牛人js版删除代码注释(状态机机制)
- Heritrix1.14.4安装配置和使用
- poj 1323 Game Prediction
- JDBC——让java程序连上数据库
- 化繁为简系列原创教程
- BOM扩展及批次FIFO分配
- hdu 1698 Just a Hook 线段树成段修改
- 【NetworkOnMainThreadException】关于主线程不能访问网络异常NetworkOnMainThreadException
- java自增运算符和中间缓冲变量机制的理解