找回密码
 注册
关于网站域名变更的通知
查看: 342|回复: 1
打印 上一主题 下一主题

Unix编程的代码生成

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-1-15 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

( {! o& r7 r8 A. yUnix下有很强大的专用代码生成器,如用yacc/lex来构建语法分析器和词法分析器、用autoconf或automake生成makefile等。这些工具具有很强大的功能,但还有一些简单轻巧的代码生成方式,下面是《Unix编程艺术》中的两个例子。" g$ R$ C* E& s  v. {2 l! U; l; o

* _: c# ]0 T, X/ ]$ Z8 Q* |5 l1 B4 R" @$ N( f. ?. J1 g
生成ASCII显示的代码! ^, j" p6 S" {3 Y' p5 m3 ?8 v

4 L' m1 r* T8 q! i9 y8 f
: W5 g8 d  ?7 f4 X! O. Y. }1 y如果在程序中直接通过初始化器来写出所有行,会出现对齐、每行很难保证79字符的问题。Ascii源码的解决方法是通过脚本生成这部分代码。
& h- j3 ?, z. ?: e% f. D
1 O1 b5 P' r3 \% ^& Fvoid' g0 r8 `/ Q' N) }( L# L: {: J  T
: k& D* Y8 A5 ~' N
showHelp(FILE *out, char *progname)2 P0 a7 [. ]! ~) T0 k  Y
: i' x/ o: B1 ?, ]2 b2 }2 [
{2 }3 d$ v: s( r( _, `4 @# d' d$ Y

9 c5 B, [+ e8 A0 b- I& E0 `% Hfprintf(out,"Usage: %s [-dxohv] [-t] [char-alias...]\n", progname);: j; ?) L, M8 T2 j
4 Z* R2 m* f, X
#define P(s) fputs(s "\n", out);3 s3 ~/ C% T% @' A
9 V& M, d( X+ |/ s, ~2 D, {- T
#include "splashscreen.h"
) }$ Q# ~) G  G" s/ W9 o( k9 {6 |! Q( o! |2 u, @
#undef P8 t' }8 L$ a# U/ o
, M- Q6 E4 o, G% f% \

4 O: C5 O9 ]1 V- @7 Y6 R% z" }& P& t# r" e6 T, `+ S: Z
exit(0);
) X, @2 `! S" J
$ a' c% t0 m1 V; p# i3 X  i}7 I" ~" g' [+ i2 r

" t2 ?- o: y+ B) U + x' B8 {5 q3 t+ n; |) `( b3 A
+ B+ [! f7 n3 U6 w2 `  J
splashscreen.h由Makefile生成:( y9 Y) h( R, g! u! I7 |
$ n. k1 f3 d; E
splashscreen.h: splashscreen
% E4 H: S7 }! E8 h7 g  I( j3 W: i8 A/ m5 R
sed <splashscreen >splashscreen.h -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/.*/P("&");/'
+ D+ X9 `  Y6 O" |; f
2 z( A1 z  Q# h4 h9 o3 Z从数据产生代码,使得可编辑的用法屏幕和它的显示一致。! |# H2 R$ Q/ m% i2 m
% B( k7 t" ?: [& O/ D

9 u1 b/ {& K9 C: k; H. J2 G8 Z
9 [1 G* p0 Y8 J6 h$ r2 M为列表生成HTML代码
2 P. t) \4 l+ i# e
: W; X% Q2 e% W% L
' A5 j4 r) z/ N7 N4 ~# b我们可以在代码中直接编写生成HTML表格的代码,但这样每当新添加数据的时候都需要修改生成<tc>和<td>的代码。更好的解决方案是把数据放在类似下面的文本文件中:
% l) q0 D" w  i7 _3 ^% I9 d
6 G4 \/ x4 J1 c8 t: j6 [/ I' zAalat    :David Weber        :The ARMageddon
; P0 E9 W/ I* ?% @6 L7 v4 ], Z5 F- N# V! y# Z
Aelmos    :Alan Dean Foster    :The man
+ s1 I8 ~# a, J" E# P4 c+ P8 H
7 b3 P- }( }5 d& P* P' [1 @Agandar    :Donald Kingsbury    :Psychohistorical Crisis& _8 z" Z, q( }9 G% ]6 H" q
$ @& t6 d1 C+ ?& P- \. _, u
而使用脚本来生成HTML表格:8 g( r/ m# a+ x1 J2 I* ?# s. F
/ j) ^4 r8 l  ~$ i9 c7 x
# cat data | awk -F: '{printf("<tr><td>%s</td><td>%s</td></tr>\n",$1,$2,$3)}'8 [4 }0 Z9 ~5 A% ?! E; t  N$ n" `* O& C
4 h) D; F4 w0 S+ \) X: y0 c% W
<tr><td>Aalat    </td><td>David Weber        </td></tr>$ B$ I, M" p2 p! o
; R3 W* f! i: v; C. f
<tr><td>Aelmos    </td><td>Alan Dean Foster    </td></tr>* r# J# {) r0 d, L7 c

* Z" m5 _, ]: K* N<tr><td>Agandar    </td><td>Donald Kingsbury    </td></tr>
: J+ ^" `8 k; e5 g) [7 p# E* p8 q4 A# {# X2 C3 P0 a) K
9 r6 k& R* J1 d& S1 [& I2 P

: I$ W* Y$ M) x1 O( x: X& m代码生成的好处:, O/ X+ ]1 V$ ~3 r! D. t
3 Z5 q4 |; H1 h% R- k
尽可能少干活;4 E' G3 }5 ^; f$ C

/ J+ @* g) z6 @# @让数据塑造代码;6 w8 B- w. s# `6 {" K0 d4 H
0 ^7 c* T( s# M7 p, M  h3 u7 _$ z4 Z
依靠工具;
  p4 a+ q% z$ l7 \
- w7 Z1 `+ e7 Q/ D7 [* h机制同测试分离。
7 I1 _8 Z3 Y1 c& j) ^6 k
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 22:18 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表