主页 PC知识 网管技术 黑客帝国 安全技术 开放系统 程序设计 搜索 技术论坛

 

相关联接
 
RHU本级分类

编程语言
程序代码
WIN/*NIX编程
其他类别
JAVA专区

 
RHU阅读排行
·新欢乐时光病毒源代码
·ShixxNote 6.net缓冲区溢出代码
·“BBSxp 5.15”暴库工具源码
·Serv-u本地权限提升漏洞Exp源代码
·一个写硬盘的VBS脚本程序
·冲击波病毒源代码
·超级DDOS源码~每秒>4W
·socks5协议转http协议源码
·得到远程机器MAC地址源代码
·一个简单的CMDSHELL后门

 
 
RHU最新文章
·Python写的蜘蛛程序代码
·C#抓取alexa排名的代码
·一个超级mail蠕虫的诞生
·洪水攻击原理及代码实现全攻略(附源代码)
·修改了一个抓包的程序(c语言队列)
·企业内部AD脆弱密码审计
·用vbs加用户的绝妙方法
·黑客编程利用Debug Api 获得QQ2007密码
·Firewire搞定你的WIN PC的攻击代码来了
·机器狗写入到userinit.exe文件的下载者源码

 
 
RHU相关搜索









 
 
RHU广而告之

 
 
>您的位置:首页 -> 程序设计 -> 程序代码
于Flex的c/c++代码加亮工具(源代码开放)

作者:RHU-TAC编辑员 来自:RHU网络采集 时间:2005-4-20 双击滚屏 收藏本页 字体:


点击 查看RHU2004全年文章


 

大家知道tiny是一个非科班出身的软件开发者,所以,我是没有正式学过编译原理的。在我的职业生涯里面多次想学,但是总有人告诉我那东西没有什么用处(也是啊!难道我要写个编译器和VC竞争么?),所以我一直没有学。然而后来很多事情改变了我的看法,一方面是正则表达式的广泛用途,另外也是我的虚拟机项目,我想在里面用自己做的编译器。还有就是我的前同事LEE做的虚拟机的广泛使用等等,让我感受到不管什么技术,总有用武之地。今天凌晨0点多的时候,我又在看《编译原理技术与工具(龙书)》和《编译原理和实践》,但是光看书不实践等于零,所以,我想我是不是可以做一个代码加亮工具呢?说做就做,到了清晨5点多的时候,我写完了。下面是代码:

htmlpre.lex文件,进行预处理把一些在HTML需要转码代码先转码:
%{
#include <stdio.h>
int yywrap();
%}

%%
"<"                {printf("<");}
">"                {printf(">");}
\t                {printf("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");}
" "                {printf("&nbsp;");}
&nbsp;                {printf("&nbsp;");}
%%

int main()
{
        yylex();
        return 0;
}
int yywrap()
{
        return 1;
}
 

cpp.lex文件,进行代码加亮:
%{
/*
#
*/
#include <stdio.h>
#define FALSE         0
#define TRUE         1
int yywrap();
%}
DIGIT                [0-9]
NUMBER                {DIGIT}+
LETTER                [a-zA-Z]
WORD                {LETTER}+
WHITESPACE        [ \t]+
DELIMITER        [,(){}[]-+*%/="'~!&|<>?:;.#]
NL                \r?\n
QUOTATION        \"[^"\n]*\"
KEYWORD                "auto"| "bool"| "break"| "case"| "catch"| "char"| "cerr"| "cin"| "class"| "const"| "continue"| "cout"| "default"| "delete"| "do"| "double"| "else"| "enum"| "explicit"| "extern"| "float"| "for"| "friend"| "goto"| "if"| "inline"| "int"| "long"| "namespace"| "new"| "operator"| "private"| "protected"| "public"| "register"| "return"| "short"| "signed"| "sizeof"| "static"| "struct"| "switch"| "template"| "this"| "throw"| "try"| "typedef"| "union"| "unsigned"| "virtual"| "void"| "volatile"| "while"| "__asm"| "__fastcall"| "__based"| "__cdecl"| "__pascal"| "__inline"| "__multiple_inheritance"| "__single_inheritance"| "__virtual_inheritance"
PREWORD                "define"| "error"| "include"| "elif"| "if"| "line"| "else"| "ifdef"| "pragma"| "endif"| "ifndef"| "undef"| "if"| "else"| "endif"
PREDEF                "#"{PREWORD}
LINECOMMENT        "\/\/".*\n
%%
"/*"                {
                        char c;
                        int done=FALSE;
                        printf("<span class=\"comment\">\n");
                        ECHO;
                        do
                        {
                                while((c=input())!='*')
                                {
                                        if(c=='\n')
                                                printf("<br/>\n");
                                        else
                                                putchar(c);
                                }
                                putchar(c);
                                while((c=input())=='*')
                                        putchar(c);
                                if(c=='\n') printf("<br/>\n");
                                putchar(c);
                                if(c=='/') done=TRUE;
                        } while(!done);
                        printf("</span>\n");
                }
{LINECOMMENT}   {printf("<span class=\"comment\">%s</span><br/>\n",yytext);}
{QUOTATION}     {printf("<span class=\"quotation\">%s</span>",yytext);}
{PREDEF}        {printf("<span style=\"predef\">%s</span>",yytext);}
{KEYWORD}       {printf("<span class=\"keyword\">%s</span>",yytext);}
{NL}            {printf("<br/>\n");}
{WORD}          {ECHO;}
{NUMBER}        {ECHO;}
{WHITESPACE}    {ECHO;}
%%

int main()
{
        printf("<html>\n");
        printf("<head>\n");
        printf("<link href=\"mycpp.css\" rel=\"stylesheet\" type=\"text/css\">\n");
        printf("</head>");
        printf("<body>\n");
        yylex();
        printf("</body>");
        printf("</html>");
        return 0;
}
int yywrap()
{
        return 1;
}
 

test.cpp文件,用来测试的加亮效果的小程序:
/*
 *  just  test  my  code  lighting  tools
 *  by  tinyfool
 *  2005-04-15
 *
 *  */
#include  <stdio.h>
int  main()
{
    char  x[]="xxx";
    //printf(x);
    return  0;
}

时间仓促,写得远非完美(字符串中的转码还不支持),但是也让我有了非常大的成就感,我会继续改进这个东西的。代码中的谬误和不良也请读者不吝赐教。
源码.zip

OVER

[1] 页 RedHyphone.Union 投稿邮箱
[特别声明]:
本站文章大多搜索转载自网络中,如果侵犯了您的权利,请告之我们。本站将立即删除。
本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
查看评论】【向上滚屏】【关闭窗口】【 打印
-相关文章
  • 认知盲区 解惑双网卡双线路DNS解析
  • FlashFXP 简体中文版 3.7.5 Build 1303 Beta[烈火]
  • 确认:番茄花园作者洪磊被检察院批准逮捕
  • 1983年的今天 DNS诞生
  • Windows 2003 IIS 6.0搭建asp+.net+php+jsp+mysql+mssql
  • -文章评论 (关闭)
    ·还没有相关的评论!

    网上大名:
    红旋风网络技术联盟 RHUTech.Union
     
    Copyright © 2000-2007 RedHyphone.Union All Rights Reserved. 红旋风联盟版权所有.皖ICP备05011033号
    中国红旋风网络技术联盟 | www.RedHyphone.net
    Mailto:Redhyphone@gamil.com