Tôi đang tạo ngôn ngữ lập trình dựa trên javascript của riêng mình (vâng, nó thật điên rồ, nhưng chỉ để tìm hiểu ... có thể?). Vâng, tôi đang đọc về phân tích cú pháp và đèo đầu tiên là để chuyển đổi các mã nguồn để thẻ, như:Xây dựng trình phân tích cú pháp (Phần I)
if(x > 5)
return true;
Tokenizer tới:
T_IF "if"
T_LPAREN "("
T_IDENTIFIER "x"
T_GT ">"
T_NUMBER "5"
T_RPAREN ")"
T_IDENTIFIER "return"
T_TRUE "true"
T_TERMINATOR ";"
Tôi không biết nếu logic của tôi là đúng cho điều đó trong một thời gian. Về phân tích cú pháp của tôi nó thậm chí còn tốt hơn (hay không?) Và dịch nó (yeah, mảng đa chiều):
T_IF "if"
T_EXPRESSION ...
T_IDENTIFIER "x"
T_GT ">"
T_NUMBER "5"
T_CLOSURE ...
T_IDENTIFIER "return"
T_TRUE "true"
Tôi có một số nghi ngờ:
- là cách của tôi tốt hơn hoặc tồi tệ hơn mà cách ban đầu? Lưu ý rằng mã của tôi sẽ được đọc và biên dịch (được dịch sang ngôn ngữ khác, như PHP), thay vì được giải thích mọi lúc.
- Sau I tokenizer, những gì tôi cần làm chính xác? Tôi thực sự bị mất trên đèo này!
- Có một số hướng dẫn hay để tìm hiểu cách tôi có thể làm điều đó?
Vâng, đúng vậy. Tạm biệt!
Hey, làm cho ngôn ngữ lập trình không phải là điên. Nhiều người ở đây đang làm điều tương tự. – ApprenticeHacker
Bạn đã thử Sách Rồng chưa? Về cơ bản những gì bạn gọi là một giai đoạn lexer, tiếp theo là giai đoạn phân tích cú pháp thực tế -> lý tưởng xuất ra một số loại AST (Abstract Syntax Tree) mà bạn có thể phân tích ngữ nghĩa (phân tích cú pháp) hoặc chuyển đổi sang ngôn ngữ đích của bạn – stryba
@IntermediateHacker Haha ... Ừ, phần * điên rồ là rất phức tạp đối với một người làm điều đó. Nhưng để tìm hiểu là một điều rất tốt, thực sự. Đối với một sử dụng chuyên nghiệp, tôi đoán rằng cần một đội, vì vậy là điên làm điều đó một mình. : p –