public RegexLexer parse(String rbnfCode) { if (rbnfCode == null) { throw new IllegalArgumentException("rbnfCode==null"); } RBNFParser parser = new RBNFParser(rbnfCode); RBNF rbnf = parser.parse(); if (rbnf == null) return null; RegexLexer lexer = new RegexLexer(); List<Rule> rules = rbnf.getRules(); for (Rule r : rules) { RegexTokenParser tokParser = rule(r, rbnf); if (tokParser != null) { lexer.getParsers().add(tokParser); } } return lexer; }
protected String id(Identifier id, RBNF rbnf) { String sid = id.getMatchedText(); if (sid != null) { Rule r = rbnf.getRuleById(sid); if (r != null) { TreeNode ex = r.getExpression(); if (ex != null) { String s = expression(ex, rbnf); return s; } } if (sid.equals("any")) return "."; if (sid.equals("letter")) return "\\p{Alpha}"; if (sid.equals("digit")) return "\\p{Digit}"; if (sid.equals("endl")) return "\\r?\\n"; if (sid.equals("ws")) return "\\s"; } return null; }