Hiện tại em đang học ngành computer tại nước ngoài. Mới học được 2 tháng C++ thì trong quá trình học được thầy cho 3 câu hỏi của project kỳ này. Anh em nào biết hướng dẫn em với ạ. Đây là một câu trong 3 câu. Em cảm ơn mọi người.
Nhờ hướng dẫn bài tập mô phỏng calculator
Mình nghĩ là sẽ không ai giúp bạn được đâu.
Trừ khi bạn hỏi nhưng đã có hướng làm sơ sơ rồi hay nhờ fix lỗi ở code thì còn có người giúp.
Chứ hỏi kiểu nhờ làm bài tập như này thì khó
dùng regular expression để parse biểu thức
regular expression sao bác :-/ thế để em thử.
em cũng chưa hiểu phải làm như nào?
Nếu chỉ để viết biểu thức tính cộng, trừ, nhân, chia thì ok.
regular expression dùng để xây dựng bộ cú pháp cho một ngôn ngữ, phân rã ngôn ngữ …
xây dựng ngôn ngữ lập trình cũng bắt đầu từ regular expression
với regex thì có thể làm nhiều hơn đề bài nữa, cả bắt chính tả (có gì đó nằm ngoài đề như 1 + xxx(234), xxx đâu có mô tả), cú pháp (ví dụ như 1 * - + / 2, những cái đó đều có nghĩa nhưng ráp lại không đúng cú pháp nên vô nghĩa)…
trước mình làm cái rộng hơn (xây dựng ngôn ngữ lập trình theo đặc tả tới bước có thể check cú pháp…) nên chỉ gợi ý như vậy, cách đơn giản hơn thì không biết
em viết 1 cái lexer tách expression ra thành từng token, xài regex làm gì cho nhức óc :V :V
ví dụ:
Bx = Ax^2 + ((4.789-5.678)^2 – 2897e-3)^3
tách tành
Bx: variable
=: operator
Ax: variable
^:operator
2: number
+: operator
(: left paren
(: left paren
4.789: number
-: operator
5.678: number
): right paren
^: operator
2: number
-: operator
2897e-3: number
): right paren
^: operator
3: number
nếu em viết nó như 1 state machine thì nó cũng na ná như regex =]
Bạn có thể tham khảo giải thuật Shunting-yard và các câu hỏi sẵn có trong StackOverflow về cách xây dựng một bộ parser cho arithmetic expression bằng các ngôn ngữ lập trình khác nhau.
Không có gì sai khi bạn hỏi, nhưng như các bạn khác đã trả lời, bạn nên tìm kiếm trước khi hỏi. Đa phần các bài tập trong trường đều có nằm đâu đó trên Internet. Bạn nên học cách để tìm kiếm hiệu quả. Đối với các lập trình viên và bất kỳ ai làm việc trong ngành computer, Google và StackOverflow là hai người bạn đồng hành không thể thiếu. Tôi góp ý với bạn như vậy vì tôi có cảm giác bạn muốn nhờ mọi người giải bài tập giúp bạn (Nếu bạn muốn tự giải thì ít ra bạn đã có một câu hỏi cụ thể là bạn gặp rắc rối gì với giải thuật thay vì hỏi chung chung là cần hướng dẫn). Thứ hai nữa là bạn nói bạn đang học computer ở nước ngoài, nếu bạn học ở nước ngoài thì bạn nên tập khả năng tìm kiếm và đọc các tài liệu bằng tiếng Anh. Về lâu dài sẽ có lợi cho bạn.
nếu chỉ define token thôi thì chưa đủ, phải define thêm expression vì cái này liên quan tới tính toán kết quả chứ không phải chỉ là phân tích
tính toán thì có thứ tự, phải vẽ được cây AST mới tính được chứ.
state machine chỉ có thể dừng lại ở mức kiểm tra biểu thức này có hợp lệ hay không thôi.
đúng rồi, chia ra làm nhiều bước mà thực hiện. Bước 1 là bóc tách biểu thức thành các token, bước 2 là chuyển các token về cây AST hoặc tiền tố hậu tố gì đó, bước 3 mới tính ra kết quả. Chủ thread làm được bước 1 đã các bước kia tính sau =]]