From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Writing a scanner and parser in Ada Date: Mon, 25 Dec 2017 20:19:27 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <2d87298a-4d1f-446a-9d46-d4f03879246b@googlegroups.com> <285de3c1-6c16-47b3-83b7-ec3419c8d324@googlegroups.com> <2c3f6378-1ec4-4128-ad61-a3bcdde49614@googlegroups.com> NNTP-Posting-Host: TliDXSPe+gBSGCqP3SEJ2Q.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 X-Notice: Filtered by postfilter v. 0.8.2 Content-Language: en-US Xref: reader02.eternal-september.org comp.lang.ada:49641 Date: 2017-12-25T20:19:27+01:00 List-Id: On 2017-12-25 19:57, Yves Cloutier wrote: > On Monday, December 25, 2017 at 12:08:38 PM UTC-5, Dmitry A. Kazakov wrote: >> On 2017-12-25 17:35, Yves Cloutier wrote: >> >>> Yes my Perl version does all that in 1 pass, but one of the things I >>> want to do is have it generate for different targets. Groff was my >>> initial one. I wan't creating any kind of AST but I think I'll want to >>> do that in my rewrite to make things simpler and allow for generating >>> for other targets like maybe Latex, or epub etc... >> >> You don't need AST for that. Simply define code generator interface >> (tagged) with abstract operations generating pieces of code. For each >> target have a derived type implementing these operations. Pass a >> class-wide Target object as a parameter to the parser. If the actual is >> of Groff_Target the result is groff etc. >> > haha I'm quite new to Ada so most of what you just explained I don't > quite understand. But will get there. Baby steps. It is not that complicated when you get into Ada's OO model. The idea is that you abstract away code generator (as well as the code source) fro the parser. Then you can use the same parser with all back-ends and all types of sources (file, string, stream, text-buffer etc) > I see that you created a SNOBOL-like pattern matcher. This looks > really useful for processing text. Not really. Pattern matching is rarely useful. There are few cases like searching and skipping parts of text, partial and error-tolerant parsing (like in text coloring). But even then simple wildcard patterns (like * and %) often work better because they are easier to understand. The rationale is this. More powerful the formal language of patterns is, more difficult it becomes for the user to foresee and understand what the pattern will match and what not. Regular expressions are already too complex. SNOBOL patterns are even more powerful, so that anything beyond trivial quickly becomes not understandable. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de