2013-02-21 85 views
7

Tôi đang xây dựng một trang web để tìm hiểu lập trình cơ bản, tôi sẽ sử dụng một pseudolanguage trong đó người dùng có thể gửi mã của họ và tôi cần phải giải thích nó. Tuy nhiên tôi không chắc chắn làm thế nào để xây dựng một tokenizer trong PHP.Làm thế nào để xây dựng một tokenizer trong PHP?

Có một đoạn như thế này một:

a = 1 
b = 2 
c = a - b 

if(a > b) { 
    buy(a) 
    } else { 
    buy(b) 
    } 

Làm thế nào tôi sẽ đi về tách mã này vào thẻ?

-

Đây là những gì tôi đang cố gắng bây giờ:

$tokens = array(); 

// First token (define string) 
$token = strtok($botCode, '='); 
$tokens[] = $token; 

// Loop 
while($token) { 
    $token = strtok('='); 
    $tokens[] = $token; 
} 

Tuy nhiên tôi đã không thể tìm ra cách để sử dụng strtok với một danh sách các expresions thường xuyên ... Tôi có thể làm một cái gì đó tương tự như strtok nhưng chấp nhận mảng như kim với chất nền và strrpos nhưng có vẻ như với tôi rằng nó sẽ có thể làm điều đó với strtok vì nó được thiết kế chỉ cho việc này. Bất kỳ thông tin hoặc chỉ hướng nào đúng hướng sẽ được cảm ơn

+1

bạn có thể nhận http://php.net/manual/en/book.tokenizer.php –

+1

Thông thường danh sách tên mã thông báo cho các ký tự hoặc danh sách regex. Khi giới thiệu http://compilers.iecc.com/crenshaw/ rất phù hợp. Nhưng, không có hành vi phạm tội, tôi không nghĩ rằng đó là một nhiệm vụ * bạn * nên cố gắng được nêu ra. – mario

+0

không được thực hiện. Tôi có lẽ sẽ không hoàn thành nó nhưng nó chỉ là một proyect cá nhân vì vậy tôi không quan tâm. Tôi chỉ đọc về strtok, tôi không thể tìm ra cách sử dụng nó với một danh sách các giá trị. Nếu bạn chỉ cho tôi đúng hướng tôi sẽ chấp nhận câu trả lời – lisovaccaro

Trả lời

5

Đừng chờ đợi một số phép thuật từ strtok. Nó tương tự như preg_split.

Tôi nghĩ rằng bạn muốn xây dựng lexer của riêng bạn. Vì vậy, bạn có thể sử dụng bài viết Writing a simple lexer in PHP hoặc something else.

+0

cảm ơn, tôi vừa mới triển khai điều đó, tôi sẽ chỉnh sửa câu trả lời của bạn để thêm mã vì nó đơn giản là tuyệt vời. Sao chép-dán và chạy trong vài phút – lisovaccaro

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