📄 pl.htm
字号:
</v:shape><![endif]--><![if !vml]><img width=357 height=422
src="./PL.files/image020.jpg" v:shapes="_x0000_i1027"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="PBrush" ShapeID="_x0000_i1027"
DrawAspect="Content" ObjectID="_1101490856">
</o:OLEObject>
</xml><![endif]--></span></p>
<h2><span lang=EN-US>3</span><span style='font-family:黑体;mso-ascii-font-family:
Arial'>、</span><span lang=EN-US>PL/0</span><span style='font-family:黑体;
mso-ascii-font-family:Arial'>编译程序的词法分</span></h2>
<p class=MsoNormal style='text-indent:21.0pt'><span lang=EN-US>PL/0</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>的词法分析程序</span><span lang=EN-US>GETSYM</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>是一个独立的过程,其基本功能是为语法分析提供单词,是语法分析的基础,他把输入的字符串形式的源程序分割成一个个单词符号。为此</span><span
lang=EN-US>PL/0</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>编译程序设置了三个全程量的公用单元:</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span lang=EN-US>SYM</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>:存放每个单词的类别,用内部编码形式表示。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span lang=EN-US>ID</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>:存放用户所定义的标识符的值。及标识符字符串的机内表示。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span lang=EN-US>NUM</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>:存放用户定义的数。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>单词的种类有五种:</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>基本字:也称为保留字,如</span><span
lang=EN-US>BEGIN</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>,</span><span lang=EN-US>END</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>,</span><span lang=EN-US>IF</span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>,</span><span
lang=EN-US>THEN</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>等</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>运算符:如</span><span
lang=EN-US>+</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>、</span><span lang=EN-US>-</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>、</span><span lang=EN-US>*</span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>、</span><span
lang=EN-US>/</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>、</span><span lang=EN-US>:=</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>、</span><span lang=EN-US>#</span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>、</span><span
lang=EN-US>>=</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>、</span><span lang=EN-US><=</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>等。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>标识符:用户定义的变量名、常数名、过程名。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>常</span><span
lang=EN-US><span style="mso-spacerun: yes"> </span></span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>数:如</span><span lang=EN-US>10</span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>,</span><span
lang=EN-US>25</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>,</span><span lang=EN-US>100</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>等整数。</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>界</span><span
lang=EN-US><span style="mso-spacerun: yes"> </span></span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>符:如,、</span><span lang=EN-US>.</span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>、;、(、)等</span></p>
<p class=MsoNormal style='text-indent:21.0pt'><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>如果把基本字、运算符、界符称为语言固有的单词,而对标识符、常数称为用户定义的单词。那么经词法分析程序分出的单词,对语言固有的单词只给出类别存放在</span><span
lang=EN-US>SYM</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>中,而对用户定义的单词既给出类别又给值,其类别放在</span><span
lang=EN-US>SYM</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>中,值放在</span><span lang=EN-US>ID</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>或</span><span lang=EN-US>NUM</span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>中,全部单词种类由编译程序定义的纯量类型</span><span
lang=EN-US>SYMBOL</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>给出。</span></p>
<p class=MsoNormal align=center style='text-align:center;text-indent:21.0pt'><span
lang=EN-US><!--[if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75"
style='width:273pt;height:379.5pt' o:ole="">
<v:imagedata src="./PL.files/image021.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=364 height=506
src="./PL.files/image022.jpg" v:shapes="_x0000_i1028"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="PBrush" ShapeID="_x0000_i1028"
DrawAspect="Content" ObjectID="_1101490857">
</o:OLEObject>
</xml><![endif]--></span></p>
<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>词法分析程序</span><span lang=EN-US>GETSYM</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>将完成下列任务:</span></p>
<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>(</span><span lang=EN-US>1</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)空格;</span></p>
<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>(</span><span lang=EN-US>2</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)识别保留字;</span></p>
<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>(</span><span lang=EN-US>3</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)识别标识符;</span></p>
<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>(</span><span lang=EN-US>4</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)拼数;</span></p>
<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>(</span><span lang=EN-US>5</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)拼复合词,如:</span><span lang=EN-US>>=</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>、</span><span lang=EN-US>:=</span><span style='font-family:
宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>、</span><span
lang=EN-US><=</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>等单词;</span></p>
<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>(</span><span lang=EN-US>6</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>)输出源程序</span></p>
<p class=MsoNormal><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>在</span><span lang=EN-US>GETSYM</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>中要调用</span><span lang=EN-US>GETCH</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>,其功能是取字符。其过程框图如下:</span></p>
<p class=MsoNormal align=center style='text-align:center'><span lang=EN-US><!--[if gte vml 1]><v:shape
id="_x0000_i1029" type="#_x0000_t75" style='width:268.5pt;height:267.75pt'
o:ole="">
<v:imagedata src="./PL.files/image023.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=358 height=357
src="./PL.files/image024.jpg" v:shapes="_x0000_i1029"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="PBrush" ShapeID="_x0000_i1029"
DrawAspect="Content" ObjectID="_1101490858">
</o:OLEObject>
</xml><![endif]--></span></p>
<p class=MsoNormal><b><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>说明:</span></b></p>
<p class=MsoNormal><span lang=EN-US>CH</span><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>:存放当前读取的字符,初值为空;</span></p>
<p class=MsoNormal><span lang=EN-US>LINE</span><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>:一维数组,其数组元素是字符,界对为</span><span
lang=EN-US>1</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>:</span><span lang=EN-US>80</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>。用于读入一行字符的缓冲区;</span></p>
<p class=MsoNormal><span lang=EN-US>LL</span><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>和</span><span
lang=EN-US>CC</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>:计数器,初值为</span><span lang=EN-US>0</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;</span></p>
<p class=MsoNormal><span lang=EN-US>A</span><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>:一维数组,其数组元素是字符,界对</span><span
lang=EN-US>1</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>:</span><span lang=EN-US>10</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>;</span></p>
<p class=MsoNormal><span lang=EN-US>ID</span><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>:同</span><span
lang=EN-US>A</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>;</span></p>
<p class=MsoNormal><span lang=EN-US>WORD</span><span style='font-family:宋体;
mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"'>:保留字表,一维数组,数组元素为以字符为元素的一维数组(即字符串),界对为</span><span
lang=EN-US>1</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>:</span><span lang=EN-US>13</span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>,查找方式为二分法。</span></p>
<h2><span lang=EN-US>4</span><span style='font-family:黑体;mso-ascii-font-family:
Arial'>、</span><span lang=EN-US> PL/0</span><span style='font-family:黑体;
mso-ascii-font-family:Arial'>编译程序的语法分析</span></h2>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_s1026" type="#_x0000_t75"
style='position:absolute;left:0;text-align:left;margin-left:0;margin-top:5.2pt;
width:98.25pt;height:223.5pt;z-index:1;mso-position-horizontal:left'>
<v:imagedata src="./PL.files/image025.png" o:title=""/>
<w:wrap type="square"/>
</v:shape><![if gte mso 9]><o:OLEObject Type="Embed" ProgID="PBrush"
ShapeID="_x0000_s1026" DrawAspect="Content" ObjectID="_1101490859">
</o:OLEObject>
<![endif]><![endif]--><![if !vml]><img width=131 height=298
src="./PL.files/image026.jpg" align=left hspace=12 v:shapes="_x0000_s1026"><![endif]><span
lang=EN-US><span style='mso-tab-count:1'> </span></span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>语法分析的任务是识别由词法分析给出的单词符号序列在结构上是否符合给定的文法规则。</span><span
lang=EN-US>PL/0</span><span style='font-family:宋体;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>编译程序的语法分析采用自顶向下的递归子程序法:对应每个非终结符语法单元,编一个独立的处理过程(或子程序)。</span></p>
<p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'> </span></span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>语法分析从读入第一个单词开始由非终结符‘程序’即开始符出发,沿语法描述图箭头方向进行分析。</span></p>
<p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'> </span></span><span
style='font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:
"Times New Roman"'>当遇到非终结符时,调用相应的处理过程。从语法描述图看也就进入了一个语法单元,再沿单迁所进入的语法描述图的箭头方向进行分析。</span></p>
<p class=MsoNormal><span lang=EN-US><span style='mso-tab-count:1'> </span></span><span
s
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -