本文整理汇总了C#中State.AddPreBlueprint方法的典型用法代码示例。如果您正苦于以下问题:C# State.AddPreBlueprint方法的具体用法?C# State.AddPreBlueprint怎么用?C# State.AddPreBlueprint使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类State
的用法示例。
在下文中一共展示了State.AddPreBlueprint方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DoMath
private static bool DoMath(Interpreter interpreter, SourceReader reader, State state)
{
reader.Read(TokenType.LeftParen);
bool isStatement = reader.Take(TokenType.At);
var tokens = reader.ReadToScopeClose(TokenType.LeftParen, TokenType.RightParen, BracketPairs.All);
interpreter.PushState(State.CreateDerivedDistinct(reader.Source, tokens, interpreter));
state.AddPreBlueprint(new FunctionBlueprint(interpreter, _ =>
{
var v = Parser.Calculate(_, _.PopResultString());
if (!isStatement)
{
_.Print(_.FormatNumber(v));
}
return false;
}));
return true;
}
示例2: DoBlock
private static bool DoBlock(Interpreter interpreter, SourceReader reader, State state)
{
var items = reader.ReadMultiItemScope(TokenType.LeftCurly, TokenType.RightCurly, TokenType.Pipe, BracketPairs.All).ToArray();
var attribs = interpreter.NextAttribs;
interpreter._blockAttribs = new BlockAttribs();
if (!items.Any() || !interpreter.TakeChance()) return false;
var rep = new Repeater(items, attribs);
interpreter.PushRepeater(rep);
state.AddPreBlueprint(new RepeaterBlueprint(interpreter, rep));
return true;
}
示例3: DoReplacer
private static bool DoReplacer(Token<TokenType> name, Interpreter interpreter, SourceReader reader, State state)
{
reader.Read(TokenType.Colon);
var args = reader.ReadItemsToClosureTrimmed(TokenType.LeftSquare, TokenType.RightSquare, TokenType.Semicolon, BracketPairs.All).ToArray();
if (args.Length != 2) throw new ProcessusException(reader.Source, name, "Replacer expected 2 arguments, but got " + args.Length + ".");
state.AddPreBlueprint(new ReplacerBlueprint(interpreter, Util.ParseRegex(name.Value), args[1]));
interpreter.PushState(State.CreateDerivedDistinct(reader.Source, args[0], interpreter));
return true;
}
示例4: DoSubDefinition
private static bool DoSubDefinition(Token<TokenType> first, Interpreter interpreter, SourceReader reader, State state)
{
bool meta = reader.Take(TokenType.Question);
reader.Read(TokenType.LeftSquare);
var parameters = new List<Tuple<string, TagArgType>>();
var tName = reader.Read(TokenType.Text, "subroutine name");
if (!Util.ValidateName(tName.Value))
throw new ProcessusException(reader.Source, tName, "Invalid subroutine name: '" + tName.Value + "'");
if (!reader.Take(TokenType.Colon))
{
reader.Read(TokenType.RightSquare);
}
else
{
while (true)
{
bool isTokens = reader.Take(TokenType.At);
parameters.Add(Tuple.Create(reader.Read(TokenType.Text, "parameter name").Value, isTokens ? TagArgType.Tokens : TagArgType.Result));
if (reader.Take(TokenType.RightSquare, false)) break;
reader.Read(TokenType.Semicolon);
}
}
reader.SkipSpace();
reader.Read(TokenType.Colon);
var body = reader.ReadToScopeClose(TokenType.LeftSquare, TokenType.RightSquare, BracketPairs.All).ToArray();
if (meta)
{
interpreter.PushState(State.CreateDerivedDistinct(reader.Source, body, interpreter));
state.AddPreBlueprint(new FunctionBlueprint(interpreter, _ =>
{
_.Engine.Subroutines.Define(tName.Value, Subroutine.FromString(tName.Value, _.PopResultString(), parameters.ToArray()));
return false;
}));
}
else
{
interpreter.Engine.Subroutines.Define(tName.Value, Subroutine.FromTokens(tName.Value, reader.Source, body, parameters.ToArray()));
}
return meta;
}
示例5: DoSubCall
private static bool DoSubCall(Token<TokenType> first, Interpreter interpreter, SourceReader reader, State state)
{
var name = reader.ReadToken();
if (!Util.ValidateName(name.Value))
throw new ProcessusException(reader.Source, name, "Invalid subroutine name '" + name.Value + "'");
bool none = false;
if (!reader.Take(TokenType.Colon))
{
if (!reader.Take(TokenType.RightSquare))
throw new ProcessusException(reader.Source, name, "Expected ':' or ']' after subroutine name.");
none = true;
}
IEnumerable<Token<TokenType>>[] args = null;
Subroutine sub = null;
if (none)
{
if((sub = interpreter.Engine.Subroutines.Get(name.Value, 0)) == null)
throw new ProcessusException(reader.Source, name, "No subroutine was found with the name '" + name.Value + "' and 0 parameters.");
}
else
{
args = reader.ReadItemsToClosureTrimmed(TokenType.LeftSquare, TokenType.RightSquare, TokenType.Semicolon,
BracketPairs.All).ToArray();
if((sub = interpreter.Engine.Subroutines.Get(name.Value, args.Length)) == null)
throw new ProcessusException(reader.Source, name, "No subroutine was found with the name '" + name.Value + "' and " + args.Length + " parameter" + (args.Length != 1 ? "s" : "") + ".");
}
state.AddPreBlueprint(new SubCallBlueprint(interpreter, reader.Source, sub, args));
return true;
}
示例6: DoTag
private static bool DoTag(Interpreter interpreter, SourceReader reader, State state)
{
reader.Read(TokenType.LeftSquare);
var name = reader.ReadToken();
// Check if metapattern
if (name.Identifier == TokenType.Question)
{
state.AddPreBlueprint(new MetapatternBlueprint(interpreter));
interpreter.PushState(State.CreateDerivedDistinct(reader.Source, reader.ReadToScopeClose(TokenType.LeftSquare, TokenType.RightSquare, BracketPairs.All), interpreter));
return true;
}
// Check if replacer
if (name.Identifier == TokenType.Regex)
{
return DoReplacer(name, interpreter, reader, state);
}
if (name.Identifier == TokenType.Dollar)
{
return reader.IsNext(TokenType.Text) ? DoSubCall(name, interpreter, reader, state) : DoSubDefinition(name, interpreter, reader, state);
}
if (!Util.ValidateName(name.Value.Trim()))
throw new ProcessusException(reader.Source, name, "Invalid tag name '" + name.Value + "'");
bool none = false;
if (!reader.Take(TokenType.Colon))
{
if (!reader.Take(TokenType.RightSquare))
throw new ProcessusException(reader.Source, name, "Expected ':' or ']' after tag name.");
none = true;
}
if (none)
{
state.AddPreBlueprint(new TagBlueprint(interpreter, reader.Source, name));
}
else
{
var items = reader.ReadItemsToClosureTrimmed(TokenType.LeftSquare, TokenType.RightSquare,
TokenType.Semicolon, BracketPairs.All).ToArray();
state.AddPreBlueprint(new TagBlueprint(interpreter, reader.Source, name, items));
}
return true;
}