Lesson 04 β Recursive-Descent Parser
BiαΊΏn dΓ£y token phαΊ³ng thΓ nh cΓ’y AST ΔΓΊng Δα» Ζ°u tiΓͺn. Ba module tΖ°Ζ‘ng tΓ‘c: chαΊ‘y parser tα»«ng bΖ°α»c (call stack + AST dα»±ng dαΊ§n), xem cΓ’y AST hoΓ n chα»nh, vΓ demo lα»i cΓΊ phΓ‘p.
E β T ( '+' | '-' T )* (parseExpr)
T β F ( '*' | '/' F )* (parseTerm)
F β '(' E ')' | num (parseFactor)
T β F ( '*' | '/' F )* (parseTerm)
F β '(' E ')' | num (parseFactor)
Grammar ΔΓ£ khα» Δα» quy trΓ‘i: mα»i non-terminal = mα»t hΓ m. */ α» tαΊ§ng sΓ’u (T) β Ζ°u tiΓͺn cao hΖ‘n +- (tαΊ§ng E).
1. Parser Stepper β chαΊ‘y tα»«ng bΖ°α»c
NhαΊp biα»u thα»©c (sα» nguyΓͺn,
+ - * /, ngoαΊ·c). BαΊ₯m BΖ°α»c tiαΊΏp Δα» theo dΓ΅i tα»«ng lα»i gα»i hΓ m; Tα»± chαΊ‘y Δα» chαΊ‘y chαΊm tα»± Δα»ng.
MαΊ«u:
Token stream
Call stack (hΓ m Δang chαΊ‘y, Δα»nh trΓͺn cΓΉng)
β bαΊ₯m NαΊ‘p Δα» bαΊ―t ΔαΊ§u β
AST Δang dα»±ng
cΓ’y sαΊ½ hiα»n dαΊ§nβ¦
NhαΊt kΓ½ bΖ°α»c
β¦
2. AST Viewer β vαΊ½ cΓ’y hoΓ n chα»nh
NhαΊp biα»u thα»©c bαΊ₯t kα»³ β parse mα»t lαΊ§n, vαΊ½ AST ΔαΊ§y Δα»§. BαΊ₯m vΓ o node Δα» xem loαΊ‘i node.
MαΊ«u:
BαΊ₯m vΓ o mα»t node Δα» xem chi tiαΊΏt.
3. Syntax Error Demo β token nΓ o gΓ’y lα»i?
NhαΊp biα»u thα»©c SAI β parser chα» ra token gΓ’y lα»i vΓ message
expect β¦ got β¦ sinh ra α» expect/parseFactor.
MαΊ«u lα»i: