Initial Commit
This commit is contained in:
commit
024342d4da
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
// Use IntelliSense to find out which attributes exist for C# debugging
|
||||
// Use hover for the description of the existing attributes
|
||||
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
|
||||
"name": ".NET Core Launch (console)",
|
||||
"type": "coreclr",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "build",
|
||||
// If you have changed target frameworks, make sure to update the program path.
|
||||
"program": "${workspaceFolder}/bin/Debug/net6.0/langtest.dll",
|
||||
"args": [],
|
||||
"cwd": "${workspaceFolder}",
|
||||
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
|
||||
"console": "internalConsole",
|
||||
"stopAtEntry": false
|
||||
},
|
||||
{
|
||||
"name": ".NET Core Attach",
|
||||
"type": "coreclr",
|
||||
"request": "attach"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "build",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/langtest.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "publish",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"${workspaceFolder}/langtest.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "watch",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"watch",
|
||||
"run",
|
||||
"--project",
|
||||
"${workspaceFolder}/langtest.csproj"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,267 @@
|
|||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace langtest
|
||||
{
|
||||
public enum LexTokenType
|
||||
{
|
||||
PLUS=0,
|
||||
MINUS=1,
|
||||
MULTIPLY=2,
|
||||
DIVIDE=3,
|
||||
MOD=4,
|
||||
LPAREN=5,
|
||||
RPAREN=6,
|
||||
IDENTIFER=7,
|
||||
NUMBER=8,
|
||||
EQUALS=9,
|
||||
COMMA=10,
|
||||
ERROR=11,
|
||||
SEMI=12,
|
||||
LBRACE=13,
|
||||
RBRACE=14,
|
||||
STRING=15,
|
||||
}
|
||||
|
||||
public class LexToken
|
||||
{
|
||||
public LexToken()
|
||||
{
|
||||
|
||||
}
|
||||
public LexToken(string text)
|
||||
{
|
||||
Text = text;
|
||||
Type=char.IsLetter(text.FirstOrDefault()) ? LexTokenType.IDENTIFER : (char.IsNumber(text.FirstOrDefault()) ? LexTokenType.NUMBER : LexTokenType.ERROR);
|
||||
}
|
||||
|
||||
public LexTokenType Type {get;set;}
|
||||
public string Text {get;set;}="";
|
||||
}
|
||||
|
||||
public static class Lexer
|
||||
{
|
||||
public static string? Prompt(string t)
|
||||
{
|
||||
Console.Write(t);
|
||||
return Console.ReadLine();
|
||||
}
|
||||
public static IEnumerable<LexToken> EnumerateTokens(string text)
|
||||
{
|
||||
int filePos=0;
|
||||
Func<(char chr,bool esc)> read_char = ()=>{
|
||||
int txt=text[filePos++];
|
||||
|
||||
if(txt == '\\')
|
||||
{
|
||||
|
||||
//we are to escape
|
||||
txt = text[filePos++];
|
||||
if(txt == 'x')
|
||||
{
|
||||
|
||||
char[] chars=new char[4];
|
||||
|
||||
|
||||
for(int i = 0 ;i<4;i++)
|
||||
{
|
||||
txt = text[filePos++];
|
||||
|
||||
chars[i] = (char)txt;
|
||||
}
|
||||
return ((char)Int16.Parse(new string(chars), NumberStyles.AllowHexSpecifier),true);
|
||||
|
||||
}else{
|
||||
|
||||
if(txt == 'n')
|
||||
{
|
||||
return ('\n',true);
|
||||
}
|
||||
if(txt == 'r')
|
||||
{
|
||||
return ('\r',true);
|
||||
}
|
||||
if(txt == 't')
|
||||
{
|
||||
return ('\t',true);
|
||||
}
|
||||
return ((char)txt,true);
|
||||
}
|
||||
}
|
||||
else{
|
||||
return ((char)txt,false);
|
||||
}
|
||||
};
|
||||
|
||||
Func<string> read_string = ()=>{
|
||||
StringBuilder b=new StringBuilder();
|
||||
while(true)
|
||||
{
|
||||
(char chr,bool esc) txt=read_char();
|
||||
if(txt.chr == '\"' && !txt.esc)
|
||||
{
|
||||
break;
|
||||
}
|
||||
b.Append(txt.chr);
|
||||
}
|
||||
return b.ToString();
|
||||
};
|
||||
|
||||
StringBuilder b=new StringBuilder();
|
||||
while(filePos < text.Length)
|
||||
{
|
||||
char c=text[filePos++];
|
||||
|
||||
if(c == '\"')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
string str = read_string();
|
||||
yield return new LexToken(){Text = str,Type = LexTokenType.STRING};
|
||||
}
|
||||
else
|
||||
if(c == '\'')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
char str = read_char().chr;
|
||||
filePos++;
|
||||
yield return new LexToken(){Text = ((int)str).ToString(),Type = LexTokenType.NUMBER};
|
||||
}else
|
||||
if(c == '+')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text="+",Type = LexTokenType.PLUS};
|
||||
}else
|
||||
if(c == '-')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text="-",Type = LexTokenType.MINUS};
|
||||
}else
|
||||
if(c == '*')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text="*",Type = LexTokenType.MULTIPLY};
|
||||
}else
|
||||
if(c == '/')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text="/",Type = LexTokenType.DIVIDE};
|
||||
}else
|
||||
if(c == '%')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text="%",Type = LexTokenType.MOD};
|
||||
}else if(c == '{')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text="{",Type = LexTokenType.LBRACE};
|
||||
}else if(c == '}')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text="}",Type = LexTokenType.RBRACE};
|
||||
}
|
||||
else
|
||||
if(c == '(')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text="(",Type = LexTokenType.LPAREN};
|
||||
}else
|
||||
if(c == ')')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text=")",Type = LexTokenType.RPAREN};
|
||||
}else if(c == '=')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text="=",Type = LexTokenType.EQUALS};
|
||||
}
|
||||
else if(c == ',')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text=",",Type = LexTokenType.COMMA};
|
||||
}
|
||||
else if(c == ';')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
yield return new LexToken(){Text=";",Type = LexTokenType.SEMI};
|
||||
}
|
||||
else if(c == '\n' || c == ' ' || c == '\t')
|
||||
{
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
|
||||
|
||||
}else{
|
||||
b.Append(c);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if(b.Length > 0)
|
||||
{
|
||||
yield return new LexToken(b.ToString());
|
||||
b.Clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
using langtest;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
/*
|
||||
var re=new ApplicationState();
|
||||
if(args.Length == 0)
|
||||
{
|
||||
string? text;
|
||||
|
||||
while((text=Lexer.Prompt("> ")) != null)
|
||||
{
|
||||
var lexed=Lexer.EnumerateTokens(text);
|
||||
|
||||
var res=Ast.Parse(lexed.ToList());
|
||||
|
||||
res.Execute(re);
|
||||
}
|
||||
}else{
|
||||
string text=File.ReadAllText(args[0]);
|
||||
var lexed=Lexer.EnumerateTokens(text);
|
||||
|
||||
var res=Ast.Parse(lexed.ToList());
|
||||
|
||||
res.Execute(re);
|
||||
}*/
|
||||
var app = new ApplicationState();
|
||||
var ast = new ListNode();
|
||||
foreach(var file in Directory.GetFiles("code/dep","*",SearchOption.AllDirectories))
|
||||
{
|
||||
string text=File.ReadAllText(file);
|
||||
var lexed=Lexer.EnumerateTokens(text);
|
||||
|
||||
Ast.Parse(ast,lexed.ToList());
|
||||
}
|
||||
string text2=File.ReadAllText("code/app.bs");
|
||||
var lexed2=Lexer.EnumerateTokens(text2);
|
||||
Ast.Parse(ast,lexed2.ToList());
|
||||
ast.Execute(app);
|
|
@ -0,0 +1,18 @@
|
|||
create_function(box_addrange,mybox,boxToAppend,{
|
||||
cur.i = 0;
|
||||
cur.len =box_len(boxToAppend);
|
||||
for(cur.i,cur.len,cur.i+1,{
|
||||
box_add(mybox,box_getvalue(boxToAppend,i));
|
||||
});
|
||||
});
|
||||
|
||||
box_print("Type youtube url: ");
|
||||
|
||||
connection=tcp_client("192.168.0.142",3252);
|
||||
res = box_create();
|
||||
box_addrange(res,"GET /api/AddItem/");
|
||||
box_addrange(res,box_readline());
|
||||
box_addrange(res,"HTTP/1.1\r\nHost: 192.168.0.142:3252\r\n\r\n");
|
||||
|
||||
stream_write(connection,res,0,box_len(res));
|
||||
stream_close(connection);
|
|
@ -0,0 +1,5 @@
|
|||
res=string_split_chr("Demi,Lovato,Tom,Joel",',');
|
||||
j=0;
|
||||
for(j,box_len(res),j+1,{
|
||||
box_println(box_getvalue(res,j));
|
||||
});
|
|
@ -0,0 +1,22 @@
|
|||
create_function(string_split_chr,boxId,string_split_chr_chr,{
|
||||
box=box_create();
|
||||
|
||||
box2 = box_create();
|
||||
split_str_chr_i = 0;
|
||||
for(split_str_chr_i,box_len(boxId),split_str_chr_i+1,{
|
||||
if(eq(box_getvalue(boxId,split_str_chr_i),string_split_chr_chr),{
|
||||
if(box_len(box2),{
|
||||
box_add(box,box2);
|
||||
box2 = box_create();
|
||||
},0);
|
||||
},{
|
||||
box_add(box2,box_getvalue(boxId,split_str_chr_i));
|
||||
});
|
||||
});
|
||||
if(box_len(box2),{
|
||||
box_add(box,box2);
|
||||
box2 = box_create();
|
||||
},0);
|
||||
|
||||
box;
|
||||
});
|
|
@ -0,0 +1,14 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
Loading…
Reference in New Issue