diff --git a/src/main/java/org/ntlab/rdlcanvas/Main.java b/src/main/java/org/ntlab/rdlcanvas/Main.java index 2c7f0c2..a5bddc1 100644 --- a/src/main/java/org/ntlab/rdlcanvas/Main.java +++ b/src/main/java/org/ntlab/rdlcanvas/Main.java @@ -1,13 +1,22 @@ package org.ntlab.rdlcanvas; +import org.ntlab.rdlcanvas.parser.JsonValue; import org.ntlab.rdlcanvas.parser.Parser; +import org.ntlab.rdlcanvas.parser.StringValue; import org.ntlab.rdlcanvas.parser.Value; +import java.util.Map; + public class Main { public static void main(String[] args) { Parser parser = new Parser(); Value value = parser.getValue(); System.out.println(value.toString()); +// Map map = ((JsonValue)value).getJson(); +// for (StringValue key : map.keySet()){ +// String keyName = key.getStringValue(); +// System.out.println(keyName); +// } } } diff --git a/src/main/java/org/ntlab/rdlcanvas/parser/Parser.java b/src/main/java/org/ntlab/rdlcanvas/parser/Parser.java index 43cdbb3..f9e7895 100644 --- a/src/main/java/org/ntlab/rdlcanvas/parser/Parser.java +++ b/src/main/java/org/ntlab/rdlcanvas/parser/Parser.java @@ -11,7 +11,7 @@ import java.util.Scanner; public class Parser { - public TokenStream tokenStream; + public TokenStream tokenStream; // 字句解析した結果を入れるフィールド public static final String LEFT_CURLY_BRACKET = "{"; public static final String RIGHT_CURLY_BRACKET = "}"; @@ -25,6 +25,7 @@ public static final String COLON = ":"; public static final String DOUBLE_QUOT = "\""; + // Json文字列を標準入力から受け取るコンストラクタ public Parser() { Scanner sc = new Scanner(System.in); StringBuilder s = new StringBuilder(); @@ -40,6 +41,7 @@ tokenStream.addLine(s.toString()); } + // Json文字列をBufferedReader(ファイル)から受け取るコンストラクタ public Parser(final BufferedReader reader) { this.tokenStream = new TokenStream(); try { @@ -53,15 +55,15 @@ } } - // 入力されたJson文字列からValueを生成する + // 入力されたJson文字列からValueとしてパースされた後のJson文字列を生成する public Value getValue() { return parseValue(tokenStream); } - // 値のパース + // 値のパース(構文解析) public Value parseValue(TokenStream tokenStream) throws ExpectedJsonValue, ExpectedArrayValue, ExpectedStringValue { // 次のトークンを見て、どの型の値をパースするかを決定する - // "{"のとき、JsonValue, "["のとき、ArrayValue, "\""のとき、StringValueとしてパースする + // "{"のとき、JsonValue, "["のとき、ArrayValue, "\""のとき、StringValueとしてパースへ流す if (tokenStream.checkNext().equals(LEFT_CURLY_BRACKET)) { tokenStream.next(); JsonValue jsonValue = parseJsonValue(tokenStream); @@ -163,6 +165,7 @@ } } + // 字句解析を行うクラス public static class TokenStream { private ArrayList> tokens = new ArrayList<>(); private ArrayList lines = new ArrayList<>(); @@ -240,6 +243,7 @@ return newTokens; } + // 現在のトークンを返し、次のトークンに進む public String next() { if (line >= tokens.size()) return null; while (n >= tokens.get(line).size()) { @@ -252,6 +256,7 @@ return token; } + //現在のトークンを返すが、次のトークンに進まない public String checkNext() { if (line >= tokens.size()) return null; while (n >= tokens.get(line).size()) { @@ -262,6 +267,7 @@ return tokens.get(line).get(n).getTokenStr(); } + // 次のトークンが存在するかどうか public boolean hasNext() { if (line >= tokens.size()) return false; while (n >= tokens.get(line).size()) {