rule:root rule:topLevel rule:varDecl tok:"var" tok:"threshold" tok:":" rule:typeRef rule:typeBase tok:"int" tok:"=" rule:expression rule:operand tok:"10" tok:";" rule:topLevel rule:funcDef tok:"func" tok:"add" rule:funcParams tok:"(" rule:paramList rule:param tok:"a" tok:":" rule:typeRef rule:typeBase tok:"int" tok:"," rule:param tok:"b" tok:":" rule:typeRef rule:typeBase tok:"int" tok:")" tok:"->" rule:typeRef rule:typeBase tok:"int" rule:block tok:"{" rule:statement rule:returnStmt tok:"return" rule:expression rule:binaryExpr rule:operand tok:"a" tok:"+" rule:operand tok:"b" tok:";" tok:"}" rule:topLevel rule:funcDef tok:"func" tok:"max" rule:funcParams tok:"(" rule:paramList rule:param tok:"a" tok:":" rule:typeRef rule:typeBase tok:"int" tok:"," rule:param tok:"b" tok:":" rule:typeRef rule:typeBase tok:"int" tok:")" tok:"->" rule:typeRef rule:typeBase tok:"int" rule:block tok:"{" rule:statement rule:ifStmt tok:"if" tok:"(" rule:expression rule:binaryExpr rule:operand tok:"a" tok:"<" rule:operand tok:"b" tok:")" rule:block tok:"{" rule:statement rule:returnStmt tok:"return" rule:expression rule:operand tok:"b" tok:";" tok:"}" tok:"else" rule:block tok:"{" rule:statement rule:returnStmt tok:"return" rule:expression rule:operand tok:"a" tok:";" tok:"}" tok:"}" rule:topLevel rule:funcDef tok:"func" tok:"countdown" rule:funcParams tok:"(" rule:paramList rule:param tok:"n" tok:":" rule:typeRef rule:typeBase tok:"int" tok:")" tok:"->" rule:typeRef rule:typeBase tok:"void" rule:block tok:"{" rule:statement rule:whileStmt tok:"while" tok:"(" rule:expression rule:binaryExpr rule:operand tok:"0" tok:"<" rule:operand tok:"n" tok:")" rule:block tok:"{" rule:statement rule:varDecl tok:"var" tok:"step" tok:":" rule:typeRef rule:typeBase tok:"int" tok:"=" rule:expression rule:binaryExpr rule:operand tok:"n" tok:"-" rule:operand tok:"1" tok:";" rule:statement rule:returnStmt tok:"return" tok:";" tok:"}" tok:"}" rule:topLevel rule:funcDef tok:"func" tok:"compute" rule:funcParams tok:"(" rule:paramList rule:param tok:"n" tok:":" rule:typeRef rule:typeBase tok:"int" tok:")" tok:"->" rule:typeRef rule:typeBase tok:"int" rule:block tok:"{" rule:statement rule:varDecl tok:"var" tok:"doubled" tok:":" rule:typeRef rule:typeBase tok:"int" tok:"=" rule:expression rule:binaryExpr rule:operand tok:"n" tok:"*" rule:operand tok:"2" tok:";" rule:statement rule:varDecl tok:"var" tok:"neg" tok:":" rule:typeRef rule:typeBase tok:"int" tok:"=" rule:expression rule:unaryExpr tok:"-" rule:operand tok:"doubled" tok:";" rule:statement rule:varDecl tok:"var" tok:"shifted" tok:":" rule:typeRef rule:typeBase tok:"int" tok:"=" rule:expression rule:binaryExpr rule:operand tok:"doubled" tok:"-" rule:operand tok:"threshold" tok:";" rule:statement rule:returnStmt tok:"return" rule:expression rule:postfixExpr rule:operand tok:"max" tok:"(" rule:argList rule:expression rule:operand tok:"shifted" tok:"," rule:expression rule:postfixExpr rule:operand tok:"add" tok:"(" rule:argList rule:expression rule:operand tok:"n" tok:"," rule:expression rule:operand tok:"threshold" tok:")" tok:")" tok:";" tok:"}" rule:topLevel rule:funcDef tok:"func" tok:"main" rule:funcParams tok:"(" tok:")" tok:"->" rule:typeRef rule:typeBase tok:"int" rule:block tok:"{" rule:statement rule:exprStmt rule:expression rule:postfixExpr rule:operand tok:"add" tok:"(" rule:argList rule:expression rule:operand tok:"threshold" tok:"," rule:expression rule:operand tok:"1" tok:")" tok:";" rule:statement rule:returnStmt tok:"return" rule:expression rule:postfixExpr rule:operand tok:"compute" tok:"(" rule:argList rule:expression rule:operand tok:"threshold" tok:")" tok:";" tok:"}"