Skip to content

Commit

Permalink
Fixed bug with empty path in the end of parsing. Removed empty Javadoc.
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergejs Vinniks committed Jul 27, 2019
1 parent e3c14f2 commit 15ccea9
Show file tree
Hide file tree
Showing 19 changed files with 52 additions and 182 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

<groupId>com.github.svinniks</groupId>
<artifactId>simple-grammar</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>

<name>Simple grammar parser library</name>

Expand Down
4 changes: 0 additions & 4 deletions src/main/java/simplegrammar/AbstractOptionElement.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@
*/
package simplegrammar;

/**
*
* @author s.vinniks
*/
public abstract class AbstractOptionElement {

}
4 changes: 0 additions & 4 deletions src/main/java/simplegrammar/ElementStack.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,6 @@

import java.util.Stack;

/**
*
* @author s.vinniks
*/
public class ElementStack extends Stack<AbstractOptionElement> {

public void pushOption(Option option) {
Expand Down
4 changes: 0 additions & 4 deletions src/main/java/simplegrammar/EmptyElement.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@
*/
package simplegrammar;

/**
*
* @author s.vinniks
*/
public class EmptyElement extends AbstractOptionElement {

}
120 changes: 34 additions & 86 deletions src/main/java/simplegrammar/Grammar.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,6 @@
import java.util.List;
import java.util.Map;

/**
*
* @author s.vinniks
*/
public class Grammar {

private final Map<String, List<Option>> rules;
Expand Down Expand Up @@ -158,31 +154,6 @@ private void findExpansionStacks(
}

}

private boolean emptyPathExists(List<AbstractOptionElement> optionElements) {

for (AbstractOptionElement element : optionElements)
if (element instanceof OptionToken)
return false;
else if (element instanceof OptionRule) {

OptionRule optionRule = (OptionRule)element;
boolean emptySubpathExists = false;

for (Option option : rules.get(optionRule.getName()))
if (emptyPathExists(option.getElements())) {
emptySubpathExists = true;
break;
}

if (!emptySubpathExists)
return false;

}

return true;

}

public String getRootRuleName() {
return rootRuleName;
Expand All @@ -199,7 +170,29 @@ public SyntaxTreeNode parse(Tokenizer tokens) throws ParseException, GrammarExce
public SyntaxTreeNode parse(Tokenizer tokens, String rootRoleName) throws GrammarException, ParseException {
return parse(tokens, rootRoleName,false);
}


private void outputTrace(ElementStack elementStack, Tokenizer tokens) {

System.out.println(tokens.peek(1).getName() + ":" + tokens.peek(1).getValue() + " - ");

for (AbstractOptionElement element : elementStack) {

if (element instanceof OptionToken) {
OptionToken token = (OptionToken)element;
System.out.print(token.getName() + ":" + token.getValue());
} else if (element instanceof OptionRule) {
OptionRule token = (OptionRule)element;
System.out.print("{" + token.getName()+"}");
} else {
System.out.print(element.getClass().getName());
}
System.out.print(" ");
}

System.out.println();

}

public SyntaxTreeNode parse(Tokenizer tokens, String rootRuleName, boolean outputTrace) throws GrammarException, ParseException {

checkRule(rootRuleName);
Expand All @@ -214,29 +207,10 @@ public SyntaxTreeNode parse(Tokenizer tokens, String rootRuleName, boolean outpu

OptionStack expansionStack = new OptionStack();

while (!elementStack.empty() && tokens.hasNext()) {
while (!elementStack.empty()) {

if (outputTrace) {

System.out.println(tokens.peek(1).getName() + ":" + tokens.peek(1).getValue() + " - ");

for (AbstractOptionElement element : elementStack) {

if (element instanceof OptionToken) {
OptionToken token = (OptionToken)element;
System.out.print(token.getName()+":"+token.getValue());
} else if (element instanceof OptionRule) {
OptionRule token = (OptionRule)element;
System.out.print("{" + token.getName()+"}");
} else {
System.out.print(element.getClass().getName());
}
System.out.print(" ");
}

System.out.println();

}
if (outputTrace)
outputTrace(elementStack, tokens);

AbstractOptionElement element = elementStack.peek();

Expand All @@ -247,7 +221,7 @@ public SyntaxTreeNode parse(Tokenizer tokens, String rootRuleName, boolean outpu

} else if (element instanceof OptionToken) {

Token token = tokens.read();
Token token = tokens.get();
OptionToken optionToken = (OptionToken)element;

if (optionToken.matches(token)) {
Expand Down Expand Up @@ -315,42 +289,19 @@ public SyntaxTreeNode parse(Tokenizer tokens, String rootRuleName, boolean outpu
matchingExpansionStacks
);

/*System.out.println(token.toString());
System.out.println("------------------------------------------------");
int i = 0;
for (ElementStack stack : matchingElementStacks) {
System.out.print(++i);
System.out.print(' ');
for (AbstractOptionElement e : stack) {
if (e instanceof OptionToken) {
OptionToken t = (OptionToken)e;
System.out.print(t.getName()+":"+t.getValue());
} else if (e instanceof OptionRule) {
OptionRule r = (OptionRule)e;
System.out.print("{" + r.getName()+"}");
} else {
System.out.print(e.getClass().getName());
}
System.out.print(" ");
}
System.out.println();
}
System.out.println();*/

if (matchingExpansionStacks.isEmpty())
if (matchingExpansionStacks.size() == 0)

throw new UnexpectedTokenException(token);

else if (matchingExpansionStacks.size() == 1)
else if (matchingExpansionStacks.size() == 1)

while (!matchingExpansionStacks.get(0).empty())
expansionStack.push(matchingExpansionStacks.get(0).pop());

else if (token instanceof TokenStreamEnd)

throw new ParseException("Unexpected end of the input!");
throw new UnexpectedTokenException(token);

else {

peekDepth++;
Expand All @@ -368,12 +319,9 @@ else if (token instanceof TokenStreamEnd)

}

if (tokens.hasNext())
if (!(tokens.get() instanceof TokenStreamEnd))
throw new UnexpectedTokenException(tokens.peek(1));

if (!emptyPathExists(elementStack))
throw new ParseException("Unexpected end of the input!");

return syntaxTree;

}
Expand Down
15 changes: 1 addition & 14 deletions src/main/java/simplegrammar/GrammarException.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,13 @@
*/
package simplegrammar;

/**
*
* @author s.vinniks
*/
public class GrammarException extends Exception {

/**
* Creates a new instance of <code>GrammarException</code> without detail
* message.
*/
public GrammarException() {
}

/**
* Constructs an instance of <code>GrammarException</code> with the
* specified detail message.
*
* @param msg the detail message.
*/
public GrammarException(String msg) {
super(msg);
}

}
15 changes: 1 addition & 14 deletions src/main/java/simplegrammar/GrammarParseException.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,13 @@
*/
package simplegrammar;

/**
*
* @author s.vinniks
*/
public class GrammarParseException extends Exception {

/**
* Creates a new instance of <code>ParseException</code> without detail
* message.
*/
public GrammarParseException() {
}

/**
* Constructs an instance of <code>ParseException</code> with the specified
* detail message.
*
* @param msg the detail message.
*/
public GrammarParseException(String msg) {
super(msg);
}

}
4 changes: 0 additions & 4 deletions src/main/java/simplegrammar/MatchingElementStacks.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,6 @@

import java.util.ArrayList;

/**
*
* @author s.vinniks
*/
public class MatchingElementStacks extends ArrayList<ElementStack> {

private Match bestMatch;
Expand Down
4 changes: 0 additions & 4 deletions src/main/java/simplegrammar/Option.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@
import java.util.ArrayList;
import java.util.List;

/**
*
* @author s.vinniks
*/
public class Option {

private final Grammar grammar;
Expand Down
8 changes: 1 addition & 7 deletions src/main/java/simplegrammar/OptionRule.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@
*/
package simplegrammar;

/**
*
* @author s.vinniks
*/
public class OptionRule extends AbstractOptionElement {

private final String name;
Expand All @@ -36,7 +32,5 @@ public String getName() {
public Boolean getOutput() {
return output;
}




}
4 changes: 0 additions & 4 deletions src/main/java/simplegrammar/OptionStack.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,6 @@

import java.util.Stack;

/**
*
* @author s.vinniks
*/
public class OptionStack extends Stack<Option> {

}
4 changes: 0 additions & 4 deletions src/main/java/simplegrammar/OptionToken.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@
*/
package simplegrammar;

/**
*
* @author s.vinniks
*/
public class OptionToken extends AbstractOptionElement {

public static enum Match {NONE, ANY, NAME, VALUE};
Expand Down
8 changes: 3 additions & 5 deletions src/main/java/simplegrammar/SimpleTokenizer.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,9 @@ public void addToken(Token token) {
tokens.add(token);
}

public void addAll(Tokenizer tokenizer) throws ParseException {

public void addAll(Tokenizer tokenizer) {
while (tokenizer.hasNext())
addToken(tokenizer.read());

addToken(tokenizer.get());
}

@Override
Expand All @@ -60,7 +58,7 @@ protected Token doPeek(int depth) {
}

@Override
protected Token doRead() {
protected Token doGet() {
position++;
return doPeek(0);
}
Expand Down
4 changes: 0 additions & 4 deletions src/main/java/simplegrammar/SyntaxTreeNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@
import java.util.ArrayList;
import java.util.List;

/**
*
* @author s.vinniks
*/
public class SyntaxTreeNode {

private final String value;
Expand Down
4 changes: 0 additions & 4 deletions src/main/java/simplegrammar/SyntaxTreeNodeStack.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,6 @@

import java.util.Stack;

/**
*
* @author s.vinniks
*/
public class SyntaxTreeNodeStack extends Stack<SyntaxTreeNode>{

public void push(SyntaxTreeNode node, int count) {
Expand Down
4 changes: 0 additions & 4 deletions src/main/java/simplegrammar/Token.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@
*/
package simplegrammar;

/**
*
* @author s.vinniks
*/
public class Token {

private final String name;
Expand Down
Loading

0 comments on commit 15ccea9

Please sign in to comment.