我目前正在進行一項任務,以創建一個包含8個關鍵字(不區分大小寫)和4個算術運算符的基本解釋器。在這門語言的程序會是這個樣子(類似於BASIC的語法真的):用java編寫一個解釋器,使用多重陣列表或字符串排序器
# (signals start of a comment line)
LET
INTEGER
STRING
PRINT
END
所以無論如何,我目前正試圖來標記要分析的文本行。我已經將所有文本行解析爲一個ArrayList並標記了字符串。我現在的問題是,StringTokenizer預先標記所有的字符串(我使用空格作爲分隔符),當我需要的是它找到我的關鍵字,它始終是代碼行開頭的第一個字,並且某些問題使得這不合要求;我不認爲使用String.split()也會有很大的幫助。
我打算這樣做的方法是讓解釋器找到我的第一個標記,然後從那裏通過HashMap到相應的類(參考我以前關於在這裏爲我的解釋器使用switch語句的問題: Switch or if statements in writing an interpreter in java;其他成員建議我使用Map)刪除關鍵字標記並執行。設置第二個臨時ArrayList或數組來保存變量是個好主意嗎?我不想或不需要它太複雜。
在此先感謝您的建議。
public static void main (String[]args)
{
try
{
ArrayList<String> demo= new ArrayList <String>();
FileReader fr= new FileReader("hi.tpl");
BufferedReader reader= new BufferedReader(fr);
String line;
while ((line=reader.readLine()) !=null)//read file line by line
{
//Add to ArrayList
demo.add(line);
}
reader.close();
boolean checkEnd= demo.contains("END");//check if arraylist contains END statement
if(line=null && checkEnd== false)
{
System.out.println(" Unexpected end of file: no END statement");
System.exit(0);
}
ListIterator<String>arrayListIt=demo.listIterator();
while (arrayListIt.hasNext())
for (String file: demo)// begin interpreting the program file here
{
StringTokenizer st=new StringTokenizer(file);
while(st.hasMoreTokens())
{
int firstWord=file.indexOf();
String command = file;
if (firstSpace > 0)
{
command= file.substring(0, firstSpace);
}
TokenHandler tokens= tokens.get(command.toUpperCase());
if(tokens != null)
{
tokens.execute(file);
}
}
目前尚不清楚你的問題是什麼。 – 2012-01-10 18:31:29
@JBNizet我在問我是否應該考慮解析方法中的參數,或者解析所有的參數,並將其放入一個單獨的ArrayList中,這個ArrayList包含了一個擁有腳本行的ArrayList。 – Luinithil 2012-01-10 18:49:39