Tôi đang viết một trình mã thông báo javascript đơn giản phát hiện các loại cơ bản: Word, Number, String, RegExp, Operator, Comment và Newline. Mọi thứ đều ổn nhưng tôi không hiểu làm thế nào để phát hiện nếu ký tự hiện tại là toán tử phân tách RegExp hoặc toán tử phân chia. Tôi không sử dụng cụm từ thông dụng vì chúng quá chậm. Có ai biết cơ chế phát hiện nó không? Cảm ơn.Phân chia/xung đột RegExp trong khi mã hóa Javascript
8
A
Trả lời
6
Bạn có thể biết điều gì là mã thông báo trước ở trong luồng. Đi qua từng mã thông báo mà từ vựng của bạn phát ra và hỏi xem nó có thể được theo sau bởi dấu hiệu phân chia hay regexp hay không; bạn sẽ thấy rằng hai bộ kết quả của các thẻ là rời rạc. Ví dụ: (
, [
, {
, ;
và tất cả các toán tử nhị phân chỉ có thể được theo sau bởi một regexp. Tương tự, )
, ]
, }
, số nhận dạng và chuỗi ký tự chuỗi/số chỉ có thể được theo sau bằng dấu phân chia.
Xem phần 7 của ECMAScript spec để biết thêm chi tiết.
1
bạn phải kiểm tra ngữ cảnh khi gặp dấu gạch chéo. nếu dấu gạch chéo là sau một biểu thức, sau đó nó phải được phân chia, hoặc nó là một regexp bắt đầu.
để nhận ra ngữ cảnh, có thể bạn phải tạo trình phân tích cú pháp cú pháp.
ví dụ
function f() {}
/1/g
//this case ,the slash is after a function definition, so it's a refexp start
var a = {}
/1/g;
//this case, the slash is after an object expression,so it's a division
Các vấn đề liên quan
- 1. Mã hóa JavaScript?
- 2. Mã hóa AES Javascript
- 3. javascript trận chuỗi sau regexp
- 4. qua biến một regexp trong javascript
- 5. Cách mã hóa base64 bên trong javascript
- 6. Ví dụ mã hóa JavaScript
- 7. Danh mục trống khi quốc tế hóa mã JavaScript
- 8. Hợp nhất độ phân giải xung đột với mã mới
- 9. Phần trăm mã hóa javascript
- 10. Mã hóa PNG bằng JavaScript
- 11. So khớp mã hóa không tương thích (ASCII-8BIT regexp với chuỗi UTF-8) trên Heroku
- 12. JavaScript RegExp: kiểm tra và thực hiện
- 13. Mã hóa ký tự Javascript mặc định?
- 14. Javascript nhiều regexp email xác nhận
- 15. Url Mã hóa JavaScript Object đen
- 16. Thú vị thử nghiệm của Javascript RegExp
- 17. bất ngờ Javascript RegExp hành vi
- 18. Kỹ thuật mã hóa JavaScript hoặc mã xấu?
- 19. Cách thay đổi mã hóa trong khi phân tích cú pháp CSV trong Rails
- 20. JavaScript bookmarklet và URL mã hóa
- 21. Cách mã hóa base64 hình ảnh trong javascript
- 22. Soạn regexp?
- 23. Bug với RegExp trong JavaScript khi nào tìm kiếm toàn cầu
- 24. lỗi tài liệu hướng dẫn cài đặt rdoc: mã hóa không tương thích regexp trận đấu
- 25. Bộ mã hóa video H.264 trong javascript
- 26. Mã hóa chuỗi đơn giản trong .NET và Javascript
- 27. Mã hóa: mô phỏng SSL trong javascript và python
- 28. Mã hóa mã hóa trong TWIG
- 29. Bộ mã hóa/bộ giải mã JPEG phân cấp
- 30. Javascript RegExp để tách văn bản thành câu và giữ dấu phân tách
Tôi đã viết một tokenizer một lần, và đây là những REs rằng phát hiện một "regex cò": '/ [{(\ [;,] /' '/ \ + \ + | - | ~ | && | \? |: | \ | \ || \\ $ | (<<|> >>? | ==? |! =? | [- <> + *% & \ | \^/]) =?/''/^ (? = \ s | \/| user123444555621
Về mặt kỹ thuật, có một vài sự mơ hồ không thể tránh khỏi ở Ví dụ, '(a + b)/c' so với' if (x) /foo/.exec ('bar') '(close-paren có thể đứng trước cả hai) .Ngoài ra,' ++/foo/.abc' và 'a ++/b' (cộng-cộng có thể đứng trước cả hai). Cùng với' --' đây là những cái duy nhất tôi biết. – dgreensp
@dgreensp Cảm ơn quan sát rất hữu ích !!! – Zo72