gcc编译通过 写了个比较简单的 调用指令 fmt 输入文件 输出文件 附带了程序的一些文档
[此贴子已经被作者于2005-7-30 17:21:59编辑过]
[此贴子已经被作者于2005-7-30 17:21:59编辑过]
贴个算法简介吧:
算法思路: 我们定义一个名词——“一次性缩进”,比如while()后面跟一个句子,那只有这个句子是缩进的,所以有“一次性”的说法。 我们这样来定义一个句子:一般意义上的句子或者{....}这种形式,显然所有的缩进都可以用一次性缩进来克服——扫描到while等关键字,一次性缩进值加一,扫描到一般语句后,一次性缩进值清零。(每行的输出缩进值在扫描该行之前已经读入到输出端) 当然我们要给出计算机能处理的形式,定义一个栈(mid中),它的每个元素包括了一个一次性缩进值和这一层次的静态缩进值(总缩进=静态缩进+一次性缩进),扫描到“{”的时候栈层次加一,并且这个新层次的静态缩进值就是上一个层次的总缩进值,扫描到"}"退栈。这样可以解决{....}句子的“一次性缩进”问题 基本思路就是上面,其他的一些细节考虑还包括(else和if配对(一次性缩进的一个漏洞)),"{"和"}"的缩进问题(与上一个句子对齐)。
我们来看一下一次性缩进算法的两个例子: 对于while() if() ...; ...; 读入while,一次性缩进值加1, 下一行缩进值传输给输出端, 输出本行(缩进为0) 扫描第2行,if(),一次性缩进值加1, 下一行缩进值传输给输出端, 输出第二行(缩进为1) 描第3行,一般句子,一次性缩进值清零 下一行缩进值传输给输出端, 输出第3行(缩进为2); 扫描第4行,一般句子,一次性缩进值清零 输出第4行(缩进为0) 对于if()...; ...; 扫描第一行,if,一次性缩进值加1, 第一行继续扫描,读到一般句子,一次性缩进值清零 下一行缩进值传输给输出端, 扫描第二行 输出(缩进为0)
[此贴子已经被作者于2005-7-31 12:07:39编辑过]