本文整理汇总了C#中StarryEyes.Filters.Parsing.TokenReader.AssertGet方法的典型用法代码示例。如果您正苦于以下问题:C# TokenReader.AssertGet方法的具体用法?C# TokenReader.AssertGet怎么用?C# TokenReader.AssertGet使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StarryEyes.Filters.Parsing.TokenReader
的用法示例。
在下文中一共展示了TokenReader.AssertGet方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetUserValue
private static ValueBase GetUserValue(bool isRetweeter, TokenReader reader)
{
var selector = (Func<ValueBase, ValueBase, ValueBase>)
((user, retweeter) => isRetweeter ? retweeter : user);
if (reader.IsRemainToken && reader.LookAhead().Type != TokenType.Period)
{
// user expression
return selector(new User(), new Retweeter());
}
reader.AssertGet(TokenType.Period);
var literal = reader.AssertGet(TokenType.Literal);
switch (literal.Value.ToLower())
{
case "protected":
case "isprotected":
case "is_protected":
return selector(new UserIsProtected(), new RetweeterIsProtected());
case "verified":
case "isverified":
case "is_verified":
return selector(new UserIsVerified(), new RetweeterIsVerified());
case "translator":
case "istranslator":
case "is_translator":
return selector(new UserIsTranslator(), new RetweeterIsTranslator());
case "contributorsenabled":
case "contributors_enabled":
case "iscontributorsenabled":
case "is_contributors_enabled":
return selector(new UserIsContributorsEnabled(), new RetweeterIsContributorsEnabled());
case "geoenabled":
case "geo_enabled":
case "isgeoenabled":
case "is_geo_enabled":
return selector(new UserIsGeoEnabled(), new RetweeterIsGeoEnabled());
case "id":
return selector(new UserId(), new RetweeterId());
case "status":
case "statuses":
case "statuscount":
case "status_count":
case "statusescount":
case "statuses_count":
return selector(new UserStatuses(), new RetweeterStatuses());
case "friend":
case "friends":
case "following":
case "followings":
case "friendscount":
case "friends_count":
case "followingscount":
case "followings_count":
return selector(new UserFollowing(), new RetweeterFollowing());
case "follower":
case "followers":
case "followerscount":
case "followers_count":
return selector(new UserFollowers(), new RetweeterFollowers());
case "fav":
case "favs":
case "favorite":
case "favorites":
case "favscount":
case "favs_count":
case "favoritescount":
case "favorites_count":
return selector(new UserFavroites(), new RetweeterFavroites());
case "list":
case "listed":
case "listcount":
case "list_count":
case "listedcount":
case "listed_count":
return selector(new UserListed(), new RetweeterListed());
case "screenname":
case "screen_name":
return selector(new UserScreenName(), new RetweeterScreenName());
case "name":
case "username":
return selector(new UserName(), new RetweeterName());
case "bio":
case "desc":
case "description":
return selector(new UserDescription(), new RetweeterDescription());
case "loc":
case "location":
return selector(new UserLocation(), new RetweeterLocation());
case "lang":
case "language":
return selector(new UserLanguage(), new RetweeterLanguage());
default:
throw CreateUnexpectedTokenError(literal.Value,
"user." + literal.Value + " " + reader.RemainQuery);
}
}
示例2: GetListValue
private static ListMembers GetListValue(TokenReader reader)
{
reader.AssertGet(TokenType.Period);
var user = reader.AssertGet(TokenType.Literal).Value;
reader.AssertGet(TokenType.Period);
string slug;
var slugToken = reader.Get();
switch (slugToken.Type)
{
case TokenType.String:
case TokenType.Literal:
slug = slugToken.Value;
break;
default:
throw CreateUnexpectedTokenError(slugToken.Value, reader.RemainQuery);
}
return new ListMembers(user, slug);
}
示例3: GetValue
private static ValueBase GetValue(TokenReader reader)
{
var literal = reader.LookAhead();
if (literal.Type == TokenType.String)
{
// immediate string value
return new StringValue(reader.AssertGet(TokenType.String).Value);
}
if (literal.Type == TokenType.OperatorMultiple)
{
// for parsing asterisk user
var pseudo = reader.AssertGet(TokenType.OperatorMultiple);
literal = new Token(TokenType.Literal, "*", pseudo.DebugIndex);
}
else
{
literal = reader.AssertGet(TokenType.Literal);
}
// check first letter
switch (literal.Value[0])
{
case '@':
// user screen name
return GetAccountValue(literal.Value.Substring(1), reader);
case '#':
// user id
return GetAccountValue(literal.Value, reader);
}
// check first layers
switch (literal.Value.ToLower())
{
case "*":
case "we":
case "our":
case "us":
return GetAccountValue("*", reader);
case "@":
reader.AssertGet(TokenType.Period);
return GetAccountValue(reader.AssertGet(TokenType.Literal).Value, reader);
case "user":
case "retweeter":
return GetUserValue(literal.Value == "retweeter", reader);
case "list":
return GetListValue(reader);
default:
long iv;
if (Int64.TryParse(literal.Value, out iv))
{
return new NumericValue(iv);
}
return GetStatusValue(literal.Value, reader);
}
}
示例4: GetAccountValue
private static ValueBase GetAccountValue(string value, TokenReader reader)
{
var repl = GetUserExpr(value);
if (reader.IsRemainToken && reader.LookAhead().Type == TokenType.Period)
{
reader.AssertGet(TokenType.Period);
var literal = reader.AssertGet(TokenType.Literal);
switch (literal.Value.ToLower())
{
case "friend":
case "friends":
case "following":
case "followings":
return new LocalUserFollowing(repl);
case "follower":
case "followers":
return new LocalUserFollowers(repl);
case "block":
case "blocks":
case "blocking":
case "blockings":
return new LocalUserBlockings(repl);
default:
throw CreateUnexpectedTokenError(
literal.Value, repl.ToQuery() + "." + literal.Value + " " + reader.RemainQuery);
}
}
return new LocalUser(repl);
}
示例5: CompileL8
private static FilterOperatorBase CompileL8(TokenReader reader)
{
if (reader.LookAhead().Type == TokenType.OpenBracket)
{
// in bracket
reader.AssertGet(TokenType.OpenBracket);
if (reader.LookAhead().Type == TokenType.CloseBracket)
{
// empty bracket
reader.AssertGet(TokenType.CloseBracket);
return new FilterBracket();
}
var ret = CompileL0(reader);
reader.AssertGet(TokenType.CloseBracket);
return new FilterBracket { Value = ret };
}
if (reader.LookAhead().Type == TokenType.OpenSquareBracket)
{
reader.AssertGet(TokenType.OpenSquareBracket);
var values = new HashSet<ValueBase>();
while (reader.LookAhead().Type != TokenType.CloseSquareBracket)
{
values.Add(GetValue(reader));
if (reader.LookAhead().Type == TokenType.Comma)
{
reader.AssertGet(TokenType.Comma);
}
}
reader.AssertGet(TokenType.CloseSquareBracket);
return new UserSet(values);
}
return GetValue(reader);
}
示例6: GenerateSink
private static FilterOperatorBase GenerateSink(
TokenReader reader,
FilterOperatorBase leftValue,
TokenType type,
FilterTwoValueOperator oper,
Func<TokenReader, FilterOperatorBase> selfCall)
{
reader.AssertGet(type);
var rightValue = selfCall(reader);
oper.LeftValue = leftValue;
oper.RightValue = rightValue;
return oper;
}
示例7: CompileSources
/// <summary>
/// Instantiate sources from tokens.
/// </summary>
private static IEnumerable<FilterSourceBase> CompileSources(IEnumerable<Token> token)
{
// filter
// filter: "argument"
// filter: "argument1", "argument2", ... -> filter: "argument1", filter: "argument2", ...
var reader = new TokenReader(token);
while (reader.IsRemainToken)
{
var filter = reader.Get();
if (filter.Type != TokenType.Literal && filter.Type != TokenType.OperatorMultiple)
{
throw new ArgumentException("このトークンは無効です: " + filter.Type +
" (リテラルか \'*\' です。)");
}
Type fstype;
if (!FilterSourceResolver.TryGetValue(filter.Value, out fstype))
throw new ArgumentException("フィルタ ソースが一致しません: " + filter.Value);
if (reader.IsRemainToken && reader.LookAhead().Type == TokenType.Collon) // with argument
{
reader.AssertGet(TokenType.Collon);
do
{
var argument = reader.AssertGet(TokenType.String);
yield return Activator.CreateInstance(fstype, argument.Value) as FilterSourceBase;
// separated by comma
if (reader.IsRemainToken)
{
reader.AssertGet(TokenType.Comma);
}
} while (reader.IsRemainToken && reader.LookAhead().Type == TokenType.String);
}
else
{
yield return Activator.CreateInstance(fstype) as FilterSourceBase;
if (reader.IsRemainToken)
{
// filters are divided by comma
reader.AssertGet(TokenType.Comma);
}
}
}
}
示例8: CompileL7
private static FilterOperatorBase CompileL7(TokenReader reader)
{
// parse not
if (reader.LookAhead().Type == TokenType.Exclamation)
{
reader.AssertGet(TokenType.Exclamation);
return new FilterNegate { Value = CompileL7(reader) };
}
if (reader.LookAhead().Value == "caseful")
{
reader.AssertGet(TokenType.Literal);
return new OperatorCaseful { Value = CompileL7(reader) };
}
return CompileL8(reader);
}
示例9: CompileSources
/// <summary>
/// Instantiate sources from tokens.
/// </summary>
private static IEnumerable<FilterSourceBase> CompileSources(IEnumerable<Token> token)
{
// filter
// filter: "argument"
// filter: "argument1", "argument2", ... -> filter: "argument1", filter: "argument2", ...
var reader = new TokenReader(token);
while (reader.IsRemainToken)
{
var filter = reader.Get();
if (filter.Type != TokenType.Literal && filter.Type != TokenType.OperatorMultiple)
{
throw CreateUnexpectedTokenError(filter.Value, reader.RemainQuery);
}
Type fstype;
if (!FilterSourceResolver.TryGetValue(filter.Value, out fstype))
{
throw new ArgumentException(
QueryCompilerResources.QueryUnknownFilterSource + " " +
filter.Value);
}
if (reader.IsRemainToken && reader.LookAhead().Type == TokenType.Collon) // with argument
{
reader.AssertGet(TokenType.Collon);
do
{
var argument = reader.AssertGet(TokenType.String);
yield return Activator.CreateInstance(fstype, argument.Value) as FilterSourceBase;
// separated by comma
if (reader.IsRemainToken)
{
reader.AssertGet(TokenType.Comma);
}
} while (reader.IsRemainToken && reader.LookAhead().Type == TokenType.String);
}
else
{
yield return Activator.CreateInstance(fstype) as FilterSourceBase;
if (reader.IsRemainToken)
{
// filters are divided by comma
reader.AssertGet(TokenType.Comma);
}
}
}
}
示例10: CompileL8
private static FilterOperatorBase CompileL8(TokenReader reader)
{
if (reader.LookAhead().Type == TokenType.OpenBracket)
{
// in bracket
reader.AssertGet(TokenType.OpenBracket);
if (reader.LookAhead().Type == TokenType.CloseBracket)
{
// empty bracket
reader.AssertGet(TokenType.CloseBracket);
return new FilterBracket(null);
}
var ret = CompileL0(reader);
reader.AssertGet(TokenType.CloseBracket);
return new FilterBracket(ret);
}
return GetValue(reader);
}
示例11: InstantiateValue
private static ValueBase InstantiateValue(TokenReader reader)
{
Token literal = reader.LookAhead();
if (literal.Type == TokenType.String)
{
// immediate string value
return new StringValue(reader.AssertGet(TokenType.String).Value);
}
if (literal.Type == TokenType.OperatorMultiple)
{
// for parsing asterisk user
Token pseudo = reader.AssertGet(TokenType.OperatorMultiple);
literal = new Token(TokenType.Literal, "*", pseudo.DebugIndex);
}
else
{
literal = reader.AssertGet(TokenType.Literal);
}
// check first layers
switch (literal.Value)
{
case "*":
return InstantiateLocalUsers("*", reader);
case "local":
reader.AssertGet(TokenType.Period);
return InstantiateLocalUsers(reader.AssertGet(TokenType.Literal).Value, reader);
case "user":
case "retweeter":
return InstantiateUserValue(literal.Value == "retweeter", reader);
default:
long iv;
if (Int64.TryParse(literal.Value, out iv))
{
return new NumericValue(iv);
}
return InstantiateStatusValue(literal.Value, reader);
}
}
示例12: InstantiateUserValue
private static ValueBase InstantiateUserValue(bool isRetweeter, TokenReader reader)
{
var selector = (Func<ValueBase, ValueBase, ValueBase>)
((user, retweeter) => isRetweeter ? retweeter : user);
if (reader.IsRemainToken && reader.LookAhead().Type != TokenType.Period)
{
// user representation
return selector(new User(), new Retweeter());
}
reader.AssertGet(TokenType.Period);
Token literal = reader.AssertGet(TokenType.Literal);
switch (literal.Value)
{
case "protected":
case "isProtected":
case "is_protected":
return selector(new UserIsProtected(), new RetweeterIsProtected());
case "verified":
case "isVerified":
case "is_verified":
return selector(new UserIsVerified(), new RetweeterIsVerified());
case "translator":
case "isTranslator":
case "is_translator":
return selector(new UserIsTranslator(), new RetweeterIsTranslator());
case "contributorsEnabled":
case "contributors_enabled":
case "isContributorsEnabled":
case "is_contributors_enabled":
return selector(new UserIsContributorsEnabled(), new RetweeterIsContributorsEnabled());
case "geoEnabled":
case "geo_enabled":
case "isGeoEnabled":
case "is_geo_enabled":
return selector(new UserIsGeoEnabled(), new RetweeterIsGeoEnabled());
case "id":
return selector(new UserId(), new RetweeterId());
case "status":
case "statuses":
case "statusCount":
case "status_count":
case "statusesCount":
case "statuses_count":
return selector(new UserStatuses(), new RetweeterStatuses());
case "friend":
case "friends":
case "following":
case "followings":
case "friendsCount":
case "friends_count":
case "followingsCount":
case "followings_count":
return selector(new UserFriends(), new RetweeterFriends());
case "follower":
case "followers":
case "followersCount":
case "followers_count":
return selector(new UserFollowers(), new RetweeterFollowers());
case "fav":
case "favCount":
case "favorite":
case "favorites":
case "fav_count":
case "favoriteCount":
case "favorite_count":
case "favoritesCount":
case "favorites_count":
return selector(new UserFavroites(), new RetweeterFavroites());
case "list":
case "listed":
case "listCount":
case "list_count":
case "listedCount":
case "listed_count":
return selector(new UserListed(), new RetweeterListed());
case "screenName":
case "screen_name":
return selector(new UserScreenName(), new RetweeterScreenName());
case "name":
return selector(new UserName(), new RetweeterName());
case "bio":
case "desc":
case "description":
return selector(new UserDescription(), new RetweeterDescription());
case "loc":
case "location":
return selector(new UserLocation(), new RetweeterLocation());
case "lang":
case "language":
return selector(new UserLanguage(), new RetweeterLanguage());
default:
throw new FilterQueryException("Unexpected token: " + literal.Value,
"user." + literal.Value + " " + reader.RemainQuery);
}
}
示例13: InstantiateLocalUsers
private static ValueBase InstantiateLocalUsers(string value, TokenReader reader)
{
UserRepresentationBase repl = GetRepresentation(value);
if (reader.IsRemainToken && reader.LookAhead().Type == TokenType.Period)
{
reader.AssertGet(TokenType.Period);
Token literal = reader.AssertGet(TokenType.Literal);
switch (literal.Value)
{
case "friend":
case "friends":
case "following":
case "followings":
return new LocalUserFollowings(repl);
case "follower":
case "followers":
return new LocalUserFollowers(repl);
default:
throw new FilterQueryException("Unexpected token: " + literal.Value,
repl.ToQuery() + "." + literal.Value + " " + reader.RemainQuery);
}
}
return new LocalUser(repl);
}