From 08847a59f13d0bb9f9f5864421b62e8e6c5fab8d Mon Sep 17 00:00:00 2001 From: Victor Date: Tue, 28 Jul 2015 21:17:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B8=D0=BD=D1=82=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9=20=D1=81=D0=B0=D1=85?= =?UTF-8?q?=D0=B0=D1=80=20(=3D=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20re?= =?UTF-8?q?turn)=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D1=80=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=D1=85=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- program.own | 12 ++++++------ src/com/annimon/ownlang/parser/Parser.java | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/program.own b/program.own index 6dedf11..f6fdf43 100644 --- a/program.own +++ b/program.own @@ -64,18 +64,18 @@ print "\n\n" array = newarray(2, 2, 2, 2) print array -add = def(a,b) return a+b -sub = def(a,b) return a-b -mul = def(a,b) return a*b -div = def(a,b) return a/b -cube = def(x) return x*mul(x, x) +add = def(a,b) = a+b +sub = def(a,b) = a-b +mul = def(a,b) = a*b +div = def(a,b) = a/b +cube = def(x) = x*mul(x, x) print "\n\n" print mul(8, 5) print "\n" print cube(2) functions = [add, sub, mul, div] -def function(f, a, b) return f(a, b) +def function(f, a, b) = f(a, b) for i = 0, i < 4, i = i + 1 { print "\n" print functions[i] diff --git a/src/com/annimon/ownlang/parser/Parser.java b/src/com/annimon/ownlang/parser/Parser.java index acc79d1..e8feaf9 100644 --- a/src/com/annimon/ownlang/parser/Parser.java +++ b/src/com/annimon/ownlang/parser/Parser.java @@ -141,6 +141,10 @@ public final class Parser { argNames.add(consume(TokenType.WORD).getText()); match(TokenType.COMMA); } + if (lookMatch(0, TokenType.EQ)) { + match(TokenType.EQ); + return new FunctionDefineStatement(name, argNames, new ReturnStatement(expression())); + } final Statement body = statementOrBlock(); return new FunctionDefineStatement(name, argNames, body); } @@ -411,8 +415,14 @@ public final class Parser { argNames.add(consume(TokenType.WORD).getText()); match(TokenType.COMMA); } - final Statement body = statementOrBlock(); - return new ValueExpression(new UserDefinedFunction(argNames, body)); + Statement statement; + if (lookMatch(0, TokenType.EQ)) { + match(TokenType.EQ); + statement = new ReturnStatement(expression()); + } else { + statement = statementOrBlock(); + } + return new ValueExpression(new UserDefinedFunction(argNames, statement)); } if (match(TokenType.LPAREN)) { Expression result = expression();