Các lỗi sai trong Pascal và cách sửa

1. Các lỗi sai trong Pascal thường gặp

1. Lỗi cú pháp là những lỗi phát sinh do lập trình viên viết sai những quy định về văn phạm của hệ thống hoặc ngôn ngữ.
Thí dụ các lỗi sau đây là những lỗi cú pháp:
(a + b * 2: thiếu dấu đóng ngoặc BEGIM: định viết BEGIN, sai N)

2. Xử lý lỗi

Lỗi cú pháp được phát hiện trong quá trình dịch. Turbo Pascal báo lỗi cú pháp theo nguyên tắc “Mỗi lần chỉ báo một lỗi”. Nếu gặp lỗi ta cần trở về chế độ soạn thảo, tìm vị trí xuất hiện lỗi, sửa lại lỗi đó rồi dịch lại chương trình. Sau khi báo lỗi, Turbo Pascal sẽ chờ ta bấm phím ESC để trở về chế độ soạn thảo. Con trỏ của màn hình soạn thảo sẽ đặt ở cạnh vị trí xuất hiện lỗi, thông thường quá đi 1 ký tự.

3. Các thông báo lỗi:

01 Out of memory: Thiếu bộ nhớ
02 Identifier expected: Thiếu chỉ định
03 Unknown identifier: Không hiểu chỉ định
04 Duplicate identifier : Trùng tên
05 Syntax error: Lỗi cú pháp
06 Error in real constant: Lỗi hằng số thực
07 Error in integer constant: Lỗi hằng số nguyên
08 String constant exceeds line: Hằng xâu vượt quá một dòng
09 Too many nested files: Quá nhiều file lồng nhau
10 Unexpected end of file: Không tìm thấy kết thúc file
11 Line too long: Dòng quá dài
12 Type identifier expected: Không tìm thấy định nghĩa kiểu
13 Too many open files: Quá nhiều file được mở
14 Invalid file name: Tên file không hợp lệ
15 File not found: Không tìm thấy file
16 Disk full: Đĩa đầy
17 Invalid compiler directive: Dẫn hướng biên dịch không hợp lệ
18 Too many files: Quá nhiều file
19 Undefined type in pointer def: Chưa định nghĩa kiểu của con trỏ
20 Variable identifier expected: Không tìm thấy định nghĩa biến
21 Error in type: Lỗi kiểu
22 Structure too large: Cấu trúc quá lớn
23 Set base type out of range: Kiểu cơ bản bị tràn
24 File components may not be files or objects: Các thành phần file có thể không Phải là file hay object
25 Invalid string length: Độ dài xâu không hợp lệ
26 Type mismatch: Sai kiểu
27 Invalid subrange base type: Kiểu thừa kế không hợp lệ
28 Lower bound > than upper bound: Cận dưới lớn hn cận trên (con trỏ nhớ)
29 Ordinal type expected: Không tìm thấy kiểu thứ tự
30 Integer constant expected: Không tìm thấy hằng số nguyên
31 Constant expected: Phải là hằng số
32 Integer or real constant expected: Phải là số nguyên hoặc là số thực
33 Pointer Type identifier expected: Phải là định nghĩa kiểu con trỏ
34 Invalid function result type: Kiểu trả về của hàm không hợp lệ
35 Label identifier expected: Phải là định nghĩa nhãn
36 BEGIN expected: Phải là BEGIN
37 END expected: Phải là END
38 Integer expression expected: Phải là thể hiện của số nguyên
39 Ordinal expression expected: Phải là thể hiện của biến có thứ tự
40 Boolean expression expected: Phải là thể biện của biến logic
41 Operand types do not match: Không hợp kiểu các toán hạng
42 Error in expression: Lỗi biểu diễn
43 Illegal assignment: Gán sai
44 Field identifier expected: Phải là định nghĩa trường
45 Object file too large: Đối tượng file quá lớn
46 Undefined EXTERN: Không định nghĩa EXTERN
47 Invalid object file record: Đối tượng bn ghi file không hợp lệ
48 Code segment too large: Mã phân đoạn quá lớn
49 Data segment too large: Dữ liệu phân đoạn quá lớn
50 DO expected: Thiếu DO
51 Invalid PUBLIC definition: Định nghĩa PUBLIC không hợp lệ
52 Invalid EXTRN definition: Định nghĩa EXTERN không hợp lệ
53 Too many EXTRN definitions: Quá nhiều định nghĩa EXTERN
54 OF expected : Thiếu OF
55 INTERFACE expected: Phải là từ khoá INTERFACE
56 Invalid relocatable reference: Tham chiếu tái định vị không hợp lệ
57 THEN expected: Thiếu từ khoá THEN
58 TO or DOWNTO expected: Phải là từ khoá TO hoặc DOWNTO
59 Undefined forward: Biến hay hàm chưa được định nghĩa trước đó
60 Too many procedures: Quá nhiều chương trình con
61 Invalid typecast: Sai thể hiện kiểu
62 Division by zero: Lỗi chia cho 0
63 Invalid file type: Kiểu file không hợp lệ
64 Cannot read or write vars of this type: Không thể đọc hãy ghi kiểu dữ liệu này
65 Pointer variable expected: Phải là biến con trỏ
66 String variable expected: Phải là biến xâu
67 String expression expected: Phải là thể hiện xâu
68 Circular unit reference: Tham chiếu vòng các đn vị chưng trình
69 Unit name mismatch: Không đúng tên unit
70 Unit version mismatch: Không đúng version của unit
71 Duplicate unit name: Lặp tên unit
72 Unit file format error: Cấu trúc unit file bị lỗi
73 Implementation expected: Phải là IMPLEMENTATION
74 Constant and case types don’t match: Hằng và các kiểu không hợp
75 Record variable expected: Phải là biến record
76 Constant out of range: Hằng bị tràn
77 File variable expected: Phải là biến file
78 Pointer expression expected: Phải là thể hiện của con trỏ
79 Integer or real expression expected: Phải là thể hiện của số nguyên hoặc số thực
80 Label not within current block: Nhãn không đi cùng với khối hiện hành
81 Label already defined: Nhãn đã được định nghĩa
82 Undefined label in preceding stmt part: Không định nghĩa trước nhãn
83 Invalid @@ argument: Đối số @@ không hợp lệ
84 UNIT expected: Phải là từ khoá UNIT
85 “;” expected: Phải là dấu “;”
86 “:” expected: Phải là dấu “:”
87 “,” expected: Phải là dấu “,”
88 “(” expected : Phải là dấu “(“
89 “)” expected : Phải là dấu “)”
90 “=” expected: Phải là dấu “=”
91 “:=” expected: Phải là dấu “:=”
92 “[” or “(.” Expected: Phải là dấu “[” hoặc “(.”
93 “]” or “.)” expected: Phải là dấu “]” hoặc “.)”
94 “.” expected: Phải là dấu “.”
95 “..” expected: Phải là dấu “..”
96 Too many variables: Quá nhiều biến
97 Invalid FOR control variable: Biến điều khiển FOR không hợp lệ
98 Integer variable expected: Phải là một biến số nguyên
99 Files and procedure types are not allowed here: Không cho phép ác file và các kiểu chưng trình con
100 String length mismatch: Độ dài xâu không hợp
101 Invalid ordering of fields: Thứ tự các trường không hợp
102 String constant expected: Không thấy hằng xâu
103 Integer or real variable expected: Không thấy biến nguyên hoặc thực
104 Ordinal variable expected: Phải là biến có thứ tự
105 INLINE error: Lỗi INLINE
106 Character expression expected: Phải là thể hiện của kiểu kí tự
107 Too many relocation items: Quá nhiều thành phần tái định vị
112 CASE constant out of range: Hằng CASE bị tràn
113 Error in statement: Lỗi trong câu lệnh
114 Cannot call an interrupt procedure: Không thể gọi một thủ tục ngắt
116 Must be in 8087 mode to compile: Phải ở kiểu biên dịch 8087
117 Target ađress not found: Không tìm thấy địa chỉ đích
118 Include files are not allowed here: Không được bao gồm file
120 NIL expected: Phải là từ khoá NIL
121 Invalid qualifier: Giới hạn không hợp lệ
122 Invalid variable reference: Tham chiếu biến không hợp lệ
123 Too many symbols: Quá nhiều kí hiệu
124 Statement part too large: Thành phần câu lệnh quá lớn
126 Files must be var parameters: Các file Phải đựoc khai báo tham số
127 Too many conditional symbols: Quá nhiều kí hiệu điều kiện
128 Misplaced conditional directive: Chỉ dẫn điều kiện không đúng chỗ
129 ENDIF directive missing: Thiếu chỉ dẫn END IF
130 Error in initial conditional defines: Lỗi khởi tạo các định nghĩa điều kiện
131 Header does not match previous definition: Header không hợp với định nghĩa trước đó
132 Critical disk error: Lỗi đĩa trầm trọng
133 Cannot evaluate this expression: Không thể ước lượng của thể hiện này
134 Expression incorrectly terminated: Thể hiện không được kết thúc trực tiếp
135 Invalid format specifier: Khai báo cấu trúc không hợp lệ
136 Invalid indirect reference: Tham chiếu gián tiếp không hợp lệ
137 Structured variables are not allowed here: Không cho phép các biến có cấu trúc
138 Cannot evaluate without System unit: Không thể ước lượng mà không có unit System
139 Cannot access this symbol: Không thể truy xuất kí hiệu này
140 Invalid floating-point operation: Phép toán dấu phẩy động không hợp lệ
141 Cannot compile overlays to memory: Không thể biên dịch overlay bộ nhớ
142 Procedure or function variable expected: Phải là biến chưng trình con
143 Invalid procedure or function reference: Tham chiếu chưng trình con không hợp lệ
144 Cannot overlay this unit: Không thể overlay unit này
145 Too many nested scopes: Quá nhiều phạm vi xếp chồng nhau
146 File access denied: Không thể truy xuất
147 object type expected: Phải là một kiểu object
148 Local object types are not allowed: Không cho phép các kiểu object địa phưng
149 Virtual expected: Phải là từ khoá VIRTUAL
150 Method identifier expected: Phải là định nghĩa phưng thức
151 Virtual constructors are not allowed: Không cho phép các constructor là o
152 Constructor identifier expected: Phải là định nghĩa constructor
153 Destructor identifier expected: Phải là định nghĩa deconstructor
154 Fail only allowed within constructors: Lỗi chỉ cho phép với constructor
155 Invalid combination of opcode and operands: Kết hợp toán hạng và toán tử không hợp lệ
156 Memory reference expected: Phải là tham chiếu bộ nhớ
157 Cannot ađ or subtract relocatable symbols: Không thể thêm hay hoá một kí hiệu tái định vị
158 Invalid register combination : Kết hợp thanh ghi không hợp lệ
159 286/287 instructions are not enabled: Không cho phép các lệnh 286/287
160 Invalid symbol reference: Tham chiếu kí hiệu không hợp lệ
161 Code generation error: Lỗi sinh mã
162 ASM expected: Phải là từ khoá ASM
————————————————————————————————————————-

Lỗi 2. Identifier expected: mong gặp định danh (có thể do chưa khai báo biến, hằng)

Lỗi 3. Unknown identifier: định danh chưa được khai báo. Hãy khai báo định danh này ở đầu thủ tục hoặc chương trình.( có thể do sai chính tả một tên, từ khoá nào đó)

Lỗi 4. Duplicate identifier: định danh được khai báo 2 lần trở lên.

Lỗi 5. Syntax error: Lỗi cú pháp. Gặp một ký tự sai hoặc viết sai một hằng.

Lỗi 6. Error in real constant: Viết sai hằng thực.

Lỗi 7. Error in integer constant: Viết sai hằng nguyên.Chú ý rằng khai báo CONST c = 1234 sẽ cho ta một hằng c kiểu nguyên. Muốn cĩ một hằng kiểu thực, ta viết CONST c = 1234.0. Những hằng cĩ giá trị nằm ngồi khoảng -2147483648..2147483647 cần được khai báo theo kiểu thực, thí dụ:CONST c = 12345678912.0;

Lỗi 8. String constant exceeds line: giá trị của xâu ký tự quả dài, xem lại cĩ thiếu dấu đóng/mở (dấu nháy đơn) hằng văn bản khơng?

Lỗi 10. Unexpected end of file: Cần gặp dấu kết tệp. Lỗi 10 có thể xuất hiện trong các trường hợp sau: – Trong trương trình các cặp BIGIN và END khơng cân đối. – Tệp khác được gọi lồng tại một vị trí khơng hợp lệ. – Chú thích chưa được đĩng bằng dấu } hoặc * ).

Lỗi 11. Line too long: Dịng dài quá Bộ soạn thảo cho phép phát sinh các dịng dài tối đa 249 ký tự trong khi khi chương trình dịch chỉ làm việc với các dịng dài tối đa 126 ký tự. Lời khuyên: Khơng nên viết các dịng dài quá 60 ký tự.

Lỗi 12. Type identifier expected: Cần cĩ định danh kiểu

Lỗi 20. Variable identifier expected: Cần một định danh cho biến Thí dụ FOR = 4 TO 20 DO sẽ sinh lỗi 20.

Lỗi 25. Invalid string length: Chiều dài xâu khơng hợp lệ. Chiều dài hợp lệ nằm trong khoảng 0 .. 255.

Lỗi 26. TYPE mismatch: Kiểu khơng tương thích. các nguyên nhân sinh lỗi cĩ thể là: – Biểu thức được gán cho biến khơng đúng kiểu. Thí dụ VAR x: char; BEGINx: = 127 * 8END.

Lỗi 29. Ordinal type expected: Cần một kiểu thứ bậc. Trong trường hợp này khơng được dùng các kiểu Real, string, Record, PROCEDURE hoặc pointer.

Lỗi 30. Integer constant expected: Cần một hằng nguyên

Lỗi 31. Constant expected: Cần một hằng

Lỗi 33. Type identifier expected: Cần một định danh kiểu

Lỗi 36. BEGIN expected: Thiếu BEGIN

Lỗi 37. END expected: Thiếu END

Lỗi 38. Integer expression expexted: Cần biểu thức nguyên

Lỗi 39. Ordinal expression expected: Cần biểu thức thứ bậc

Lỗi 40. Boolean expression expected: Cần biểu thức kiểu BOOLEAN

Lỗi 41. Operand types do not match operator: Kiểu tốn hạng khơng phù hợp với tốn tử

Lỗi 42. Error in expression: Biểu thức sai. Thường gặp trường hợp sử dụng ký tự lạ hoặc quên viết dấu phép tốn trong biểu thức.

Lỗi 43. Illegal assigment: Gans Gán khơng hợp lệ. Khơng được gán trị cho biến tệp hoặc biến khơng định kiểu. Khơng được gán trị cho định danh hàm ở ngồi thân của hàm đĩ.

Lỗi 44. Field identifier expected: Cần một định danh thường.

Lỗi phát sinh khi sử dụng bản ghi (RECORD) khơng cĩ trường hợp đi kèm.

Lỗi 54. OF expected:Thiếu OF trong TYPE, CASE, FILE, SET, ARRAY

Lỗi 57. THEN expected:Thiếu THEN trong IF

Lỗi 58. TO or DOWN TO expected: Thiếu To hoặc DOWN TO trong FOR

Lỗi 66. String variable expected: Cần một biến string.

Lỗi 67. String expression expected; Cần một biểu thức string.

Lỗi 74. Constant and case types do not match: Kiểu hằng và kiểu biểu thức trong CASE khơng phù hợp với nhau.

Lỗi 75. Record variable expected: Cần một biến kiểu RECORD.

Lỗi 76. Constant out of range: Hằng vượt quá miền.

Lỗi cĩ thể gặp trong các tình huống sau: – Chỉ dẫn mảng vượt ra ngồi giới hạn của mảng – Gọi thủ tục và hàm với các tham trị cụ thể vượt ra ngồi giới hạn đã khai báo.

Lỗi 79. Integer or Real expssion expected: Cần một biểu thức kiểu INTEGER hoặc REAL.

Lỗi 85. “;” expected: Cần có dấu chấm phảy.

Lỗi 86. “: ” expected: Cần có dấu hai chấm.

Lỗi 87. ” , ” expected: Cần có dấu phảy

Lỗi 88. ” ( ” expected: Cần có dấu mở ngoặc đơn

Lỗi 89 ” ) ” expected: Cần có dấu đĩng ngoặc đơn

Lỗi 99. ” = ” expected: Cần có dấu bằng.

Lỗi 91. “:= “expected: Cần dấu gán

Lỗi 92 ” [ ” or ” (. ” expected: Cần mở dấu ngoặc vuơng khi khai báo hoặc chỉ định phần tử của mảng, tập.

Lỗi 93. ” ] ” or ” .) ” expected: Cần dấu đóng ngoặc vuơng khi khai báo hoặc chỉ định phần tử của mảng hoặc tập.

Lỗi 94. ” .” expected: Cần dấu chấm khi chỉ định một trường trong bản ghi

Lỗi 95 ” ..” expected: Cần dấu nhiều chấm khi liệt kê giới hạn mảng, tập.

Lỗi 98. Integer variable expected: Cần biến nguyên.

Lỗi 100. String. length, mismatch: Chiều dài xâu khơng phù hợp với số lượng các phần tử của mảng ký tự.

Lỗi 102. String constant expected: Cần một hằng kiểu xâu.

Lỗi 103. Integer or real variable expected: Cần biến nguyên hoặc thực (biến số).

Lỗi 104. Ordinal variable expected: Cần biến (kiểu) thứ tự.

Lỗi 106. Character expressionexpected: Cần biểu thức kiểu ký tự.

Lỗi 112 CASE constant out of range: Hằng của tốn tửCASE khơng nằm trong giới hạn. -32768 dến 32767

Lỗi 113 Error in statement: Câu lệnh sai. Lỗi khơng sảy ra khi viết sai kí tự đầu tiên của câu lệnh.

Lỗi 200 Division by zero: chia cho số 0. (Lỗi khi chạy chương trình)