public override Verb CreateVerb(string[] tokens) { Color(position, tokens[1].Length, KeyWords); var index = NextPosition; if (GetExpressionThenBlock(source, index).If(out var conditionExpression, out var resultBlock, out var newIndex)) { index = newIndex; var _if = new If(conditionExpression, resultBlock); var sourceLength = source.Length; var currentIf = _if; while (index < sourceLength && parser.Scan(source, index, "^ /(|tabs| 'elseif') /b")) { parser.ColorAll(KeyWords); index = parser.Position; if (GetExpressionThenBlock(source, index).If(out conditionExpression, out resultBlock, out newIndex)) { index = newIndex; var elseIf = new If(conditionExpression, resultBlock); currentIf.Next = elseIf; currentIf = elseIf; } } if (parser.Scan(source, index, "^ /(|tabs| 'else') (/r /n | /r | /n) ")) { parser.ColorAll(KeyWords); index = parser.Position; if (GetBlock(source, index, true).If(out resultBlock, out newIndex)) { _if.ElseBlock = resultBlock; index = newIndex; } else { _if.ElseBlock = null; } } var endParser = new EndParser(); if (endParser.Scan(source, index)) { index = endParser.Position; } overridePosition = index; return(new IfExecute(_if) { Index = position }); } return(null); }
public override Verb CreateVerb(string[] tokens) { Color(position, tokens[1].Length, Whitespaces); Color(tokens[2].Length, KeyWords); if (GetExpression(source, NextPosition, Stop.IfThen()).If(out var condition, out var i) && GetExpression(source, i, Stop.IfElse()).If(out var ifTrue, out var j) && GetExpression(source, j, Stop.IfEnd()).If(out var ifFalse, out var k)) { overridePosition = k; var ifResult = new If(condition, ifTrue) { ElseBlock = ifFalse }; return(new IfExecute(ifResult, VerbPresidenceType.Push)); } return(null); }
public override Verb CreateVerb(string[] tokens) { Color(position, length, Operators); var blocks = from e1 in GetExpression(source, NextPosition, FuncThen()) from e2 in GetExpression(source, e1.position, FuncThen()) from e3 in GetExpression(source, e2.position, FuncEnd()) select(e1.block, e2.block, e3.block, e3.position); if (blocks.If(out var condition, out var thenExpression, out var elseExpression, out var newPosition)) { overridePosition = newPosition; var _if = new If(condition, thenExpression) { ElseBlock = elseExpression }; return(new IfExecute(_if, VerbPrecedenceType.Push)); } return(null); }
public override Verb CreateVerb(string[] tokens) { Color(position, tokens[1].Length, Whitespaces); Color(tokens[2].Length, KeyWords); var expressions = from e1 in GetExpression(source, NextPosition, Stop.IfThen()) from e2 in GetExpression(source, e1.position, Stop.IfElse()) from e3 in GetExpression(source, e2.position, Stop.IfEnd()) select(e1.block, e2.block, e3.block, e3.position); if (expressions.If(out var condition, out var ifTrue, out var ifFalse, out var newPosition)) { overridePosition = newPosition; var ifResult = new If(condition, ifTrue) { ElseBlock = ifFalse }; return(new IfExecute(ifResult, VerbPrecedenceType.Push)); } return(null); }