The backbone of the calculator is a string parser. It can be written from scratch or use existing one. Since I want to get it into production and not prepare for an interview, I choose to use the existing yacc parser provided by F# powerpack. If I hook the back-end yacc parser with the front-end, the majority of the work is accomplished, the rest is to brush your yacc/lex knowledge. I choose use the C# XNA as front-end because I want to draw the function diagram later and am afraid Silverlight won't meet my requirement. You can use F# XNA as front-end, but this is not the main topic.
The whole solution has 4 projects. Two of them are XNA standard projects and two of them are F# ones. The Calculator folder contains the yacc/lex file. I use the F# Parsed Language Starter to create the project. This project is for desktop application, you have to modify the project file by adding the the import elements:
And XNA project settings:
The most important is to make sure the project references the FSharp.Core.dll for Windows Phone.
If you go to WindowsPhoneCalculator project and find the following line in the Game.cs
var r = Calculator.readAndProcess("1+3*2");
if you stop at that line, the r is 7. The full code is here.