Skip to main content

Phân tích từ vựng – Wikipedia tiếng Việt


Quá trình phân tích từ vựng trong các giai đoạn xử lý.

Trong ngành khoa học máy tính, phân tích từ vựng (en:Lexical Analysis, còn được gọi là scanning hoặc lexing) là một quá trình chuyển đổi chuỗi ký tự nguồn thành một chuỗi liên tiếp các đoạn ký tự ngắn hơn đã được phân loại, gọi là tokens. Chương trình dùng để phân tích từ vựng được gọi là bộ phân tích từ vựng (tiếng Anh là Lexer).





Token (dấu hiệu) tương tự như loại từ trong ngôn ngữ học. Tương tự như danh từ hay tính từ, động từ, token sẽ được định nghĩa gồm từ khóa (keyword), định danh (identifier), số nguyên, số chấm động tùy theo đặc điểm của trình biên dịch.

Để biểu diễn các tokens, người ta dùng biểu thức chính quy.

a: có xuất hiện ký tự 'a'
ab: có xuất hiện ký tự 'b' theo sau ký tự 'a' (theo đúng thứ tự)
a|b: có 'a' hoặc có 'b'
a*: xuất hiện nhiều hoặc không xuất hiện ký tự 'a'
a+: xuất hiện nhiều hoặc ít nhất là một ký tự 'a'
a3: xuất hiện 3 ký tự a
a?: xuất hiện a hoặc không xuất hiện

Dựa vào các ký hiệu, chúng ta có thể biểu diễn biểu thức chính quy của một số nguyên bất kỳ như sau:

digits = '0' | '1' | '2' | '3' | '4 | '5' | '6' | '7' | '8' | '9'
integer = '−'?(digits)+


Các nhiệm vụ của quá trình phân tích từ vựng[sửa | sửa mã nguồn]


Quá trình phân tích từ vựng tạo ra các dấu hiệu (token) cho bước phân tích cú pháp tiếp theo.

  • Đọc các ký tự đầu vào

  • Phát sinh các chuỗi dấu hiệu (token) đầu ra

  • Bỏ khoảng trắng, cách dòng, tab

  • Ghi lại vị trí các dấu hiệu được dùng cho bước xử lý tiếp theo.

Các công cụ phát sinh mã phân tích từ vựng[sửa | sửa mã nguồn]


  • ANTLR - ANTLR phát sinh cú pháp predicated-LL(k).

  • Flex - Biến thể thay thế của dạng cổ điển "lex" (C/C++).

  • JFlex - Viết lại của JLex.

  • Ragel - Máy quét từ vựng hỗ trợ đầu ra cho mã nguồn C, C++, C#, Objective-C, D, Java, Go và Ruby.

Các công cụ phát sinh có thể xử lý Unicode:


  • JavaCC - JavaCC phát sinh phân tích từ vựng viết trong Java.

  • JLex - Công cụ phát sinh phân tích từ vựng dành cho Java.

  • Quex (hoặc "Queχ") - Công cụ phát sinh phân tích từ vựng nhanh cho C và C++.



  • Compiling with C# and Java, Pat Terry, 2005, ISBN 032126360X624

  • Algorithms + Data Structures = Programs, Niklaus Wirth, 1975, ISBN 0-13-022418-9

  • Compiler Construction, Niklaus Wirth, 1996, ISBN 0-201-40353-6

  • Sebesta, R. W. (2006). Concepts of programming languages (Seventh edition) pp. 177. Boston: Pearson/Addison-Wesley.

  • Word Mention Segmentation Task analysis page

  • On the applicability of the longest-match rule in lexical analysis

Comments

Popular posts from this blog

Reuben Chapman - Wikipedia

Reuben Chapman Thống đốc thứ 13 của Alabama Tại văn phòng 16 tháng 12 năm 1847 - 17 tháng 12 năm 1849 Trước đó là Joshua L. 19659006] Thành công bởi Henry W. Collier Thành viên của Hoa Kỳ Hạ viện từ quận 6 của Alabama Tại văn phòng Ngày 4 tháng 3 năm 1843 - 3 tháng 3 năm 1847 Trước đó là Quận không hoạt động ] Williamson Robert Winfield Cobb Thành viên của Hoa Kỳ Hạ viện từ quận lớn của Alabama Tại văn phòng 4 tháng 3 năm 1841 - 3 tháng 3 năm 1843 Trước đó là Quận không hoạt động Quận không hoạt động Thành viên của Hoa Kỳ Hạ viện từ quận 1 của Alabama Tại văn phòng Ngày 4 tháng 3 năm 1835 - ngày 3 tháng 3 năm 1841 Trước Clement Comer Clay Thành công bởi không hoạt động Thông tin cá nhân Sinh ( 1799-07-15 ) ngày 15 tháng 7 năm 1799 17, 1882 (1882-05-17) (ở tuổi 82) Huntsville, Alabama, Mỹ - 17 tháng 5 năm 1882) là một luật sư và chính trị gia người Mỹ. Sinh ngày 15 tháng 7 năm 1799 tại Bowling Green, Virginia, ông chuyển đến Alabama vào...

Maurice Halbwachs - Wikipedia

Maurice Halbwachs ( Tiếng Pháp: [mɔˈʁis ˈalbvaks] ; 11 tháng 3 năm 1877 - 16 tháng 3 năm 1945) là một nhà triết học và xã hội học người Pháp nổi tiếng vì đã phát triển khái niệm về ký ức tập thể. Đời sống và giáo dục sớm [ chỉnh sửa ] Sinh ra ở Reims, Pháp, Halbwachs đã tham dự École Normale Supérieure ở Paris. Ở đó, ông học triết học với Henri Bergson, người có ảnh hưởng lớn đến suy nghĩ của ông. Ông đã tổng hợp trong Triết học vào năm 1901. Ông đã giảng dạy tại nhiều lycées trước khi đến Đức vào năm 1904, nơi ông học tại Đại học Gottingen và làm việc trên danh mục các bài báo của Leibniz. Ông được đề cử đồng biên tập một phiên bản tác phẩm của Leibniz mà không bao giờ thành hiện thực. Ông trở lại Pháp vào năm 1905 và gặp Émile Durkheim, người đã khơi dậy mối quan tâm của ông đối với xã hội học. Ông sớm gia nhập ban biên tập của Lnnnn Sociologique nơi ông làm việc với François Simiand chỉnh sửa các phần Kinh tế và Thống kê. Năm 1909, ông trở về Đức để học chủ nghĩa M...

Olin J. Eggen - Wikipedia

Olin Jeuck Eggen (9/7/1919 - 2/10/1998) là một nhà thiên văn học người Mỹ. Tiểu sử [ chỉnh sửa ] Olin Jeuck Eggen được sinh ra cho Olin Eggen và Bertha Clare Jeuck tại làng Orfordville ở Rock County, Wisconsin. Cả hai cha mẹ anh đều là người Na Uy. Ông tốt nghiệp Đại học Wisconsin Wisconsin Madison năm 1940. Sau khi phục vụ trong Thế chiến II trong OSS, ông trở lại trường đại học và nhận bằng tiến sĩ. trong vật lý thiên văn năm 1948. Ông được biết đến như một trong những nhà thiên văn học quan sát giỏi nhất thời bấy giờ. Ông được biết đến nhiều nhất với bài báo năm 1962 với Donald Lynden-Bell và Allan Sandage, lần đầu tiên đề xuất rằng Dải Ngân hà đã sụp đổ khỏi đám mây khí. Đầu tiên, ông đưa ra khái niệm được chấp nhận hiện nay về các nhóm sao di chuyển. Ông đã giành được Bài giảng Henry Norris Russell vào năm 1985. Trong thời gian đó, ông giữ các vị trí tại Đài thiên văn Lick (1948 ví1956), Đài thiên văn Hoàng gia Greenwich (1956 mật1961), Viện Công nghệ California, Mt. Đà...