⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defination.~pas

📁 delphi编的pl0编译器
💻 ~PAS
字号:
unit Defination;

interface

uses
  SysUtils;


const
  AL=10;
  WORDLISTLENTH=31;
  LONG=100000;

type
  symbol=(none,ident,nul,number,plus,minus,times,slash,
          oddsym,eql,neq,lss,leq,gtr,geq,lparen,rparen,
          comma,semicolon,period,becomes,beginsym,endsym,
          ifsym,thensym,whilesym,writesym,readsym,dosym,
          callsym,constsym,varsym,procsym,prograsym);
  alfa=array[1..AL]of char;
  symset=set of symbol;

var
  ch:char;
  id:alfa;
  akk:alfa;
  num:integer;
  kk:integer;

  ssym_string:array[0..WORDLISTLENTH+2]of string;//symbol;
  ssym:array[0..WORDLISTLENTH+2]of symbol;
  fin,fout:text;
  err:integer;

  wordlist:array[0..LONG] of record
                          name:alfa;
                          symb_string:string;
                          symb:symbol;
                          index:integer;
                          no:integer;
                          value:integer;
                          info:integer;
                          end;

  keyword:array[0..WORDLISTLENTH] of alfa;

  errlist:array[0..WORDLISTLENTH+10] of string;

  declbegsys,statbegsys,facbegsys:symset;

  word_index:integer;
  line_index:integer;
  ch_endflag:char;

  wordlist_index:integer;   //词法分析链最后 , 全程

////////////////////////////////////////////////////////////////////////////////
  procedure Initialize;


implementation

procedure Initialize;

begin

  keyword[1]:='begin     ';
	keyword[2]:='end       ';
	keyword[3]:='if        ';
	keyword[4]:='then      ';
	keyword[5]:='var       ';
	keyword[6]:='const     ';
	keyword[7]:='procedure ';
	keyword[8]:='call      ';
	keyword[9]:='write     ';
	keyword[10]:='read      ';
	keyword[11]:='while     ';
	keyword[12]:='do        ';
	keyword[13]:='+         ';
	keyword[14]:='-         ';
	keyword[15]:='*         ';
	keyword[16]:='/         ';
	keyword[17]:=':=        ';
	keyword[18]:='<         ';
	keyword[19]:='<=        ';
	keyword[20]:='=         ';
	keyword[21]:='>         ';
	keyword[22]:='>=        ';
	keyword[23]:='.         ';
	keyword[24]:='(         ';
	keyword[25]:=')         ';
	keyword[26]:=';         ';
	keyword[27]:=',         ';
	keyword[28]:='#         ';
	keyword[29]:='odd       ';
  keyword[30]:='program   ';
  keyword[31]:=':         ';

  ssym[1]:=beginsym;
  ssym[2]:=endsym;
  ssym[3]:=ifsym;
  ssym[4]:=thensym;
  ssym[5]:=varsym;
  ssym[6]:=constsym;
  ssym[7]:=procsym;
  ssym[8]:=callsym;
  ssym[9]:=writesym;
  ssym[10]:=readsym;
  ssym[11]:=whilesym;
  ssym[12]:=dosym;
  ssym[13]:=plus;
  ssym[14]:=minus;
  ssym[15]:=times;
  ssym[16]:=slash;
  ssym[17]:=becomes;
  ssym[18]:=lss;
  ssym[19]:=leq;
  ssym[20]:=eql;
  ssym[21]:=gtr;
  ssym[22]:=geq;
  ssym[23]:=period;
  ssym[24]:=lparen;
  ssym[25]:=rparen;
  ssym[26]:=semicolon;
  ssym[27]:=comma;
  ssym[28]:=neq;
  ssym[29]:=oddsym;
  ssym[30]:=prograsym;
  ssym[31]:=nul;

  ssym_string[1]:='beginsym';
  ssym_string[2]:='endsym';
  ssym_string[3]:='ifsym';
  ssym_string[4]:='thensym';
  ssym_string[5]:='varsym';
  ssym_string[6]:='constsym';
  ssym_string[7]:='procsym';
  ssym_string[8]:='callsym';
  ssym_string[9]:='writesym';
  ssym_string[10]:='readsym';
  ssym_string[11]:='whilesym';
  ssym_string[12]:='dosym';
  ssym_string[13]:='plus';
  ssym_string[14]:='minus';
  ssym_string[15]:='times';
  ssym_string[16]:='slash';
  ssym_string[17]:='becomes';
  ssym_string[18]:='lss';
  ssym_string[19]:='leq';
  ssym_string[20]:='eql';
  ssym_string[21]:='gtr';
  ssym_string[22]:='geq';
  ssym_string[23]:='period';
  ssym_string[24]:='lparen';
  ssym_string[25]:='rparen';
  ssym_string[26]:='semicolon';
  ssym_string[27]:='comma';
  ssym_string[28]:='neq';
  ssym_string[29]:='oddsym';
  ssym_string[30]:='prograsym';
  ssym_string[31]:='nul';

	errlist[1]:='常数说明中的'' = ''写成'' := ''。';
	errlist[2]:='常数说明中的'' = ''后应该是数字。';
	errlist[3]:='常数说明中的标识符后应该是'' = ''。';
	errlist[4]:='const,var,procedure后应该为标识符。';
	errlist[5]:='漏掉了'' , ''或'' ;''。';
	errlist[6]:='过程说明后的符号不正确(应该是语句开始符,或过程定义符)。';
	errlist[7]:=''' ; ''后应该是过程说明。';
	errlist[8]:='程序体内语句部分的后跟符不正确。';
	errlist[9]:='程序结尾丢了''.''。';
	errlist[10]:='语句之间漏了'';''。';
	errlist[11]:='标识符未说明。';
	errlist[12]:='赋值语句中,赋值号左部标识符属性应该是变量。';
	errlist[13]:='赋值语句左部标识符号应该是赋值号'':=''。';
	errlist[14]:='call后应该为标识符。';
	errlist[15]:='call后标识符应该为过程名。';
	errlist[16]:='条件语句中丢了''then''。';
	errlist[17]:='前面丢了''end''或'';''。';
	errlist[18]:='while型循环语句中丢了''do''。';
	errlist[19]:='语句后的符号不正确。';
	errlist[20]:='应该为关系运算符。';
	errlist[21]:='表达式内标识符属性不能是过程。';
	errlist[22]:='表达式中漏掉'')''。';
	errlist[23]:='因子后的非法符合。';
	errlist[24]:='表达式的开始符不能是此符号。';
	errlist[25]:='标识符定义重复';
	errlist[26]:='过程说明中,标识符号漏掉了'';''。';
	errlist[27]:=''' , ''后应该是标识符。';
	errlist[31]:='数越界。';
	errlist[32]:='read语句括号中的标识符不是变量。';
  errlist[33]:='程序没有写完';


  ch:=' ';
  ch_endflag:=' ';
  kk:=al;
  line_index:=1;


end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -