Tôi đang sử dụng bison + flex để phân tích cú pháp tệp. Lỗi yyerror() được gọi. Làm thế nào tôi có thể nhận được số dòng hoặc chuỗi vi phạm các quy tắc, để in nó với thông báo lỗi?bison/flex: in dòng sai
Trả lời
Số dòng là dễ dàng: yylineno
là số dòng. Chỉ định %option yylineno
ở đầu tệp .l của bạn.
Vâng, gần như dễ dàng. Lookahead đôi khi có thể làm cho số dòng bị tắt bởi một. Thay vì nói điều gì đó như "Lỗi xảy ra ở dòng #xxx", bạn có thể muốn nói rằng lỗi xảy ra gần dòng #xxx.
Theo phần còn lại, tùy thuộc vào bạn. Bạn sẽ phải nắm bắt cú pháp không hoàn toàn hợp lệ và gọi trình xử lý cảnh báo hoặc lỗi thích hợp. Xem cuốn sách "breilly"bison "để biết chi tiết; nó có toàn bộ chương về các thông báo lỗi. Toàn bộ một chương có quá ít để tái sản xuất tại trang web Q & này.
yylineno
mang đến cho bạn lineno được xử lý
Bạn cũng có thể cho phép người dùng biết những gì văn bản cho các lỗi với yytext, ở phía flex:
0|([1-9]{DIG}*) {
String msg("some error with number: "); msg.append(yytext);
yyerror(msg.c_str());
}
yytext chỉ chứa văn bản cho phù hợp qui định.
Nếu bạn muốn cung cấp toàn bộ dòng, bạn sẽ phải tự làm điều đó, mở tập tin tìm số dòng yylineno
và in nó, một nơi tốt để thực hiện việc đó là cung cấp chức năng của riêng bạn với chức năng yyerror
.
- 1. grep - dòng in trước, không in khớp
- 2. fprintf không in dòng mới
- 3. Canvas.drawText (...) không in dấu ngắt dòng
- 4. Góc giữa hai dòng là sai
- 5. In ấn dòng mới với in() trong R
- 6. In cùng dòng và không phải dòng mới trong python
- 7. In một dòng trống làm gì?
- 8. Ruby in nhiều trên cùng một dòng
- 9. Tạo XML chỉ in thành một dòng
- 10. công cụ dòng lệnh cho ảnh in?
- 11. In trong dòng sản phẩm mới, java
- 12. Perl: in trở lại đầu dòng
- 13. Dừng in sau số n dòng
- 14. Chuỗi in Haskell không có dòng mới
- 15. Dòng in Haskell có chức năng
- 16. Python in mảng với dòng mới
- 17. dòng Cache, chia sẻ sai và liên kết
- 18. LIBLINEAR/LIBSVM "Định dạng đầu vào sai ở dòng 1"
- 19. Làm thế nào để ngăn chặn grep in in một dòng mới?
- 20. Lệnh in Python in không có gì với một dấu xuống dòng
- 21. Thiết lập Visual Studio 2005 để in số dòng
- 22. PHPWord in đậm một số từ trên một dòng
- 23. In biến có giá trị nhiều dòng trong trình bao?
- 24. in một dòng mới trong ô tệp csv
- 25. Cách in các chuỗi có ngắt dòng trong java
- 26. Regexps in Elisp để bao gồm các dòng mới
- 27. In biến trong python mà không gian hoặc xuống dòng
- 28. NSIS - in để nhắc trong dòng lệnh cài đặt
- 29. cách xóa dấu in đậm khỏi dòng tiêu đề?
- 30. Cách in cột bù trong mỗi dòng khớp trong grep
Cảm ơn bạn đã phản hồi nhanh. "Theo như phần còn lại, đó là vào bạn":) tốt, đó là điểm của câu hỏi của tôi - làm thế nào để nắm bắt được dòng vi phạm đó? –
@ user497208: Câu trả lời muộn màng cho câu hỏi cuối cùng của bạn: Bạn (vô tình) yêu cầu tôi viết một cuốn sách hoặc một chương của một cuốn sách. Viết một cuốn sách, hoặc thậm chí một chương hoặc một phần của một cuốn sách, là một chút vượt ra ngoài phạm vi trang web Q & A internet như Stack Overflow. Tôi đã cung cấp tên của một cuốn sách bao gồm chủ đề này một cách chi tiết. Đọc nó! –