📄 explain.htm.bak
字号:
href="source.htm#_compound" target="ff2">_compound</a>
输出:临时堆栈长度templength。
说明:本过程分析复合语句的语法语义,按照_compound的语法制导工作。
<a
href="source.htm#_sentence" target="ff2">_sentence</a>
输出:临时堆栈长度templength,语法分析是否成功的标志。
说明:本函数分析语句的语法语义,按照_sentence的语法制导工作。
<a
href="source.htm#_while" target="ff2">_while</a>
输出:临时堆栈长度templength,语法分析是否成功的标志。
说明:本函数分析while语句的语法语义,按照_while的语法制导工作。
<a
href="source.htm#_if" target="ff2">_if</a>
输出:临时堆栈长度templength,语法分析是否成功的标志。
说明:本函数分析if语句的语法语义,按照_if的语法制导工作。
<a
href="source.htm#_assign" target="ff2">_assign</a>
输出:临时堆栈长度templength,语法分析是否成功的标志。
说明:本函数分析赋值语句的语法语义,按照_assign的语法制导工作。
<a
href="source.htm#_callproc" target="ff2">_callproc</a>
输入:过程名标识符的散列表指针。
输出:临时堆栈长度templength,语法分析是否成功的标志。
说明:本函数分析过程调用语句的语法语义,按照_callproc的语法制导工作。
<a
href="source.htm#_setparam" target="ff2">_setparam</a>
输入:过程名标识符的散列表指针。
输出:临时堆栈长度templength,语法分析是否成功的标志。
说明:本函数分析过程调用中参数传递的语法语义,按照_param的语法语义工作。
<a
href="source.htm#_callread" target="ff2">_callread</a>
输出:临时堆栈长度templength,语法分析是否成功的标志。
说明:本函数分析标准过程read调用的语法语义,按照_read的语法制导工作。
<a
href="source.htm#_callwrite" target="ff2">_callwrite</a>
输出:临时堆栈长度templength,语法分析是否成功的标志。
说明:本函数分析标准过程write调用的语法语义,按照_read的语法制导工作。
<a
href="source.htm#_expr" target="ff2">_expr</a>
输出:表达式的类型,临时堆栈长度,及语法分析是否成功的标志。
说明:本函数分析表达式的语法语义,按照_expr的语法制导工作。
<a
href="source.htm#_simple_expr" target="ff2">_simple_expr</a>
输出:简单表达式的类型,临时堆栈长度,及语法分析是否成功的标志。
说明:本函数分析简单表达式的语法语义,按照_simple_expr的语法制导工作。
<a
href="source.htm#_term" target="ff2">_term</a>
输出:项的类型,临时堆栈长度,及语法分析是否成功的标志。
说明:本函数分析项的语法语义,按照_term的语法制导工作。
<a
href="source.htm#_factor" target="ff2">_factor</a>
输出:因子的类型,临时堆栈长度,及语法分析是否成功的标志。
说明:本函数分析因子的语法语义,按照_term的语法制导工作。
<a
href="source.htm#_varvisit" target="ff2">_varvisit</a>
输出:变量访问的类型,临时堆栈长度,及语法分析是否成功的标志。
说明:本函数分析变量访问的语法语义,按照_term的语法制导工作。
<a
href="source.htm#_select" target="ff2">_select</a>
输入:带有选择器的变量的类型。
输出:临时堆栈长度,及语法分析是否成功的标志。
说明:本函数分析选择器的语法语义,按照_select的语法制导工作。
<a
href="source.htm#_proc_df" target="ff2">_proc_df</a>
输出:过程偏移。
说明:本过程完成过程定义的语法语义分析,按照_proc_df的语法制导工作。
<a
href="source.htm#_param" target="ff2">_param</a>
输入:过程名标识符的散列表指针。
输出:语法分析是否成功的标志。
说明:本函数完成过程定义中参数定义部分的语法语义分析,按照_param的语法制导工作。
<a
href="source.htm#_type_session" target="ff2">_var_session</a>
输出:变量长度。
说明:本过程完成变量定义的语法语义分析,按照_var_session的语法制导工作。
<a
href="source.htm#_var_list" target="ff2">_var_list</a>
说明:本过程将变量列表保存在名字链中,按照_var_list的语法制导工作。
<a
href="source.htm#_type_session" target="ff2">_type_session</a>
说明:本过程完成类型定义的语法语义分析,按照_type_session的语法制导工作。
<a
href="source.htm#_type_df" target="ff2">_type_df</a>
输入:类型名的散列表指针。
输出:语法分析是否成功的标志。
说明:本函数完成数组类型和记录类型说明的语法语义分析,按照_type_df的语法制导工作。
<a
href="source.htm#_recordlist" target="ff2">_recordlist</a>
输入:记录类型过程名的散列表指针。
说明:本过程完成记录类型说明的语法语义分析,按照_recordlist的制导工作。
<a
href="source.htm#_const_session" target="ff2">_const_session</a>
说明:本过程完成常数定义的语法语义分析,按照_const_session的语法制导工作。
<a
href="source.htm#_const" target="ff2">_const</a>
输出:常数值与常数类型,及语法分析是否成功。
说明:本函数完成常数的语法语义分析,按照_const的语法制导工作。</font></pre>
<h2><a name="6">(六)</a><a href="source.htm#final clean" target="ff2">收尾处理模块</a></h2>
<p>本模块在编译工作完成后调用,回收申请的内存资源,关闭文件。可以很容易的理解原代码。</p>
<h2><a name="7">(七)</a><a href="source.htm#op errors" target="ff2">错误处理模块</a></h2>
<p>错误处理工作是编译过程中较难实现的。如果只报单个错误就终止编译过程,这是比较容易的,但确难以满足用户的需求。在这个程序中,一次运行强制要求最多发现五个错误,这一是因为输出屏幕的限制,一次无法输出太多的错误,二是越向后发现的错误,逻辑出错的可能性就越大。并且没一行只发现一个错误,这样比较容易实现。</p>
<p>报多个错误关键有如下两个步骤:1.根据语法公式发现错误,记录错误的性质;2.向后跳若干个单词,直至语法分析可以继续进行为止。</p>
<h4>数据结构</h4>
<p><a href="source.htm#linebuffer" target="ff2">linebuffer</a>:字符串型变量,记录编译当前行的内容。</p>
<p><a href="source.htm#column" target="ff2">column</a>:整型变量,记录读入的字符所在的列。</p>
<p><a href="source.htm#errorstring" target="ff2">errorstring</a>:字符串数组类型变量,对应不同的错误性质,记录了40个错误信息。</p>
<p><a href="source.htm#errorhappen" target="ff2">errorhappen</a>:布尔型变量,标志编译过程中是否有错误发生。如果发生,则不在写文件。</p>
<p><a href="source.htm#errorinline" target="ff2">errorinline</a>:布尔型变量,标志当前行的编译过程中是否有错误发生。如果发生,在行尾打印错误信息。</p>
<p><a href="source.htm#errorcol" target="ff2">errorcol</a>:整型变量,记录当前行产生错误的所在列。</p>
<p><a href="source.htm#errornum" target="ff2">errornum</a>:整型变量,记录当前行错误的性质。</p>
<p><a href="source.htm#errorcount" target="ff2">errorcount</a>:整型变量,记录已经产生错误的数量。</p>
<p><a href="source.htm#retract_w" target="ff2">retract_w</a>:布尔型变量,标记下一个读入的单词是上一个多读入的旧单词,还是需要新读入一个单词。</p>
<h4>主要过程及其说明</h4>
<p>发现错误的工作嵌套在语法语义分析的过程中完成。而记录错误性质,输出错误信息和跳过错误部分的过程都是这个模块的内容。</p>
<p><a href="source.htm#error" target="ff2">error</a> <br>
输入:错误性质编号num。 <br>
说明:记录当前行编译出错,修正错误数量。如果错误数量过多,停止编译。
<br>
<br>
<a href="source.htm#fatalerror" target="ff2">fatalerror </a><br>
说明:有些错误发生后,编译工作无法继续进行,则调用这个过程,停止编译。
<br>
<br>
<a href="source.htm#printline" target="ff2">printline</a> <br>
说明:当产生错误的当前行分析到行尾时,调用这个过程输出错误信息。
<br>
<br>
<a href="source.htm#skipline" target="ff2">skipline</a> <br>
说明:产生错误,如果需要跳到错误行的行尾。</p>
<p><a href="source.htm#skip_in_record" target="ff2">skip_in_record</a> <br>
说明:分析记录类型定义是产生错误,调用这个过程调整到可以继续编译工作。
<br>
<br>
<a href="source.htm#skip_in_const" target="ff2">skip_in_const</a> <br>
说明:分析常数定义时产生错误,调用这个过程调整到可以继续编译工作。
<br>
<br>
<a href="source.htm#skip_in_type" target="ff2">skip_in_type</a> <br>
说明:分析过程定义时产生错误,调用这个过程调整到可以继续编译工作。
<br>
<br>
<a href="source.htm#skip_in_var" target="ff2">skip_in_var</a> <br>
说明:分析变量定义时产生错误,调用这个过程调整到可以继续编译工作。
<br>
<br>
<a href="source.htm#skip_in_param" target="ff2">skip_in_param</a> <br>
说明:分析参数定义时产生错误,调用这个过程调整到可以继续编译工作。
<br>
<br>
<a href="source.htm#skip_sentence" target="ff2">skip_sentence</a> <br>
说明:分析语句时产生错误,调用这个过程调整到可以继续编译工作。
</p>
<h4>关于retract_w</h4>
<p>看程序时可能常常看到retract_w这个变量。我们这里详细说明它的用途。</p>
<p>有时为了确定语法分析的下一步如何进行,只看当前单词是不能确定的,还需要知道下一个单词的性质,这是相当于多读入了一个单词。而这个单词是在接下来的语法分析中需要用到的。类似于词法分析时的回退一个字符,我们这里需要回退一个单词。</p>
<p>设置retract_w后,词法分析不继续读入下一个单词,wval和wtype中还都是旧值,相当于回退了一个单词。</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -