Jison
Một API để tạo trình phân tích từ vựng trong JavaScript
Jison tạo ra các trình phân tích từ vựng từ dưới lên trong JavaScript. Giao diện lập trình ứng dụng của nó tương tự như của Bison, vì vậy có tên này. Nó hỗ trợ nhiều tính năng chính của Bison, cộng với một số tính năng riêng của nó. Nếu bạn mới làm quen với các công cụ tạo trình phân tích từ vựng như Bison và ngữ pháp không chắc chắn nói chung, bạn có thể tìm thấy hướng dẫn trong Bison manual. Nếu bạn đã biết về Bison, việc sử dụng Jison sẽ rất dễ dàng.
Một cách tóm tắt, Jison sẽ nhận đầu vào là ngữ pháp được mã hóa bằng JSON hoặc ngữ pháp theo kiểu Bison và tạo ra một tệp JavaScript có khả năng phân tích ngôn ngữ mô tả bởi ngữ pháp đó. Sau đó, bạn có thể sử dụng tập lệnh được tạo ra để phân tích đầu vào và chấp nhận, từ chối hoặc thực hiện các hành động dựa trên đầu vào.
Cài đặt
Jison có thể được cài đặt cho Node bằng cách sử dụng npm
Sử dụng npm:
npm install jison -g
Sử dụng từ dòng lệnh
Sao chép kho lưu trữ github để xem ví dụ:
git clone git://github.com/zaach/jison.git
cd jison/examples
Bây giờ bạn đã sẵn sàng tạo ra một số trình phân tích từ vựng:
jison calculator.jison
Điều này sẽ tạo ra calculator.js
trong thư mục làm việc hiện tại của bạn. Tệp này có thể được sử dụng để phân tích một tệp đầu vào, như sau:
echo "2^32 / 1024" > testcalc
node calculator.js testcalc
Điều này sẽ in ra 4194304
.
Danh sách tùy chọn dòng lệnh đầy đủ:
Usage: jison [file] [lexfile] [options]
file file containing a grammar
lexfile file containing a lexical grammar
Options:
-j, --json force jison to expect a grammar in JSON format
-o FILE, --outfile FILE Filename and base module name of the generated parser
-t, --debug Debug mode
-m TYPE, --module-type TYPE The type of module to generate (commonjs, amd, js)
-p TYPE, --parser-type TYPE The type of algorithm to use for the parser (lr0, slr, lalr, lr)
-V, --version print version and exit
Sử dụng từ một mô-đun CommonJS
Bạn cũng có thể tạo ra các trình phân tích từ vựng theo cách chương trình từ JavaScript. Giả sử Jison có sẵn trong đường dẫn tải của mô-đun commonjs của bạn:
// mygenerator.js
var Parser = require("jison").Parser;
// a grammar in JSON
var grammar = {
"lex": {
"rules": [
["\\s+", "/* skip whitespace */"],
["[a-f0-9]+", "return 'HEX';"]
]
},
"bnf": {
"hex_strings" :[ "hex_strings HEX",
"HEX" ]
}
};
// `grammar` can also be a string that uses jison's grammar format
var parser = new Parser(grammar);
// generate source, ready to be written to disk
var parserSource = parser.generate();
// you can also use the parser directly from memory
// returns true
parser.parse("adfe34bc e82a");
// throws lexical error
parser.parse("adfe34bc zxg");
Thêm tài liệu
Để biết thêm thông tin về cách tạo ngữ pháp và sử dụng các trình phân tích từ vựng được tạo ra, hãy đọc documentation.
Làm thế nào để đóng góp
Xem CONTRIBUTING.md để biết hướng dẫn đóng góp, cách chạy các bài kiểm tra, v.v.
Các dự án sử dụng Jison
Xem chúng trên wiki, hoặc thêm dự án của riêng bạn.
Những người đóng góp
Lời cảm ơn đặc biệt đối với Jarred Ligatti, Manuel E. Bermúdez
- issues
- thảo luận
Chi tiết Tải xuống:
Tác giả: zaach
Mã nguồn: https://github.com/zaach/jison