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
}
}
}