Trong đường ống của GHC có một giai đoạn dịch mã nguồn Haskell sang Core và sau đó (không nhất thiết phải là bước tiếp theo ngay lập tức) dịch Core thành STG. Tuy nhiên, một vấn đề đã thoát khỏi sự hiểu biết của tôi - khi nào chúng tôi có một mã "bình thường" (tức là văn bản thuần túy) và khi một thứ thực sự sống trong bộ nhớ, như cây cú pháp trừu tượng (AST)?Đường ống GHC: Lõi, STG - AST hoặc văn bản?
Và để làm câu hỏi của tôi một chút chính xác hơn, tôi sẽ chia thành các phần:
1) trong phân tích của giai đoạn tập tin nguồn Haskell, chúng ta ngay lập tức xây dựng ASTs của ngôn ngữ cốt lõi? Nếu không, thì có vẻ như tôi phải xây dựng AST của Haskell đầy đủ (có vẻ lạ) và sau đó chuyển đổi chúng sang ASTs của Core, hoặc trước hết là biểu diễn văn bản của chúng trong Core và một lần nữa gọi phân tích cú pháp để lấy AST của Core.
2) gần như cùng một câu hỏi áp dụng cho Core để chuyển STG (nhưng trong trường hợp này tôi nghĩ tôi có thể cho rằng những gì chúng ta có là ASTs Core - đúng)
Bây giờ rõ ràng - cảm ơn bạn! Oh, và các liên kết dường như bị hỏng ... – socumbersome
Hãy xem [ở đây] (https://github.com/ghc/ghc/tree/ghc-7.8/compiler/hsSyn), đặc biệt [ở đây] (https: //github.com/ghc/ghc/blob/ghc-7.8/compiler/hsSyn/HsExpr.lhs), sau đó [tại đây] (https://github.com/ghc/ghc/blob/ghc-7.8/compiler/ coreSyn/CoreSyn.lhs) và [ở đây] (https://github.com/ghc/ghc/blob/ghc-7.8/compiler/stgSyn/StgSyn.lhs). –
Sửa các liên kết. Đó là những gì tôi nhận được khi cố gắng tạo ra các liên kết 'https: // www.haskell.org/ghc /' rõ ràng thay vì các liên kết 'https: // downloads.haskell.org/~ ghc /' lạ. –