AST pretty much complete
This commit is contained in:
parent
1f5f0ce0d4
commit
c91f9b9781
|
@ -1,4 +1,12 @@
|
||||||
using tlang;
|
using tlang;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
List<LexToken> tokens;
|
List<LexToken> tokens;
|
||||||
using(var sr = new StreamReader(ApplicationRunner.GetLauncherScript()))
|
using(var sr = new StreamReader(ApplicationRunner.GetLauncherScript()))
|
||||||
|
@ -7,3 +15,5 @@ using(var sr = new StreamReader(ApplicationRunner.GetLauncherScript()))
|
||||||
tokens=lexer.Tokens;
|
tokens=lexer.Tokens;
|
||||||
}
|
}
|
||||||
Environment.Exit(ApplicationRunner.Run(tokens,args));
|
Environment.Exit(ApplicationRunner.Run(tokens,args));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1 +1,11 @@
|
||||||
console.writeln(42);
|
|
||||||
|
ls = create.array();
|
||||||
|
|
||||||
|
each(v : "GET /api/AddItem/https://www.youtube.com/watch?v=U1jjngDGd_Y HTTP/1.1\r\nHost: 192.168.0.112:3252\r\n\r\n")
|
||||||
|
{
|
||||||
|
ls.add(v);
|
||||||
|
}
|
||||||
|
netstrm=net.tcpclient("192.168.0.112",3252);
|
||||||
|
netstrm.write(ls,ls.length);
|
||||||
|
netstrm.close();
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,14 @@
|
||||||
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="IL2C.Build" Version="0.4.113" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net7.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
public class ClosureNode : Node
|
public class ClosureNode : Node
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
public class EachLoop : Node
|
public class EachLoop : Node
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
internal class EnvironmentNode : Node
|
internal class EnvironmentNode : Node
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
internal class FunctionCallNode : Node
|
internal class FunctionCallNode : Node
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
internal class MemberFunctionCallNode : FunctionCallNode
|
internal class MemberFunctionCallNode : FunctionCallNode
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
public class MemberGetVariableValue : GetVariableValue
|
public class MemberGetVariableValue : GetVariableValue
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
internal class Parser
|
internal class Parser
|
||||||
|
@ -45,7 +52,7 @@ namespace tlang
|
||||||
}
|
}
|
||||||
private Node ParseAssignable(List<LexToken> tokens,ref int i)
|
private Node ParseAssignable(List<LexToken> tokens,ref int i)
|
||||||
{
|
{
|
||||||
Node myExpression = ParseSum(tokens,ref i);
|
Node myExpression = ParseLOR(tokens,ref i);
|
||||||
while(i<tokens.Count && (tokens[i].Text == "="))
|
while(i<tokens.Count && (tokens[i].Text == "="))
|
||||||
{
|
{
|
||||||
if(i<tokens.Count && tokens[i].Text == "=")
|
if(i<tokens.Count && tokens[i].Text == "=")
|
||||||
|
@ -54,7 +61,7 @@ namespace tlang
|
||||||
var gvar = myExpression as GetVariableValue;
|
var gvar = myExpression as GetVariableValue;
|
||||||
if(gvar != null)
|
if(gvar != null)
|
||||||
{
|
{
|
||||||
myExpression= new SetVariableNode(gvar,ParseSum(tokens,ref i));
|
myExpression= new SetVariableNode(gvar,ParseLOR(tokens,ref i));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,6 +69,162 @@ namespace tlang
|
||||||
}
|
}
|
||||||
return myExpression;
|
return myExpression;
|
||||||
}
|
}
|
||||||
|
private Node ParseLOR(List<LexToken> tokens,ref int i)
|
||||||
|
{
|
||||||
|
Node myExpression = ParseLAnd(tokens,ref i);
|
||||||
|
while(i<tokens.Count && tokens[i].Text == "||")
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
i++;
|
||||||
|
myExpression = new LogicalOrNode(myExpression,ParseLAnd(tokens,ref i));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return myExpression;
|
||||||
|
}
|
||||||
|
private Node ParseLAnd(List<LexToken> tokens,ref int i)
|
||||||
|
{
|
||||||
|
Node myExpression = ParseBOr(tokens,ref i);
|
||||||
|
while(i<tokens.Count && tokens[i].Text == "&&")
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
i++;
|
||||||
|
myExpression = new LogicalAndNode(myExpression,ParseBOr(tokens,ref i));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return myExpression;
|
||||||
|
}
|
||||||
|
private Node ParseBOr(List<LexToken> tokens,ref int i)
|
||||||
|
{
|
||||||
|
Node myExpression = ParseXOr(tokens,ref i);
|
||||||
|
while(i<tokens.Count && tokens[i].Text == "|")
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
i++;
|
||||||
|
myExpression = new BitwiseOrNode(myExpression,ParseXOr(tokens,ref i));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return myExpression;
|
||||||
|
}
|
||||||
|
private Node ParseXOr(List<LexToken> tokens,ref int i)
|
||||||
|
{
|
||||||
|
Node myExpression = ParseBAnd(tokens,ref i);
|
||||||
|
while(i<tokens.Count && tokens[i].Text == "^")
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
i++;
|
||||||
|
myExpression = new XOrNode(myExpression,ParseBAnd(tokens,ref i));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return myExpression;
|
||||||
|
}
|
||||||
|
private Node ParseBAnd(List<LexToken> tokens,ref int i)
|
||||||
|
{
|
||||||
|
Node myExpression = ParseEq(tokens,ref i);
|
||||||
|
while(i<tokens.Count && tokens[i].Text == "&")
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
i++;
|
||||||
|
myExpression = new BitwiseAndNode(myExpression,ParseEq(tokens,ref i));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return myExpression;
|
||||||
|
}
|
||||||
|
private Node ParseEq(List<LexToken> tokens,ref int i)
|
||||||
|
{
|
||||||
|
Node myExpression = ParseRo(tokens,ref i);
|
||||||
|
while(i<tokens.Count && (tokens[i].Text == "!=" || tokens[i].Text == "=="))
|
||||||
|
{
|
||||||
|
|
||||||
|
if(i<tokens.Count && tokens[i].Text == "!="){
|
||||||
|
i++;
|
||||||
|
myExpression = new NotEqualsNode(myExpression,ParseRo(tokens,ref i));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(i<tokens.Count && tokens[i].Text == "==")
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
myExpression = new EqualsNode(myExpression,ParseRo(tokens,ref i));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return myExpression;
|
||||||
|
}
|
||||||
|
private Node ParseRo(List<LexToken> tokens,ref int i)
|
||||||
|
{
|
||||||
|
Node myExpression = ParseShift(tokens,ref i);
|
||||||
|
while(i<tokens.Count && (tokens[i].Text == "<=" || tokens[i].Text == ">=" || tokens[i].Text == "<" || tokens[i].Text == ">"))
|
||||||
|
{
|
||||||
|
|
||||||
|
if(i<tokens.Count && tokens[i].Text == "<="){
|
||||||
|
i++;
|
||||||
|
myExpression = new LessThanEqualsNode(myExpression,ParseShift(tokens,ref i));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(i<tokens.Count && tokens[i].Text == ">=")
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
myExpression = new GreaterThanEqualsNode(myExpression,ParseShift(tokens,ref i));
|
||||||
|
}
|
||||||
|
if(i<tokens.Count && tokens[i].Text == "<"){
|
||||||
|
i++;
|
||||||
|
myExpression = new LessThanNode(myExpression,ParseShift(tokens,ref i));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(i<tokens.Count && tokens[i].Text == ">")
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
myExpression = new GreaterThanNode(myExpression,ParseShift(tokens,ref i));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return myExpression;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Node ParseShift(List<LexToken> tokens,ref int i)
|
||||||
|
{
|
||||||
|
Node myExpression = ParseSum(tokens,ref i);
|
||||||
|
while(i<tokens.Count && (tokens[i].Text == "<<" || tokens[i].Text == ">>"))
|
||||||
|
{
|
||||||
|
|
||||||
|
if(i<tokens.Count && tokens[i].Text == "<<"){
|
||||||
|
i++;
|
||||||
|
myExpression = new LeftShiftNode(myExpression,ParseSum(tokens,ref i));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(i<tokens.Count && tokens[i].Text == ">>")
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
myExpression = new RightShiftNode(myExpression,ParseSum(tokens,ref i));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return myExpression;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private Node ParseSum(List<LexToken> tokens,ref int i)
|
private Node ParseSum(List<LexToken> tokens,ref int i)
|
||||||
{
|
{
|
||||||
Node myExpression = ParseFactor(tokens,ref i);
|
Node myExpression = ParseFactor(tokens,ref i);
|
||||||
|
@ -869,6 +1032,34 @@ namespace tlang
|
||||||
instance["dict"] = new TExternalMethod((args2)=>{
|
instance["dict"] = new TExternalMethod((args2)=>{
|
||||||
return new TDictionary();
|
return new TDictionary();
|
||||||
});
|
});
|
||||||
|
instance["mutex"] = new TExternalMethod((args2)=>{
|
||||||
|
TDictionary dictionary=new TDictionary();
|
||||||
|
Mutex mtx = new Mutex();
|
||||||
|
dictionary["lock"]=new TExternalMethod((args3)=>{
|
||||||
|
mtx.WaitOne();
|
||||||
|
return TObject.Uninit;
|
||||||
|
});
|
||||||
|
dictionary["unlock"] = new TExternalMethod((args3)=>{
|
||||||
|
mtx.ReleaseMutex();
|
||||||
|
return TObject.Uninit;
|
||||||
|
});
|
||||||
|
return dictionary;
|
||||||
|
});
|
||||||
|
instance["thread"] = new TExternalMethod((args2)=>{
|
||||||
|
if(args2.Length > 0)
|
||||||
|
{
|
||||||
|
ICallable callable = args2[0] as ICallable;
|
||||||
|
|
||||||
|
if(callable !=null){
|
||||||
|
Thread thread=new Thread(()=>{
|
||||||
|
callable.Call();
|
||||||
|
});
|
||||||
|
thread.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return TObject.Uninit;
|
||||||
|
});
|
||||||
env["create"] =instance;
|
env["create"] =instance;
|
||||||
env["console"]=con;
|
env["console"]=con;
|
||||||
env["int"] = new TExternalMethod((args2)=>{
|
env["int"] = new TExternalMethod((args2)=>{
|
||||||
|
@ -894,6 +1085,33 @@ namespace tlang
|
||||||
}
|
}
|
||||||
return TObject.Null;
|
return TObject.Null;
|
||||||
});
|
});
|
||||||
|
TDictionary net = new TDictionary();
|
||||||
|
net["tcpclient"] = new TExternalMethod((args2)=>{
|
||||||
|
if(args2.Length > 1)
|
||||||
|
{
|
||||||
|
var ipOrFQDN = args2[0] as TString;
|
||||||
|
var port = args2[1] as TNumber;
|
||||||
|
if(ipOrFQDN!= null && port != null)
|
||||||
|
{
|
||||||
|
var c = new TcpClient(ipOrFQDN.Value,(int)port.Value);
|
||||||
|
|
||||||
|
return CreateStream(c.GetStream());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TObject.Uninit;
|
||||||
|
});
|
||||||
|
net["sslclient"] = new TExternalMethod((args2)=>{
|
||||||
|
|
||||||
|
return TObject.Uninit;
|
||||||
|
});
|
||||||
|
|
||||||
|
net["tcpserver"] = new TExternalMethod((args2)=>{
|
||||||
|
|
||||||
|
return TObject.Uninit;
|
||||||
|
});
|
||||||
|
|
||||||
|
env["net"] =net;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
namespace tlang
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace tlang
|
||||||
{
|
{
|
||||||
public class ApplicationRunner
|
public class ApplicationRunner
|
||||||
{
|
{
|
||||||
|
@ -9,6 +12,7 @@ public class ApplicationRunner
|
||||||
{
|
{
|
||||||
return File.OpenRead(fileName);
|
return File.OpenRead(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
return typeof(ApplicationRunner).Assembly.GetManifestResourceStream("tlanglib.launcher.launcher.tlang");
|
return typeof(ApplicationRunner).Assembly.GetManifestResourceStream("tlanglib.launcher.launcher.tlang");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
public class ScopeNode : Node
|
public class ScopeNode : Node
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
public class TArray : TObject
|
public class TArray : TObject
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
public class TRootDict : TDictionary
|
public class TRootDict : TDictionary
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace tlang
|
namespace tlang
|
||||||
{
|
{
|
||||||
public class TInternalMethod : TObject, ICallable
|
public class TInternalMethod : TObject, ICallable
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<!--<OutputType>Exe</OutputType>-->
|
<!--<OutputType>Exe</OutputType>-->
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
|
|
||||||
<LangVersion>10.0</LangVersion>
|
<Packable>true</Packable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="launcher\launcher.tlang" />
|
<EmbeddedResource Include="launcher\launcher.tlang" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
Loading…
Reference in New Issue