import java.util.LinkedList; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.JTree; import javax.swing.JFrame; public class MiddagsNod extends DefaultMutableTreeNode { int antal; public MiddagsNod(String name){ userObject=name; antal=1; } public void sättNummer(int num){ this.antal=num; } public String toString(){ String numstr=""; if (this.antal!=1){ numstr+=" "+this.antal; } return userObject.toString()+numstr; } public static MiddagsNod läsMiddag(LinkedList q)throws SyntaxErrorException{ MiddagsNod svar=new MiddagsNod(läsKomponentNamn(q)); if(q.isEmpty()||q.peek()!=':'){ throw new SyntaxErrorException("Middagsnamnet måste åtfäljas av ett : för att följas av innehållet"); } q.poll(); läsMiddagsdel(q,svar); if(!q.isEmpty()){ throw new SyntaxErrorException("Middagskomponenter utanför middagen"); } return svar; } /* public static void läsMiddagsdel(LinkedList q, MiddagsNod förälder) throws SyntaxErrorException{ readGroup(q,förälder); if(!q.isEmpty()&&q.peek()!=')'){ readMol(q,förälder); } } */ public static void läsMiddagsdel(LinkedList q, MiddagsNod förälder) throws SyntaxErrorException{ MiddagsNod barn; barn=new MiddagsNod(läsKomponentNamn(q)); if(!q.isEmpty() && q.peek()==':'){ q.poll(); läsMiddagsdel(q,barn); if(q.isEmpty()||q.peek()!=';'){ throw new SyntaxErrorException("Texten tog slut innan middagsdelar var färdiglästa"); } q.poll(); } if(!q.isEmpty() && q.peek()=='.'){ q.poll(); barn.sättNummer(läsAntal(q)); } förälder.add(barn); if(!q.isEmpty() && q.peek()==','){ q.poll(); läsMiddagsdel(q,förälder); } } public static String läsKomponentNamn(LinkedList q) throws SyntaxErrorException{ String namn=""; char c=q.peek(); while(c != '.' && c != ',' && c != ':' && c != ';'){ namn+=q.poll().toString(); c=q.peek(); } if (namn.equals("")){ throw new SyntaxErrorException("Varje del måste heta något"); } return namn; } public static int läsAntal(LinkedList q) throws SyntaxErrorException{ if (!Character.isDigit(q.peek())){ throw new SyntaxErrorException("Här hade du faktiskt signalerat för ett antal"); } if(q.peek()=='0'){ throw new SyntaxErrorException("Du kan ju inte ha noll av något, dumsnut"); } String tal=""; while(!q.isEmpty()&&Character.isDigit(q.peek())){ tal+=q.poll(); } int svar=Integer.parseInt(tal); if (svar<2){ throw new SyntaxErrorException("Du ska inte skriva 1st av något"); } return svar; } } class SyntaxErrorException extends Exception{ String msg; public SyntaxErrorException(String msg){ this.msg=msg; } public String getMessage(){ return msg; } }