using System; using System.IO; using System.Text; using System.Text.RegularExpressions; //Jason Kim //CSE 655 //Summer 2005 //Inst: B.Mathis namespace CSE655Project { /*syntax notes for fake langauge earl: Syntax Rules ::= #!/usr/bin/earl + ::= #!/end (end of program) ::= | | | ::= = ; { + ) | if { + } else { + } ::= ::= while(){ + } ::= | | ( ) | "*" | >> ::= | | Lexical Rules ::= + | - | * | / | = | != | < | > | <= | => | == | ! ::= # * ::= | | | ::= + ::= a|b|c|d|e|f|g|h|i|j|k|l|m| n|o|p|q|r|s|t|u|v|w|x|y|z|,|'|.|~|@|#|$|%|^|&|* (|)|_|+|=|-|\|/|?|{|}|]|[|:|;|"|!|` ::= 0|1|2|3|4|5|6|7|8|9 ::= print ; | dbconn();| dbsel();| dbexec();| dbgetrow();| dbclose() | fopen(, );| fclose(); | fwrite(,); | fread(,); | filesize(); | GetPost[]; | GetCookie[] | MakeCookie(,*,*,*,*,*) | time(); note: + means a sequence of at least one * means a potentially empty sequence of */ class Class1 { [STAThread] static void Main(string[] args) { //Arg 0 = Source EARL file //Arg 1 = Token File //Arg 2 = Goal PHP file //Open Files, variable dec. FileStream file = new FileStream(args[1],FileMode.OpenOrCreate,FileAccess.Write); StreamWriter tw = new StreamWriter(file); // open token file for writing StreamReader re = File.OpenText(args[0]); //open source for reading string b; Console.WriteLine("Creating Tokens from Earl File"); //tokenize while((b = re.ReadLine())!= null ) { //Tokenize IF blocks First if(b.Length >0) { if(b[0]=='i') { b = Regex.Replace(b,"if", ""); } if(b[0]=='e') { b = Regex.Replace(b,"else",""); } } b.Trim(); //Tokenize Start Indicators b = Regex.Replace(b,"#!/usr/bin/earl", ""); b = Regex.Replace(b,"#!/end", ""); //tokenize Loops b = Regex.Replace(b,"while",""); //Token Functions b = Regex.Replace(b,"print", ""); b = Regex.Replace(b,"dbconn", ""); b = Regex.Replace(b,"dbse", ""); b = Regex.Replace(b,"dbexec", ""); b = Regex.Replace(b,"dbgetrow", ""); b = Regex.Replace(b, "dbclose", ""); b = Regex.Replace(b, "fopen",""); b = Regex.Replace(b, "fclose",""); b = Regex.Replace(b, "fread",""); b = Regex.Replace(b, "fwrite",""); b = Regex.Replace(b, "GetPost",""); b = Regex.Replace(b, "GetCookie", ""); b = Regex.Replace(b, "filesize", ""); b = Regex.Replace(b, "time", ""); b = Regex.Replace(b, "MakeCookie", ""); //Token Variables last b = Regex.Replace(b,"#",""); //Write to Token File tw.WriteLine(b); } Console.WriteLine("Done making Token File Press Enter to Continue"); Console.ReadLine(); re.Close();//Close Source File tw.Close();//Close Token File re = File.OpenText(args[1]);//Open Token File for reading //Create Output PHP file FileStream xfile = new FileStream(args[2],FileMode.OpenOrCreate,FileAccess.Write); StreamWriter xw = new StreamWriter(xfile); //Parse Tokens while((b = re.ReadLine())!= null ) { //Parse Function Tokens First b = Regex.Replace(b,"","mysql_connect"); b = Regex.Replace(b,"", "mysql_select_db"); b = Regex.Replace(b,"", "mysql_query"); b = Regex.Replace(b,"", "mysql_fetch_row"); b = Regex.Replace(b,"","mysql_close"); b = Regex.Replace(b,"", "echo"); b = Regex.Replace(b,"","$"); b = Regex.Replace(b,"","_POST"); b = Regex.Replace(b,"","_COOKIE"); b = Regex.Replace(b,"","fopen"); b = Regex.Replace(b,"","fread"); b = Regex.Replace(b,"","fclose"); b = Regex.Replace(b,"","filesize"); b = Regex.Replace(b,"","setcookie"); b = Regex.Replace(b,"","time"); //Parse start/end Tokens b = Regex.Replace(b,"","","?>"); //Parse Variable Tokens b = Regex.Replace(b,"","$"); //Parse Loop Tokens b = Regex.Replace(b,"","while"); //Parse If Block tokens b = Regex.Replace(b,"","if"); b = Regex.Replace(b,"","else"); //Parse string adds b = Regex.Replace(b,">>","."); //write to output file xw.WriteLine(b); } re.Close();//close token file xw.Close();//close } } }