private static SyntaxNode Identifier(RParser.IdentifierContext identifier, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope) { var str = identifier .ID() .ToString() .Replace('.', '_'); return CSharp.ParseExpression(str); }
private static SyntaxNode ForEachStatement(RParser.ForEachStatementContext forStatement, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope) { if (!topLevel(forStatement)) throw new NotImplementedException(); var exprs = forStatement.expr(); var array = (ExpressionSyntax)transform(exprs[0], scope); var body = parseBlock(exprs[1], transform, scope); return @foreach.Get<ForEachStatementSyntax>(forStatement.ID().ToString(), array) .WithStatement(body); }