Tôi đã nói "mã trực tiếp" vì tôi có nghĩa là không phải từ các tệp nguồn văn bản hoặc chuỗi nguồn, mà là từ partialFunctions/lambdas. (Tôi biết Ruby1.8 của cây phân tích cú pháp và C# LINQ có thể làm điều đó)Tôi có thể lấy AST từ mã scala trực tiếp không?
xem xét một f partialFunction:
val f = (i: Int, j: Int) => (i + j) * 2
Tôi hy vọng có một số công cụ làm việc như thế này:
getBodyAstFrom(f) //=> (Infix('*'), (Infix('+'), Id('i'), Id('j')), Val('2'))
I don' t quan tâm đến những điều ngữ nghĩa (phân tích bối cảnh và các hàm ý quá phức tạp và không cần thiết đối với tôi), tôi chỉ cần cây cú pháp từ mã trực tiếp, có thể không?
Có thể có vấn đề với việc kiểm tra mã của người khác, nhưng còn mã của riêng tôi thì sao? Những điều sau đây có thể xảy ra không?
val f = AstFunction(i: Int, j: Int){(i + j) * 2}
f(5, 6) //=> 22
f.ast //=> (Infix('*'), (Infix('+'), Id('i'), Id('j')), Val('2'))
Nó có vẻ cần một số hack vào trình biên dịch, hmmmm ...