PL/0语言编译程序整理实现:(2)、单词类型
来源:互联网 发布:到处微博转发点赞数据 编辑:程序博客网 时间:2024/05/22 16:52
unit uSymbolType;
interface
uses
Classes;
const
CNT_Ident_MaxLen = 10; //---标识符最长长度
CNT_Number_MaxLen = 14; //---数字允许的最长位数
type
//---标识符
TIdent = packed array[1..CNT_Ident_MaxLen] of char;
//---单词类型
TSymbolType = (symEof,symNull,
symIdent,symNumber,
symOdd,
symPlus,symMinus,symTimes,symSlash,
symEql,symNeq,symLss,symLeq,symGtr,symGeq,
symLparen,symRparen,symSLparen,symSRparen,symComma,symSemicolon,symPeriod,
symBecomes,
symBegin,symEnd,symIf,symThen,symElse,symWhile,symDo,symRepeat,symUntil,
symWrite, symRead,symCall,
symConst,symVar,symProc);
TSymbolTypes = set of TSymbolType;
//---单词
TSymbol = record
Kind: TSymbolType;
Ident: TIdent;
Num: integer;
end;
const
//--关键字
CNT_KeywordMap: array[1..16] of TIdentMapEntry = (
(Value: Integer(symBegin); Name: 'begin '),
(Value: Integer(symCall); Name: 'call '),
(Value: Integer(symConst); Name: 'const '),
(Value: Integer(symDo); Name: 'do '),
(Value: Integer(symElse); Name: 'else '),
(Value: Integer(symEnd); Name: 'end '),
(Value: Integer(symIf); Name: 'if '),
(Value: Integer(symOdd); Name: 'odd '),
(Value: Integer(symProc); Name: 'procedure '),
(Value: Integer(symRead); Name: 'read '),
(Value: Integer(symRepeat); Name: 'repeat '),
(Value: Integer(symThen); Name: 'then '),
(Value: Integer(symUntil); Name: 'until '),
(Value: Integer(symVar); Name: 'var '),
(Value: Integer(symWhile); Name: 'while '),
(Value: Integer(symWrite); Name: 'write ')
);
CNT_SignNames: array[symPlus..symBecomes] of string = (
'+', '-', '*', '/',
'=', '#', '<', '<=', '>', '>=',
'(', ')', '[', ']', ',', ';', '.',
':='
);
sysDeclBeg = [symConst,symVar,symProc]; //--"声明"开始符号集合
sysStatBeg = [symBegin,symCall,symIf,symWhile]; //---"语句"开始符号集合
sysFacBeg = [symIdent,symNumber,symLparen]; //--"项"开始符号集合
var
//--符号表
SignMap: array[char] of TSymbolType;
implementation
procedure InitSignMap;
var
ch: char;
begin
for ch := low(SignMap) to High(SignMap) do
SignMap[ch] := symNull;
//---
SignMap['+'] := symPlus;
SignMap['-'] := symMinus;
SignMap['*'] := symTimes;
SignMap['/'] := symSlash;
SignMap['='] := symEql;
SignMap['#'] := symNeq;
SignMap['('] := symLparen;
SignMap[')'] := symRparen;
SignMap['['] := symSLparen;
SignMap[']'] := symSRparen;
SignMap[','] := symComma;
SignMap['.'] := symPeriod;
SignMap[';'] := symSemicolon;
end;
initialization
InitSignMap;
finalization
end.
- PL/0语言编译程序整理实现:(2)、单词类型
- PL/0语言编译程序整理实现:(4)、对象类型
- PL/0语言编译程序整理实现:(6)、代码类型
- PL/0语言编译程序整理实现:(3)、词法分析
- PL/0语言编译程序整理实现:(5)、语法分析
- PL/0语言编译程序整理实现:(7)、目标代码
- PL/0语言编译程序整理实现:(8)、代码执行
- PL/0语言编译程序整理实现:(9)、错误信息
- PL/0语言编译程序整理实现:(10)、错误处理
- PL/0语言编译程序整理实现:(11)、测试界面
- PL/0语言编译程序整理实现:(12)、测试代码
- PL/0语言编译程序整理实现:(1)、语法描述EBNF
- PL/0语言编译程序分析
- PL/0语言编译程序分析
- PL/0语言编译程序分析
- PL/0语言编译程序分析
- PL/0语言编译程序分析
- PL/0语言编译程序分析
- PL/0语言编译程序整理实现:(1)、语法描述EBNF
- What we do?
- resizeImg 图片定高宽
- Sql 查看、处理死锁!
- 家电
- PL/0语言编译程序整理实现:(2)、单词类型
- 使用SQL 找出存在差异的数据
- 基于对话框的简单双缓冲绘图框架
- PL/0语言编译程序整理实现:(3)、词法分析
- 加密解密应用
- IE6.7.8.FF兼容的问题
- semaphore的实现机制详解
- 分形软件XaoS视频教程
- 分形软件XaoS使用教程