Điều này khó hơn. (Tôi đã thực hiện một số lượng công việc hợp lý ở đây). Vấn đề chính là không có tiêu chuẩn (tôi đã làm việc với NIST trên các đơn vị và mặc dù cuối cùng họ đã tạo ra một ngôn ngữ đánh dấu mà ít người sử dụng nó). Vì vậy, nó thực sự là một hình thức xử lý ngôn ngữ tự nhiên và có để đối phó với:
- nhập nhằng (những gì hiện "M" có nghĩa là - mét hoặc mega)
- dấu chấm câu không phù hợp
- chữ viết tắt
- biểu tượng (ví dụ: " mu" cho vi)
- ngữ nghĩa không rõ ràng (ví dụ như là kg/m/s giống như kg/(m * s)?
Nếu bạn chỉ việc tạo ra một hệ thống đồ chơi thì bạn nên tạo một BNF cho hệ thống và đảm bảo rằng tất cả các ví dụ đều tuân theo nó. Điều này sẽ sử dụng dấu câu thông thường ("/", "", "(", ")", "^"). Các trường ký tự có thể có độ dài thay đổi ("m", "kg", "lb"). Đại số trên các chuỗi này ("kg" -> 1000 "g" có vấn đề là kg là đơn vị cơ bản.
Nếu bạn thực hiện nghiêm túc thì ANTLR (@Yaugen) hữu ích, nhưng lưu ý rằng các đơn vị trong hoang dã sẽ không theo một ngữ pháp thông thường do sự mâu thuẫn trên.
Nếu bạn đang thực sự nghiêm trọng (tức là chuẩn bị để đưa vào một tháng rắn), tôi muốn được quan tâm để biết. :-)
My hiện tại cách tiếp cận (nằm ngoài phạm vi câu hỏi của bạn) là thu thập một số lượng lớn các ví dụ từ các tài liệu tự động và tạo ra một số chẩn đoán.
Nguồn
2013-05-15 12:26:55
ANTLR? http://www.antlr.org/wiki/display/ANTLR4/Home –
Bạn có thể muốn xem xét nỗ lực khá cũ để diễn giải các đại lượng vật lý, [Bộ công cụ UCUM được gắn trên Pixel] (http: //www.dclunie. com/pixelmed/software/UCUM /). Bộ công cụ sử dụng ANTLR. Hãy xem Javadoc để biết thêm chi tiết. Tôi không thể nói bất cứ điều gì về mức độ hoàn chỉnh của nó, mặc dù. –
Mục đích chính xác của bạn là gì? Làm thế nào để bạn có nghĩa là "phân tích cú pháp"? Bạn có nghĩa là nó nên giải thích một cái gì đó như ** 10m/s + 2m/s ** và đánh giá nó đến ** 12m/s ** hoặc có lẽ một cái gì đó như ** m/s * kg * s ** và đánh giá * * m * kg **? Mặc dù đôi khi nó có thể không âm thanh nhiều, làm sáng tỏ mục tiêu của bạn có thể giúp bạn đạt được điều đó! – MrD