我一直在尋找一個java編譯器的任務,要求查找語法的第一個。我已經準備好並完成了。所有的工作已經完成,但我有一個問題。我的第一個是製作重複。例如我的輸出的一部分是這樣的java編譯器,找到後續產生重複項
NonTerminal First
P int void
L int void
D int void
Vd int void
Ts int void
Fn int void
Ps int void void
Ps int void void void第二個void是重複的。我將如何去除這些重複?虐待粘貼我的主要編譯器代碼是一切發生在下面。 我懷疑我不得不在findFirst方法中進行一些修改,因爲那是所有的操作都發生了,但我不知道該怎麼做。
package compilerproject;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.security.KeyStore.Entry;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Compiler {
public static void main(String[] args) {
List<Grammar> gList = getGrammar();
Map<String, List<String>> fList = firstList(gList);
//firstlist returns a hash map LHS and RHS
//save it into fList which is a map of Strings and List so u can use it in findFirst method
printFirstList(fList, gList);
ParserLibrary idList = new ParserLibrary();
}
public static List<String> findFirst(String v, List<Grammar> l)
{
List<String> First = new ArrayList<String>();
for(int i = 0; i < l.size(); i++)
{
if(v.equals(l.get(i).term))
{
String [] s = l.get(i).prod.split(" ");
if(!isNonTerm(s[0]))// is a terminal
{
First.add(s[0]);
}
// if the rhs is a terminal
不要期望其他人調試你的代碼,特別是當它是240行,不可編譯,沒有任何意見時,你期望它做什麼。 – SubOptimal
只有3個方法,我解釋了程序的功能和我想要的功能。寒意,我新嘗試 – lupejuares
你的代碼做什麼? – jcool