diff --git a/StgSharp.Model/obj/x64/Debug/net8.0/StgSharp.Model.AssemblyInfo.cs b/StgSharp.Model/obj/x64/Debug/net8.0/StgSharp.Model.AssemblyInfo.cs index 2a46200b..d2fcafa6 100644 --- a/StgSharp.Model/obj/x64/Debug/net8.0/StgSharp.Model.AssemblyInfo.cs +++ b/StgSharp.Model/obj/x64/Debug/net8.0/StgSharp.Model.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp.Model")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e3741687a706609a1d0055c3fd11f41945838a70")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6788bc4a0065508d7afa5f740da1b4ca6dd1efef")] [assembly: System.Reflection.AssemblyProductAttribute("StgSharp.Model")] [assembly: System.Reflection.AssemblyTitleAttribute("StgSharp.Model")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/StgSharp.Model/obj/x64/Debug/net8.0/StgSharp.Model.sourcelink.json b/StgSharp.Model/obj/x64/Debug/net8.0/StgSharp.Model.sourcelink.json index 03e04358..2eeaae6f 100644 --- a/StgSharp.Model/obj/x64/Debug/net8.0/StgSharp.Model.sourcelink.json +++ b/StgSharp.Model/obj/x64/Debug/net8.0/StgSharp.Model.sourcelink.json @@ -1 +1 @@ -{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/e3741687a706609a1d0055c3fd11f41945838a70/*"}} \ No newline at end of file +{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/6788bc4a0065508d7afa5f740da1b4ca6dd1efef/*"}} \ No newline at end of file diff --git a/StgSharp.Script/Common/CompileStack.cs b/StgSharp.Script/Common/CompileStack.cs index 77d3ea9b..1338bd79 100644 --- a/StgSharp.Script/Common/CompileStack.cs +++ b/StgSharp.Script/Common/CompileStack.cs @@ -172,7 +172,6 @@ namespace StgSharp.Script } _operatorArray[ _operatorCount ] = token; _operatorCount++; - _isNode.Push( false ); } public bool TryPeekOperand( out bool isNode, out Token t, out TNode n ) @@ -223,7 +222,7 @@ namespace StgSharp.Script t = _tokenArray[ --_tokenCount ]; n = TNode.Empty; isNode = false; - return false; + return true; } } diff --git a/StgSharp.Script/Common/Token.cs b/StgSharp.Script/Common/Token.cs index 06b1b7e2..ca7e5176 100644 --- a/StgSharp.Script/Common/Token.cs +++ b/StgSharp.Script/Common/Token.cs @@ -78,7 +78,7 @@ namespace StgSharp.Script Number = 3, String = 4, Member = 5, - Separator_Single = 6, + Separator_Middle = 6, Separator_Left = 7, Separator_Right = 8, Index_Left = 9, diff --git a/StgSharp.Script/Express/Element/ExpType.cs b/StgSharp.Script/Express/Element/ExpType.cs index 7db4f475..6f567c22 100644 --- a/StgSharp.Script/Express/Element/ExpType.cs +++ b/StgSharp.Script/Express/Element/ExpType.cs @@ -77,7 +77,7 @@ namespace StgSharp.Script.Express throw new NotImplementedException(); } - public override ExpElementInstanceNode CreateInstanceNode() + public override ExpElementInstanceBase CreateInstanceNode() { throw new NotImplementedException(); } diff --git a/StgSharp.Script/Express/ExpAstNode/ExpFunctionCallingNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpFunctionCallingNode.cs index 8672b831..16f44df2 100644 --- a/StgSharp.Script/Express/ExpAstNode/ExpFunctionCallingNode.cs +++ b/StgSharp.Script/Express/ExpAstNode/ExpFunctionCallingNode.cs @@ -43,10 +43,10 @@ namespace StgSharp.Script.Express private ExpNode _parameter; - public ExpFunctionCallingNode( - Token source, - ExpFunctionSource function, - ExpNode firstParameter ) + private ExpFunctionCallingNode( + Token source, + ExpFunctionSource function, + ExpNode firstParameter ) : base( source ) { _function = function; @@ -65,5 +65,13 @@ namespace StgSharp.Script.Express _parameter.AppendNode( parameter ); } + public static ExpFunctionCallingNode CallFunction( + Token source, + ExpFunctionSource function, + ExpNode param ) + { + return new ExpFunctionCallingNode( source, function, param ); + } + } } diff --git a/StgSharp.Script/Express/ExpAstNode/ExpInstanceReferenceNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpInstanceReferenceNode.cs index e666874d..0ebaf8d1 100644 --- a/StgSharp.Script/Express/ExpAstNode/ExpInstanceReferenceNode.cs +++ b/StgSharp.Script/Express/ExpAstNode/ExpInstanceReferenceNode.cs @@ -40,17 +40,26 @@ namespace StgSharp.Script.Express public class ExpInstanceReferenceNode : ExpNode { - private ExpElementInstanceNode _instance; + private ExpElementInstanceBase _instance; internal ExpInstanceReferenceNode( Token source, - ExpElementInstanceNode instance ) + ExpElementInstanceBase instance ) : base( source ) { _instance = instance; _nodeFlag = ( _instance._nodeFlag | ( ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any ) ); } + internal ExpInstanceReferenceNode( + Token source, + ExpInstanceReferenceNode reference ) + : base( source ) + { + _instance = reference._instance; + _nodeFlag = ( _instance._nodeFlag | ( ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any ) ); + } + public override ExpNode Left => Empty; public override ExpNode Right => Empty; @@ -60,7 +69,7 @@ namespace StgSharp.Script.Express [MethodImpl( MethodImplOptions.AggressiveInlining )] public static ExpInstanceReferenceNode Create( Token source, - ExpElementInstanceNode instance ) + ExpElementInstanceBase instance ) { return new ExpInstanceReferenceNode( source, instance ); } diff --git a/StgSharp.Script/Express/ExpExceptions.cs b/StgSharp.Script/Express/ExpExceptions.cs index bff356a7..2dcdc445 100644 --- a/StgSharp.Script/Express/ExpExceptions.cs +++ b/StgSharp.Script/Express/ExpExceptions.cs @@ -34,6 +34,7 @@ using System.ComponentModel; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.Serialization; +using System.Security.Cryptography.X509Certificates; using System.Text; namespace StgSharp.Script.Express @@ -57,6 +58,25 @@ namespace StgSharp.Script.Express } + public class ExpInvalidSyntaxException : Exception + { + + public ExpInvalidSyntaxException( string message ) : base( message ) { } + + public static void ThrowNonCollectionIndex( Token t ) + { + throw new ExpInvalidSyntaxException( + $"Use a collection indexer to a non-collection variable at line {t.Line} column {t.Column}" ); + } + + public static void ThrowNoOperator( Token t ) + { + throw new ExpInvalidSyntaxException( + $"No operator but more than one operand before line {t.Line} column {t.Column}" ); + } + + } + public class ExpInvalidElementDeclareEndingExceptions : Exception { @@ -136,4 +156,13 @@ namespace StgSharp.Script.Express "Attempt to compile an EXPRESS script before the init of compiler." ) { } } + + public class ExpCompileException : Exception + { + + public ExpCompileException( Token pos, string message ) + : base( + $"Compiler exception occour when processing token at line {pos.Line}, column {pos.Column}. Detailed message:{Environment.NewLine}{message} " ) { } + + } } diff --git a/StgSharp.Script/Express/ExpNodeGenerator.BranchParser.cs b/StgSharp.Script/Express/ExpNodeGenerator.BranchParser.cs index 9f96d3d4..696af5ec 100644 --- a/StgSharp.Script/Express/ExpNodeGenerator.BranchParser.cs +++ b/StgSharp.Script/Express/ExpNodeGenerator.BranchParser.cs @@ -34,7 +34,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using ExpKeyWord = StgSharp.Script.Express.ExpCompile.KeyWord; +using ExpKeyword = StgSharp.Script.Express.ExpCompile.KeyWord; namespace StgSharp.Script.Express { @@ -43,15 +43,15 @@ namespace StgSharp.Script.Express private bool TryParseBranch( Token t ) { - if( t.Value == ExpKeyWord.Case ) { + if( t.Value == ExpKeyword.Case ) { _cache.PushOperator( t ); _cache.IncreaseDepth( ( int )ExpCompileStateCode.CaseBranch ); return true; - } else if( t.Value == ExpKeyWord.If ) { + } else if( t.Value == ExpKeyword.If ) { _cache.PushOperator( t ); _cache.IncreaseDepth( ( int )ExpCompileStateCode.IfBranch ); return true; - } else if( t.Value == ExpKeyWord.Repeat ) { + } else if( t.Value == ExpKeyword.Repeat ) { _cache.PushOperator( t ); _cache.IncreaseDepth( ( int )ExpCompileStateCode.RepeatLoop ); return true; diff --git a/StgSharp.Script/Express/ExpNodeGenerator.OperatorParser.cs b/StgSharp.Script/Express/ExpNodeGenerator.OperatorParser.cs index 15b72093..f2111c3b 100644 --- a/StgSharp.Script/Express/ExpNodeGenerator.OperatorParser.cs +++ b/StgSharp.Script/Express/ExpNodeGenerator.OperatorParser.cs @@ -34,7 +34,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using ExpKeyWord = StgSharp.Script.Express.ExpCompile.KeyWord; +using ExpKeyword = StgSharp.Script.Express.ExpCompile.KeyWord; namespace StgSharp.Script.Express { @@ -55,28 +55,28 @@ namespace StgSharp.Script.Express ExpNode left = GetNextOperandCache(); ExpNode right = GetNextOperandCache(); switch( t.Value ) { - case ExpKeyWord.Add: + case ExpKeyword.Add: node = ExpBinaryOperatorNode.Add( t, left, right ); return true; - case ExpKeyWord.Sub: + case ExpKeyword.Sub: node = ExpBinaryOperatorNode.Sub( t, left, right ); return true; - case ExpKeyWord.Mul: + case ExpKeyword.Mul: node = ExpBinaryOperatorNode.Mul( t, left, right ); return true; - case ExpKeyWord.Div: + case ExpKeyword.Div: node = ExpBinaryOperatorNode.Div( t, left, right ); return true; - case ExpKeyWord.Equal: + case ExpKeyword.Equal: node = ExpBinaryOperatorNode.EqualTo( t, left, right ); return true; - case ExpKeyWord.NotEqual: + case ExpKeyword.NotEqual: node = ExpBinaryOperatorNode.NotEqualTo( t, left, right ); return true; - case ExpKeyWord.GreaterThan: + case ExpKeyword.GreaterThan: node = ExpBinaryOperatorNode.GreaterThan( t, left, right ); return true; - case ExpKeyWord.LessThan: + case ExpKeyword.LessThan: node = ExpBinaryOperatorNode.LessThan( t, left, right ); return true; default: @@ -89,13 +89,13 @@ namespace StgSharp.Script.Express { ExpNode operand = GetNextOperandCache(); switch( t.Value ) { - case ExpKeyWord.UnaryPlus: + case ExpKeyword.UnaryPlus: node = ExpUnaryOperatorNode.UnaryPlus( t, operand ); return true; - case ExpKeyWord.UnaryMinus: + case ExpKeyword.UnaryMinus: node = ExpUnaryOperatorNode.UnaryMinus( t, operand ); return true; - case ExpKeyWord.Not: + case ExpKeyword.Not: node = ExpUnaryOperatorNode.UnaryNot( t, operand ); return true; default: @@ -104,5 +104,52 @@ namespace StgSharp.Script.Express } } + /// + /// WARNING: This method cannot process INDEXOF, FUNCTION CALLING, LOOP and any ENDING + /// SYMBOLS. + /// + private void ConvertOneOperator() + { + Token @operator = _cache.PopOperator(); + + switch( @operator.Flag ) { + case TokenFlag.Symbol_Unary: + TryGenerateUnaryNode( @operator, out ExpNode? node ); + _cache.PushOperand( node ); + break; + case TokenFlag.Symbol_Binary: + TryGenerateBinaryNode( @operator, out node ); + _cache.PushOperand( node ); + break; + case TokenFlag.Member: + if( _context.TryGetFunction( + @operator.Value, out ExpFunctionSource? f ) ) { + if( !_cache.PopOperand( out Token t, + out ExpNode? p ) ) { + ExpFunctionCallingNode.CallFunction( + @operator, f, p ); + } else { + throw new ExpCompileException( + t, + "An ExpNode for function calling is needed, but a token was popped" ); + } + } else if( ExpSchema.BuiltinSchema + .TryGetFunction( @operator.Value, out f ) ) { + if( !_cache.PopOperand( out Token t, + out ExpNode? p ) ) { + ExpFunctionCallingNode.CallFunction( + @operator, f, p ); + } else { + throw new ExpCompileException( + t, + "An ExpNode for function calling is needed, but a token was popped" ); + } + } + break; + default: + break; + } + } + } } diff --git a/StgSharp.Script/Express/ExpNodeGenerator.TokenSpliter.cs b/StgSharp.Script/Express/ExpNodeGenerator.TokenSpliter.cs index f538e799..d7bf3b00 100644 --- a/StgSharp.Script/Express/ExpNodeGenerator.TokenSpliter.cs +++ b/StgSharp.Script/Express/ExpNodeGenerator.TokenSpliter.cs @@ -34,92 +34,54 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using ExpKeyWord = StgSharp.Script.Express.ExpCompile.KeyWord; +using ExpKeyword = StgSharp.Script.Express.ExpCompile.KeyWord; namespace StgSharp.Script.Express { public partial class ExpNodeGenerator { - private void AppendToken_Common( Token t ) - { - switch( t.Flag ) { - // instance ref, make ref and push - // function call, push as operator - // keyword, call TryParseConstant method to process - // name of member in instance, parse as MemberNameNode - case TokenFlag.Member: - if( _context.TryGetFunction( t.Value, out _ ) ) { - _cache.PushOperator( t ); - } else if( _local.TryGetMember( t.Value, - out ExpNode? node ) ) { - if( node is ExpElementInstanceBase instance ) { - _cache.PushOperand( instance.MakeReference( t ) ); - return;// ref of an instance - } - } else if( TryParseConstant( t ) ) { - return; - } else if( TryParseFunction( t ) ) { - return; - } else if( TryParseBranch( t ) ) { - return; - } else { - _cache.PushOperand( t ); - } - break; - case TokenFlag.Separator_Single: //a , ; found - // if operator stack is not empty, convert all operators to node until meet a same separator - // or OperandAheadOfSeparator property is less than certain value - _cache.PushOperator( t ); - break; - case TokenFlag.Separator_Left: //a ( [ { found - // check if the last token is a function name, loop block or branch - _cache.PushOperator( t ); - break; - case TokenFlag.Separator_Right: //a } ] ) found - //Convert operator until meet a matched separator - while( _cache.TryPopOperator( out Token op ) ) { - if( IsSeparatorMatch( t, op ) ) { - if( _cache.OperatorAheadOfDepth == 0 ) { - _cache.TryPeekOperand( - out _, out Token tOperand, - out ExpNode nOperand ); - - return; - } - } else { - return; - } - } - - break; - - - case TokenFlag.Index_Left: // a [ found - _cache.PushOperand( t ); - return; - case TokenFlag.Index_Right: // a ] found - while( _cache.TryPopOperator( out Token op ) ) { - if( op.Value == ExpKeyWord.IndexOf ) { } else { } - } - break; - default: - break; - } - } - private bool IsSeparatorMatch( Token source, Token target ) { return source.Value switch { - ExpKeyWord.LeftBrace => target.Value == ExpKeyWord.RightBrace, - ExpKeyWord.LeftParen => target.Value == ExpKeyWord.RightParen, - ExpKeyWord.Comma => target.Value == ExpKeyWord.Comma, - ExpKeyWord.Semicolon => target.Value == ExpKeyWord.Semicolon, + ExpKeyword.LeftBrace => target.Value == ExpKeyword.RightBrace, + ExpKeyword.LeftParen => target.Value == ExpKeyword.RightParen, + ExpKeyword.Comma => target.Value == ExpKeyword.Comma, + ExpKeyword.Semicolon => target.Value == ExpKeyword.Semicolon, _ => false }; } + private bool TryAppendIndexLeft( Token t ) + { + if( t.Flag != TokenFlag.Index_Left ) { + return false; + } + if( _cache.TryPeekOperand( + out bool isNode, out _, out ExpNode? node ) ) { + if( node.EqualityTypeConvert is not ExpCollectionBase ) { + ExpInvalidSyntaxException.ThrowNonCollectionIndex( t ); + } + } + _cache.PushOperator( t ); + _cache.IncreaseDepth( ( int )ExpCompileStateCode.CollectionIndex ); + return true; + } + + private bool TryAppendIndexRight( Token t ) + { + if( t.Flag != TokenFlag.Index_Right ) { + return false; + } + + //reverse building + + //make index node + _cache.PushOperand( ExpCollectionIndexNode.Create( t ) ); + return true; + } + private bool TryAppendMember( Token t ) { if( t.Flag != TokenFlag.Member ) { @@ -142,6 +104,37 @@ namespace StgSharp.Script.Express return true; } + private bool TryAppendMiddleSeparator( Token t ) + { + if( t.Flag != TokenFlag.Separator_Middle ) { + return false; + } + if( _cache.OperatorAheadOfDepth == 0 ) { + if( _cache.OperandAheadOfDepth == 1 ) { + _cache.PushOperand( t ); + _cache.PushOperator( t ); + return true; + } else { + ExpInvalidSyntaxException.ThrowNoOperator( t ); + } + } + Token op; + processOperator: + if( _cache.TryPopOperator( out op ) ) { + if( op.Value == t.Value ) { + _cache.PopOperand( out _, out ExpNode? node ); + + //append node to tail + _cache.PushOperand( t ); + _cache.PushOperator( t ); + } else { + ConvertOneOperator(); + goto processOperator; + } + } + return true; + } + private bool TryAppendNumAndStrLiteral( Token t ) { if( ( t.Flag & ( TokenFlag.String | TokenFlag.Number ) ) == 0 ) { @@ -160,6 +153,17 @@ namespace StgSharp.Script.Express return true; } + private bool TryAppendPrefixSeparatorEnd( Token t ) + { + if( t.Flag != TokenFlag.Separator_Right ) { + return false; + } + + //convert all operator to node until meet a prefix separator + + return true; + } + private bool TryAppendSymbol( Token t ) { if( ( t.Flag & ( TokenFlag.Symbol_Unary | TokenFlag.Symbol_Binary ) ) == @@ -181,10 +185,10 @@ namespace StgSharp.Script.Express private bool TryParseConstant( Token t ) { - if( t.Value == ExpKeyWord.True ) { + if( t.Value == ExpKeyword.True ) { _cache.PushOperand( new ExpBoolNode( t, true ) ); return true; - } else if( t.Value == ExpKeyWord.False ) { + } else if( t.Value == ExpKeyword.False ) { _cache.PushOperand( new ExpBoolNode( t, false ) ); return true; } @@ -193,7 +197,7 @@ namespace StgSharp.Script.Express private bool TryParseFunction( Token t ) { - if( ExpKeyWord.BuiltinFunctions.Contains( t.Value ) ) { + if( ExpKeyword.BuiltinFunctions.Contains( t.Value ) ) { _cache.PushOperator( t ); return true; } else if( _context.TryGetFunction( @@ -207,7 +211,7 @@ namespace StgSharp.Script.Express private bool TryParseInstance( Token t ) { if( _local.TryGetMember( t.Value, - out ExpNode? node ) && node is ExpElementInstanceNode instance ) { + out ExpNode? node ) && node is ExpElementInstanceBase instance ) { _cache.PushOperand( ExpInstanceReferenceNode.Create( t, instance ) ); return true; diff --git a/StgSharp.Script/Express/ExpNodeGenerator.cs b/StgSharp.Script/Express/ExpNodeGenerator.cs index d6eba1b3..d47d7dd9 100644 --- a/StgSharp.Script/Express/ExpNodeGenerator.cs +++ b/StgSharp.Script/Express/ExpNodeGenerator.cs @@ -28,16 +28,19 @@ // //----------------------------------------------------------------------- //----------------------------------------------------------------------- +using Microsoft.CodeAnalysis.CSharp.Syntax; + using StgSharp.Threading; using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO.Pipes; using System.Linq; using System.Text; using System.Threading.Tasks; -using ExpKeyWord = StgSharp.Script.Express.ExpCompile.KeyWord; +using ExpKeyword = StgSharp.Script.Express.ExpCompile.KeyWord; namespace StgSharp.Script.Express { @@ -68,7 +71,28 @@ namespace StgSharp.Script.Express /// public void AppendToken( Token expToken ) { - switch( _cache.CurrentDepthMark.State ) { + switch( expToken.Flag ) { + case TokenFlag.Symbol_Unary or TokenFlag.Symbol_Binary: + TryAppendSymbol( expToken ); + break; + case TokenFlag.Member: + TryAppendMember( expToken ); + break; + case TokenFlag.Separator_Left: + TryAppendPrefixSeparator( expToken ); + break; + case TokenFlag.Separator_Right: + TryAppendPrefixSeparatorEnd( expToken ); + break; + case TokenFlag.Separator_Middle: + TryAppendMiddleSeparator( expToken ); + break; + case TokenFlag.Index_Left: + TryAppendIndexLeft( expToken ); + break; + case TokenFlag.Index_Right: + TryAppendIndexRight( expToken ); + break; default: break; } @@ -83,28 +107,6 @@ namespace StgSharp.Script.Express throw new NotImplementedException(); } - /// - /// WARNING: This method cannot process INDEXOF, FUNCTION CALLING, LOOP and any ENDING - /// SYMBOLS. - /// - private void ConvertOneOperator() - { - Token @operator = _cache.PopOperator(); - - switch( @operator.Flag ) { - case TokenFlag.Symbol_Unary: - TryGenerateUnaryNode( @operator, out ExpNode? node ); - _cache.PushOperand( node ); - break; - case TokenFlag.Symbol_Binary: - TryGenerateBinaryNode( @operator, out node ); - _cache.PushOperand( node ); - break; - default: - break; - } - } - /**/ public enum ExpCompileStateCode @@ -118,6 +120,7 @@ namespace StgSharp.Script.Express CaseBranch, PrefixSeparator, MiddleSeparator, + CollectionIndex, } diff --git a/StgSharp.Script/Express/ExpSourceReader.cs b/StgSharp.Script/Express/ExpSourceReader.cs index 28bf2cbf..7cf2368f 100644 --- a/StgSharp.Script/Express/ExpSourceReader.cs +++ b/StgSharp.Script/Express/ExpSourceReader.cs @@ -77,10 +77,10 @@ namespace StgSharp.Script.Express } /// - /// Read code until end of a line. Lines in multi-line comment will be ignored. Line + /// Read code until end of a line. Lines in multi-line comment will be ignored. Line /// begins with part of multi-line comment will automatically remove the comment part, but - /// beginning with a full multi-line comment will not causing removing. (*Just - /// Like The Comment Here*) Will Not Be Removed + /// beginning with a full multi-line comment will not causing removing. (*Just + /// Like The Comment Here*) Will Not Be Removed /// /// public unsafe ReadOnlySpan ReadLine() @@ -246,7 +246,7 @@ namespace StgSharp.Script.Express _current++; return new Token( ExpCompile.PoolString( source[ ..1 ] ), _lineNum, - begin, TokenFlag.Separator_Single ); + begin, TokenFlag.Separator_Middle ); case ':' or '+' or '/' or '\\' or '*' or '.': begin = _current; _current++; diff --git a/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.AssemblyInfo.cs b/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.AssemblyInfo.cs index dd7f7dd1..5c6a2c48 100644 --- a/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.AssemblyInfo.cs +++ b/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp.Script")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e3741687a706609a1d0055c3fd11f41945838a70")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6788bc4a0065508d7afa5f740da1b4ca6dd1efef")] [assembly: System.Reflection.AssemblyProductAttribute("StgSharp.Script")] [assembly: System.Reflection.AssemblyTitleAttribute("StgSharp.Script")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.sourcelink.json b/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.sourcelink.json index 03e04358..2eeaae6f 100644 --- a/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.sourcelink.json +++ b/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.sourcelink.json @@ -1 +1 @@ -{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/e3741687a706609a1d0055c3fd11f41945838a70/*"}} \ No newline at end of file +{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/6788bc4a0065508d7afa5f740da1b4ca6dd1efef/*"}} \ No newline at end of file diff --git a/StgSharp.TerminalDialogue/obj/x64/Debug/StgSharp.TerminalDialogue.AssemblyInfo.cs b/StgSharp.TerminalDialogue/obj/x64/Debug/StgSharp.TerminalDialogue.AssemblyInfo.cs index 0f6439b7..251baac4 100644 --- a/StgSharp.TerminalDialogue/obj/x64/Debug/StgSharp.TerminalDialogue.AssemblyInfo.cs +++ b/StgSharp.TerminalDialogue/obj/x64/Debug/StgSharp.TerminalDialogue.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp.TerminalDialogue")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e3741687a706609a1d0055c3fd11f41945838a70")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6788bc4a0065508d7afa5f740da1b4ca6dd1efef")] [assembly: System.Reflection.AssemblyProductAttribute("StgSharp.TerminalDialogue")] [assembly: System.Reflection.AssemblyTitleAttribute("StgSharp.TerminalDialogue")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/StgSharp.TerminalDialogue/obj/x64/Debug/StgSharp.TerminalDialogue.sourcelink.json b/StgSharp.TerminalDialogue/obj/x64/Debug/StgSharp.TerminalDialogue.sourcelink.json index 03e04358..2eeaae6f 100644 --- a/StgSharp.TerminalDialogue/obj/x64/Debug/StgSharp.TerminalDialogue.sourcelink.json +++ b/StgSharp.TerminalDialogue/obj/x64/Debug/StgSharp.TerminalDialogue.sourcelink.json @@ -1 +1 @@ -{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/e3741687a706609a1d0055c3fd11f41945838a70/*"}} \ No newline at end of file +{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/6788bc4a0065508d7afa5f740da1b4ca6dd1efef/*"}} \ No newline at end of file diff --git a/StgSharpDebug/Program.cs b/StgSharpDebug/Program.cs index bb99008e..2df24694 100644 --- a/StgSharpDebug/Program.cs +++ b/StgSharpDebug/Program.cs @@ -49,7 +49,7 @@ using System.Xml.XPath; namespace StgSharp { - internal static class Program + internal static partial class Program { private static string testExpPath = @"D:\Programmer\stepcode\data\ap203\ap203.exp"; @@ -59,42 +59,35 @@ namespace StgSharp try { StgSharp.Init(); - /**/ - ExpCompile.InitCompile(); - ExpFileSource reader = new ExpFileSource( testExpPath ); - ExpSchemaSource schemaSource = new ExpSchemaSource(); - schemaSource.ReadSchema( reader ); + CompileStack stack = new CompileStack( + ); - ExpSchema schema = schemaSource.Compile( - ExpressCompileOption.Translate ); + for( int i = 0; i < 10; i++ ) { + stack.PushOperand( + new Token( $"{i}", 0, 0, TokenFlag.Number ) ); + } + for( int i = 0; i < 10; i++ ) { + stack.PushOperator( + new Token( $"op_{i}", 0, 0, TokenFlag.Member ) ); + } + stack.IncreaseDepth( 0 ); - /**/ - /* - - StgSharp.InitGL( 4, 6 ); - StgSharp.GlobalSetting.VSyncActivated = false; - - ViewPort vp = new ViewPort( - 800, 600, "Hello StgSharp!", IntPtr.Zero ); - - //throw new NotImplementedException(); - - StringHashMultiplexer mul = new StringHashMultiplexer(); - IEqualityComparer com = mul; - string str = "1234567012345670"; - for( int i = 1; i < 100; i++ ) { - str += $"{(i%8)}"; - int hash = mul.ForceComputeHash( str ); - Thread.Sleep( 20 ); + for( int i = 0; i < 10; i++ ) { + stack.PushOperand( + new Token( $"{i}", 0, 0, TokenFlag.Number ) ); + } + for( int i = 0; i < 10; i++ ) { + stack.PushOperator( + new Token( $"op_{i}", 0, 0, TokenFlag.Member ) ); } - ViewModelBase mainModel = new ViewModelMain( vp ); - mainModel.CreateAndBindView( "MainView", (1, 1, 1) ); - - mainModel.UseViewModel( "MainView" ); - - StgSharp.Terminate(); - /**/ + while( stack.TryPopOperand( + out bool isNode, out Token t, out ExpNode n ) ) { + Console.WriteLine( t.Value ); + } + while( stack.TryPopOperator( out Token op ) ) { + Console.WriteLine( op.Value ); + } return; } diff --git a/StgSharpDebug/TestFileRead.cs b/StgSharpDebug/TestFileRead.cs new file mode 100644 index 00000000..6b242102 --- /dev/null +++ b/StgSharpDebug/TestFileRead.cs @@ -0,0 +1,56 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="TestFileRead.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Script.Express; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + internal static partial class Program + { + + private static void TestFileRead() + { + ExpCompile.InitCompile(); + ExpFileSource reader = new ExpFileSource( testExpPath ); + ExpSchemaSource schemaSource = new ExpSchemaSource(); + schemaSource.ReadSchema( reader ); + + ExpSchema schema = schemaSource.Compile( + ExpressCompileOption.Translate ); + } + + } +} diff --git a/StgSharpDebug/TestRender.cs b/StgSharpDebug/TestRender.cs new file mode 100644 index 00000000..9096d24a --- /dev/null +++ b/StgSharpDebug/TestRender.cs @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +// file="TestRender.cs" +// Project: StgSharp +// AuthorGroup: Nitload Space +// Copyright (c) Nitload Space. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and +// this permission notice shall be included in all copies +// or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, +// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH +// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +//----------------------------------------------------------------------- +//----------------------------------------------------------------------- +using StgSharp.Collections; +using StgSharp.MVVM; +using StgSharp.MVVM.ViewModel; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StgSharp +{ + internal static partial class Program + { + + public static void TestRender() + { + StgSharp.InitGL( 4, 6 ); + StgSharp.GlobalSetting.VSyncActivated = false; + + ViewPort vp = new ViewPort( + 800, 600, "Hello StgSharp!", IntPtr.Zero ); + + //throw new NotImplementedException(); + + StringHashMultiplexer mul = new StringHashMultiplexer(); + IEqualityComparer com = mul; + string str = "1234567012345670"; + for( int i = 1; i < 100; i++ ) { + str += $"{(i % 8)}"; + int hash = mul.ForceComputeHash( str ); + Thread.Sleep( 20 ); + } + + ViewModelBase mainModel = new ViewModelMain( vp ); + mainModel.CreateAndBindView( "MainView", (1, 1, 1) ); + + mainModel.UseViewModel( "MainView" ); + + StgSharp.Terminate( 0 ); + } + + } +} diff --git a/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.AssemblyInfo.cs b/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.AssemblyInfo.cs index 436379e0..8f7cea26 100644 --- a/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.AssemblyInfo.cs +++ b/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgSharpDebug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e3741687a706609a1d0055c3fd11f41945838a70")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6788bc4a0065508d7afa5f740da1b4ca6dd1efef")] [assembly: System.Reflection.AssemblyProductAttribute("StgSharpDebug")] [assembly: System.Reflection.AssemblyTitleAttribute("StgSharpDebug")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.sourcelink.json b/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.sourcelink.json index 03e04358..2eeaae6f 100644 --- a/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.sourcelink.json +++ b/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.sourcelink.json @@ -1 +1 @@ -{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/e3741687a706609a1d0055c3fd11f41945838a70/*"}} \ No newline at end of file +{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/6788bc4a0065508d7afa5f740da1b4ca6dd1efef/*"}} \ No newline at end of file