Những khái niệm cơ bản

Trình phân tích cú pháp - Syntax Parser

Nhớ lại năm đó khi mình còn lê lết ở lớp cao học, một người Thầy dạy môn Triết Học đã nói với lớp rằng thầy rất ấn tượng và tò mò về trình biên dịch (compiler) bởi vì nó có thể dịch những đoạn mã lệnh mà con người viết sang ngôn ngữ mà máy có thể hiểu và thực thi được. Mặc dù lớp minh đa số là dân IT nhưng cũng không ai mạnh dạn đứng lên giải thích (trong đó có mình ^_^).
Một phần cũng vì nó khá đa dạng, không chỉ tuỳ vào mỗi ngôn ngữ mà mỗi ngôn ngữ còn có thể có các trình dịch khác nhau. Đơn cử như JavaScript có nhiều trình dịch được các ông lớn phát triển như Google, Mozilla,... Ta gọi chung chúng là JavaScript engine (js engine). Bây giờ nói về Trình phân tích cú pháp (syntax parser). Thằng này thì nó là một phần của js engine.

Syntax parser: Là chương trình đọc những đoạn mã code mà ta viết ra, từng ký tự một, nó xác định xem cú pháp có hợp lệ hay không cũng như xác định code của ta có mục đích gì.
Nó dịch các đoạn code của chúng ta thành tập các chỉ dẫn mà máy tính có thể hiểu và thực thi được.
Có một điểm quan trọng cần lưu ý là trong quá suốt quá trình ấy, người viết ra trình dịch này có thể làm thêm một số tác vụ khác (tác vụ này không nằm trong code của chúng ta). Một ví dụ kinh điển là chúng ta hay quên dấu chấm phẩy sau khi kết thúc một dòng lệnh. Trình dịch sẽ tự thêm dấu chấm phẩy cho chúng ta - automatic semicolon insertion. Điều này nguy hiểm đối với đoạn lệnh return như hình bên dưới, kết quả trả về là undefined thay vì chuỗi 'hello world'. Ta nên nhớ luôn đặt giá trị trả về và lệnh return nằm cùng một dòng. Chúng ta đều biết js có đặc tính rất linh hoạt (flexible) và khả năng chịu lỗi (fault-tolerant) cao (haha ^^).

Auto Semicolon Insertion

Lexical Environment

Lexical environment: Là vị trí đặt các đoạn code của chúng ta và những thứ xung quanh nó. Với js, nơi mà ta đặt các dòng code rất quan trọng vì nó giúp ta hình dung ra nơi mà code sẽ hiện hiện trong bộ nhớ máy tính.

Execution Context

Execution context: Là một vùng bao đóng (wrapper) giúp quản lý những code đang được thực thi. Một chương trình của ta bao gồm rất nhiều đoạn code (lexical environment), thế thì đoạn nào đang được thực thi sẽ được quản lý bởi Execution context. Vậy Execution context sẽ chứa các đoạn code của chúng ta, tuy nhiên nó còn có thể chứa những thứ khác mà ta không có viết, là bởi vì ... các bạn có nhớ không, các đoạn mã mà ta viết ra sẽ được trải qua quá trình dịch bởi Syntax parser.
Hãy cùng thảo luận bên dưới comment bạn nhé - Sound off on the comment...

Tài liệu tham khảo

  1. Understanding the Weird Parts - Tony Alicea

Long Nguyễn

Mình là Long Nguyễn, một lập trình viên. Blog này ra đời nhằm mục đích ghi lại những gì mình học được, những kinh nghiệm từ thực tế, chia sẻ đến các bạn trẻ trong cùng lĩnh vực. Với quan điểm chia sẻ để học hỏi nhiều hơn, mình cũng sẽ học được nhiều điều mới từ các bạn.