1 package fri.patterns.interpreter.parsergenerator.lexer.semantics; 2 3 import java.util.*; 4 import java.lang.reflect.Method ; 5 import fri.patterns.interpreter.parsergenerator.lexer.LexerSemantic; 6 import fri.patterns.interpreter.parsergenerator.lexer.ResultTree; 7 import fri.patterns.interpreter.parsergenerator.syntax.Rule; 8 9 21 public abstract class LexerReflectSemantic implements LexerSemantic 22 { 23 27 public void ruleEvaluated(Rule rule, ResultTree resultTree) { 28 try { 29 Method m = getClass().getMethod(rule.getNonterminal(), new Class [] { ResultTree.class }); 30 m.setAccessible(true); 31 m.invoke(this, new Object [] { resultTree }); 32 } 33 catch (Exception e) { 34 e.printStackTrace(); 35 } 36 } 37 38 42 public Set getWantedNonterminals() { 43 Method [] methods = getClass().getMethods(); 44 Set set = new HashSet(methods.length); 45 46 for (int i = 0; i < methods.length; i++) { 47 Method m = methods[i]; 48 Class [] argClasses = m.getParameterTypes(); 49 50 if (m.getReturnType().equals(void.class) && argClasses.length == 1 && argClasses[0].equals(ResultTree.class)) { 51 String name = m.getName(); 52 set.add(name); 53 } 54 } 55 return set; 56 } 57 58 61 public Set getIgnoredNonterminals() { 62 return null; 63 } 64 65 } 66 | Popular Tags |