Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!news.mixmin.net!news.albasani.net!.POSTED!not-for-mail From: BGB Newsgroups: comp.lang.java.programmer Subject: Re: multi-line Strings Date: Wed, 19 Dec 2012 08:26:00 -0600 Organization: albasani.net Lines: 71 Message-ID: References: <7f36342c-2331-4484-874b-4a0f8953f160@googlegroups.com> <50c61150$0$293$14726298@news.sunsite.dk> <50c6413a$0$293$14726298@news.sunsite.dk> <50c6598d$0$290$14726298@news.sunsite.dk> <50c69625$0$293$14726298@news.sunsite.dk> <50cbeec3$0$291$14726298@news.sunsite.dk> <50d1216e$0$287$14726298@news.sunsite.dk> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Trace: news.albasani.net k2e59GhEzPsy9vpqqFJ+2ARRVZ+MjGj1llsz6TERaarPgQ1p5B8lJDH8JcC+bs+bmoX4nWUEpJmVb4nfcquhCS8POAug5olvqvWs0Fc8TSLDfqx/QQjE8zCI4Lq6+7/f NNTP-Posting-Date: Wed, 19 Dec 2012 14:29:03 +0000 (UTC) Injection-Info: news.albasani.net; logging-data="zT01KJAiSOONxRyuZkh2LKCyGMJLFf+aqVqOZyz3+nV8/ZlzXvpL90tzeNnHOVLmzTx6WpyNF07BZ+YfD9goXFgl7UoCLowDDbPnSP0poAd1hy/rPDgB4mMoQO5ZfygS"; mail-complaints-to="abuse@albasani.net" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Thunderbird/17.0 In-Reply-To: <50d1216e$0$287$14726298@news.sunsite.dk> Cancel-Lock: sha1:aIc/pcSTdJNIuw2MVqNmEFkN2yE= Xref: csiph.com comp.lang.java.programmer:20526 On 12/18/2012 8:07 PM, Arne Vajhøj wrote: > On 12/15/2012 6:54 AM, Chris Uppal wrote: >> Off-the-top-of-my-head (all classes and method are imaginary): >> >> Regexp alpha = Regexp.fromList(java.lang.text.portable.Alphas); >> alpha = alpha.or('_'); >> Regexp num = Regexp.fromList(java.lang.text.portable.Digits); >> Regexp alphanum = alpha.or(num); >> Regexp identifier = alpha.followedBy(alphanum.repeated()); > > I think that is what is widely known in the .NET world > as a fluent API. > better term maybe than "big pile o' nasty...". yes, regex syntax could be nicer, but probably not by making it into a big pile of API calls. maybe something more EBNF-like can be used, like say: SyntaxPattern pat = new SyntaxPattern( "alpha = ('A'-'Z') | ('a'-'z');" "alpha2 = alpha | '_';", "hexalpha = ('A'-'F') | ('a'-'f');" "num = ('0'-'9');", "hexnum = num | hexalpha;", "alphanum = alpha2 | num;", "basenumber = num+;", "realnumber = basenumber '.' basenumber ['e' basenumber ];", "hexnumber = '0x' hexnum+;", "integer = basenumber | hexnumber;", "identifier = alpha2 alphanum*;", ...); StringReader strr = new StringReader("foo 999 bar69"); String tok; ... if(pat.match(strr, "identifier")) { tok=pat.readNext(strr, "identifier"); ... } or: tok=pat.tryMatchRead(strr, "identifier"); if(tok!=null) { ... } or: SyntaxParser parse = new SyntaxParser(strr, pat); tok=parse.tryMatchRead("identifier"); if(tok!=null) { ... } tok=parse.tryMatchRead("integer"); if(tok!=null) { ... } granted, yes, all this is probably something a bit different than using regexes, but oh well. or something...