0
Java에서 간단한 파서를 작성하는 데 문제가 있습니다. ('STRING : ...'예 'PUT', 또는)이 파서에 의해 문자 문자열을 구문 분석하고 이상이 파서 토큰 프로세스보다 ArrayList의에 토큰을 저장파서 코드가 제대로 작동하지 않습니다.
을 내 코드의 그 :
package net.ruza;
import java.util.*;
public class SimpleParser
{
public static void main(String[] args)
{
SimpleParser simpleParser = new SimpleParser();
Scanner sc = new Scanner(System.in);
String input = "###";
List<String> data = new ArrayList<String>();
while (input.length() > 1)
{
input = sc.nextLine();
data.addAll(simpleParser.lex(input));
}
for (String s : data)
{
System.out.println(s);
}
simpleParser.parse(data);
}
public List<String> lex(String parse)
{
List<String> tokens = new ArrayList<String>();
boolean stringFound = false;
StringBuilder string = new StringBuilder();
StringBuilder tok = new StringBuilder();
for (char c : parse.toCharArray())
{
tok.append(c);
if (tok.toString().equals("put"))
{
tokens.add("PUT");
tok = new StringBuilder();
}
else if (tok.toString().equals(" ") && !stringFound)
{
tok = new StringBuilder();
}
else if (!stringFound && (tok.toString().equals("\"") || tok.toString().equals("'")))
{
stringFound = true;
tok = new StringBuilder();
System.out.println("String found!");
}
else if (stringFound && (tok.toString().equals("\"") || tok.toString().equals("'")))
{
tokens.add("STRING:'" + string.toString() + "'");
System.out.println("String end!");
tok = new StringBuilder();
string = new StringBuilder();
stringFound = false;
}
else if (stringFound)
{
string.append(c);
tok = new StringBuilder();
}
}
return tokens;
}
public void parse(List<String> tokens)
{
System.out.println("Parser invoked!");
boolean putNext = false;
for (String s : tokens)
{
if (s.equals("PUT"))
{
putNext = true;
}
else if (putNext && (s.substring(0, 5).equals("STRING") || s.substring(0, 2).equals("NUM")))
{
doPrint(s);
}
else System.err.println("Invalid token!");
}
}
public void doPrint(String toPrint)
{
if (toPrint.substring(0, 5).equals("STRING"))
System.out.println(toPrint.substring(7, toPrint.length() - 1));
else if (toPrint.substring(0, 2).equals("NUM"))
System.out.println(toPrint.substring(4, toPrint.length() - 1));
else System.err.println("Invalid printable!");
}
}
해당 코드를 올바르게 작동시키는 법 (예 : 토큰 = { "PUT", "STRING : '안녕!'"} -> '안녕!').
나는 대답하게되어 기쁩니다!
"나는 대답하게되어 기쁩니다!" 무슨 질문에? 게시물에 질문을 포함 시키십시오. – rgettman