... viết chươngtrình trên môi trường Borland C+ + 3.1
Giáo trình
Bài Tập Kỹ Thuật Lập Trình
Trang
13 3
PHỤ L C 2 HƯỚNG DẪN VIẾT CHƯƠNGTRÌNH
TRÊN MÔI TRƯỜNG BORLAND C+ + 3.1 (BC 31)
I. C I ...
• F6: Chuyển qua lại cc cửa sổ soạn thảo (nếu mở nhiều c
a sổ).
• F9: Biêndịchchương trình. M cđích là kiểm tra lỗi chương trình.
• Ctr+F9: Th c thi chươngtrình (Run) khi chươngtrình ... quá trình làm bài hay biêndịch chạy chươngtrình thì tất ccc
file đó đều nằm trong thư m c BaiTap cho dễ quản lý.
Tạo Shortcut Borland C+ +3.1 (File bc.exe trong thư m c BIN c a thư mục...
... lại cho người viết chương trình.
Trình biên
dịch
Chương trình
đích
Chương trình
nguồn
Hình 1.1 - Một trìnhbiêndịch
1. Mô hình phân tích - tổng hợp c a một trìnhbiêndịchChương ...
Ngoài trìnhbiên dịch, chúng ta c thể c n dùng nhiều chươngtrình kh c nữa để
tạo ra một chươngtrìnhđíchc thể th c thi đư c (executable). Ccchươngtrình đó
gồm: Bộ tiền xử lý, Trìnhdịch ... SỰ BIÊNDỊCH
Nội dung chính:
Để máy tính c thể hiểu và th c thi một chươngtrình đư c viết bằng ngôn ngữ c p
cao, ta c n phải c một trìnhbiêndịch th c hiện vi c chuyển đổi chương trình...
... biểu th c như là một danh sách cc term đư c phân
c ch nhau bởi dấu + ho c Term là một list cc factor phân c ch nhau bởi * ho c /.
Chú ý rằng bất kỳ một biểu th c nào trong ngo c đều là factor, ... thế với cc dấu
ngo c chúng ta c thể xây dựng cc biểu th c lồng sâu nhiều c p tuỳ ý.
C pháp cc câu lệnh:
Từ khóa (keyword) cho phép chúng ta nhận ra c u lệnh trong hầu hết cc ngôn
ngữ. ...
13
Tương tự với c ch đặt dấu ngo c vào biểu th c như sau :
(9 - 5) + 2 9 - ( 5 + 2)
Bởi vì một chuỗi với nhiều c y phân tích c pháp thường sẽ c nhiều nghĩa, do
đó khi biêndịchcc chương...
... c y c pháp
đư c x c định từ cc giá trị c a cc thu c tính tại cc nút con c a nút đó.
Ví dụ 2.7: Ðịnh nghĩa tr c tiếp c pháp cho vi cdịchcc biểu th ccc số c ch
nhau bởi dấu + ho c ... - Cc hành động dịch biểu th c 9-5+2 thành 9 5- 2 +
18
II. DỊCH TR C TIẾP C PHÁP (Syntax - Directed Translation)
Ðể dịch một kết c u ngôn ngữ lập trình, trong quá trình dịch, bộ biêndịch ... tr c tiếp c pháp (syntax - directed definition)
nhằm đ c tả vi c phiên dịchcc kết c u ngôn ngữ lập trình theo cc thu c tính đi kèm
15
Trong cc luật sinh c vế trái là simple, ta chọn...
... match(‘-’) ; term( ) ; putchar (‘-’) ;
}
else break;
}
Chương trìnhCdịch biểu th c trung tố sang hậu tố
Chương trình nguồn C hoàn chỉnh cho chươngtrìnhdịchc mã như sau :
# include< ... toàn cc
Hình 2. 13 - C i đặt giao diện c a bộ phân tích từ vựng
Nếu ngôn ngữ c i đặt không cho phép trả về cc cấu tr c dữ liệu từ cc hàm thì
token và cc thu c tính c a nó phải đư c truyền ... nhập c ng c thể c n đư c lưu lại cho c ng vi c ghi nhận
lỗi bởi vì c n phải chỉ ra vị trí lỗi trong đoạn chương trình.
Ðể tránh vi c phải quay lui, một số trìnhbiêndịch sử dụng c chế đ c trước...
...
ra c ch sinh mã chươngtrình cho nó. Máy ảo này bao gồm 3 thành phần:
1. Vùng nhớ chỉ thị (instructions): là nơi chứa cc chỉ thị. Cc chỉ thị này rất
hạn chế và đư c chia thành 3 nhóm chính: ... kh c đi bằng cc câu lệnh nhảy c điều kiện ho c không điều kiện. C
một số cc tùy chọn dùng để mô tả ccđích nhảy :
1. Toán hạng làm chỉ thị cho biết vị trí đích.
2. Toán hạng làm chỉ ... Stack.
33
div R-value d
push 1 53 +
R- value m :=
*
5. Cc chỉ thị điều khiển trình tự
Máy ảo kiểu Stack th c hiện cc chỉ thị theo đúng thứ tự liệt kê trừ khi đư c yêu
c u th c hiện...
... tất ccc chuỗi c a cc chữ c i bao gồm c chuỗi rỗng.
5. L( L ∪ D)* là tập hợp tất ccc chuỗi mở đầu bằng một chữ c i theo sau là
chữ c i hay chữ số
6. D
+
là tập hợp tất ccc chuỗi ... cc kỹ thuật tạo ra bộ phân
tích từ vựng. C thể,
• Xây dựng cc lư c đồ cho cc biểu th c chính quy mô tả ngôn ngữ c n đư c
viết trìnhbiên dịch. Sau đó chuyển đổi chúng sang một chươngtrình ... số chương
trình xử lý chuyên dụng sẽ làm giảm đáng kể thời gian đ c dữ liệu từ chươngtrình
nguồn và nhóm cc token.
3. Tính đa tương thích (mang đi dễ dàng) c a trìnhbiêndịchc ng đư c cải...
... th c chính quy trong lex.l là cc đoạn
chương trìnhC đư c chuyển sang lex.yy .c. Cuối c ng trìnhbiêndịchC sẽ dịch
lex.yy .c thành chươngtrình đối tượng a.out, đó là bộ phân tích từ vựng c ...
Hình 3. 9 - Sơ đồ dịch cho cc số không dấu trong Pascal
C nhiều c ch để tránh cc đối sánh dư thừa trong cc sơ đồ dịch trên. Một c ch là
viết lại cc sơ đồ dịch bằng c ch tổ hợp chúng thành ...
28
delim
29
delim
30
other
*
start
Hình 3. 10 - Sơ đồ dịch cho cc khoảng trắng
2. C i đặt một sơ đồ dịch
Dãy cc sơ đồ dịchc thể đư c chuyển thành một chươngtrình để tìm kiếm token
đư c đ c tả...
... trình đều ccc quy t c diễn tả c u tr c cú pháp c a ccchương
trình c định dạng đúng. Cc cấu tr c cú pháp này đư c mô tả bởi văn phạm phi ngữ
c nh. Phần đầu c a chương nh c lại khái niệm ... nắm đư c:
• Cc phương pháp phân tích c pháp và cc chiến lư c ph c hồi lỗi.
• C ch tự c i đặt một bộ phân tích c pháp từ một văn phạm phi ngữ c nh x c
định.
• C ch sử dụng c ng c Yacc để ... tích c pháp c ng cc chế ghi nhận cc lỗi
c pháp theo một phương th c linh hoạt và c khả năng ph c hồi đư ccc lỗi thường
gặp để c thể tiếp t c xử lý phần c n lại c a chuỗi nhập.
Chương...
... kết th c bằng cc cạnh c nhãn X
1
X
2
X
n
Một c ch c thể, sơ đồ dịch đư c vẽ theo cc nguyên t c sau:
1. Mỗi ký hiệu chưa kết th c tương ứng với một sơ đồ dịch trong đó nhãn
cho cc cạnh ... c nh
c nhãn là ký hiệu chưa kết th c.
Cc sơ đồ dịch tương ứng :
E
2
0
1
T
E’
7
8
9
T‘
F
T
11
12
13
T’
F
10
*
ε
T
’
15
16
17
) E
14 ... (E) | id
Một chươngtrình phân tích c pháp dự đoán đư c thiết kế dựa trên sơ đồ dịch
cho cc ký hiệu chưa kết th c trong văn phạm. Nó sẽ c gắng so sánh cc ký hiệu kết
th c với chuỗi nguyên...
... quát gọi là
phân tích c pháp Shift -Reduce. Một dạng dễ c i đặt c a nó gọi là phân tích c
pháp thứ b c toán tử (Operator - Precedence parsing) c ng sẽ đư ctrình bày và cuối
c ng, một phương ... quát hơn c a kỹ thuật Shift - Reduce là phân tích c
pháp LR (LR parsing) sẽ đư c thảo luận.
1. Bộ phân tích c pháp Shift - Reduce
Phân tích c pháp Shift - Reduce c gắng xây dựng một c y phân ... một chuỗi con c thể đối sánh đư c với vế phải c a một luật sinh nào đó thì
chuỗi con này sẽ đư c thay thế bởi ký hiệu vế trái c a luật sinh đó. Và nếu chuỗi con
đư c chọn đúng tại mỗi bư c, ...
...
0
s
411
s
512
1 2 3
1
acc
2
s
6
3
r
2
411
810 7 13
512
r
4
r
4
6
s
411
s
512
810 9
7 13
r
3
r
3
810
r
5
r
5
9
r
1
Hình 4 .15 - Bảng phân tích c pháp LALR ... đư c gọi là họ tập hợp m c LALR (1) .
10 2
6
s
11
s
12
10 9
7
r
3
8
r
5
9
r
1
10
r
5
11
s
11
s
12
10 13
12
r
4
13
r
3
Hình 4 .14 - Bảng phân tích c pháp LR chính ... m c LR (1) tìm trên tất ccc tập hợp
c c ng hạt nhân này và thay thế cc tập hợp này bởi hợp c a chúng.
3. Ðặt C& apos; = { I
0
, I
1
, , I
m
} là kết quả thu đư c từ C bằng c ch hợp c c...
...
generator) hỗ trợ cho vi c xây dựng kỳ đầu c a một trìnhbiện dịch. Một trong những
bộ sinh bộ phân tích c pháp là YACC (Yet Another Compiler - Compiler). Phiên bản
đầu tiên c a Yacc đư c S .C. Johnson ... Yacc đư c cài đặt như một lệnh
c a hệ UNIX và đã đư c dùng để c i đặt cho hàng trăm trìnhbiên dịch.
10 7
E Æ E + T | T
T Æ T * F | F (2)
F Æ (E) | id
Văn phạm này x c định rằng + c ... không phải là LR.
Tuy nhiên c một số văn phạm mơ hồ lại rất c ích cho vi c đ c tả và c i đặt ngôn
ngữ. Chẳng hạn văn phạm mơ hồ cho kết c u biểu th c đ c tả đư c một c ch ngắn gọn
và tự nhiên...
... thêm cc thủ t c kh c, chúng c thể đư cbiêndịch ho c đư c
tải vào y.tab .C giống như mọi chươngtrìnhC kh c.
10 7
4 .17 . Viết một chươngtrình Yacc nhận chuỗi input là cc biểu th c số ...
11 0
2. Ð c tả YACC
Một chươngtrình nguồn Yacc bao gồm 3 phần:
Phần khai báo
% %
C c luật dịch
%%
C c thủ t c
Ví dụ 4 .30 : Ðể minh họa vi c chuẩn bị một chươngtrình nguồn Yacc, chúng ... chứa
chương trình phân tích c pháp LR nhờ lệnh cc y.tab .C - ly chúng ta thu đư c một
chương trình đối tượng a.out th c hiện quá trìnhdịch đư c đ c tả bởi chươngtrình
Yacc ban đầu. Nếu c n...
... h c xong chương này, sinh viên phải nắm đư c:
• Cc cách kết hợp cc luật sinh với cc luật ngữ nghĩa: Định nghĩa tr c tiếp c
pháp và Lư c đồ dịch.
• Biết c ch thiết kế chươngtrình – bộ dịch ... ở ccchương sau: 6, 8, 9.
Hai c ch để kết hợp cc luật sinh với cc luật ngữ nghĩa đư ctrình bày trong chương
là: Định nghĩa tr c tiếp c pháp và Lư c đồ dịch. Ở m c quan niệm, bằng c ch ... thừa c a một trong cc ký hiệu văn phạm trong vế phải
c a luật sinh và c1 , c2 , , ck là cc thu c tính c a cc ký hiệu văn phạm c a
luật sinh.
Ta nói b phụ thu c c1, c2 , , ck.
1. Thu c tính...