リビジョン | 78 (tree) |
---|---|
日時 | 2014-02-19 08:12:31 |
作者 | y-moriguchi |
Java6 scripting framework
@@ -1054,6 +1054,35 @@ | ||
1054 | 1054 | * @return プログラムの中間表現 |
1055 | 1055 | * @throws IOException |
1056 | 1056 | */ |
1057 | + public static AwkExpression parseStatement(AwkNamespace ns, | |
1058 | + AwkLexer rd) throws IOException { | |
1059 | + AwkFunctionPrototype f; | |
1060 | + boolean cl; | |
1061 | + | |
1062 | + if(rd.getToken().equals(AwkReserved.FUNC)) { | |
1063 | + if(rd.nextToken().equals(AwkOperator.FIELD)) { | |
1064 | + // function$ { ... } -> closure | |
1065 | + cl = true; rd.nextToken(); | |
1066 | + } else { | |
1067 | + cl = false; | |
1068 | + } | |
1069 | + f = funcp(rd); | |
1070 | + f.defun(ns, cl); | |
1071 | + rd.eatTokenOpt(AwkReserved.SEMICL); | |
1072 | + return f; | |
1073 | + } else { | |
1074 | + return parseStatement(rd); | |
1075 | + } | |
1076 | + } | |
1077 | + | |
1078 | + /** | |
1079 | + * awkiumプログラムをコンパイルします。 | |
1080 | + * | |
1081 | + * @param ns 名前空間 | |
1082 | + * @param rd lexer | |
1083 | + * @return プログラムの中間表現 | |
1084 | + * @throws IOException | |
1085 | + */ | |
1057 | 1086 | public static AwkProgram parse(AwkNamespace ns, |
1058 | 1087 | AwkLexer rd) throws IOException { |
1059 | 1088 | List<AwkExecutable> l = new ArrayList<AwkExecutable>(); |
@@ -274,7 +274,7 @@ | ||
274 | 274 | for(;;) { |
275 | 275 | try { |
276 | 276 | v = AwkUndefined.UNDEF; |
277 | - x = AwkParser.parseStatement(l); | |
277 | + x = AwkParser.parseStatement(r, l); | |
278 | 278 | x = x.compileInternally(); |
279 | 279 | v = x.eval(r, f); |
280 | 280 | } catch(AwkNextException e) { |