2009-09-01 34 views
5

Tôi muốn viết một dịch giả giữa hai ngôn ngữ, và sau khi đọc một số trên Internet tôi đã quyết định đi với ANTLR. Tôi đã phải học nó từ đầu, nhưng bên cạnh một số rắc rối với việc loại bỏ đệ quy trái mọi thứ đều ổn cho đến bây giờ.ANTLR so với Happy so với các trình tạo phân tích cú pháp khác

Tuy nhiên, hôm nay một số người bảo tôi hãy kiểm tra Happy, trình tạo trình phân tích cú pháp dựa trên Haskell. Tôi không có kiến ​​thức Haskell, vì vậy tôi có thể sử dụng một số lời khuyên, nếu hạnh phúc thực sự tốt hơn so với ANTLR và nếu nó có giá trị học nó.

Cụ thể những gì tôi quan tâm là dịch giả của tôi cần hỗ trợ thay thế macro, mà tôi không biết làm cách nào để thực hiện trong ANTLR. Có lẽ trong Happy này là dễ dàng hơn để làm gì?

Hoặc nếu nghĩ rằng các trình tạo trình phân tích cú pháp khác thậm chí còn tốt hơn, tôi rất vui khi được nghe về chúng.

+0

Nếu bạn có thể nói, thông tin hữu ích nhất mà bạn có thể cung cấp ngay bây giờ là trả lời cho "Ngôn ngữ nguồn và ngôn ngữ đích là gì?" –

+0

@ 280Z28 Chúng là ngôn ngữ được tạo trong nhà. Chúng có phần tương tự như Java, với sự khác biệt là một lớp có thể chứa các định nghĩa macro và sau đó bên trong các phương thức mà các macro cần được mở rộng. – Gabriel

+1

Trong khi đó tôi đã tìm ra rằng vấn đề của tôi đơn giản hơn tôi nghĩ ban đầu. Tôi quản lý để làm điều đó với ANTLR, trong lexer, vì vậy không cần phải khẩn trương tìm hiểu Happy hoặc máy phát điện khác ngay bây giờ. – Gabriel

Trả lời

5

Mọi người cứ tin rằng nếu họ chỉ nhận được một trình phân tích cú pháp, họ đã làm cho nó được thực hiện khi xây dựng các công cụ ngôn ngữ. Thật tồi tệ. Phân tích cú pháp đưa bạn đến chân đồi của dãy Himalaya rồi bạn cần bắt đầu leo ​​lên một cách nghiêm túc.

Nếu bạn muốn hỗ trợ sức mạnh công nghiệp để xây dựng dịch giả ngôn ngữ, hãy xem DMS Software Reengineering Toolkit của chúng tôi. DMS cung cấp

  • lexers Unicode dựa trên
  • bối cảnh toàn miễn phí phân tích cú pháp (đệ quy trái? Không vấn đề gì! Arbitrary lookahead? Không vấn đề gì. Văn phạm mơ hồ? Không có vấn đề)
  • đầy đủ trước kết thúc cho C, C#, COBOL, Java, C++, JavaScript, ... (bao gồm preprocessors đầy đủ cho C và C++)
  • cấu trúc tự động ASTs
  • hỗ trợ cho việc xây dựng bảng biểu tượng với các quy tắc Phạm vi tùy ý
  • attrib đánh giá ngữ pháp ute, để xây dựng các máy phân tích tận dụng cấu trúc cây
  • hỗ trợ cho việc kiểm soát và phân tích lưu lượng dữ liệu (cũng như thực hiện điều này cho đầy đủ C, Java và COBOL),
  • chuyển đổi nguồn thành nguồn bằng cú pháp nguồn và ngôn ngữ đích
  • AST vào mã nguồn prettyprinting, để tái tạo văn bản ngôn ngữ mục tiêu

về yêu cầu của OP để xử lý các macro: chúng tôi C, COBOL và C++ trước kết thúc xử lý tiền xử lý ngôn ngữ tương ứng của họ bằng cách a) phương pháp truyền thống mở rộng đầy đủ hoặc b) không mở rộng (khi thực tế) để cho phép chuyển đổi sau phân tích cú pháp mation của các macro. Trong khi DMS là một nền tảng không thực hiện cụ thể việc xử lý macro, nó có thể hỗ trợ việc xây dựng và chuyển đổi giống nhau.

Ví dụ về dịch giả được xây dựng bằng DMS, xem phần thảo luận của converting JOVIAL to C for the B-2 bomber. Đây là bản dịch 100% cho> 1 MSLOC cứng mã thời gian thực. [Nó có thể làm bạn hài lòng khi biết rằng chúng tôi không bao giờ được phép xem chương trình thực sự đang được dịch (bí mật hàng đầu).]. Và có, JOVIAL có một bộ tiền xử lý, và vâng, chúng tôi đã dịch hầu hết các macro JOVIAL thành các phiên bản C tương đương.

[Haskell là một ngôn ngữ lập trình thú vị nhưng nó không tự làm bất cứ điều gì như thế này. Đây không phải là điều dễ hiểu trong ngôn ngữ.Việc tìm hiểu xem máy móc nào cần thiết để hỗ trợ nhiệm vụ điều khiển chương trình và chi tiêu 100 năm xây dựng nó.]

+1

@Ira Baxter - đó là thế giới nhỏ bé, bạn đang đi bộ từ tôi. : o –

+0

Rất tiếc, nhấn nút "lên" trên "đây là một nhận xét tuyệt vời". Bạn được hưởng lợi từ nấc cụt của tôi. Tìm địa chỉ email của tôi từ trang đăng ký người dùng của tôi và gửi cho tôi một ghi chú giới thiệu; có thể là một cuộc trò chuyện thú vị ở đây. –

+1

Điều này thật tuyệt vời. Tuy nhiên tôi cho rằng bạn không thể tìm thấy bất cứ điều gì như thế này trong cộng đồng nguồn mở. – Gabriel

Các vấn đề liên quan