【发布时间】:2014-10-16 18:26:02
【问题描述】:
我在用 Java 编写的简单解析器中遇到了麻烦。此解析器按字母解析字符串,然后将标记保存到数组列表中,而不是解析器处理该标记(例如“PUT”或“STRING:...”)
这是我的代码:
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!");
}
}
如何使该代码正常工作(例如 tokens={"PUT", "STRING:'Hi!'"} -> 打印 'Hi!'..)
我会很高兴回答!
【问题讨论】:
-
“我会很高兴回答!”对什么问题?请在帖子中包含您的问题。