本文整理汇总了C#中Unicoen.Processor.VisitorArgument.DecrementDepth方法的典型用法代码示例。如果您正苦于以下问题:C# VisitorArgument.DecrementDepth方法的具体用法?C# VisitorArgument.DecrementDepth怎么用?C# VisitorArgument.DecrementDepth使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Unicoen.Processor.VisitorArgument
的用法示例。
在下文中一共展示了VisitorArgument.DecrementDepth方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Visit
// ブロック(UnifiedBlock)
public override bool Visit(UnifiedBlock element, VisitorArgument arg)
{
// 要素の左端に記述すべきものがある場合はそれを出力する
// プログラム全体の場合は何も出力しないが、関数の場合には中括弧が必要になるなど
if (!string.IsNullOrEmpty(arg.Decoration.MostLeft)) {
Writer.WriteLine(arg.Decoration.MostLeft);
arg = arg.IncrementDepth();
}
// ブロック内の要素を列挙する
// セミコロンが必要な要素の場合にはセミコロンを出力する
foreach (var stmt in element) {
WriteIndent(arg);
if (stmt.TryAccept(this, arg)) {
Writer.Write(";");
}
Writer.Write(arg.Decoration.EachRight);
}
// 要素の右端に記述すべきものがある場合はインデントを元に戻しそれを出力する
if (!string.IsNullOrEmpty(arg.Decoration.MostRight)) {
arg = arg.DecrementDepth();
WriteIndent(arg);
Writer.Write(arg.Decoration.MostRight);
}
return false;
}
示例2: Visit
public override bool Visit(UnifiedBlock element, VisitorArgument arg)
{
// Write '{' which can be abbreviated
if (!string.IsNullOrEmpty(arg.Decoration.MostLeft)) {
Writer.WriteLine(arg.Decoration.MostLeft);
arg = arg.IncrementDepth();
}
foreach (var stmt in element) {
WriteIndent(arg);
if (stmt.TryAccept(this, arg)) {
Writer.Write(";");
}
Writer.Write(arg.Decoration.EachRight);
}
// Write '}' which can be abbreviated
if (!string.IsNullOrEmpty(arg.Decoration.MostRight)) {
arg = arg.DecrementDepth();
WriteIndent(arg);
Writer.WriteLine(arg.Decoration.MostRight);
}
return false;
}
示例3: Visit
//ブロック
public override bool Visit(UnifiedBlock element, VisitorArgument arg)
{
//「いわゆるブロック」と「式のリストの入れ物としてのブロック」があるため、decorationでどちらかを判断する
var decoration = arg.Decoration;
//いわゆるブロックの場合 : e.g. while(true){ }の{ }の部分
if (decoration.MostLeft == "{") {
Writer.WriteLine(decoration.MostLeft);
arg = arg.IncrementDepth(); //ブロック内部ではインデントを1つ下げる
//ブロック内部の式を出力
foreach (var stmt in element) {
WriteIndent(arg.IndentDepth);
if (stmt.TryAccept(this, arg)) {
Writer.Write(";");
}
Writer.Write(decoration.EachRight);
}
arg = arg.DecrementDepth(); //インデントを元に戻す
WriteIndent(arg.IndentDepth);
Writer.Write(decoration.MostRight);
return false;
}
//式のリストの入れ物としてのブロックの場合 : e.g. return 1,2,3;の1,2,3の部分
//式の数が0個の場合は何も出力せずに終了
if (element.Count == 0) {
return false;
}
//式が1つ以上ある場合
//TODO なぜ括弧を出力するのか確認
Writer.Write("(");
var comma = "";
foreach (var e in element) {
Writer.Write(comma);
e.TryAccept(this, arg);
comma = decoration.Delimiter;
}
Writer.Write(")");
return false;
}