From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id CBuaFVb3ll/3CAAA0tVLHw (envelope-from ) for ; Mon, 26 Oct 2020 16:20:38 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id WPlvEVb3ll9eOwAAB5/wlQ (envelope-from ) for ; Mon, 26 Oct 2020 16:20:38 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id DEE8B9401BC for ; Mon, 26 Oct 2020 16:20:37 +0000 (UTC) Received: from localhost ([::1]:49102 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kX5Ea-0003jt-Na for larch@yhetil.org; Mon, 26 Oct 2020 12:20:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58926) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kX5BW-0001rP-35 for emacs-orgmode@gnu.org; Mon, 26 Oct 2020 12:17:27 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:39174) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kX5BS-00089X-SF; Mon, 26 Oct 2020 12:17:25 -0400 Received: by mail-pf1-x42c.google.com with SMTP id e15so6452994pfh.6; Mon, 26 Oct 2020 09:17:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version; bh=25r0a2I37eNx/QzdxlXKM/fA6yeCilb9qBossEr10UM=; b=jrIxtSfqA6LFRAe0FloA/yMBGYF0oGxExphFIPv4HN97r1iaPo93xLBPC36oZcLmKL tYc2gun+jiS7UF95KNROqhGzzKqRpibyzzTiBPqgyf98VDmJ1L5kCb2asghoBLcZvzkw r+s0vk/N89lGWzy5oxMkOPZRKSFydWetrrjUayKejVAUNdt22KUmvAZLJ+9X76Ln8YAD lONrdhag3OsKFzcg2svZhYAJPZxDY4NQHxp8u2abj4rWE415NfmykKWW1XTxgnF9DYsi 29M5MGzWNg+7zjDpFNTfQewKzDdz074nUsoyYRI4YAK+JKErnSyiytHEDLo0kf3kz6Th cJ8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version; bh=25r0a2I37eNx/QzdxlXKM/fA6yeCilb9qBossEr10UM=; b=ZLiKiyW9/UnmnbBlN3n1ktAia108GOhZQELvAojQAfLspnAwuRgCzg+yc+j+ndxs3o +ziILLldznJaVxJ1VaX0k0P+B9rH85kstlK9nGMatpLuY5RBjbU/LVlwm043ZLMZ6mtq IQyh0F4w3WrG0v5xnpAiX03oG/TKXwTG3ZUQ8QQpC3OLxlKwGIfdMATpazvNSffAzf26 ep2eE5s4oSfXZz7q3EXj5cRcdY03NcnQzQg1KYTd1NE39DVCuMKFhhrXgYO0yMYIvKWY 1BsOkcxRCdCEEn3uB4eBClgv+yTHvB/k3aJu4MXmi7swRJRiPwP4AbL25ZpXZIcgLNge H23A== X-Gm-Message-State: AOAM533Xs+Y2KIhgQgHV+IXOd6j6XQuLQxjEuqGD8kPuSwONskacWOVY +LGHuvaB4lG6MJqH9Md2t0c6Gtnbfts= X-Google-Smtp-Source: ABdhPJz0HOvYNAJ3gcRgnF4iK4MiFFBVX/YhTSQg6Ga4M39agmMLvt7Z5p/mA9leuDr2BLwn3YyJZg== X-Received: by 2002:a63:105e:: with SMTP id 30mr14858692pgq.33.1603729037673; Mon, 26 Oct 2020 09:17:17 -0700 (PDT) Received: from geus3064linuxwsm (97-126-80-198.tukw.qwest.net. [97.126.80.198]) by smtp.gmail.com with ESMTPSA id y3sm766400pfn.167.2020.10.26.09.17.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Oct 2020 09:17:16 -0700 (PDT) References: <68dc1ea1-52e8-7d9e-fb2d-bcf08c111eca@intrepidus.pl> <874kno7w3v.fsf@gnu.org> <87k0vdkz7c.fsf@gmail.com> <87sga13w62.fsf@nicolasgoaziou.fr> User-agent: mu4e 1.4.3; emacs 27.1 From: Ken Mankoff To: Nicolas Goaziou Subject: Re: official orgmode parser In-reply-to: <87sga13w62.fsf@nicolasgoaziou.fr> Date: Mon, 26 Oct 2020 09:17:16 -0700 Message-ID: <87r1plj71v.fsf@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=mankoff@gmail.com; helo=mail-pf1-x42c.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bastien , =?utf-8?Q?Przemys=C5=82aw_Kami=C5=84ski?= , emacs-orgmode@gnu.org Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20161025 header.b=jrIxtSfq; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Spam-Score: -1.71 X-TUID: j/qPxqQxqVgY --=-=-= Content-Type: text/plain On 2020-10-26 at 07:21 -07, Nicolas Goaziou wrote... > Ken Mankoff writes: > >> I question if this is possible because EBNF is for context-free >> grammars, but I *think* Org syntax is context-free. > > It's not as explained in a footnote in the Org syntax document. Yes, I meant to write that I think Org syntax is maybe *not* context-free, and therefore EBNF can't capture all of it. But it could still be very helpful and capture most of it. But the more I think about it, the more I think Org may be context-free. For the footnotes, I'm not sure that "(1) In particular, the parser requires stars at column 0 to be quoted by a comma when they do not define a headline" violates context. An "*" in the first column defines a header. It can be escaped by anything else too (" *" works too). If ",*" has a special meaning, that can be captured elsewhere in the syntax. I'm also not sure (2) violates context-freeness, at least in the EBNF sense where a context can include a newline. See for example: section ::= "*"+ string (tag+) newline (planning newline)? (property_drawer newline)? planning ::= ("SCHEDULED:" "<" date_or_time ">")? ("DEADLINE:" "<" date_or_time ">")? property_drawer ::= ":PROPERTIES:" newline drawer_contents newline ":END:" drawer_contents ::= ":" property ":" whitespace string Where the first line, "section" is represented graphically as the attached image. I guess I'm not 100% clear what "context-free" means. EBNF can represent a language where a for loop has an opening and closing brace. The closing brace is context-dependent, just as the planning or property drawers are. I recently used EBNF to represent a CSV file with header, and I was unable to capture the requirement that the header column must have the same number of fields or commas as the data section. I think that is context-free. --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=tmp_20201026_090940.png Content-Transfer-Encoding: base64 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 --=-=-= Content-Type: text/plain -k. --=-=-=--