| Revision | 78 (tree) |
|---|---|
| Time | 2014-02-19 08:12:31 |
| Author | 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) { |