...
Ngoài trìnhbiên dịch, chúng ta c thể c n dùng nhiều chương trình kh c nữa để
tạo ra một chương trìnhđíchc thể th c thi đư c (executable). Cc chương trình đó
gồm: Bộ tiền xử lý, Trìnhdịch ... 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ịch
Chương ... phải c một trìnhbiêndịch th c hiện vi c chuyển đổi chương trình đó sang
chương trình ở dạng ngôn ngữ đích. Chương này trình bày một c ch tổng quan về c u
tr c của một trìnhbiêndịch và mối...
... 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 ... theo
c ch này, thứ tự in ra cc ký tự sẽ rất quan trọng.
Chú ý rằng cc định nghĩa tr c tiếp c pháp đều c đ c điểm sau: chuỗi biểu diễn
cho bản dịchc a ký hiệu chưa kết th c ở vế trái c a ... - 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ên dịch...
... 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, vì 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 ... toán h c, cc toán tử * và / c độ ưu tiên cao hơn + và
C pháp cho biểu th c :
Văn phạm cho cc biểu th c số h c có thể xây dựng từ bảng kết hợp và ưu tiên c a
c c toán tử. Chúng ta c thể bắt ... một chuỗi cc lệnh, phân c ch bởi dấu ; c a khối begin - end trong
Pascal. Một danh sách rỗng cc lệnh c thể c giữa begin và end.
Chúng ta xây dựng văn phạm bởi cc luật sinh sau:
block...
... phân tích từ vựng cho chương trìnhdịchcc
biểu th c số h c. Hình sau đây gợi ý một c ch c i đặt giao diện c a bộ phân tích từ
vựng đư c viết bằng C dưới dạng hàm lexan. Lexan đ c và đẩy cc ký ... 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 ... 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ương trìnhdịchc mã như sau :
# include<...
... 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ỉ ... đỉnh Stack,
kết quả c ng đư c lưu vào đỉnh STACK. Một phép toán ph c tạp hơn c thể c n phải
đư c cài đặt như một loạt chỉ thị c a máy.
Mã chương trình máy ảo cho một biểu th c số h c sẽ mô ... này, chúng ta sẽ trình bày khái quát về một máy ảo kiểu Stack và chỉ
ra c ch sinh mã chương trì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ỉ...
... hợp cc chữ c i và số.
2. LD là tập hợp cc chuỗi bao gồm một chữ c i và một chữ số.
3. L
4
là tập hợp tất ccc chuỗi 4 chữ c i.
4. L
*
là tâp hợp tất ccc chuỗi c a cc chữ c i bao ... 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ương trình ... động theo mẫu (pattern). Trư c tiên, người thiết kế trìnhbiêndịch phải mô tả cc
mẫu đư c x c định bằng cc biểu th c chính quy, sau đó sử dụng trìnhbiêndịchc a
Lex để tự động tạo ra một...
... đồ 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 một - một c ng ... 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ương trình đối tượng a.out, đó là bộ phân tích từ vựng c ...
chương trìnhC là lex.yy .c. Chương trình này bao gồm cc đ c tả về sơ đồ dịch đư c
xây dựng từ cc biểu th c chính quy c a lex.l, kết hợp với cc thủ t c chuẩn nhận dạng
trị từ vựng. Cc hành vi...
... 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 ...
• 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 để sinh ra bộ phân tích c pháp.
Kiến th c cơ bản:
Sinh viên phải ccc kiến ... chương trình đúng.
3. Cc chiến lư c ph c hồi lỗi
Ph c hồi lỗi là kỹ thuật vượt qua cc lỗi để tiếp t c quá trình dịch. Nhiều chiến
lư c ph c hồi lỗi c thể dùng trong bộ phân tích c pháp. Mặc...
... 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 ... id
Một chương trì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 liệu ...
+
ε
E
’
Hình 4.5 - Cc sơ đồ dịch cho cc ký hiệu văn phạm
C c sơ đồ dịchc thể đư c đơn giản hóa bằng c ch thay sơ đồ này vào sơ đồ
kh c, những thay thế này tương tự như những...
... 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 tích c pháp cho
chuỗi nhập bắt đầu từ nút lá và đi lên hướng về nút g c. Ðây c thể xem là quá trình ... kết th c không ảnh hưởng gì đến vi c phân tích c pháp, nên
chúng ta không c n phải phân biệt chúng.
Giải thuật 4.5: Phân tích c pháp thứ b c toán tử
Input: Chuỗi nhập w và bảng cc quan ... ⇒
rm
aAbcde ⇒
rm
abbcde
(Dẫn xuất phải nhất là chuỗi cc thay thế ký hiệu chưa kết th c phải nhất)
2. Handle
Handle c a một chuỗi là một chuỗi con hợp với vế phải c a luật sinh và nếu chúng...
... tập hợp cc m c LR(1) C = { I
0
, I
1
, , I
n
} c thể ccc tập hợp cc
m c có chung một hạt nhân.
Ví dụ 4.27: Trong ví dụ 4.25, ta thấy trong họ tập hợp m c có một số cc m c có
chung hạt ... thường đư c sử dụng trong th c tế
bởi vì những bảng LALR thu đư c nói chung là nhỏ hơn nhiều so với cc bảng LR
chính t c và phần lớn cc kết c u c pháp c a ngôn ngữ lập trình đều c thể đư c diễn ...
else if action[s, a] = accept then
return
else error ( )
end
Ví dụ 4.18: Hình sau trình bày cc hàm action và goto c a bảng phân tích c pháp
LR cho văn phạm c a cc biểu th c số h c dưới...
...
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 ... 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 hơn bất kỳ một văn phạm không mơ hồ nào kh c. Văn phạm mơ hồ c n
đư c dùng trong vi c tách biệt cc kết c u c pháp thường ... 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.
107
E Æ E + T | T
T Æ T * F | F (2)
F Æ (E) | id
Văn phạm này x c định rằng + c ...
... 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ương trìnhC kh c.
107
4.17. Viết một chương trình Yacc nhận chuỗi input là cc biểu th c số ... 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ương trình
Yacc ban đầu. Nếu c n ... trên. Chương trình y.tab .C là một biểu diễn c a bộ
phân tích c pháp LALR đư c viết bằng ngôn ngữ C cùng với cc thủ t cC kh c có
thể do người sử dụng chuẩn bị. Bằng c ch dịch y.tab .C cùng...
... 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ương trình – bộ dịch ... nghĩa tr c tiếp c pháp ho c lư c đồ dịch, ta phân tích dòng thẻ từ, xây
dựng c y phân tích c pháp và duyệt c y khi c n để đánh giá cc luật ngữ nghĩa tại cc
nút c a c y.
M c tiêu c n đạt: ... ở cc chươ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...
... chỉ c ý nghĩa về
mặt logic.
3. Ðồ thị c hướng không tuần hoàn cho biểu th c (Directed Acyclic Graph - DAG)
DAG c ng giống như c y c pháp, tuy nhiên trong c y c pháp cc biểu th c con ... Ðịnh nghĩa tr c tiếp c pháp để tạo c y c pháp cho biểu th cCc nút trên c y phân tích c pháp c nhãn là cc ký hiệu chưa kết th c E và T
sử dụng thu c tính tổng hợp nptr để lưu con trỏ trỏ ...
entryc
Hình 5.9 - Xây dựng c y c pháp cho a - 4 + c
Luật ngữ nghĩa cho phép tạo ra c y c pháp.
C y c pháp c ý nghĩa về mặt c i đặt c n c y phân tích c pháp chỉ...