|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
8 a( _- q' j: j& @& P
微型语言:小型、专门应用领域特制、大量减少程序行数的语言。
) x2 R }. z' x, G$ X- c% l 1. 使用微型语言把编程问题的规格说明提升一个层次,更具表达力,更紧凑;
! e8 W. J6 M4 }. O) l h. u( X. J 2. 规格说明文件越来越像微型语言。, a! h, @- @- z" K
3 [. L3 q# q" `/ t# d
理解语言分类法: R- ]- ?5 e J+ F% Y: \! r
6 Z. P% t" Z* E$ f6 g0 }
6 f5 x, K' T5 J# j8 y3 R. W
" B! y3 T. h& S( `
案例分析
( Q8 @. U5 Q. c8 Y) X5 S# o3 G" u/ s! i/ q" y
sng: 透明,结构化的数据文件使得相应的编辑、转换和生成工具无需要知道其他方的设计假定。* Z5 { o# O) V+ c- S5 W" R
regexp:Glob表达式,基本正则表达式,扩展正则表达式,Perl正则表达式。正则表达式是微型语言能够多么简练的极端例子。8 A. G) t" {+ ]2 g: H: [
Glade:X,GTK(和Qt是两个流行开源X工具包),说明GUI窗体及属性、代码生成。$ H' R) }/ T7 z9 A
m4:扩展字符串,键值对。! ?& I9 b+ w" y9 A# h1 R
XSLT:复杂,但是仍然是微语言:有限的分类,不包含数组和数据结构;有限的接口。( `( }5 i; a+ O' [$ n* x1 x. R* W
troff:排版格式器。
! s8 j' q, `2 O/ p' X& X: rfetchmail:语法糖导致分号癌,谨慎使用,防止晦涩多余帮助。' H( J! E0 R3 i# g
awk:内嵌在脚本中使用。
. X0 U1 }+ F) k0 K8 k) Y9 vPostScript:排版,堆栈式语言支持紧凑、经济的编码,但也非常难读。
- ^! T: w( H5 m# vbc和dc:无限精度算数。7 f, |4 Z, T4 w7 a) L* p: M
Emacs Lisp:emacs是围绕lisp的语言构建而成的,原语既可以说明编辑缓存的动作,也可以控制从进程。
" E& k4 @: r3 w- r$ \' F* wjavascript:无需真正进入但可尽量接近的通用语言;客户端javascript及其通过单个DOM对象的浏览器环境结合是个不错的设计。
/ I0 T1 i# y$ [ e! I" Y/ P" a
' O$ T3 E' W6 ^! Z' j, g$ j" {9 f* g( N: }' _
设计微型语言% Q5 H" I- T3 w5 K2 L
0 n0 S+ z4 p. q W; R
1. 简单。如果出于不便或者安全的考虑,可以使用数据结构代替微语言。或者利用沙盒化来简化设计,提高安全性。
3 K4 P# l5 w5 _2. 自顶向下。
7 `" X3 w1 B5 s3. 扩展和嵌入语言来实现微语言。
' p3 A/ X, }$ E) u* ^/ z4. 编写自定义语法,yacc和lex是重要工具。
* l! ~* {) A8 O: V: Z5. 慎用宏,防止滋生bug;比如运算的优先级。
" O0 i9 r- P- u7 s& T% p6. 语言还是应用协议,微型语言引擎是否可以被其他程序作为从进程交互调用。
6 N3 |6 P- j8 F7 O* s+ r
% V% E& W" Y4 b# C
1 f: h3 U: N( X' C7 {" ]7 ^$ Y0 J- j0 s) f7 H1 G2 u7 w2 I7 T
|
|