Trong bài viết này chúng ta sẽ xem xét cách để xây dựng một parser

1. Parser là gì?

Một compiler nhận vào một chuỗi, biến đổi chuỗi đó thành một cây cú pháp. Cây cú pháp là cây mà mỗi một node của cây đại diện cho một biểu thức, hoặc một dòng lệnh từ chương trình đầu vào.

Ví dụ sau thể hiện cây cú pháp cho biểu thức 1 + 2 + 3

TODO: tạo hình ảnh minh hoạ

Để có thể tạo ra được một parser cho một ngôn ngữ bất kỳ, chúng ta cần thực hiện các bước

2. Viết một parser đơn giản để parse JSON String

2.1. Định nghĩa cú pháp

Đầu tiên chúng ta định nghĩa các token của JSON string có thể nhận được

Với JSON string, chúng ta có các loại token sau

NUMBER              // 1234
STRING              // "hello world"
TRUE                // true
FALSE               // false
NULL                // null
COMMA               // ,
COLON               // :
OPEN_CURLY_BRACKET  // {
CLOSE_CURLY_BRACKET // }
OPEN_BRACKET        // [
CLOSE_BRACKET       // ]
SPACE               // \\s
EOF                 // ký tự kết thúc file

Syntax của JSON có thể được biểu diễn như sau

document
	: value EOF
	;

value
	: NUMBER                   // 10
  | STRING                   // "hello"
	| TRUE                     // true
	| FALSE                    // false 
  | NULL                     // null
  | object                   // { "name": "value" }
  | array                    // [ 1, 2, "name", { "a": "b" }]
	;

object
	: OPEN_CURLY_BRACKET object_member CLOSE_CURLY_BRACKET 
	;

object_member
	: STRING COLON value                          // "name": "value"
	| object_member COMMAN STRING COLON value     // đệ quy định nghĩa một list các member 
	; 

array
	: OPEN_BRACKET array_member CLOSE_BRACKET
	;

array_member
	: value
	| array_member COLON value
	;

2.2. Xây dựng Parser đơn giản

Từ cú pháp này chúng ta sẽ viết một class để parse JSON string như sau

Bài tập đầu tiên, chúng ta sẽ implement một JSON Parser chỉ cần parse được các số, các string, các từ khoá như true, false, và null