public Language exponentiaton(final Language language, final int exponent) { Language result = new Language(); if (exponent == 0) { result.addWord(EMPTY_WORD); } else if (exponent == 1) { cloneLanguage(language, result); } else if (exponent > 1) { Language aux = new Language(); String word = null; cloneLanguage(language, aux); for (int i = 1; i < exponent; i++) { for (String word1 : aux.getWordList()) { for (String word2 : language.getWordList()) { word = word1.concat(word2); if (!result.belongs(word)) { result.addWord(word); } } } cloneLanguage(result, aux); } } return result; }
public Language union(final Language language1, final Language language2) { Language result = new Language(); cloneLanguage(language1, result); for (String word : language2.getWordList()) { if (!result.belongs(word)) { result.addWord(word); } } if (result.getWordList().isEmpty()) { result.addWord(EMPTY_LANGUAGE); } return result; }
private Language star(final boolean isKleeneStar, final Language language, final int exponent) { Language result = new Language(); Language aux = new Language(); if (isKleeneStar) { result.addWord(EMPTY_WORD); } for (int i = 1; i <= exponent; i++) { for (String word : union(result, exponentiaton(language, i)).getWordList()) { aux.addWord(word); } result.getWordList().clear(); cloneLanguage(aux, result); aux.getWordList().clear(); } return result; }
public Language reverse(final Language language) { Language result = new Language(); String word = ""; for (String wordAux : language.getWordList()) { for (int i = wordAux.length() - 1; i >= 0; i--) { word = word.concat(String.valueOf(wordAux.charAt(i))); } result.addWord(word); word = ""; } return result; }
/** * Creates a new Language and adds it into the Collection. * * @param words Words of the language that will be created. * @throws JOpLenException If something goes wrong. */ public void newLanguage(String[] words) throws JOpLenException { Language language = new Language(); for (String word : words) { if (belongsToAlphabet(word)) { language.addWord(word); } else { throw new JOpLenException( "Los símbolos de la palabra '" + word + "' no pertenecen al alfabeto"); } } language.setName(NameFactory.getInstance().getLanguageName()); addLanguage(language); }
public Language product(final Language language1, final Language language2) { Language result = new Language(); String word = null; for (String word1 : language1.getWordList()) { for (String word2 : language2.getWordList()) { word = word1.concat(word2); if (!result.belongs(word)) { result.addWord(word); } } } return result; }