Return-Path: Delivered-To: rainer Received: from h2774747.stratoserver.net (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) by h2774747.stratoserver.net (Dovecot) with LMTP id J4zpJCSwTV6dJAAA4+3H6A for ; Wed, 19 Feb 2020 23:01:08 +0100 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by h2774747.stratoserver.net (8.15.2/8.15.2/Debian-3) with ESMTP id 01JM17wh009371 for ; Wed, 19 Feb 2020 23:01:08 +0100 Received: from relay2.uni-heidelberg.de ([129.206.119.212]) by mx-ha.gmx.net (mxgmx101 [212.227.17.5]) with ESMTP (Nemesis) id 1N0WoG-1jPM6L3bkq-00wVXv for ; Wed, 19 Feb 2020 23:01:01 +0100 Received: from listserv.uni-heidelberg.de ([129.206.100.94]) by relay2.uni-heidelberg.de with ESMTP; 19 Feb 2020 23:01:02 +0100 Received: from listserv (localhost [127.0.0.1]) by listserv.uni-heidelberg.de (Postfix) with ESMTP id 51BB0127410; Wed, 19 Feb 2020 23:00:57 +0100 (CET) Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 17.0) with spool id 42061854 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Wed, 19 Feb 2020 23:00:57 +0100 Delivered-To: LATEX-L@listserv.uni-heidelberg.de Received: from relay2.uni-heidelberg.de (relay2.uni-heidelberg.de [129.206.119.212]) by listserv.uni-heidelberg.de (Postfix) with ESMTP id 3617A12739C for ; Wed, 19 Feb 2020 23:00:57 +0100 (CET) X-IronPort-MID: 53519902 X-IronPort-RemoteIP: 209.85.216.50 X-IronPort-SenderGroup: UNKNOWNLIST X-IronPort-MailFlowPolicy: $ACCEPTED X-IronPort-Reputation: 3.5 IronPort-PHdr: =?us-ascii?q?9a23=3AY5slGxzjpa9OekrXCy+N+z0kezQntrPoPwUc9p?= =?us-ascii?q?sgjfd0f7+++4j5ZRKDt+9giFbYB8PG7fMBi+fXv63kU2Ea7tCNvSNKa4RCAj?= =?us-ascii?q?kCj8hehAk8GIidE0SuLPPsdS0/EcJBWXdq+ni6NQ5eH8OtL0bKrCiK5CUJUg?= =?us-ascii?q?76KRIzI+30HoDIiMHi1+204ZzWbgNLiRKyZLpzKFO9qgCC/tIOj95ELaA8gg?= =?us-ascii?q?DMvmMOe+lSwjZwIkmPmh/n+sqq1Jtq8iAVo/B4ssAdCeP1eKM3SbEeBzMjaj?= =?us-ascii?q?pn3sDguBjdQAfK3UMyCT1IwDxPBQWNrAv3Wp7g6G3nsOs42CSbMcDyR70uVn?= =?us-ascii?q?Ku4vUjThigkyoBOzMjlQOfwsVtkKJWpg6grB1j0sbVZo+SLv93YqLae5sTW2?= =?us-ascii?q?NAWs9bUyEJDJm7asMDCO8IPOAQqIeYxRNGrRa4HwipCeXsxxdHg3b32esx1O?= =?us-ascii?q?FgWQDK0Qo8Hs4f5WzOpYa9P6MTXOapiajQmG+bPrUGhHGnsdaOL0hyxJPEFa?= =?us-ascii?q?h9esfQ10Q1QhnIilyB88r4OTLQ1ukMv2Wf5ed6WqSjhj1CyUk5rz6xy8Mrko?= =?us-ascii?q?SMiJgSzwWO9Sh/2ocwKNu7RWZ0ZNelFN1bsCTQZO4UCosyBnplvio30OhMuZ?= =?us-ascii?q?O9ZikPxZIkyjbQbvWGd86D5RepB4PzaX9owXlifry4nRO790Otn/b9WseD21?= =?us-ascii?q?FPtiNZk9PIuylXhSbe4cWGVPZxu3yZ92vfiVLr4/pfaQAumK7SOsRn37gx05?= =?us-ascii?q?oesEjOGiX7gkqwgKLEPkkj/+Gp7azgbNCE7tecOoluiwTzNKcjssO6COU8dA?= =?us-ascii?q?MJWiCX9P+927vq4UDiCO8S37tmz++D6c6ceJxTr7XxGwJP14c/9xuzalXumM?= =?us-ascii?q?8Vm3UKNhMNeR6KiZToJ0CbJfn5CfmlhFH/2Dxvxv3AIvjgGsCXdimFwOqnJ+?= =?us-ascii?q?8jrRMEm29RhZhF6plZC68MOqfpV0v4pYaeExk4dgy5wurqDN9wzIxYVW/cZ8?= =?us-ascii?q?3ReK7Ur1KM4foiZueWY4pA8jbwLeIk4vPojnIRlloUfK3v1pwSIiPdfLwuMw?= =?us-ascii?q?CCbHzgj81UW2cHuBA/SeHsi1CqXjtaZnL0VKU5rGJeasruHcLIQYajh6aE1S?= =?us-ascii?q?GwE8hNZ2xIPVuLFG/ha4SOX/pfIDLXOMJqlSYIEKSwU4J0nw/7rxf0kvA0S4?= =?us-ascii?q?icsj1dr5/o08J5ovHehQ1nvyIhFNyTiimMVz0mxT5OHm5umvoj/goljQ3fma?= =?us-ascii?q?lg364GSZoJvKgPC1lic8ablr0faZi6WxqdLInXDg/+GJP+R2l2FIp5wsdSMR?= =?us-ascii?q?gjXY/+31aTh2zyROVN372TWM5rqOSFgz6odpw7kzGfhMxDxxEnWpcdajHg3/?= =?us-ascii?q?QisVCVX8mQzQ2Yj/r4LPxMmneSqyHTizLJ5hgQURYsA/yaBjZGNxeQ9ZKhoR?= =?us-ascii?q?qcKt3mQbU/blkbkZ/EevYMM4e5yw0BHairOcyCMTjoxSHtVVDRl+nKNM2zKi?= =?us-ascii?q?0cxHmPUhFa1VpIrDDdb05mQX7wxgCWRCpnEValOhm+y+R1pXKlQ0Nx9DmkNB?= =?us-ascii?q?Y8hZyy/BNdxeaRT/oChPQZviZkqzh1EFu51d/MBJyMqlgpeqIUet477FpdsA?= =?us-ascii?q?CR/wVgIpytKbxjjV8CYkx2uU3pzRB+FoRHl4AjsnoryAN4La/Q3klGcnuU2p?= =?us-ascii?q?X5O7ufLWeXnljnc6nNxlTXy8qb4I8K4fU87k3h5USnSxJk/HJg3N1YlXCb49?= =?us-ascii?q?SCDQYfV47wTldi9xV+oOK/AGF17IfV2HtwdKis52WaipR5Wa1/k0jmIo8MeL?= =?us-ascii?q?mJHwLzDcAAUtKjLOU7wR60aBNBPO1T+KMwNc68eL2K1f3OXq4okTS4gGBA+I?= =?us-ascii?q?043FiL8n82SuPOxZcAzveb0yOIUj79iBGqtcW9yuUmLXkCW3GyzyTpHtsbfq?= =?us-ascii?q?ppYYMCEnujOeWyz9R6wobvAjtWqQblCFQB18ukPxGVahauuG8YnVRSqnuhly?= =?us-ascii?q?yiyjVymDx8tauT0hvFxOH6fQYGMGpGHTUwvRLXOYGxyusicg2wdQFwzUmq4E?= =?us-ascii?q?/7w+5Qo6EtdzCCE3cNRDD/KiRZaoX1s7ODZ8BV75Zx6HdYVe29ZRaRTbuv+k?= =?us-ascii?q?JHgROmJHNXwXUATx/vupj9mEYn2meULXI2tHiAPM8tnVHQ49vTQfMX1T0DFn?= =?us-ascii?q?F1?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0AvBgDDrk1ehzLYVdFmHAEBAQEBBwE?= =?us-ascii?q?BEQEEBAEBgXuCJHRSIwQ1hBSDeosNgWwlg26GBXWQUgkBAQEBAQEBAQEHAS8?= =?us-ascii?q?EAQGEQAKCBBwHAQQ0EwIDAQELAQEFAQEBAgECAwQUAQEBCA0JCCmFPgyFZgE?= =?us-ascii?q?BAQECAQEBEBEdARseAwELBgULDQICJgICIxEBBQEcBQENCAEBHoMEgkoBAw4?= =?us-ascii?q?goXaBBD2KM3WBFQUBF4MABYJFghoKGScNYgOBMgIHCQEIfCqMJBqBQT+BOAy?= =?us-ascii?q?CYD6EYIJ7gl4El1eYOkeBfnyVXgYcjncNBYwiqjQCCgcGDyOBRoF6MxojgQG?= =?us-ascii?q?CO1AYDY4dGoNZimkrM48TAQE?= X-IronPort-AV: E=Sophos;i="5.70,462,1574118000"; d="scan'208";a="53519902" X-MGA-submission: =?us-ascii?q?MDGuhWKteBcnb5BkUsFfMqUQX+lCemrnSY7XAS?= =?us-ascii?q?9Na9G0SRd05dwUHSgBYykfT2Z5AYrK/E54HoASajd3h21GTLoP/iYl3C?= =?us-ascii?q?sibB8alflOFv84GfethVLMbErtocG5dW9g+riKJvf1o0tSXCljZ5ekGg?= =?us-ascii?q?atPBr1X2BxEN7D1q+KU5mgAw=3D=3D?= Received: from mail-pj1-f50.google.com ([209.85.216.50]) by relay2.uni-heidelberg.de with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 19 Feb 2020 23:00:57 +0100 Received: by mail-pj1-f50.google.com with SMTP id f2so478812pjq.1 for ; Wed, 19 Feb 2020 14:00:56 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=SAxqzc1wnpJQXjETvk/cuVkkKevG6sbzJmneqw/op7g=; b=bnYqYVZvzHVmL8B4U1P3076ATGO+rvEYCt1vaSWwzo4hq/OFsI8PhX8r/5y2b8w576 wOwXJcVGJsAKe3XPyFbPUGRkQVopPdlt1gM56YjaNjyEaMRUwHjC2evU6WTgbbLCyQeE 2I17D0X665l+7aie4oFWInFAjDAQ/bAgErTqoZ529BF4Te7Fki4m6/Lu2cUR6LcjYAua nVnGiKyVa8vVqubcuSeaak5y1aTfKEjbEnLI2MAd9q4wMh+PxlZYsCO/oyGMbZtbqYwJ JUKOBepqdJNn21uRQwymLh1r4Tds9PxaddUBx9oc6GmMK3yONx3jOwlK0qMVvOV2VFsB OR4w== X-Gm-Message-State: APjAAAWfmanlQaJeYKWm/VhGoH/7R/YhQ3lXGnaW4DDL2qVxwI4wGNnH 0XBRrgiimtObE7m3VaJ+2tYI9TLx X-Google-Smtp-Source: APXvYqzhH3RrwG6An3nyJnpuh+PzYh7IrESVsWUKOt/mR2y+xXLjL6nz8I7AuWCtHpGOc6TwAhzVcQ== X-Received: by 2002:a17:902:bd88:: with SMTP id q8mr26551377pls.13.1582149650274; Wed, 19 Feb 2020 14:00:50 -0800 (PST) Received: from [172.22.4.2] (fwphysics-ejournal-external.otago.ac.nz. [139.80.80.8]) by smtp.gmail.com with ESMTPSA id m12sm737516pjf.25.2020.02.19.14.00.47 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 19 Feb 2020 14:00:49 -0800 (PST) References: <3007331580715961.WA.kellysmith12.21gmail.com@listserv.uni-heidelberg.de> <20200219092511.GG10540@thinkarch> <20200219140615.GH10540@thinkarch> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Message-ID: <04ecd83f-2852-4d2c-3e0e-4406aa84b3cf@gmail.com> Date: Thu, 20 Feb 2020 11:00:47 +1300 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Henri Menke Subject: Re: Discussion: Specialized Syntax To: LATEX-L@LISTSERV.UNI-HEIDELBERG.DE In-Reply-To: <20200219140615.GH10540@thinkarch> Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: Envelope-To: X-GMX-Antispam: 0 (Mail was not recognized as spam); Detail=V3; X-Spam-Flag: NO X-UI-Filterresults: notjunk:1;V03:K0:bZofFQI60+I=:YQFDdOPTpVnDI7Rm7Nzb9vQ9Dx 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 pX1k= X-UI-Loop:V01:w8aMtnpsdp8=:I9YlC7jojKdqh8sOcYwfDfF1UqLiLqhBzS9TUKiocq8= X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:ohBc5/oUKMM=:3yWKsWA9l/wzvc7e67OHAl /BAwh4leXI1MvmDVeIYLFgkfTUBH8awNBDY+BicQcW/TLmm5iQjwIZODym+BLtAhc/8l5EFE8 v/G13k3dUiYjk6Ha3W/u/bJmbVG9R3Jvp5nUvD2RbbhdI8ITEjWivyTz1KPzZWh89ocsNzH1s /kOgWGbx2Wpc8hjCZUjqyl4MSXxPzipXEEMTZFTqeXLtUOHN2SJhesSoq0IwqiKV/remh4p69 Tu8jH2fOIM7ndZwD/YbHmKOhUJw1wXrN0a/2BbAPm9tsTXolvAM1HLhz6NOvLnm/1E3ZAaIIn 5KfXKgtxS6hu0nttE+kI+ryaUz1Jsn/hV1KB9M8+gy+v23eDjlVXJYTinc9aF54ZgYEC7e8bW u8IzozSfNcwvvY/XxMqLeklsotdg4oRGcwqSOhqrv+we5F814jSZwfcHMcpJBN2ATpoeK85x3 PYXLrIa/ugwufI/WgU40Walx0BTHY2A= X-Scanned-By: MIMEDefang 2.78 on 81.169.212.23 Status: R X-Status: X-Keywords: X-UID: 8199 On 2/20/20 3:06 AM, Jonathan Spratte wrote: > I have *no* idea about parsers. I just rewrote the letter-by-letter parser > of PGF because I felt a few options missing (and the implementation is > nowhere near as powerful as it could be) when I heard about it and wanted > to play with it. I don't have any serious application for it, in PGF it is > only used for the SVG parser of the `svg.path` library. > > But I toyed with the idea to write a standalone package which includes a > similar letter-by-letter parser (well, actually it's a token-by-token > parser), just so interested users don't have to load the rather hefty > overhead of PGF. Just for the record, you don't have to load the full PGF to be able to use the parser module. Maybe I should make a package for that. \documentclass{article} \usepackage{pgfkeys} \usepackage{pgfrcs} \makeatletter \let\pgfset\pgfkeys % should use \pgfqkeys in pgfmoduleparser.code.tex \input{pgfmoduleparser.code.tex} \makeatother \begin{document} \newcount\mycount \pgfparserdef{myparser}{initial}{the letter a}% {\advance\mycount by 1\relax}% \pgfparserdef{myparser}{initial}{the letter b}% {} % do nothing \pgfparserdef{myparser}{initial}{the letter c}% {\pgfparserswitch{final}}% done! \pgfparserparse{myparser}aabaabababbbbbabaabcccc There are \the\mycount\ a's. \end{document} > Best, > Jonathan > > On Wed, 2020-02-19 12:27:31, Bruno Le Floch wrote: >> I've been *toying* for a long time (haven't gone very far) with the idea >> of writing a parser generator, but I couldn't decide how powerful to >> make it. One option would be to support "parsing expression grammars" >> (PEGs), which can be parsed in linear time using a packrat parser (but >> use a lot of memory, possibly problematic). Another option would be to >> stick with more traditional things like LL or LR parser. To be honest, >> I don't know enough about parsers and what useful languages they cover >> to decide. Thoughts welcome. >> >> Best, >> Bruno