17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2002-2012, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.util; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Random; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.util.BNF; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.util.Pick; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.util.Quoter; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.util.Tokenizer; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.UnicodeSet; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class TestBNF { 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static final String[] testRules = { 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = [ab]{3};", 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = [ab]{3,};", 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = [ab]{3,5};", 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = [ab]*;", 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = [ab]?;", 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = [ab]+;", 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$us = [a-z];" + 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = [0-9$us];", 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = a $foo b? 25% end 30% | $foo 50%;\r\n" + 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$foo = c{1,5} 20%;", 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = [a-z]{1,5}~;", 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = [a-z]{5}~;", 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = '\\' (u | U0010 | U000 $hex) $hex{4} ;\r\n" + 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$hex = [0-9A-Fa-f];", 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static String unicodeSetBNF = "" + 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root = $leaf | '[' $s $root2 $s ']' ;\r\n" + 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root2 = $leaf | '[' $s $root3 $s ']' | ($root3 $s ($op $root3 $s){0,3}) ;\r\n" + 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root3 = $leaf | '[' $s $root4 $s ']' | ($root4 $s ($op $root4 $s){0,3}) ;\r\n" + 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$root4 = $leaf | ($leaf $s ($op $leaf $s){0,3}) ;\r\n" + 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$op = (('&' | '-') $s)? 70%;" + 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$leaf = '[' $s $list $s ']' | $prop;\r\n" + 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$list = ($char $s ('-' $s $char $s)? 30%){1,5} ;\r\n" + 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$prop = '\\' (p | P) '{' $s $propName $s '}' | '[:' '^'? $s $propName $s ':]';\r\n" + 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$needsQuote = [\\-\\][:whitespace:][:control:]] ;\r\n" + 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$char = [[\\u0000-\\U00010FFFF]-$needsQuote] | $quoted ;\r\n" + 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$quoted = '\\' ('u' | 'U0010' | 'U000' $hex) $hex{4} ;\r\n" + 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$hex = [0-9A-Fa-f];\r\n" + 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$s = ' '? 20%;\r\n" + 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$propName = (whitespace | ws) | (uppercase | uc) | (lowercase | lc) | $category;\r\n" + 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$category = ((general | gc) $s '=' $s)? $catvalue;\r\n" + 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$catvalue = (C | Other | Cc | Control | Cf | Format | Cn | Unassigned | L | Letter);\r\n"; 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main (String[] args) { 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testTokenizer(); 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < testRules.length; ++i) { 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testBNF(testRules[i], null, 20); 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testBNF(unicodeSetBNF, null, 20); 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //testParser(); 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static void testBNF(String rules, UnicodeSet chars, int count) { 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BNF bnf = new BNF(new Random(0), new Quoter.RuleQuoter()) 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert .addSet("$chars", chars) 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert .addRules(rules) 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert .complete(); 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println("===================================="); 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println("BNF"); 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(rules); 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(bnf.getInternal()); 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < count; ++i) { 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(i + ": " + bnf.next()); 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static testManual() { 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick p = Pick.maybe(75,Pick.unquoted("a")); 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testOr(p, 1); 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = Pick.or(new String[]{"", "a", "bb", "ccc"}); 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testOr(p, 3); 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = Pick.repeat(3, 5, new int[]{20, 30, 20}, "a"); 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testOr(p, 5); 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = Pick.codePoint("[a-ce]"); 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testCodePoints(p); 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = Pick.codePoint("[a-ce]"); 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testCodePoints(p); 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = Pick.string(2, 8, p); 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testOr(p,10); 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = Pick.or(new String[]{"", "a", "bb", "ccc"}); 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = Pick.and(p).and2(p).and2("&"); 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testMatch(p, "abb&"); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testMatch(p, "bba"); 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // testEnglish(); 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static void testMatch(Pick p, String source) { 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick.Position pp = new Pick.Position(); 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean value = p.match(source, pp); 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println("Match: " + value + ", " + pp); 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static void testParser() { 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick.Target target = new Pick.Target(); 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < rules.length; ++i) { 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert target.addRule(rules[i]); 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (ParseException e) { 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO Auto-generated catch block 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert e.printStackTrace(); 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static class Counts { 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] counts; 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Counts(int max) { 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert counts = new int[max+1]; 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert void inc(int index) { 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert counts[index]++; 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert void show() { 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println("Printing Counts"); 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < counts.length; ++i) { 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (counts[i] == 0) continue; 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(i + ": " + counts[i]); 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(); 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* static final String[] rules = { 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$s = ' ';", 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$noun = dog | house | government | wall | street | zebra;", 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$adjective = red | glorious | simple | nasty | heavy | clean;", 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$article = quickly | oddly | silently | boldly;", 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$adjectivePhrase = ($adverb $s)? 50% $adjective* 0% 30% 20% 10%;", 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$nounPhrase = $articles $s ($adjectivePhrase $s)? 30% $noun;", 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$verb = goes | fishes | walks | sleeps;", 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$tverb = carries | lifts | overturns | hits | jumps on;", 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$copula = is 30% | seems 10%;", 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$sentence1 = $nounPhrase $s $verb $s ($s $adverb)? 30%;", 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$sentence2 = $nounPhrase $s $tverb $s $nounPhrase ($s $adverb)? 30%;", 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$sentence3 = $nounPhrase $s $copula $s $adjectivePhrase;", 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$conj = but | and | or;", 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$sentence4 = $sentence1 | $sentence2 | $sentence3 20% | $sentence4 $conj $sentence4 20%;", 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "$sentence = $sentence4 '.';"}; 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static void testEnglish() { 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick s = Pick.unquoted(" "); 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick verbs = Pick.or(new String[]{"goes", "fishes", "walks", "sleeps"}); 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick transitive = Pick.or(new String[]{"carries", "lifts", "overturns", "hits", "jumps on"}); 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick nouns = Pick.or(new String[]{"dog", "house", "government", "wall", "street", "zebra"}); 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick adjectives = Pick.or(new String[]{"red", "glorious", "simple", "nasty", "heavy", "clean"}); 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick articles = Pick.or(new String[]{"the", "a"}); 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick adverbs = Pick.or(new String[]{"quickly", "oddly", "silently", "boldly"}); 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick adjectivePhrase = Pick.and(0.5, Pick.and(adverbs).and2(s)).and2(adjectives); 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick nounPhrase = Pick.and(articles).and2(s) 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert .and2(0.3, Pick.and(adjectivePhrase).and2(s)) 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert .and2(nouns); 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick copula = Pick.or(new String[]{"is", "seems"}); 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick sentence1 = Pick.and(nounPhrase).and2(s).and2(verbs) 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert .and2(0.3, Pick.and(s).and2(adverbs)).name("s1"); 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick sentence2 = Pick.and(nounPhrase).and2(s).and2(transitive).and2(s).and2(nounPhrase) 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert .and2(0.3, Pick.and(s).and2(adverbs)).name("s2"); 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick sentence3 = Pick.and(nounPhrase).and2(s).and2(copula).and2(s).and2(adjectivePhrase).name("s3"); 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick conj = Pick.or(new String[]{", but", ", and", ", or"}); 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick forward = Pick.unquoted("forward"); 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick pair = Pick.and(forward).and2(conj).and2(s).and2(forward).name("part"); 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick sentenceBase = Pick.or(sentence1).or2(sentence2).or2(sentence3).or2(0.6666, pair).name("sentence"); 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert sentenceBase.replace(forward, sentenceBase); 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick sentence = Pick.and(sentenceBase).and2(Pick.unquoted(".")); 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick.Target target = Pick.Target.make(sentence); 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < 50; ++i) { 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(i + ": " + target.next()); 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static void testOr(Pick p, int count) { 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick.Target target = Pick.Target.make(p); 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Counts counts = new Counts(count + 10); 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < 1000; ++i) { 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s = target.next(); 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert counts.inc(s.length()); 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert counts.show(); 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static void testCodePoints(Pick p) { 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Pick.Target target = Pick.Target.make(p); 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Counts counts = new Counts(128); 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < 10000; ++i) { 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s = target.next(); 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert counts.inc(s.charAt(0)); 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert counts.show(); 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void printRandoms() { 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BNF bnf = new BNF(new Random(0), new Quoter.RuleQuoter()) 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert .addRules("[a-z]{2,5}").complete(); 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println("Start"); 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < 100; ++i) { 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String temp = bnf.next(); 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(i + ")\t" + temp); 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void testTokenizer() { 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Tokenizer t = new Tokenizer(); 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] samples = {"a'b'c d #abc\r e", "'a '123 321", 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\\\\", "a'b", "a'", "abc def%?ghi", "%", "a", "\\ a", "a''''b"}; 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < samples.length; ++i) { 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert t.setSource(samples[i]); 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(); 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println("Input: " + t.getSource()); 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int type = 0; 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (type != Tokenizer.DONE) { 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert type = t.next(); 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(t.toString(type, false)); 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 245