Đây là trang chủ của jay, một trình tạo trình phân tích cú pháp LALR (1): Berkeley yacc © được nhắm mục tiêu lại thành C # và Java.

Sự miêu tả

Tóm tắt lớp

   giả                     mạo lớp, gây nên javadoc.

Gói jay

Đây là trang chủ của jay, một trình tạo trình phân tích cú pháp LALR (1): Berkeley yacc © được nhắm mục tiêu lại thành C # và Java.

  • Sử dụng
  • Định dạng đầu vào
  • Generics
  • Tập tin Skeleton
  • Quản lý lớp học
  • Tải xuống

Sử dụng

jay đọc một đặc tả ngữ pháp từ một tệp và tạo một trình phân tích cú pháp LALR (1) cho nó. Trình phân tích cú pháp bao gồm một bộ các bảng phân tích cú pháp và một trình điều khiển thường trình từ một bộ xương được đọc từ đầu vào tiêu chuẩn. Bộ xương thích hợp tồn tại cho Java và C #. Bàn và trình điều khiển được ghi vào đầu ra tiêu chuẩn.

  jay [-ctv] [-bệp tiền tố] ngữ pháp khung | <skeleton

  java -jar jay.jar [-ctv] [-tệp-tiền tố] ngữ pháp khung | <skeleton

Lựa chọn tiếp theo đã khả thi:

-b-tiền tố tập tin thay đổi tiền tố được thêm vào tên tệp đầu ra thứ cấp vào chuỗi ký hiệu bởi tệp_prefix. Tiền tố mặc định là ký tự y.

-c sắp xếp cho các chỉ thị # tiền xử lý C được kết hợp trong đầu ra. Điều này chỉ hữu ích cho C #.

-t sắp xếp để gỡ lỗi thông tin được kết hợp trong đầu ra. Các thông tin thực tế được kiểm soát bởi các tập tin bộ xương; như được phân phối, nó phụ thuộc vào các gói thời gian chạy bổ sung. Đối với C #, đây là một phần của tải xuống nguồn, cho Java, hãy xem jay.yydebug.

-v tạo ra một mô tả con người có thể đọc được của trình phân tích cú pháp được tạo ra được ghi vào tệp file_prefix.output.

Nếu một trong các biến môi trường TMPDIR, TMP hoặc TEMP được đặt, chuỗi từ biến môi trường sẽ được sử dụng làm tên của thư mục nơi tệp tạm thời được tạo.

Định dạng đầu vào

Định dạng đầu vào và thuật toán LALR (1) chưa được thay đổi từ yacc. Người ta nên tham khảo tài liệu chuyên sâu về yacc để biết chi tiết về viết và gỡ lỗi ngữ pháp, phục hồi lỗi, chiến lược cho hành động, v.v.

Sự khác biệt duy nhất là ngăn xếp giá trị, việc nhúng trình phân tích cú pháp được tạo ra trong một lớp và giao diện cho máy quét. Tất cả những điều này có thể được thay đổi bằng cách sửa đổi các tập tin bộ xương. Phần còn lại của phần này được dựa trên các tệp bộ xương được phân phối với jay.

Chỉ thị% union đã bị xóa. jay sử dụng Object (hoặc System.Object trong C #) cho ngăn xếp giá trị. Do đó, tên trong ký hiệu thẻ <name> đề cập đến một lớp hoặc một giao diện.

Điều này có ý nghĩa đối với các phôi mà jay sinh ra: Cả C # lẫn Java đều không cho phép gán cho các biến được đúc. Do đó, ký hiệu $$ đề cập đến một đối tượng không có cast vì $$ thường được gán cho. Nếu $$ được sử dụng cho các mục đích khác, nó thường sẽ phải sử dụng một loại rõ ràng $ <name> $ được chuyển thành một diễn viên để đặt tên.

Tương tự, ký hiệu $ n hiếm khi được gán cho. Vì vậy, jay sẽ tạo ra một diễn viên trừ khi ký hiệu $ <> n được sử dụng để ngăn chặn truyền.

jay không phát ra phôi tới Object. Những phôi này thường không cần thiết và chiến lược này tránh được nhiều thông điệp cảnh báo nhưng nó có thể gây ra một bất ngờ trong tình trạng quá tải.

jay không có khái niệm thừa kế. Điều này có thể dẫn đến các thông báo cảnh báo không chính đáng phàn nàn về các bài tập có vấn đề. Nó đã được cảm thấy rằng những thông điệp này thường hữu ích ngay cả khi một số trong số họ là sai lầm.

Tập tin Skeleton

Tải xuống nhị phân hoặc nguồn bao gồm hai tệp bộ xương cho Java và một cho C #. Tệp khung kiểm soát định dạng của các bảng đã tạo và nó bao gồm thuật toán phân tích cú pháp thực tế diễn giải các bảng. Các thuật toán giống nhau trong tất cả các tệp được phân phối nhưng skeleton.tables khởi tạo các bảng khác nhau bằng cách đọc tệp tài nguyên tại thời gian thực thi; điều này tránh một giới hạn mà hệ thống Java áp đặt vào kích thước của đoạn mã cho một lớp.

Để tạo tệp tài nguyên, hãy tạo trình phân tích cú pháp bằng skeleton.tables. Từ nguồn phân tích cú pháp trích xuất chính xác các dòng bắt đầu bằng // yy và loại bỏ chính xác tiền tố đó. Tệp kết quả phải được đặt trong cùng thư mục với tệp lớp của trình phân tích cú pháp và phải sử dụng tên lớp của trình phân tích cú pháp và hậu tố .tables.

Không cần thiết phải thay đổi các tệp bộ xương, nhưng chỉ trong trường hợp chúng được nhận xét rộng rãi. Các tệp được định hướng theo dòng. Một ký tự trong cột đầu tiên xác định điều gì xảy ra với một dòng: # đánh dấu nhận xét và dòng bị bỏ qua. . đánh dấu một dòng được sao chép mà không có khoảng thời gian đầu.

t đánh dấu một dòng có liên quan để truy tìm. Thông thường nó được sao chép với một // t hàng đầu; nếu tùy chọn -t được thiết lập, dòng được sao chép không có t hàng đầu.

Cuối cùng, một dòng có một ô trống có chứa một lệnh dẫn đến kết quả đầu ra của một số thông tin bảng và có thể sử dụng phần còn lại của dòng làm tham số.

các hành động phát ra mã từ các hành động như phần thân của một switch.

epilog phát ra văn bản sau %% thứ hai.

địa phương phát ra văn bản trong% {%} sau %% đầu tiên.

prolog phát ra văn bản trong% {%} trước %% đầu tiên.

tiền tố mã thông báo phát ra từng giá trị mã thông báo dưới dạng số nhận dạng được khởi tạo với phần còn lại của dòng dưới dạng tiền tố.

nhận xét phiên bản phát ra // nhận xét với phần còn lại của dòng.

tiền tố yyCheck

yyDefRed prefix

tiền tố yyDgoto

tiền tố yyGindex

tiền tố yyLen

tiền tố yyLhs

tiền tố yyRindex

tiền tố yySindex

Tiền tố yyTable phát ra phần thân của bảng có liên quan với phần còn lại của dòng làm tiền tố cho mỗi dòng đầu ra.

Tiền tố yyFinal phát ra giá trị làm khởi tạo với phần còn lại của dòng dưới dạng tiền tố.

Tiền tố yyNames phát ra bảng dưới dạng danh sách các từ có phần còn lại của dòng làm tiền tố cho mỗi dòng đầu ra.

yyNames-strings phát ra bảng dưới dạng danh sách các trình khởi tạo chuỗi.

Tiền tố yyRule phát ra bảng dưới dạng danh sách các dòng có phần còn lại của dòng làm tiền tố cho mỗi dòng đầu ra.

yyRule-strings phát ra bảng dưới dạng danh sách các trình khởi tạo chuỗi.

Mỗi bảng được bắt đầu bằng một chú thích với thông tin thứ nguyên.

Quản lý lớp học

Thiết kế của tệp khung sườn phải xem xét hai vấn đề: cách nhúng trình phân tích cú pháp vào một lớp và cách giao diện với máy quét.

Các tệp bộ xương được phân phối mong đợi người dùng cung cấp prolog trong% {%} có chứa một tiêu đề lớp và để cung cấp một epilog sau %% thứ hai đóng lớp này. jay không biết tên lớp của trình phân tích cú pháp.

Giao diện cho máy quét yyInput được tạo ra như một thành viên của mỗi lớp phân tích cú pháp; điều này có thể hoặc có thể không phải là một lựa chọn tốt. Có ba phương thức: trước không có đối số và phải trả về giá trị boolean cho biết rằng máy quét đã trích xuất thành công một biểu tượng đầu vào khác; token không có đối số và phải trả về biểu tượng đầu vào hiện tại dưới dạng giá trị số nguyên mà trình phân tích cú pháp mong đợi; giá trị không có đối số và có thể trả về một giá trị đối tượng được đặt trên ngăn xếp trạng thái / giá trị cho biểu tượng đầu vào. Truy tìm dự kiến mã thông báo và giá trị là các hàm liên tục giữa mỗi cuộc gọi đến trước.

Giá trị mã thông báo rõ ràng được tạo dưới dạng các hằng số trong lớp trình phân tích cú pháp. Các ký tự đơn đại diện cho chính chúng; Tuy nhiên, đối với những jay tin vào ASCII thay vì sau đó bộ ký tự Unicode. Nó có thể đã được tốt hơn để xác định các hằng số trong giao diện máy quét nhưng dự kiến rằng các máy quét được thực hiện như là một lớp bên trong của trình phân tích cú pháp. pj hỗ trợ chế độ xem này ngay cả khi máy quét được xây dựng một cách rõ ràng bằng cách sử dụng JLex.

Tải xuống

tệp nguồn, 224 kb

Tác giả:

Axel T. Schreiner.

Link to original source: https://www.cs.rit.edu/~ats/projects/lp/doc/jay/package-summary.html