词法分析程序(Lexical Analyzer)要求:
- 从左至右扫描构成源程序的字符流
- 识别出有词法意义的单词(Lexemes)
- 返回单词记录(单词类别,单词本身)
- 滤掉空格
- 跳过注释
- 发现词法错误
程序结构:
输入:字符流(什么输入方式,什么数据结构保存)
处理:
–遍历(什么遍历方式)
–词法规则
输出:单词流(什么输出形式)
–二元组
单词类别:
1.标识符(10)
2.无符号数(11)
3.保留字(一词一码)
4.运算符(一词一码)
5.界符(一词一码)
单词符号 |
种别码 |
单词符号 |
种别码 |
begin |
1 |
: |
17 |
if |
2 |
:= |
18 |
then |
3 |
< |
20 |
while |
4 |
<= |
21 |
do |
5 |
<> |
22 |
end |
6 |
> |
23 |
l(l|d)* |
10 |
>= |
24 |
dd* |
11 |
= |
25 |
+ |
13 |
; |
26 |
- |
14 |
( |
27 |
* |
15 |
) |
28 |
/ |
16 |
# |
0 |
自己当前还没写好,具体框架也还不完善,只能先给出一些残次代码了....
词组存储数据结构:
struct words{ char word[500]; char iword[500]; char identifier[500]; char num[500]; };
词组分析函数(未完成):
int WordsAnalysis(char* sen,int n){ char temp; char str[30]; int len=0; printf("%s ",sen); for(int i=0;i<=n;i++){ len=0; if(sen[i]==' '){ continue; } if(sen[i]>='A'&&sen[i]<='z'){ while(isWord(sen[i])){ temp=sen[i]; str[len]=sen[i]; len++; i++; } }; }; printf(str); return 0; };
本来想通过扫描到一个一个字符后以字符后第一个空格为界,将扫描到的字符组合成字符并将其存储,但自己卡在字符的拼接上....
在这过程中也在参考下面这篇博文,尚在学习中!
https://blog.csdn.net/sinat_37341950/article/details/79565485