@Test void getUnaryRules() { List<Rule> rules = Collections.singletonList(new Rule("$A", "$B")); Grammar grammar = new Grammar(rules, "$ROOT"); assertEquals(rules.get(0), grammar.getUnaryRules("$B").get(0)); assertEquals(0, grammar.getBinaryRules("$B", "$C").size()); assertEquals(0, grammar.getLexicalRules(Arrays.asList("$B", "$C")).size()); }
void applyBinaryRules(Chart chart, int start, int end) { if(end > start + 1) { for(int mid = start + 1; mid < end; mid++) { List<Derivation> left = chart.getDerivations(start, mid); List<Derivation> right = chart.getDerivations(mid, end); for(Derivation l:left) { for(Derivation r: right) { for(Rule rule: grammar.getBinaryRules(l.rule.getLHS(), r.rule.getLHS())) { if(chart.isSpanFull(start, end)) return; //System.out.println(rule); chart.addDerivation(start, end, new Derivation(rule, Arrays.asList(l, r))); } } } } } }
@Test void getBinaryRules() { List<Rule> rules = Collections.singletonList(new Rule("$A", "$B $C")); Grammar grammar = new Grammar(rules, "$ROOT"); assertEquals(rules.get(0), grammar.getBinaryRules("$B", "$C").get(0)); assertEquals(0, grammar.getLexicalRules(Arrays.asList("$B", "$C")).size()); assertEquals(0, grammar.getUnaryRules("$B").size()); } }
@Test void getLexicalRules() { List<Rule> rules = Collections.singletonList(new Rule("$A", "B C")); Grammar grammar = new Grammar(rules, "$ROOT"); assertEquals(rules.get(0), grammar.getLexicalRules(Arrays.asList("B", "C")).get(0)); assertEquals(0, grammar.getBinaryRules("$B", "$C").size()); assertEquals(0, grammar.getUnaryRules("$B").size()); }