From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Jan Nieuwenhuizen Newsgroups: gmane.lisp.guile.user Subject: lalr parser: on Bison-like source locations Date: Sun, 26 Oct 2014 21:11:06 +0100 Organization: AvatarAcademy.nl Message-ID: <8738aazj51.fsf@drakenvlieg.flower> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1414354296 14555 80.91.229.3 (26 Oct 2014 20:11:36 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 26 Oct 2014 20:11:36 +0000 (UTC) Cc: guile-user@gnu.org To: NalaGinrut@gmail.com Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Sun Oct 26 21:11:31 2014 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1XiU9x-0005vy-MS for guile-user@m.gmane.org; Sun, 26 Oct 2014 21:11:29 +0100 Original-Received: from localhost ([::1]:58270 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XiU9x-0003f9-7e for guile-user@m.gmane.org; Sun, 26 Oct 2014 16:11:29 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:49442) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XiU9k-0003ev-Gu for guile-user@gnu.org; Sun, 26 Oct 2014 16:11:21 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XiU9f-0007pS-Iu for guile-user@gnu.org; Sun, 26 Oct 2014 16:11:16 -0400 Original-Received: from smtp-vbr1.xs4all.nl ([194.109.24.21]:2295) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XiU9f-0007oh-6r for guile-user@gnu.org; Sun, 26 Oct 2014 16:11:11 -0400 Original-Received: from drakenvlieg.flower.peder.onsbrabantnet.nl (ip51cd836d.speed.planet.nl [81.205.131.109]) (authenticated bits=0) by smtp-vbr1.xs4all.nl (8.13.8/8.13.8) with ESMTP id s9QKB7hY049073 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO); Sun, 26 Oct 2014 21:11:09 +0100 (CET) (envelope-from janneke@gnu.org) X-Url: http://AvatarAcademy.nl User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) X-Virus-Scanned: by XS4ALL Virus Scanner X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 194.109.24.21 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:11601 Archived-At: --=-=-= Content-Type: text/plain Hi, Saw your question on irc. Attached is a modification on your `simple' language that demonstrates transparent source locations. The explicit, Bison-like locations work just like they do in Bison...eg something like: ;; helper (define (note-location ast loc) (when (supports-source-properties? ast) (set-source-property! ast 'loc loc)) ast) (define (make-parser) (lalr-parser ;; ... ;; production rules (variable (type Identifier = expression semicolon) : `(variable ,$2 ,$1 ,(note-location `(expression ,$4) @3)) (Identifier dot Identifier Identifier = expression semicolon) : `(variable ,$4 (type ,$3 ,$1) ,(note-location `(expression ,$6) @5))) Does that answer your question? Greetings, Jan --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=simple.scm Content-Transfer-Encoding: base64 OzsgIENvcHlyaWdodCAoQykgMjAxNAo7OyAgICAgICJNdSBMZWkiIGtub3duIGFzICJOYWxhR2lu cnV0IiA8TmFsYUdpbnJ1dEBnbWFpbC5jb20+Cjs7ICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2Fy ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK OzsgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCjs7ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsg IFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo7OyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKOzsgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCgo7OyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKOzsgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKKGRlZmluZS1t b2R1bGUgKGxhbmd1YWdlIHNpbXBsZSBzaW1wbGUpCiAgIzp1c2UtbW9kdWxlIChzeXN0ZW0gYmFz ZSBsYWxyKQogICM6dXNlLW1vZHVsZSAobGFuZ3VhZ2UgdHJlZS1pbCkKICAjOnVzZS1tb2R1bGUg KGljZS05IGFuZC1sZXQtc3RhcikKICAjOnVzZS1tb2R1bGUgKGljZS05IG1hdGNoKQogICM6ZXhw b3J0IChtYWtlLXNpbXBsZS10b2tlbml6ZXIgbWFrZS1wYXJzZXIgY29tcGlsZS10cmVlLWlsKSkK Cjs7IFR3byBoZWxwZXIgbWFjcm9zIHRvIGNyZWF0ZSB0aGUgdG9rZW4gc3RydWN0IGZvciByZXR1 cm5pbmcKKGRlZmluZS1zeW50YXgtcnVsZSAocG9ydC1zb3VyY2UtbG9jYXRpb24gcG9ydCkKICAo bWFrZS1zb3VyY2UtbG9jYXRpb24gKHBvcnQtZmlsZW5hbWUgcG9ydCkKICAgICAgICAgICAgICAg ICAgICAgICAgKHBvcnQtbGluZSBwb3J0KQogICAgICAgICAgICAgICAgICAgICAgICAocG9ydC1j b2x1bW4gcG9ydCkKICAgICAgICAgICAgICAgICAgICAgICAgKGZhbHNlLWlmLWV4Y2VwdGlvbiAo ZnRlbGwgcG9ydCkpCiAgICAgICAgICAgICAgICAgICAgICAgICNmKSkKKGRlZmluZS1zeW50YXgt cnVsZSAocmV0dXJuIHBvcnQgY2F0ZWdvcnkgdmFsdWUpCiAgKG1ha2UtbGV4aWNhbC10b2tlbiBj YXRlZ29yeSAocG9ydC1zb3VyY2UtbG9jYXRpb24gcG9ydCkgdmFsdWUpKQoKKGRlZmluZSAoaXMt d2hpdGVzcGFjZT8gYykgKGNoYXItc2V0LWNvbnRhaW5zPyBjaGFyLXNldDp3aGl0ZXNwYWNlIGMp KQooZGVmaW5lIChpcy1udW1iZXI/IGMpIChjaGFyLXNldC1jb250YWlucz8gY2hhci1zZXQ6aGV4 LWRpZ2l0IGMpKQo7OyBvcGVyYXRvcnMsIGluIHRoaXMgc2ltcGxlIGNhc2UsIHdlIGp1c3QgaGF2 ZSBmb3VyIG9wZXJhdG9ycwooZGVmaW5lIChpcy1vcD8gYykgKHN0cmluZy1jb250YWlucyAiKy0q LyIgKHN0cmluZyBjKSkpCihkZWZpbmUgKGlzLWRlbGltaXRlcj8gYykKICAob3IgKGVvZi1vYmpl Y3Q/IGMpIChzdHJpbmctY29udGFpbnMgIiArLSovO1xuIiAoc3RyaW5nIGMpKSkpCihkZWZpbmUg KGdldC1udW1iZXIgcG9ydCkKIChsZXQgbHAoKGMgKHBlZWstY2hhciBwb3J0KSkgKHJldCAnKCkp KQogICAoY29uZAogICAgKChpcy1kZWxpbWl0ZXI/IGMpIDsgZW5jb3VudGVyIGRlbGltaXRlciwg ZmluaXNoIHRvIHJlYWQgYSBudW1iZXIKICAgICA7OyBjb252ZXJ0IHRvIGEgbnVtYmVyIHJlcHJl c2VudGF0aW9uCiAgICAgKHN0cmluZy0+bnVtYmVyIChsaXN0LT5zdHJpbmcgKHJldmVyc2UgcmV0 KSkpKQogICAgKGVsc2UKICAgICAocmVhZC1jaGFyIHBvcnQpIDsgbmV4dCBjaGFyCiAgICAgKGxw IChwZWVrLWNoYXIgcG9ydCkgKGNvbnMgYyByZXQpKSkpKSkKKGRlZmluZSAoZ2V0LW9wIHBvcnQp IChzdHJpbmctPnN5bWJvbCAoc3RyaW5nIChyZWFkLWNoYXIgcG9ydCkpKSkKKGRlZmluZSAobmV4 dC10b2tlbiBwb3J0KQogIChsZXQgKChjIChwZWVrLWNoYXIgcG9ydCkpKQogICAgKGNvbmQKICAg ICAoKG9yIChlb2Ytb2JqZWN0PyBjKSAoY2hhcj0/IGMgI1xubCkpIDsgZW5kIG9mIGxpbmUsIG9y IGVuZCBzcmMKICAgICAgJyplb2kqKSA7IHJldHVybiAnKmVvaSogYmVjYXVzZSBMQUxSIG1vZHVs ZSBuZWVkIGl0CiAgICAgKChpcy13aGl0ZXNwYWNlPyBjKQogICAgICAocmVhZC1jaGFyIHBvcnQp CiAgICAgIChuZXh0LXRva2VuIHBvcnQpKSA7IHNraXAgd2hpdGUgc3BhY2UKICAgICAoKGlzLW51 bWJlcj8gYykKICAgICAgKHJldHVybiBwb3J0ICdudW1iZXIgKGdldC1udW1iZXIgcG9ydCkpKQog ICAgICgoaXMtb3A/IGMpCiAgICAgIChyZXR1cm4gcG9ydCAoZ2V0LW9wIHBvcnQpICNmKSkKICAg ICAoZWxzZQogICAgICAocmVhZC1jaGFyIHBvcnQpCiAgICAgIChuZXh0LXRva2VuIHBvcnQpKSkp KQooZGVmaW5lIChtYWtlLXNpbXBsZS10b2tlbml6ZXIgcG9ydCkgKGxhbWJkYSAoKSAobmV4dC10 b2tlbiBwb3J0KSkpCihkZWZpbmUgKG1ha2UtcGFyc2VyKQogIChsYWxyLXBhcnNlcgogICAoZHJp dmVyOiBscikKICAgOzsoZHJpdmVyOiBnbHIpCiAgIChudW1iZXIgKGxlZnQ6ICsgLSkgKGxlZnQ6 ICogLykpCiAgIChwcm9ncmFtIChleHApIDogJDEKICAgICAgICAgICAgKCplb2kqKSA6IChjYWxs LXdpdGgtaW5wdXQtc3RyaW5nICIiIHJlYWQpKSA7ICplb2Ytb2JqZWN0KgogICAoZXhwICAoZXhw ICsgdGVybSkgOiBgKCsgLCQxICwkMykKICAgICAgICAgKGV4cCAtIHRlcm0pIDogYCgtICwkMSAs JDMpCiAgICAgICAgICh0ZXJtKSA6ICQxKQogICAodGVybSAodGVybSAqIGZhY3RvcikgOiBgKCog LCQxICwkMykKICAgICAgICAgKHRlcm0gLyBmYWN0b3IpIDogYCgvICwkMSAsJDMpCiAgICAgICAg IChmYWN0b3IpIDogJDEpCiAgIChmYWN0b3IgKG51bWJlcikgOiBgKG51bWJlciAsJDEpKSkpCihk ZWZpbmUgKGNvbXBpbGUtdHJlZS1pbCBleHAgZW52IG9wdHMpCiAgKHZhbHVlcyAocGFyc2UtdHJl ZS1pbCAoY29tcCBleHAgJygpKSkgZW52IGVudikpCihkZWZpbmUgKGNvbXAgc3JjIGUpCiAgKGFu ZC1sZXQqICgoKHN1cHBvcnRzLXNvdXJjZS1wcm9wZXJ0aWVzPyBzcmMpKQogICAgICAgICAgICAg KGxvYyAoc291cmNlLXByb3BlcnR5IHNyYyAnbG9jKSkpCiAgICAgICAgICAgIChmb3JtYXQgKGN1 cnJlbnQtZXJyb3ItcG9ydCkgIkxPQyBbfmFdOiB+YVxuIiBsb2Mgc3JjKSkKICAobWF0Y2ggc3Jj CiAgICAoKCdudW1iZXIgeCkgYChjb25zdCAseCkpCiAgICAoKG9wIHggeSkgYChhcHBseSAocHJp bWl0aXZlICxvcCkgLChjb21wIHggZSkgLChjb21wIHkgZSkpKQogICAgKChoIHQgLi4uKSAoY29t cCBoIGUpKSkpIDs7IGZvciBkcml2ZXIgZ2xyCg== --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=spec.scm Content-Transfer-Encoding: base64 OzsgIENvcHlyaWdodCAoQykgMjAxNAo7OyAgICAgICJNdSBMZWkiIGtub3duIGFzICJOYWxhR2lu cnV0IiA8TmFsYUdpbnJ1dEBnbWFpbC5jb20+Cjs7ICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2Fy ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK OzsgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCjs7ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsg IFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo7OyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKOzsgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCgo7OyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKOzsgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKKGRlZmluZS1t b2R1bGUgKGxhbmd1YWdlIHNpbXBsZSBzcGVjKQogICM6dXNlLW1vZHVsZSAoc3lzdGVtIGJhc2Ug bGFuZ3VhZ2UpCiAgIzp1c2UtbW9kdWxlIChsYW5ndWFnZSBzaW1wbGUgc2ltcGxlKQogICM6ZXhw b3J0IChzaW1wbGUpKQogCihkZWZpbmUtbGFuZ3VhZ2Ugc2ltcGxlCiAgIzp0aXRsZSAgICAgICAi c2ltcGxlIgogICM6cmVhZGVyICAgICAgKGxhbWJkYSAocG9ydCBlbnYpIAogICAgICAgICAgICAg ICAgICAoKG1ha2UtcGFyc2VyKSAobWFrZS1zaW1wbGUtdG9rZW5pemVyIHBvcnQpIGVycm9yKSkK ICAjOmNvbXBpbGVycyAgIGAoKHRyZWUtaWwgLiAsY29tcGlsZS10cmVlLWlsKSkKICAjOnByaW50 ZXIgICAgIHdyaXRlKQo= --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable --=20 Jan Nieuwenhuizen | GNU LilyPond http://lilypond.org Freelance IT http://JoyofSource.com | Avatar=C2=AE http://AvatarAcademy.nl= =20=20 --=-=-=--