-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparser.h
86 lines (78 loc) · 1.86 KB
/
parser.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#pragma once
#include"common.h"
class Parser {
//文法开始
void program();
void segment();
Tag type();
//声明与定义
Var* defdata(bool ext,Tag t);
void deflist(bool ext,Tag t);
Var* varrdef(bool ext,Tag t, bool ptr,string name);
Var* init(bool ext,Tag t , bool ptr,string name);
void def(bool ext,Tag t);
void idtail(bool ext, Tag t , bool ptr , string name);
//函数
Var*paradatatail(Tag t , string name);
Var*paradata(Tag t);
void para(vector<Var*>&list);
void paralist(vector<Var*>&list);
void funtail(Fun*f);
void block();
void subprogram();
void localdef();
//语句
void statement();
void whilestat();
void dowhilestat();
void forstat();
void forinit();
void ifstat();
void elsestat();
void switchstat();
void casestat(Var*cond);
Var* caselabel();
//表达式
Var* altexpr();
Var* expr();
Var* assexpr();
Var* asstail(Var*lval);
Var* orexpr();
Var* ortail(Var*lval);
Var* andexpr();
Var* andtail(Var*lval);
Var* cmpexpr();
Var* cmptail(Var*lval);
Tag cmps();
Var* aloexpr();
Var* alotail(Var*lval);
Tag adds();
Var* item();
Var* itemtail(Var*lval);
Tag muls();
Var* factor();
Tag lop();
Var* val();
Tag rop();
Var* elem();
Var* literal();
Var* idexpr(string name);
void realarg(vector<Var*> &args);
void arglist(vector<Var*> &args);
Var* arg();
//词法分析
Lexer &lexer;
Token*look;
//符号表
SymTab &symtab;
//中间代码生成器
GenIR &ir;
//语法分析与错误修复
void move();//移进
bool match(Tag t);//匹配成功则移进
void recovery(bool cond ,SynError lost,SynError wrong);
public:
Parser(Lexer&lex,SymTab&tab,GenIR&inter);
//外部调用接口
void analyse();
};