前言:关于词法分析的基础知识的介绍可以看一下这篇博客,我再累述估计也不会有这篇讲的清楚QAQ。 https://www.cnblogs.com/yanlingyin/archive/2012/04/17/2451717.html    默认大家已经对词法分析有了基本的了解了。

一:下面讨论PL/0语言的词法分析器的单词结构

1、关键字     

  关键字(11):空格分隔列表如下

  begin  end  if  then  while  do  const  var  call  procedure  odd

2、运算符和界符  

  算符和界符(14个):空格分隔列表如下

  +  -  *  /  =  #  <  >  :=  (  )  ,  .  ;

 

3、标示符

        PL/0语言中标示符的定义为:开头可以是下划线或字母,后面可以是下划线、字母或数字。

4、常数

  整形数和浮点数

5、空白符

  PL/0语言中的空白符有:空格符、制表符、换行符,这些空白符在词法分析阶段可以被忽略。

6、注释

         PL/0语言中的注释形式为//,可以多行注释(*…*)。

二:PL/0的语言的词法分析器将要完成以下工作

 

(1) 跳过分隔符(如空格,回车,制表符);

 

(2) 识别诸如beginendifwhile等关键字;

 

(3) 识别非关键字的一般标识符。

 

(4) 识别常数数字序列。

 

(5) 识别前面列出的单字符操作符和:=双字符特殊符号。

 

(6)词法分析器的输出形式(种别,属性值)其中:种别在2、单词的种别”中进行了定义;

 

              属性值:若单词种别只代表唯一单词,属性值为空;

 

              若单词种别是标识符,为该单词在标识符表中的位置;

 

              若单词种别是常数,属性值为对应常数值。

三:代码实现

测试程序如下(我放置的路径为D:/b.txt,根据自己情况自行修改)

 1 // PL/0 语法示例程序 
 2 
 3 (*
 4     计算1~10的阶乘
 5     多行注释    
 6 *)
 7 
 8 var n, f;
 9 begin
10      n := 0;
11      f := 1;
12      while n # 10 do
13      begin
14           n := n + 1;
15           f := f * n;
16      end;
17      call print;// 用于输出结果,假设预先声明
18 end.
View Code

相关文章: