. 98 TỔNG QUAN VỀ BIÊN DỊCH
Cài đặt sơ đồ chuyển vị
Dãy các sơ để chuyển vị cĩ thể được chuyển thành một chương trình tìm kiếm thế từ được đặc tả bằng các sơ đồ. Chúng ta chấp nhận một phương pháp tiếp cận cĩ hệ
118 PHÂN TÍCH TỪ VỰNG
thống để cĩ thể hoạt động được trên tất các sơ đồ chuyển vị và xây dựng các chương
trình với kích thước tỷ lệ với số trạng thái và cạnh trong sơ đồ.
Mỗi trạng thái tương ứng với một đoạn mã. Nếu cĩ các cạnh đi ra khỏi một trạng thái thì đoạn mã của nĩ đọc một ký tự và chọn một cạnh để đi tiếp nếu cĩ thể. Hàm nextehaz() được dùng để đọc ký tự tiếp theo từ vùng đệm nguyên liệu, di chuyển con trỏ tới tại mỗi lời gọi và trả về ký tự được đọc.Š° Nếu cĩ một cạnh với nhãn là ký tự
được đọc, hoặc là lớp ký tự chứa ký tự được đọc thì quyển điều khiển sẽ được trao cho đoạn mâ của trạng thái được chỉ đến bởi cạnh đĩ. Nếu khơng cĩ một cạnh như thế, và
trạng thái hiện hành khơng phải là trạng thái cho biết đã tìm ra một thẻ từ thì thủ tục £ai1() được kích hoạt để dịch lui con trỏ tới về vị trí của eon trỏ đầu và khởi hoạt
tìm kiếm thẻ từ được đặc tả bằng sơ để chuyển vị kế tiếp. Nếu khơng cĩ sơ đổ nào khác để thử, £fai1(} sẽ gọi một thủ tục khắc phục lỗi,
Để trả về các thẻ từ, chúng ta dùng một biến tồn cục lexieal_value. Nĩ được
gán cho các con trỏ được các hàm install_id() và install_num () trả về, tương ứng
khi tìm ra một định danh hoặc một số. Lớp thể từ được trả vẻ bởi thủ tục chính của thể phân từ vựng cĩ tên là nexttoken ().
ảnt state = 0, start = 0;
int 1exical value; /* để “trả về” thành phản thứ hai của thẻ từ */
int fail(} {