# Function function() {} fn <- function(arg1, arg2, ...) { return(arg1) } fn = function(arg1, arg2, ...) { return(arg1) } fn <<- function(arg1, arg2, ...) { return(arg1) } fn <- function(arg1, arg2 = 123, ...) { return(arg1) } fn <- function(arg1, arg2 = xyz, ...) { return(arg1) } ==> Script(FunctionDeclaration(function,ParamList,Block(BlockOpenBrace,BlockCloseBrace)), VariableAssignment(Assignable(Identifier),AssignmentOperator,FunctionDeclaration(function,ParamList(Identifier,Identifier,"..."),Block(BlockOpenBrace,ReturnStatement(return,Identifier),BlockCloseBrace))), VariableAssignment(Assignable(Identifier),AssignmentOperator,FunctionDeclaration(function,ParamList(Identifier,Identifier,"..."),Block(BlockOpenBrace,ReturnStatement(return,Identifier),BlockCloseBrace))), VariableAssignment(Assignable(Identifier),AssignmentOperator,FunctionDeclaration(function,ParamList(Identifier,Identifier,"..."),Block(BlockOpenBrace,ReturnStatement(return,Identifier),BlockCloseBrace))), VariableAssignment(Assignable(Identifier),AssignmentOperator,FunctionDeclaration(function,ParamList(Identifier,NamedArg(Identifier),Numeric,"..."),Block(BlockOpenBrace,ReturnStatement(return,Identifier),BlockCloseBrace))), VariableAssignment(Assignable(Identifier),AssignmentOperator,FunctionDeclaration(function,ParamList(Identifier,NamedArg(Identifier),Identifier,"..."),Block(BlockOpenBrace,ReturnStatement(return,Identifier),BlockCloseBrace)))) # Function Call function() {}() fn() fn(arg1, arg2, ...) fn(arg1, arg2 = 123, arg3 = , "arg4" = xyz, ...) "fn"() foo <- fn(arg1, ...) ==> Script(FunctionCall(FunctionDeclaration(function,ParamList,Block(BlockOpenBrace,BlockCloseBrace)), ArgList), FunctionCall(Identifier,ArgList), FunctionCall(Identifier,ArgList(Identifier,Identifier)), FunctionCall(Identifier,ArgList(Identifier,NamedArg(Identifier),Numeric,NamedArg(Identifier),NamedArg(String),Identifier,"...")), FunctionCall(String,ArgList), VariableAssignment(Assignable(Identifier),AssignmentOperator,FunctionCall(Identifier,ArgList(Identifier,"...")))) # If Else if (T) {1} else {2} if (T) {1} ==> Script(IfStatement(if,True(T),Block(BlockOpenBrace,Numeric,BlockCloseBrace),else,Block(BlockOpenBrace,Numeric,BlockCloseBrace)), IfStatement(if,True(T),Block(BlockOpenBrace,Numeric,BlockCloseBrace))) # Repeat repeat {1} repeat {next} repeat {next()} repeat {break} repeat {break()} ==> Script(RepeatStatement(repeat,Block(BlockOpenBrace,Numeric,BlockCloseBrace)), RepeatStatement(repeat,Block(BlockOpenBrace,NextStatement(next),BlockCloseBrace)), RepeatStatement(repeat,Block(BlockOpenBrace,NextStatement(next),BlockCloseBrace)), RepeatStatement(repeat,Block(BlockOpenBrace,BreakStatement(break),BlockCloseBrace)), RepeatStatement(repeat,Block(BlockOpenBrace,BreakStatement(break),BlockCloseBrace))) # While while(T) {1} ==> Script(WhileStatement(while,True(T),Block(BlockOpenBrace,Numeric,BlockCloseBrace))) # For for(x in xs) {1} ==> Script(ForStatement(for,Identifier,in,Identifier,Block(BlockOpenBrace,Numeric,BlockCloseBrace))) # Indexing ls[1] ls[[1]] ==> Script(IndexStatement(Identifier,Numeric), IndexStatement(Identifier,Numeric)) # Component/Slot Extraction foo$x foo@x ==> Script(BinaryStatement(Identifier,ExtractionOp,Identifier), BinaryStatement(Identifier,ExtractionOp,Identifier)) # Namespace operation foo::x foo:::x ==> Script(BinaryStatement(Identifier,NamespaceOp,Identifier), BinaryStatement(Identifier,NamespaceOp,Identifier)) # Binary Expression 1^2 1*2 1/2 1%%2 1+2 1-2 1==2 1!=2 1>=2 1<=2 1%in%ls x%/%y x%*%y x%o%y x%x%y x|y x||y x&y x&&y ==> Script(BinaryStatement(Numeric,ArithOp,Numeric), BinaryStatement(Numeric,ArithOp,Numeric), BinaryStatement(Numeric,ArithOp,Numeric), BinaryStatement(Numeric,ArithOp,Numeric), BinaryStatement(Numeric,ArithOp,Numeric), BinaryStatement(Numeric,ArithOp,Numeric), BinaryStatement(Numeric,CompareOp,Numeric), BinaryStatement(Numeric,CompareOp,Numeric), BinaryStatement(Numeric,CompareOp,Numeric), BinaryStatement(Numeric,CompareOp,Numeric), BinaryStatement(Numeric,CompareOp,Identifier), BinaryStatement(Identifier,MatrixOp,Identifier), BinaryStatement(Identifier,MatrixOp,Identifier), BinaryStatement(Identifier,MatrixOp,Identifier), BinaryStatement(Identifier,MatrixOp,Identifier), BinaryStatement(Identifier,LogicOp,Identifier), BinaryStatement(Identifier,LogicOp,Identifier), BinaryStatement(Identifier,LogicOp,Identifier), BinaryStatement(Identifier,LogicOp,Identifier))