C # mathematical expression Interpreter
Test file content:
a=2+3*2;b=2*(2+3);
Browser button event handler:
Private void button_browse_click (Object sender, eventargs e) {openfiledialog FBD = new openfiledialog (); FBD. title = "select a file:"; FBD. checkfileexists = true; FBD. checkpathexists = true; FBD. filter = "*. TXT (Text File) | *. TXT | *. * (all files) | *. * "; FBD. filename = environment. getfolderpath (environment. specialfolder. mycomputer); If (FBD. showdialog () = system. windows. forms. dialogresult. OK) {textbox_savedir.text = FBD. filename; try {filestream FS = new filestream (FBD. filename, filemode. Open, fileaccess. Read); streamreader sr = new streamreader (FS); While (! Sr. endofstream) {string line = sr. readline (); analyze (line) ;}} catch (exception ex) {MessageBox. show ("error:" + ex. message + "\ r \ n Stack:" + ex. stacktrace );}}}Analyze a line expression:
Private void analyze (string line) {// use a semicolon as the end character. Multiple statements can be written in one row: String [] expa = line. split (New String [] {";"}, stringsplitoptions. removeemptyentries); For (INT I = 0; I <expa. length; I ++) {analyseexpa (expa [I]) ;}}Calculate an expression:
Private void analyseexpa (string expa) {string [] expb = expa. split (New String [] {"="}, stringsplitoptions. removeemptyentries); For (INT I = 0; I <expb. length; I ++) {RegEx Reg = new RegEx ("[A-Za-Z]"); If (! Reg. ismatch (expb [I]) {object OBJ = evalexpress (expb [I]); If (OBJ! = NULL) {textbox1.text + = expa + "=" + obj. tostring () + "\ r \ n";} else {textbox1.text + = expa + ", unrecognized expression \ r \ n ";}}}}
Download source code:C # source code of the interpreter for mathematical expressions