diff --git a/parseManager/Program.cs b/parseManager/Program.cs
index f362db7..3432cdd 100644
--- a/parseManager/Program.cs
+++ b/parseManager/Program.cs
@@ -7,18 +7,16 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
-
-
-public class define
+public class define : standardParseDefine // If you want the standard methods you must include this
{
- public void testM(string arg1)
- {
- Console.WriteLine(arg1);
- }
- public void testM2(string arg1)
- {
- Console.WriteLine(arg1 + " it works!!!");
- }
+ public void testM(string arg1)
+ {
+ Console.WriteLine(arg1);
+ }
+ public void testM2(string arg1)
+ {
+ Console.WriteLine(arg1 + " it works!!!");
+ }
}
namespace parseManager
{
@@ -26,9 +24,8 @@ namespace parseManager
{
public static void Main(string[] args)
{
- Console.WriteLine("Hello World!");
- parseManager test = new parseManager("parsetest2.txt","define");
- test.invokeA("testM",new object[]{"This is invoked!"});
+ parseManager test = new parseManager("parsetest2.txt", "define"); // define is where your methods will be held
+ test.Next(); // TODO implement the next method
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
diff --git a/parseManager/bin/Debug/parsetest2.txt b/parseManager/bin/Debug/parsetest2.txt
index 04d0632..b6de42b 100644
--- a/parseManager/bin/Debug/parsetest2.txt
+++ b/parseManager/bin/Debug/parsetest2.txt
@@ -1,7 +1,11 @@
ENTRY START
+LOAD test.dat
[START]{
a=10>1
b=10<1
+ --[[
+ Fat Comment Sigh...
+ ]]
"test: $a$ $b$"
test["name"]="Ryan"
name=test["name"]
diff --git a/parseManager/bin/Debug/test.dat b/parseManager/bin/Debug/test.dat
new file mode 100644
index 0000000..88c92a7
--- /dev/null
+++ b/parseManager/bin/Debug/test.dat
@@ -0,0 +1,3 @@
+[TESTER]{
+ "Hello World"
+}
\ No newline at end of file
diff --git a/parseManager/parseManager.cs b/parseManager/parseManager.cs
index 3320364..4f98c3e 100644
--- a/parseManager/parseManager.cs
+++ b/parseManager/parseManager.cs
@@ -1,5 +1,5 @@
/*
- * Created by SharpDevelop.
+ * Created by SharpDevelop.GetType
* User: Ryan
* Date: 8/17/2017
* Time: 11:54 AM
@@ -14,89 +14,270 @@ using System.Reflection;
namespace parseManager
{
///
- /// Description of parseManager.
+ /// Description of ParseManager.
///
public class parseManager
{
string _filepath;
bool _hasDefine;
string _define;
- string _entry="START";
+ string _entry = "START";
Type _defineType;
MethodInfo _defineMethod;
object _defineClassObject;
- Dictionary _chunks = new Dictionary();
- private void parse(){
- try
- {
- StreamReader sr = File.OpenText (_filepath);
- string CDFDATA = sr.ReadToEnd ();
- string pattern = @"\[(.+)\][\r\n]*?\{([^\0]+?)\}";
- var match = Regex.Matches( CDFDATA, pattern );
- foreach (Match m in match)
- _chunks.Add (m.Groups [1].ToString (), m.Groups [2].ToString ());
- }
- catch (FileNotFoundException ex)
- {
- Console.WriteLine("File '"+_filepath+"' does not exist!\n"+ex);
- }
-
+ chunk _currentChunk;
+ Dictionary _flags = new Dictionary();
+ Dictionary _chunks = new Dictionary();
+ Dictionary _methods = new Dictionary();
+ void _Parse(string data)
+ {
+ string pattern = @"\[(.+)\][\r\n]*?\{([^\0]+?)\}";
+ foreach (Match m in Regex.Matches(data, @"LOAD ([a-zA-Z0-9_\./]+)")) {
+ Parse(m.Groups[1].ToString());
+ }
+ foreach (Match m in Regex.Matches(data, @"ENABLE ([a-zA-Z0-9_\./]+)")) {
+ _flags[m.Groups[1].ToString()] = true;
+ }
+ foreach (Match m in Regex.Matches(data, @"ENTRY ([a-zA-Z0-9_\./]+)")) {
+ _entry = m.Groups[1].ToString();
+ }
+ var match = Regex.Matches(data, pattern);
+ foreach (Match m in match) {
+ string Blck = m.Groups[1].ToString();
+ string Cont = m.Groups[2].ToString();
+ int loc = Blck.IndexOf(":");
+ if (loc != -1) {
+ _chunks[Blck.Substring(0, loc)] = new chunk(Blck.Substring(0, loc), Cont, Blck.Substring(loc + 1));
+ } else {
+ _chunks[Blck] = new chunk(Blck, Cont);
+ }
+ }
+ }
+ void Parse()
+ {
+ try {
+ StreamReader sr = File.OpenText(_filepath);
+ _Parse(sr.ReadToEnd());
+ } catch (FileNotFoundException) {
+ Console.WriteLine("File '" + _filepath + "' does not exist! Loading failled!");
+ }
+ }
+ void Parse(string filename)
+ {
+ try {
+ StreamReader sr = File.OpenText(filename);
+ _Parse(sr.ReadToEnd());
+ } catch (FileNotFoundException) {
+ Console.WriteLine("Load '" + filename + "' File not found. Loading failled!");
+ }
+ }
+ public int RunCode(string code)
+ {
+ return 0; // TODO Add runcode stuff so constructs and functions can work!
}
public parseManager(string filepath)
{
- _filepath=filepath;
- _hasDefine=false;
- parse();
+ _filepath = filepath;
+ _hasDefine = false;
+ Parse();
}
- public parseManager(string filepath,string define){
- _define=define;
- _hasDefine=true;
- _filepath=filepath;
+ public parseManager(string filepath, string define)
+ {
+ _define = define;
+ _hasDefine = true;
+ _filepath = filepath;
_defineType = Type.GetType(define);
ConstructorInfo defineConstructor = _defineType.GetConstructor(Type.EmptyTypes);
- _defineClassObject = defineConstructor.Invoke(new object[]{});
- parse();
- }
- public int invokeA(string method, object[] args){ // TODO collect the returned arguments if any
+ _defineClassObject = defineConstructor.Invoke(new object[]{ });
+ Parse();
+ }
+ public int InvokeR(string method, object[] args)
+ { // TODO collect the returned arguments if any
+ if (!_hasDefine)
+ return -1;
+ _defineMethod = _defineType.GetMethod(method);
+ object rets = _defineMethod.Invoke(_defineClassObject, args);
+ Console.WriteLine(rets);
+ return 0;
+ }
+ public long InvokeNR(string method, object[] args)
+ { // Simple Invoking!
if (!_hasDefine)
return -1;
_defineMethod = _defineType.GetMethod(method);
_defineMethod.Invoke(_defineClassObject, args);
return 0;
}
- public int invokeNA(string method, object[] args){ // Simple Invoking!
- if (!_hasDefine)
- return -1;
- _defineMethod = _defineType.GetMethod(method);
- _defineMethod.Invoke(_defineClassObject, args);
- return 0;
+ public void SetBlock(string BLOCK){
+ chunk cchunk;
+ if(_chunks.TryGetValue(BLOCK, out cchunk)){
+ _currentChunk=cchunk;
+ } else {
+ PushError("Attempt to JUMP to a non existing block!");
+ }
}
- public nextType next(){
- return new nextType("method");
+ public void SetBlock(){
+ chunk cchunk;
+ if(_chunks.TryGetValue(_entry, out cchunk)){
+ _currentChunk=cchunk;
+ } else {
+ PushError("Entrypoint is Invalid!");
+ }
+ }
+ public void PushError(string err){
+ Console.WriteLine(err);
+ }
+ public nextType Next(string BLOCK)
+ {
+ if(_currentChunk==null){
+ SetBlock(BLOCK);
+ }
+ return Next();
+ }
+ public nextType Next()
+ {
+ nextType tempReturn = new nextType("method");
+ if(_currentChunk==null){
+ SetBlock();
+ }
+ // TODO Add commands lol
+ var FuncWReturn = Regex.Match(_currentChunk.GetLine(), "([\\[\\]\"a-zA-Z0-9_,]+)\\s?=\\s?([a-zA-Z0-9_]+)\\s?\\((.+)\\)");
+ var FuncWOReturn = Regex.Match(_currentChunk.GetLine(), @"^([a-zA-Z0-9_]+)\s?\((.+)\)");
+ // FuncWOReturn. // TODO Fix This stuff
+ return tempReturn;
}
}
+ /*
+ * Helper Classes
+ */
public class nextType
{
- string type;
- string text;
- Dictionary other = new Dictionary();
- public nextType(string type){
- this.type=type;
+ string _type;
+ string _text;
+ Dictionary _other = new Dictionary();
+ public nextType(string type)
+ {
+ _type = type;
}
- public string getType(){
- return type;
+ public string GetNextType()
+ {
+ return _type;
}
- public void setText(string text){
- this.text=text;
+ public void SetText(string text)
+ {
+ _text = text;
}
- public string getText(){
- return text;
+ public string GetText()
+ {
+ return _text;
}
- public object getData(string name){
- return other[name];
+ public object GetData(string name)
+ {
+ return _other[name];
}
- public void addData(string varname,object data){
- other.Add(varname,data);
+ public void AddData(string varname, object data)
+ {
+ _other[varname] = data;
}
}
+ public class chunk
+ {
+ string _BLOCK;
+ string _type;
+ string _pureType;
+ string[] lines;
+ int _pos = 0;
+ void _clean(string cont)
+ {
+ var m = Regex.Match(_type, @"([a-zA-Z0-9_]+)");
+ _pureType = m.Groups[1].ToString();
+ string tCont = Regex.Replace(cont, @"\-\-\[\[[\S\s]+\]\]", "", RegexOptions.Multiline);
+ tCont = Regex.Replace(tCont, @"\-\-.+\r\n", "", RegexOptions.Multiline);
+ tCont = Regex.Replace(tCont, @"\-\-.+\n", "", RegexOptions.Multiline);
+ tCont = Regex.Replace(tCont, @"\t", "", RegexOptions.Multiline);
+ tCont = Regex.Replace(tCont, @"\n\n", "", RegexOptions.Multiline);
+ tCont = Regex.Replace(tCont, @"\r\n\r\n", "", RegexOptions.Multiline);
+ tCont = Regex.Replace(tCont, @"\-\-\[\[[\S\s]+\]\]", "", RegexOptions.Multiline);
+ tCont = Regex.Replace(tCont, @"^\s+$[\r\n]*", "", RegexOptions.Multiline);
+ lines = tCont.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
+ }
+ public chunk(string name, string cont, string type)
+ {
+ _BLOCK = name;
+ _type = type;
+ _clean(cont);
+ }
+ public chunk(string name, string cont)
+ {
+ _BLOCK = name;
+ _type = "CODEBLOCK";
+ _clean(cont);
+ }
+ public string[] GetLines()
+ {
+ return lines;
+ }
+ public string GetLine()
+ {
+ return lines[_pos++];
+ }
+ public int GetPos()
+ {
+ return _pos;
+ }
+ public void SetPos(int n)
+ {
+ _pos = n;
+ }
+ public void ResetPos()
+ {
+ _pos = 0;
+ }
+ public string GetChunkPType()
+ {
+ return _pureType;
+ }
+ public string GetChunkType()
+ {
+ return _type;
+ }
+ }
+}
+/*
+ * The Standard Methods!
+ */
+public class standardParseDefine
+{
+ public void GOTO(string label)
+ {
+ // TODO goto a label in the script
+ }
+ public void JUMP(string block)
+ {
+ // TODO jump to a block
+ }
+ public void SKIP(int n)
+ {
+ // TODO moves position of
+ }
+ public double ADD(double a, double b)
+ {
+ return a + b;
+ }
+ public double SUB(double a, double b)
+ {
+ return a - b;
+ }
+ public double MUL(double a, double b)
+ {
+ return a * b;
+ }
+ public double DIV(double a, double b)
+ {
+ return a / b;
+ }
+ public double MOD(double a, double b)
+ {
+ return a % b;
+ }
}
\ No newline at end of file