/// <summary> /// この構文木の末尾に構文木を追加する。 /// </summary> /// <param name="tree"></param> public void Append(SyntaxTree tree) { elms.Add(tree); tokenizer.PeekToken(); }
public static IEnumerable<string> RangeParameters2Enumerator(SyntaxTree tree) { for (int i = 0; i < tree.elms.Count;++i ) { var token = tree.elms[i].token; switch (token) { case Token.IDENT: case Token.STRING: yield return tree.elms[i].ident; break; case Token.NUMBER: var start = tree.elms[i].ident; var end = start; if (i + 2 < tree.elms.Count && tree.elms[i + 1].token == Token.RANGE) { end = tree.elms[i + 2].ident; i += 2; // 解析位置を2つ分、先まで進めておく。 } int start0, end0; try { start0 = int.Parse(start); end0 = int.Parse(end); } catch { throw new UnrollerException("RangeParameterで数字が指定されていない。"); } for (int j = start0; j <= end0; ++j) yield return j.ToString(); break; } } }
/// <summary> /// この構文木の末尾にtokenとその文字列を追加 /// TokenのRemoveはしないので要注意。 /// </summary> public void Append(Token token_,string ident_) { var tree = new SyntaxTree(Syntax.Token , tokenizer){token = token_, ident = ident_}; elms.Add(tree); tokenizer.PeekToken(); }