Daily update on 20250320-081135 by Nitload Youmu. Additional Message : Compiler Framework rebuild compelte, working on reverse converter
Signed-off-by: Nitload <YoumuLiu_NSI@whv0t.onmicrosoft.com>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace StgSharp.Script.Express
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override ExpElementInstanceNode CreateInstanceNode()
|
||||
public override ExpElementInstanceBase CreateInstanceNode()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
@@ -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} " ) { }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// WARNING: This method cannot process INDEXOF, FUNCTION CALLING, LOOP and any ENDING
|
||||
/// SYMBOLS.
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
/// </summary>
|
||||
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();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// WARNING: This method cannot process INDEXOF, FUNCTION CALLING, LOOP and any ENDING
|
||||
/// SYMBOLS.
|
||||
/// </summary>
|
||||
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,
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -77,10 +77,10 @@ namespace StgSharp.Script.Express
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <para>Read code until end of a line. Lines in multi-line comment will be ignored. Line
|
||||
/// <para> 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.</para> <para> (*Just
|
||||
/// Like The Comment Here*) Will Not Be Removed </para>
|
||||
/// beginning with a full multi-line comment will not causing removing. </para> <para>(*Just
|
||||
/// Like The Comment Here*) Will Not Be Removed</para>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public unsafe ReadOnlySpan<char> 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++;
|
||||
|
||||
@@ -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")]
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/e3741687a706609a1d0055c3fd11f41945838a70/*"}}
|
||||
{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/6788bc4a0065508d7afa5f740da1b4ca6dd1efef/*"}}
|
||||
Reference in New Issue
Block a user