为了使我们的应用程序变得更加方便维护和易修改及灵活性。不用在修改一个配置就要对整个系统或部分组件进行重新编译,我们可以为我们的系统设计或使用一种小型语言。可以简单到终端用户也可以自己改变程序的业务逻辑等,使应用更加靠近他们的领域工作。
在简单的情况下,小型语言可以采用面向行的、易于解析的格式。还可以使用更正式的语法、实现更为复杂的语言。一旦你确定你你的小型语言的语法,你需要为它编写解析器与生成器,生成器是可选项。C/C++程序员可以使用yacc, Java程序员可以选用javaCC。如果你的小型语言足够简单,你可以自己编写自己的解析生成器。
小型语言可分类为数据语言、命令语言、独立语言、嵌入式语言。
书的中练习5 (P48):
|
我们想实现一种小型语言,用于控制一种简单的绘图包。这种语言由单字母命令组成。有些命令后跟单个数字。例如,下面的输入将会绘制出一个矩形:
P2 # select pen2
D # pen down
W2 # draw west 2cm
N1 # then north 1
E2 # then east 2
S1 # then back south
U #pen up
请实现解析这种语言的代码。它应该被设计成能简单地增加命令。
|
解答5:
|
因为我们想要使该语言可扩展,我们将以表驱动的方式实现解析器。表中的每一项都含有命令字母、表明是否需要参数的标志、以及处理该命令的全程的名称。
主程序相当简单:读取一行输入,查找命令,如果需要就获取参数,然后调用处理器。
查找命令的函数对表进行纯属搜索,返回匹配项或NULL.
最后,使用
sscanf
读取参数值参数相当简单。
|
《程序员修炼之道--从小工到专家》之“实现小型语言”一节读后感