修复一些小bug
This commit is contained in:
parent
29006acb6b
commit
3288bc111a
|
@ -30,7 +30,7 @@ unordered_map<int, string> ha =
|
|||
{4, "TYPE"}, {5, "VAR"}, {6, "IF"}, {7, "THEN"},
|
||||
{8, "ELSE"}, {9, "FI"}, {10, "WHILE"}, {11, "DO"},
|
||||
{12, "ENDWH"}, {13, "BEGIN"}, {14, "END"}, {15, "READ"},
|
||||
{16, "WRITE"}, {11, "ARRAY"}, {12, "OF"}, {13, "RECORD"},
|
||||
{16, "WRITE"}, {17, "ARRAY"}, {18, "OF"}, {19, "RECORD"},
|
||||
{20, "RETURN"}, {21, "INTEGER"}, {22, "CHAR1"}, {23, "ID"},
|
||||
{24, "INTC"}, {25, "CHARC"}, {26, "ASSIGN"}, {27, "EQ"},
|
||||
{28, "LT"}, {29, "PLUS"}, {30, "MINUS"}, {31, "TIMES"},
|
||||
|
|
|
@ -427,7 +427,7 @@ TypeIR* SemanticAnalysis::arrayType(TreeNode* t)
|
|||
TypeIR* present = NULL;
|
||||
if (t->attr.ArrayAttr.low > t->attr.ArrayAttr.up)
|
||||
{
|
||||
semanticError(t->lineno, "数组越界");
|
||||
semanticError(t->lineno, "数组上下界定义错误");
|
||||
hasError = true;
|
||||
}
|
||||
else
|
||||
|
@ -837,13 +837,26 @@ TypeIR* SemanticAnalysis::arrayVar(TreeNode* t)
|
|||
//数组下标类型
|
||||
TypeIR* temp1 = NULL;
|
||||
TypeIR* temp2 = NULL;
|
||||
AccessKind tempA;
|
||||
temp1 = entry->attrIR.idtype->More.ArrayAttr.indexTy;
|
||||
temp2 = Expr(t->child[0], NULL);
|
||||
temp2 = Expr(t->child[0], &tempA);
|
||||
if (temp1 == NULL || temp2 == NULL)
|
||||
return NULL;
|
||||
|
||||
//判断类型后,判断数组是否越界
|
||||
if (temp1 == temp2)
|
||||
{
|
||||
Eptr = entry->attrIR.idtype->More.ArrayAttr.elemTy;
|
||||
|
||||
if (temp1->kind == intTy)
|
||||
{
|
||||
if (t->child[0]->attr.ExpAttr.val != -842150451)
|
||||
if (t->child[0]->attr.ExpAttr.val < entry->attrIR.idtype->More.ArrayAttr.low ||
|
||||
t->child[0]->attr.ExpAttr.val > entry->attrIR.idtype->More.ArrayAttr.up)
|
||||
semanticError(t->lineno, "数组值参下标越界");
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
string temp = t->name[0].c_str();
|
||||
|
|
108
SyntaxTree.txt
108
SyntaxTree.txt
|
@ -1,3 +1,109 @@
|
|||
ProK
|
||||
line: 4 PheadK
|
||||
PheadK bubble
|
||||
VarK
|
||||
line: 2 Deck Integer i j num
|
||||
line: 3 Deck ArrayK 20 1 Integer a
|
||||
line: 5 ProcDecK q
|
||||
line: 5 Deck value param: Integer num
|
||||
VarK
|
||||
line: 7 Deck Integer i j k
|
||||
line: 8 Deck Integer t
|
||||
StmLk
|
||||
line: 10 Stmtk Assign
|
||||
line: 10 ExpK Vari Id i
|
||||
line: 10 ExpK Const Id 1
|
||||
line: 11 Stmtk While
|
||||
line: 11 ExpK Op <
|
||||
line: 11 ExpK Vari Id i
|
||||
line: 11 ExpK Vari Id num
|
||||
line: 12 Stmtk Assign
|
||||
line: 12 ExpK Vari Id j
|
||||
line: 12 ExpK Op +
|
||||
line: 12 ExpK Op -
|
||||
line: 12 ExpK Vari Id num
|
||||
line: 12 ExpK Vari Id i
|
||||
line: 12 ExpK Const Id 1
|
||||
line: 13 Stmtk Assign
|
||||
line: 13 ExpK Vari Id k
|
||||
line: 13 ExpK Const Id 1
|
||||
line: 14 Stmtk While
|
||||
line: 14 ExpK Op <
|
||||
line: 14 ExpK Vari Id k
|
||||
line: 14 ExpK Vari Id j
|
||||
line: 15 Stmtk If
|
||||
line: 15 ExpK Op <
|
||||
line: 15 ExpK Vari ArrayMember a
|
||||
line: 15 ExpK Op +
|
||||
line: 15 ExpK Vari Id k
|
||||
line: 15 ExpK Const Id 1
|
||||
line: 15 ExpK Vari ArrayMember a
|
||||
line: 15 ExpK Vari Id k
|
||||
line: 17 Stmtk Assign
|
||||
line: 17 ExpK Vari Id t
|
||||
line: 17 ExpK Vari ArrayMember a
|
||||
line: 17 ExpK Vari Id k
|
||||
line: 18 Stmtk Assign
|
||||
line: 18 ExpK Vari ArrayMember a
|
||||
line: 18 ExpK Vari Id k
|
||||
line: 18 ExpK Vari ArrayMember a
|
||||
line: 18 ExpK Op +
|
||||
line: 18 ExpK Vari Id k
|
||||
line: 18 ExpK Const Id 1
|
||||
line: 19 Stmtk Assign
|
||||
line: 19 ExpK Vari ArrayMember a
|
||||
line: 19 ExpK Op +
|
||||
line: 19 ExpK Vari Id k
|
||||
line: 19 ExpK Const Id 1
|
||||
line: 19 ExpK Vari Id t
|
||||
line: 20 Stmtk Assign
|
||||
line: 20 ExpK Vari Id t
|
||||
line: 20 ExpK Const Id 0
|
||||
line: 22 Stmtk Assign
|
||||
line: 22 ExpK Vari Id k
|
||||
line: 22 ExpK Op +
|
||||
line: 22 ExpK Vari Id k
|
||||
line: 22 ExpK Const Id 1
|
||||
line: 24 Stmtk Assign
|
||||
line: 24 ExpK Vari Id i
|
||||
line: 24 ExpK Op +
|
||||
line: 24 ExpK Vari Id i
|
||||
line: 24 ExpK Const Id 1
|
||||
StmLk
|
||||
line: 29 Stmtk Read num
|
||||
line: 30 Stmtk Assign
|
||||
line: 30 ExpK Vari Id i
|
||||
line: 30 ExpK Const Id 1
|
||||
line: 31 Stmtk While
|
||||
line: 31 ExpK Op <
|
||||
line: 31 ExpK Vari Id i
|
||||
line: 31 ExpK Vari Id num
|
||||
line: 32 Stmtk Read j
|
||||
line: 33 Stmtk Assign
|
||||
line: 33 ExpK Vari ArrayMember a
|
||||
line: 33 ExpK Vari Id i
|
||||
line: 33 ExpK Vari Id j
|
||||
line: 34 Stmtk Assign
|
||||
line: 34 ExpK Vari Id i
|
||||
line: 34 ExpK Op +
|
||||
line: 34 ExpK Vari Id i
|
||||
line: 34 ExpK Const Id 1
|
||||
line: 36 Stmtk Call
|
||||
line: 36 ExpK Vari Id i
|
||||
line: 36 ExpK Vari Id num
|
||||
line: 37 Stmtk Assign
|
||||
line: 37 ExpK Vari Id i
|
||||
line: 37 ExpK Const Id 1
|
||||
line: 38 Stmtk While
|
||||
line: 38 ExpK Op <
|
||||
line: 38 ExpK Vari Id i
|
||||
line: 38 ExpK Op +
|
||||
line: 38 ExpK Vari Id num
|
||||
line: 38 ExpK Const Id 1
|
||||
line: 39 Stmtk Write
|
||||
line: 39 ExpK Vari ArrayMember a
|
||||
line: 39 ExpK Vari Id i
|
||||
line: 40 Stmtk Assign
|
||||
line: 40 ExpK Vari Id i
|
||||
line: 40 ExpK Op +
|
||||
line: 40 ExpK Vari Id i
|
||||
line: 40 ExpK Const Id 1
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
语法错误, line 4 : 符号"ools\MSVC\14.29.30133\include\xlocale"错误,也许缺失符号"ID"
|
||||
语法错误, line 4 : 意外符号"ools\MSVC\14.29.30133\include\xlocale",或许缺少符号“TYPE” / “VAR” / “PROCEDURE” / “BEGIN”
|
||||
语法错误, line 4 : 意外符号"ools\MSVC\14.29.30133\include\xlocale",或许缺少符号“PROCEDURE” / “BEGIN” / “VAR”
|
||||
语法错误, line 4 : 意外符号"ools\MSVC\14.29.30133\include\xlocale",或许缺少符号“PROCEDURE” / “BEGIN”
|
||||
语法错误, line 4 : 符号"ools\MSVC\14.29.30133\include\xlocale"错误,也许缺失符号"BEGIN"
|
||||
语法错误, line 4 : 意外符号"ools\MSVC\14.29.30133\include\xlocale"
|
||||
语法错误, line 4 : 意外符号"ools\MSVC\14.29.30133\include\xlocale",或许缺少符号“;”/ “END” / “ENDWH”
|
||||
语法错误, line 4 : 符号"ools\MSVC\14.29.30133\include\xlocale"错误,也许缺失符号"END"
|
||||
语法错误, line 4 : 符号"ools\MSVC\14.29.30133\include\xlocale"错误,也许缺失符号"DOT"
|
|
@ -0,0 +1 @@
|
|||
语义错误, line 36 : 不是函数名
|
|
@ -0,0 +1,12 @@
|
|||
==========µÚ0²ã·ûºÅ±í==========
|
||||
i: intTy varKind Level: 0 Offset: 7 indir
|
||||
j: intTy varKind Level: 0 Offset: 8 indir
|
||||
num: intTy varKind Level: 0 Offset: 9 indir
|
||||
a: arrayTy varKind Level: 0 Offset: 10 indir
|
||||
q: funcKind Level: 1 nOff: -842150656
|
||||
==========µÚ1²ã·ûºÅ±í==========
|
||||
num: intTy varKind Level: 1 Offset: 7 dir
|
||||
i: intTy varKind Level: 1 Offset: 8 indir
|
||||
j: intTy varKind Level: 1 Offset: 9 indir
|
||||
k: intTy varKind Level: 1 Offset: 10 indir
|
||||
t: intTy varKind Level: 1 Offset: 11 indir
|
59
text.txt
59
text.txt
|
@ -1,21 +1,42 @@
|
|||
{给出一个错误的程序,测试是否能够检查出来,
|
||||
并给出错误 提示信息}
|
||||
program bubble
|
||||
var integer i,j,num;
|
||||
array [1..20] of integer a;
|
||||
|
||||
program _error
|
||||
var integer s;
|
||||
integer t;
|
||||
procedure factor(intaeger n;var integer m);
|
||||
var integer w;
|
||||
begin
|
||||
if n=0
|
||||
then m:=1
|
||||
else
|
||||
factor(n-1,w);
|
||||
m:=n*w
|
||||
fi
|
||||
end
|
||||
begin
|
||||
read(s);
|
||||
factor(s,t);
|
||||
write(t)
|
||||
procedure q(integer num);
|
||||
|
||||
var integer i,j ,k;
|
||||
integer t;
|
||||
begin
|
||||
i:=1;
|
||||
while i < num do
|
||||
j := num-i+ 1;
|
||||
k:=1;
|
||||
while k<j do
|
||||
if a[k+ 1] < a[k]
|
||||
then
|
||||
t:=a[k ];
|
||||
a[k] :=a[k+ 1 ];
|
||||
a[k+ 1 ]:=t
|
||||
else t:=0
|
||||
fi;
|
||||
k:=k+ 1
|
||||
endwh;
|
||||
i:=i+1
|
||||
endwh
|
||||
end
|
||||
|
||||
begin
|
||||
read(num);
|
||||
i:=1;
|
||||
while i < num do
|
||||
read(j);
|
||||
a[i]:=j;
|
||||
i:=i+1
|
||||
endwh;
|
||||
i(num);
|
||||
i:=1;
|
||||
while i <(num+ 1) do
|
||||
write(a[i]);
|
||||
i:=i+1
|
||||
endwh
|
||||
end.
|
239
tokenList.txt
239
tokenList.txt
|
@ -1,71 +1,194 @@
|
|||
4 2 program
|
||||
4 1 ools\MSVC\14.29.30133\include\xlocale
|
||||
4 23 error
|
||||
5 5 var
|
||||
1 2 program
|
||||
1 23 bubble
|
||||
2 5 var
|
||||
2 21 integer
|
||||
2 23 i
|
||||
2 38 ,
|
||||
2 23 j
|
||||
2 38 ,
|
||||
2 23 num
|
||||
2 37 ;
|
||||
3 17 array
|
||||
3 39 [
|
||||
3 24 1
|
||||
3 41 ..
|
||||
3 24 20
|
||||
3 40 ]
|
||||
3 18 of
|
||||
3 21 integer
|
||||
3 23 a
|
||||
3 37 ;
|
||||
5 3 procedure
|
||||
5 23 q
|
||||
5 33 (
|
||||
5 21 integer
|
||||
5 23 s
|
||||
5 23 num
|
||||
5 34 )
|
||||
5 37 ;
|
||||
6 21 integer
|
||||
6 23 t
|
||||
6 37 ;
|
||||
7 3 procedure
|
||||
7 23 factor
|
||||
7 33 (
|
||||
7 23 intaeger
|
||||
7 23 n
|
||||
7 37 ;
|
||||
7 5 var
|
||||
7 21 integer
|
||||
7 23 m
|
||||
7 34 )
|
||||
7 23 i
|
||||
7 38 ,
|
||||
7 23 j
|
||||
7 38 ,
|
||||
7 23 k
|
||||
7 37 ;
|
||||
8 5 var
|
||||
8 21 integer
|
||||
8 23 w
|
||||
8 23 t
|
||||
8 37 ;
|
||||
9 13 begin
|
||||
10 6 if
|
||||
10 23 n
|
||||
10 27 =
|
||||
10 24 0
|
||||
11 7 then
|
||||
11 23 m
|
||||
11 26 :=
|
||||
11 24 1
|
||||
12 8 else
|
||||
13 23 factor
|
||||
13 33 (
|
||||
13 23 n
|
||||
13 30 -
|
||||
10 23 i
|
||||
10 26 :=
|
||||
10 24 1
|
||||
10 37 ;
|
||||
11 10 while
|
||||
11 23 i
|
||||
11 28 <
|
||||
11 23 num
|
||||
11 11 do
|
||||
12 23 j
|
||||
12 26 :=
|
||||
12 23 num
|
||||
12 30 -
|
||||
12 23 i
|
||||
12 29 +
|
||||
12 24 1
|
||||
12 37 ;
|
||||
13 23 k
|
||||
13 26 :=
|
||||
13 24 1
|
||||
13 38 ,
|
||||
13 23 w
|
||||
13 34 )
|
||||
13 37 ;
|
||||
14 23 m
|
||||
14 26 :=
|
||||
14 23 n
|
||||
14 31 *
|
||||
14 23 w
|
||||
15 9 fi
|
||||
16 14 end
|
||||
17 13 begin
|
||||
18 15 read
|
||||
18 33 (
|
||||
18 23 s
|
||||
18 34 )
|
||||
14 10 while
|
||||
14 23 k
|
||||
14 28 <
|
||||
14 23 j
|
||||
14 11 do
|
||||
15 6 if
|
||||
15 23 a
|
||||
15 39 [
|
||||
15 23 k
|
||||
15 29 +
|
||||
15 24 1
|
||||
15 40 ]
|
||||
15 28 <
|
||||
15 23 a
|
||||
15 39 [
|
||||
15 23 k
|
||||
15 40 ]
|
||||
16 7 then
|
||||
17 23 t
|
||||
17 26 :=
|
||||
17 23 a
|
||||
17 39 [
|
||||
17 23 k
|
||||
17 40 ]
|
||||
17 37 ;
|
||||
18 23 a
|
||||
18 39 [
|
||||
18 23 k
|
||||
18 40 ]
|
||||
18 26 :=
|
||||
18 23 a
|
||||
18 39 [
|
||||
18 23 k
|
||||
18 29 +
|
||||
18 24 1
|
||||
18 40 ]
|
||||
18 37 ;
|
||||
19 23 factor
|
||||
19 33 (
|
||||
19 23 s
|
||||
19 38 ,
|
||||
19 23 a
|
||||
19 39 [
|
||||
19 23 k
|
||||
19 29 +
|
||||
19 24 1
|
||||
19 40 ]
|
||||
19 26 :=
|
||||
19 23 t
|
||||
19 34 )
|
||||
19 37 ;
|
||||
20 16 write
|
||||
20 33 (
|
||||
20 8 else
|
||||
20 23 t
|
||||
20 34 )
|
||||
21 14 end
|
||||
21 35 .
|
||||
21 0 ÿ
|
||||
20 26 :=
|
||||
20 24 0
|
||||
21 9 fi
|
||||
21 37 ;
|
||||
22 23 k
|
||||
22 26 :=
|
||||
22 23 k
|
||||
22 29 +
|
||||
22 24 1
|
||||
23 12 endwh
|
||||
23 37 ;
|
||||
24 23 i
|
||||
24 26 :=
|
||||
24 23 i
|
||||
24 29 +
|
||||
24 24 1
|
||||
25 12 endwh
|
||||
26 14 end
|
||||
28 13 begin
|
||||
29 15 read
|
||||
29 33 (
|
||||
29 23 num
|
||||
29 34 )
|
||||
29 37 ;
|
||||
30 23 i
|
||||
30 26 :=
|
||||
30 24 1
|
||||
30 37 ;
|
||||
31 10 while
|
||||
31 23 i
|
||||
31 28 <
|
||||
31 23 num
|
||||
31 11 do
|
||||
32 15 read
|
||||
32 33 (
|
||||
32 23 j
|
||||
32 34 )
|
||||
32 37 ;
|
||||
33 23 a
|
||||
33 39 [
|
||||
33 23 i
|
||||
33 40 ]
|
||||
33 26 :=
|
||||
33 23 j
|
||||
33 37 ;
|
||||
34 23 i
|
||||
34 26 :=
|
||||
34 23 i
|
||||
34 29 +
|
||||
34 24 1
|
||||
35 12 endwh
|
||||
35 37 ;
|
||||
36 23 i
|
||||
36 33 (
|
||||
36 23 num
|
||||
36 34 )
|
||||
36 37 ;
|
||||
37 23 i
|
||||
37 26 :=
|
||||
37 24 1
|
||||
37 37 ;
|
||||
38 10 while
|
||||
38 23 i
|
||||
38 28 <
|
||||
38 33 (
|
||||
38 23 num
|
||||
38 29 +
|
||||
38 24 1
|
||||
38 34 )
|
||||
38 11 do
|
||||
39 16 write
|
||||
39 33 (
|
||||
39 23 a
|
||||
39 39 [
|
||||
39 23 i
|
||||
39 40 ]
|
||||
39 34 )
|
||||
39 37 ;
|
||||
40 23 i
|
||||
40 26 :=
|
||||
40 23 i
|
||||
40 29 +
|
||||
40 24 1
|
||||
41 12 endwh
|
||||
42 14 end
|
||||
42 35 .
|
||||
42 0 ÿ
|
||||
|
|
BIN
treeFile.bmp
BIN
treeFile.bmp
Binary file not shown.
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 3.2 MiB |
Loading…
Reference in New Issue