Nhờ hướng dẫn bài tập mô phỏng calculator

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.

1 Like

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ó

2 Likes

dùng regular expression để parse biểu thức

2 Likes

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

3 Likes

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 =]

4 Likes

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.

3 Likes

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.

3 Likes

đú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 =]]

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?