Tôi đang tạo trình phân tích cú pháp biểu thức infix, vì vậy tôi phải tạo trình thông báo. Nó hoạt động tốt, ngoại trừ một điều: Tôi không phải bây giờ làm thế nào để phân biệt số âm với toán tử "-".Cách phân biệt toán tử '-' với số âm cho mã thông báo
Ví dụ, nếu tôi có:
23/-23
Các thẻ nên 23
, /
và -23
, nhưng nếu tôi có một biểu hiện như
23-22
Sau đó, các thẻ nên 23
, -
và 22
.
Tôi tìm thấy cách giải quyết dơ bẩn là nếu tôi gặp phải dấu "-", sau đó là số, tôi nhìn vào ký tự trước và nếu ký tự này là chữ số hoặc ')', tôi coi "-" là và không phải là số. Ngoài việc bị loại xấu xí, nó không hoạt động cho các biểu thức như
--56
nơi nó được các thẻ sau: -
và -56
nơi nó sẽ nhận được --56
Bất kỳ đề nghị?
Ngữ pháp C không có hằng số nguyên âm, tất cả đều trừ đi một chút. Có vẻ như đó sẽ là cách tiếp cận đơn giản hơn. –
Điều đó thường sẽ không phải là công việc của một người viết mã thông báo, bạn sẽ phải tìm ra điều này ở cấp độ cú pháp. – nos