zoukankan      html  css  js  c++  java
  • Unix编程艺术——代码生成

     

    Unix下有很强大的专用代码生成器,如用yacc/lex来构建语法分析器和词法分析器、用autoconf或automake生成makefile等。这些工具具有很强大的功能,但还有一些简单轻巧的代码生成方式,下面是《Unix编程艺术》中的两个例子。

    生成ASCII显示的代码

     

    如果在程序中直接通过初始化器来写出所有行,会出现对齐、每行很难保证79字符的问题。Ascii源码的解决方法是通过脚本生成这部分代码。

    void

    showHelp(FILE *out, char *progname)

    {

    fprintf(out,"Usage: %s [-dxohv] [-t] [char-alias...]\n", progname);

    #define P(s) fputs(s "\n", out);

    #include "splashscreen.h"

    #undef P

     

    exit(0);

    }

     

    splashscreen.h由Makefile生成:

    splashscreen.h: splashscreen

    sed <splashscreen >splashscreen.h -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/.*/P("&");/'

    从数据产生代码,使得可编辑的用法屏幕和它的显示一致。

     

    为列表生成HTML代码

     

    我们可以在代码中直接编写生成HTML表格的代码,但这样每当新添加数据的时候都需要修改生成<tc>和<td>的代码。更好的解决方案是把数据放在类似下面的文本文件中:

    Aalat    :David Weber        :The Armageddon

    Aelmos    :Alan Dean Foster    :The man

    Agandar    :Donald Kingsbury    :Psychohistorical Crisis

    而使用脚本来生成HTML表格:

    # cat data | awk -F: '{printf("<tr><td>%s</td><td>%s</td></tr>\n",$1,$2,$3)}'

    <tr><td>Aalat    </td><td>David Weber        </td></tr>

    <tr><td>Aelmos    </td><td>Alan Dean Foster    </td></tr>

    <tr><td>Agandar    </td><td>Donald Kingsbury    </td></tr>

     

    代码生成的好处:

    尽可能少干活;

    让数据塑造代码;

    依靠工具;

    机制同测试分离。

  • 相关阅读:
    压缩打包linux 文件压缩解压命令Strut2教程java教程
    【leetcode】Valid Parentheses
    指向数据个人对指针的理解,欢迎大家批评Strut2教程java教程
    UML中的用例图
    Extjs4中组件的查找方式
    Extjs中选择组件、选择元素的方法
    [转载]C 内存管理详解
    C开发机顶盒实战代码之队列
    C机顶盒开发实战常用初始化类型:数组、结构、指针
    [转载]C语言链表的建立、插入和删除
  • 原文地址:https://www.cnblogs.com/feisky/p/2339031.html
Copyright © 2011-2022 走看看