1. Trang chủ
  2. » Công Nghệ Thông Tin

Chương trình dịch, bộ công cụ Flex Bison

32 709 6

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 495 KB

Nội dung

Chương trình dịch: Là một chương trình máy tính làm công việc dịch một chuỗi các câu lệnh được viết bằng một ngôn ngữ lập trình (mã nguồn), thành một chương trình tương đương nhưng ở dưới dạng một ngôn ngữ mới (gọi là ngôn ngữ đích hay mã đích) và thường là ngôn ngữ ở cấp thấp hơn, như ngôn ngữ máy Bộ phân tích cú pháp BISON: Bộ phát sinh ra trình phân tích cú pháp (Bắt nguồn từ Yacc (Yet Another Compiler Compiler), Stephen C. Johnson, Bell Lab, 1970) Bộ phân tích từ vựng FLEX: Bộ phát sinh trình phân tích từ vựng – để hỗ trợ Bison trong việc xác định các token từ chuỗi nhập (Bắt nguồn từ lex, Mike Lesk và Eric Schmidt).

Trang 1

Tìm hiểu Chương trình dịch, bộ

công cụ Flex & Bison

Giảng viên hướng dẫn: TS Phạm Đăng Hải

Học viên thực hiện: 1

2

Lớp: 3

Trang 2

NỘI DUNG TÌM HIỂU

 TỔNG QUAN VỀ CHƯƠNG TRÌNH DỊCH

 THIẾT KẾ CHƯƠNG TRÌNH DỊCH

 BỘ CÔNG CỤ FLEX VÀ BISON

 DEMO

Trang 3

 Là một chương trình máy tính làm công việc dịch

một chuỗi các câu lệnh được viết bằng một ngôn ngữ lập trình (mã nguồn), thành một chương trình tương đương nhưng ở dưới dạng một ngôn ngữ mới (gọi là ngôn ngữ đích hay mã đích) và thường là

ngôn ngữ ở cấp thấp hơn, như ngôn ngữ máy

I TỔNG QUAN VỀ CHƯƠNG TRÌNH DỊCH

Trang 4

 Cấu trúc của trình biên dịch

Trang 5

 Quá trình thực hiện

1 Giai đoạn tiền xử lý:

Analysis), phân tích ngữ nghĩa

2 Giai đoạn dịch:

mã máy

3 Giai đoạn liên kết (link):

khác nhau được liên kết lại với nhau để tạo thành chương trình đích duy

nhất (executable hay exe)

I TỔNG QUAN VỀ CHƯƠNG TRÌNH DỊCH

Trang 6

 Quá trình dịch ngôn ngữ C

Trang 7

II THIẾT KẾ CHƯƠNG TRÌNH DỊCH

 Phân tích từ vựng

 Là công việc đọc chương trình nguồn từ trái sang phải

(hay được gọi là quá trình quét nguyên liệu) để tách ra thành các thẻ (token)

Trang 8

Token Mô tả

CONSTANT Các hằng số với các kiểu dữ liệu (số nguyên, số thực,…)

STRING_VALUE Chuỗi hằng (ví dụ “hello world”)

IDENTIFIER Các danh biểu trong chương trình, bao gồm tên biến, tên hàm (bắt đầu là chữ cái, theo

sau là chữ hoặc số)

RIGHT_OP Toán tử shift right

LEFT_OP Toán tử shift left

INC_OP Toán tử ++

Bảng: Một số token của ngôn ngữ C

 Phân tích từ vựng

Trang 9

II THIẾT KẾ CHƯƠNG TRÌNH DỊCH

 Phân tích cú pháp

 Trình phân tích cú pháp (parser) nhận chuỗi các token từ

trình phân tích từ vựng và xác định rằng chuỗi này có hợp lệ hay không bằng cách tạo ra cây phân tích cú pháp

từ văn phạm của ngôn ngữ nguồn

Bảng danh biểu

cây phân tích cú pháp  

token

yêu cầu token

ngôn ngữ nguồn

biểu diễn trung gian

Trang 10

 Phân tích cú pháp

 Phân tích cú pháp từ trên xuống (Top-Down Parsing)

hay phân tích cú pháp dự đoán (Predictive Parser): Bắt đầu từ nút gốc

 Phân tích cú pháp từ dưới lên (Bottom-Up Parsing): Bắt

đầu từ chuỗi token và cố gắng tìm kiếm luật sinh thích hợp để có thể dẫn về ký tự bắt đầu của văn phạm

Trang 11

II THIẾT KẾ CHƯƠNG TRÌNH DỊCH

 Tổ chức bảng ký hiệu

 Bảng ký hiệu là một cấu trúc dữ liệu mà mỗi phần tử là

một mẫu tin dùng để lưu trữ một token được bộ phân tích từ vựng nhận biết và các thông tin của token đó

 Các thủ tục trên bảng ký hiệu chủ yếu liên quan đến việc

lưu trữ và truy xuất các trị từ vựng Khi một trị từ vựng được lưu trữ thì token kết hợp với nó cũng được lưu Hai thao tác sau được thực hiện trên bảng ký hiệu

o Insert (s, t): Trả về chỉ mục của một ô mới cho chuỗi s, token t.

o Lookup (s): Trả về chỉ mục của ô cho chuỗi s hoặc 0 nếu chuỗi s

không tồn tại.

Trang 12

 Tổ chức bảng ký hiệu

 Thông thường, một bảng ký hiệu gồm hai mảng :

 1 Mảng lexemes (trị từ vựng) dùng để lưu trữ các chuỗi ký tự tạo ra

một danh biểu, các chuỗi này ngăn cách nhau bởi các ký tự EOS (end -

of - string).

 2 Mảng symtable với mỗi phần tử là một mẩu tin (record) bao gồm hai

trường, trường con trỏ lexptr trỏ tới đầu trị từ vựng và trường token

Trang 13

III BỘ CÔNG CỤ FLEX VÀ BISON

 BISON: Bộ phát sinh ra trình phân tích cú pháp

(Bắt nguồn từ Yacc (Yet Another Compiler Compiler), Stephen C Johnson, Bell Lab, 1970)

 FLEX: Bộ phát sinh trình phân tích từ vựng – để

hỗ trợ Bison trong việc xác định các token từ chuỗi nhập (Bắt nguồn từ lex, Mike Lesk và Eric

Schmidt).

Trang 14

 FLEX: Bộ phát sinh trình phân

tích từ vựng – để hỗ trợ Bison trong việc xác định các token từ chuỗi nhập (Bắt nguồn từ lex, Mike Lesk và Eric Schmidt).

 BISON: Bộ phát sinh ra trình

phân tích cú pháp (Bắt nguồn

từ Yacc (Yet Another Compiler Compiler), Stephen C Johnson, Bell Lab, 1970)

Trang 15

III BỘ CÔNG CỤ FLEX VÀ BISON

 FLEX

 Là 1 open-source tool cho Bộ phát sinh từ vựng

Flex đọc user-specified input files

• Nếu không có file => Đọc standard file

Flex INPUT file:

• Là một mô tả của bộ scanner sinh mã

• Miêu tả là các cặp Biểu thức Regular Expressions và C

Code gọi là RULES

Trang 16

 FLEX Flex Source

File (sample.l)

Flex Compiler (Flex)

Lexical Analyzer Code (lex.yy.c)

C Compiler

Lexical Analyzer executable

Input Text File

Output: Tokens

Parser

Trang 17

III BỘ CÔNG CỤ FLEX VÀ BISON

 FLEX & BISON

.lex

Trang 18

 Flex file format

 Definitions >> rules >> user-defined routines

Trang 19

III BỘ CÔNG CỤ FLEX VÀ BISON

 Flex Source

 Rules

o Format

o <regular-expression> {<actions>}

o When a Lexical Analyzer is run (or the scanning routine yylex() is

called) it analyzes the input for the occurrences of text patterns that match the regular expressions When ever it finds one it executes the corresponding action.

o Flex stores the matched text in a global string variable called yytext

[0-9]+ { printf(“An integer %s \n”, yytext); } [a-z][a-z0-9]* { printf(“An identifier %s \n”, yytext);}

if | then | begin | end | function { printf(“A Keyword %s \n”, yytext); }

Trang 20

int main(void){ /**/

yyparse();

return 0;

}

Trang 21

III BỘ CÔNG CỤ FLEX VÀ BISON

 BISON

 Là bộ phát sinh ra trình phân tích cú pháp có nhiệm vụ

chuyển đổi một văn bản chưa có cú pháp thành một deterministic [LR or generalized LR (GLR)] parser

 Có thể phát triển trên nhiều ngôn ngữ lập trinh khác

nhau

 Tương thích với YACC

 Dựa trên C\C++ và chạy được trên Java

Trang 23

III BỘ CÔNG CỤ FLEX VÀ BISON

 BISON

Bas.y (Parser Input):

o Y.tab.h (Parser Output): là file header, định nghĩa các token

như NUM, OPA, etc., và biến yylval để truyền sang bison code các giá trị của tokens

o Y.tab.c (Parser Output): chứa mã C\C++ cho bộ phân tích

(là function có tên yyparse())

Bas.l (Lexica Analyzer Input):

o Sử dụng các định nghĩa trong (Y.tab.h) để thực thi yylex() function và truyền các thông tin trả lại.

o Lex.yy.c (Lexica Analyzer Output): generated by FLEX

that contains, among other things, the definition of the yylex() function

Trang 24

 Ví dụ BISON: Vidu1.y

Vidu1.y

/* Phần khai báo: Chứa các token được định nghĩa */

%token EVEN ODD

/* Phần mô tả tập luật sinh */

%%

input:

EVEN { printf("EVEN NUMBER\n"); return 0; }

|ODD { printf("ODD NUMBER\n"); return 0; }

Trang 25

return 0;

} int yyerror(char *errormsg){

fprintf(stderr, "%s\n", errormsg);

exit(1);

}

Trang 26

hi:

HI { printf("Xin chao!\n"); } ;

bye:

BYE { printf("Tam biet!\n"); exit(0); }

IV DEMO (2/7)

Trang 27

 Ví dụ 1:

Gõ lệnh flex Hello.l

Kết quả dược file lex.yy.c

Gõ lệnh bison –dy Hello.y

Kết quả dược 2 file y.tab.c và

y.tab.h

Gõ lệnh gcc lex.yy.c y.tab.c

Kết quả dược file a.exe

Để chạy chương trình, gõ a

Gõ “xin chao” hoặc “hi”, hoặc

“hello”, hoặc “bye”,… để kiểm tra

Trang 28

return 0;

} int yyerror(void){

printf("Error\n");

exit(1);

}

IV DEMO (4/7)

Trang 29

EVEN { printf("EVEN NUMBER\n"); return 0; }

|ODD { printf("ODD NUMBER\n"); return 0; }

;

IV DEMO (5/7)

Trang 30

 Ví dụ 2:

Gõ lệnh flex vidu2.l

Kết quả dược file lex.yy.c

Gõ lệnh bison –dy vidu2.y

Kết quả dược 2 file y.tab.c và

Trang 31

 Ví dụ 3: Chương trình

Calculator

Gõ lệnh flex calculator.l

Kết quả dược file lex.yy.c

Gõ lệnh bison –dy calculator.y

Kết quả dược 2 file y.tab.c và

Trang 32

CHÂN THÀNH CẢM ƠN

Ngày đăng: 16/07/2018, 15:09

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w