本文整理汇总了C#中Scope.PreStatements方法的典型用法代码示例。如果您正苦于以下问题:C# Scope.PreStatements方法的具体用法?C# Scope.PreStatements怎么用?C# Scope.PreStatements使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Scope
的用法示例。
在下文中一共展示了Scope.PreStatements方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Program
private static SyntaxNode Program(RParser.ProgContext prog, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope)
{
var statements = new List<StatementSyntax>();
var inner = new Scope(scope);
inner.InitR();
var pre = inner.PreStatements();
foreach (var expr in prog.expr_or_assign())
{
pre.Clear();
var statement = transform(expr, inner) as StatementSyntax;
Debug.Assert(statement != null);
statements.AddRange(pre);
statements.Add(statement);
}
return CSharp.Block(statements);
}
示例2: RightAssignment
private static SyntaxNode RightAssignment(RParser.RightAssignmentContext assignment, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope)
{
var left = transform(assignment.expr()[1], scope) as ExpressionSyntax;
var right = transform(assignment.expr()[0], scope) as ExpressionSyntax;
Debug.Assert(left != null && right != null);
if (topLevel(assignment))
return assigmentStatement(left, right, scope);
Debug.Assert(left is IdentifierNameSyntax);
var leftValue = left.ToString();
if (!scope.hasVariable(leftValue))
{
scope.PreStatements().Add(preVariable.Get<StatementSyntax>(left));
scope.addVariable(leftValue);
}
return preAssignment.Get(left, right);
}
示例3: Compound
private static SyntaxNode Compound(RParser.CompoundContext compound, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope)
{
//create a new context for the block
var inner = new Scope(scope);
inner.InitR();
var pre = inner.PreStatements();
var statements = new List<StatementSyntax>();
var exprlist = compound.exprlist();
if (exprlist is RParser.ExpressionListContext)
{
var list = exprlist as RParser.ExpressionListContext;
foreach (var expr in list.expr_or_assign())
{
pre.Clear();
var statement = transform(expr, inner) as StatementSyntax;
Debug.Assert(statement != null);
statements.AddRange(pre);
statements.Add(statement);
}
}
return CSharp.Block(statements);
}