2010-09-15 38 views

Trả lời

0
+1

tôi thấy máy phát điện này nhưng nó là 4 tuổi. Tôi đã nghĩ rằng có thể có một cái gì đó nhiều hơn đến nay – Toad

+11

Cho phép xem một số nội dung thay vì chỉ là một loạt các liên kết thời gian tới. –

+1

@ts. Tôi đoán bạn biết bây giờ, nhưng điều này hoàn toàn là trách nhiệm của bạn, và của bạn một mình, như một nhà văn đăng :) –

6

tôi đã sử dụng LIME Parser generator for PHP một vài năm trước đây, và nó đã trưởng thành và ổn định. Bản thân trình tạo trình phân tích cú pháp được viết bằng PHP, không thực sự quan trọng trong bất kỳ ý nghĩa kỹ thuật nào - vì chúng tôi chỉ yêu cầu trình phân tích cú pháp được tạo bằng PHP - nhưng tôi vẫn thích chi tiết này. Nó làm cho tôi cảm thấy ít xin lỗi về cách viết phần mềm trong PHP ;-)

EDIT:

tôi nên thêm:

  1. đâu tôi đã viết "sử dụng" nó sẽ chính xác hơn để nói rằng tôi "đã chơi với". Tôi chưa viết mã sản xuất nào bằng vôi. Nhưng tôi thấy không có lý do gì để không làm như vậy.

  2. "Ví dụ về máy tính" được cung cấp với vôi sử dụng phương thức tokenize() rất xa so với thay thế thực sự cho sức mạnh của lex. Nhưng nếu bạn cần một tokenizer thực nó nên có thể sử dụng lex trên "kết thúc trước" để nuôi tokens để vôi trên "back end".

0

Tôi đã chuyển Jison, một bản sao Bison trong javascript, sang php. Kết quả là một trình phân tích cú pháp kẻ giết người, có thể xử lý việc phân tích cú pháp/phân tích cú pháp rất đơn giản và rất phức tạp. Nó bây giờ là một phần của Jison, nhưng có một vài cập nhật trong ngã ba của tôi - https://github.com/robertleeplummerjr/jison. Các tệp đang ở đây - https://github.com/robertleeplummerjr/jison/tree/master/ports/php

Xem readme trong trang đó, bạn tạo một trình phân tích cú pháp javascript và php cùng một lúc có khả năng làm những việc giống nhau hoặc khác nhau. MÁT MẺ!

-5

Tôi khuyên bạn nên viết trình phân tích cú pháp của riêng mình vì ngày nay nó khá dễ dàng.

Cách dễ nhất để làm như vậy là theo ý kiến ​​của tôi để tạo một lớp cho mọi loại cú pháp có thể (biểu thức, kiểm tra, vòng lặp, v.v.).

Sau đó, trong mỗi lớp, mã các phương pháp sau:

  • một phương pháp để quyết tâm từ một chuỗi nếu chuỗi là các loại nhất định (a+b là loại 'biểu hiện', if(b) không)
  • một phương pháp để "chạy" kiểu này (a+b sẽ trở lại a->run() + b->run(), và a->run() sẽ trả về một giá trị)
Các vấn đề liên quan