protected ProdElement parseSeq(Stack<Pair<Token, String>> tokens) { ProdElement first = parsePrim(tokens); EnumSet<Token> followers = EnumSet.of(Token.STRING, Token.PL, Token.ID); if (!tokens.isEmpty() && followers.contains(tokens.peek().getFirst())) { ProdElement seq = createElement(ElementType.SEQUENCE); seq.addChild(first); do { ProdElement next = parsePrim(tokens); seq.addChild(next); } while (!tokens.isEmpty() && followers.contains(tokens.peek().getFirst())); return seq; } return first; }
protected ProdElement parseSeq(Stack<Pair<Token, String>> tokens) { ProdElement first = parsePrim(tokens); EnumSet<Token> followers = EnumSet.of(Token.STRING, Token.PL, Token.ID); if (!tokens.isEmpty() && followers.contains(tokens.peek().getFirst())) { ProdElement seq = createElement(ElementType.SEQUENCE); seq.addChild(first); do { ProdElement next = parsePrim(tokens); seq.addChild(next); } while (!tokens.isEmpty() && followers.contains(tokens.peek().getFirst())); return seq; } return first; }
protected ProdElement parseUnordered(Stack<Pair<Token, String>> tokens) { ProdElement first = parseSeq(tokens); if (!tokens.isEmpty() && tokens.peek().getFirst() == Token.AND) { ProdElement uno = createElement(ElementType.UNOREDERED); uno.addChild(first); do { tokens.pop(); ProdElement next = parseSeq(tokens); uno.addChild(next); } while (!tokens.isEmpty() && tokens.peek().getFirst() == Token.AND); return uno; } return first; }
protected ProdElement parseUnordered(Stack<Pair<Token, String>> tokens) { ProdElement first = parseSeq(tokens); if (!tokens.isEmpty() && tokens.peek().getFirst() == Token.AND) { ProdElement uno = createElement(ElementType.UNOREDERED); uno.addChild(first); do { tokens.pop(); ProdElement next = parseSeq(tokens); uno.addChild(next); } while (!tokens.isEmpty() && tokens.peek().getFirst() == Token.AND); return uno; } return first; }
protected ProdElement parseAlt(Stack<Pair<Token, String>> tokens) { ProdElement first = parseUnordered(tokens); if (!tokens.isEmpty() && tokens.peek().getFirst() == Token.PIPE) { ProdElement uno = createElement(ElementType.ALTERNATIVE); uno.addChild(first); do { tokens.pop(); ProdElement next = parseUnordered(tokens); uno.addChild(next); } while (!tokens.isEmpty() && tokens.peek().getFirst() == Token.PIPE); return uno; } return first; }
protected ProdElement parseAlt(Stack<Pair<Token, String>> tokens) { ProdElement first = parseUnordered(tokens); if (!tokens.isEmpty() && tokens.peek().getFirst() == Token.PIPE) { ProdElement uno = createElement(ElementType.ALTERNATIVE); uno.addChild(first); do { tokens.pop(); ProdElement next = parseUnordered(tokens); uno.addChild(next); } while (!tokens.isEmpty() && tokens.peek().getFirst() == Token.PIPE); return uno; } return first; }