rayan@cs.toronto.edu (Rayan Zachariassen) (09/14/89)
A usually more handy reference is: "An Introduction to S/SL: Syntax/Semantic Language" by R.C. Holt, J.R. Cordy, and D.B. Wortman, in ACM Transactions on Programming Languages and Systems (TOPLAS), Vol 4, No. 2, April 1982, Pages 149-178. S/SL used to be a ``product'' but since only 4 or so places actually paid for tapes I believe the authors consider it freely available (though implementations are still copyrighted). At least, when I needed it for my mailer and wrote a version in C, they agreed that it could be freely redistributed subject to proper attribution when S/SL technology is used. The proper address for CSRI is: CSRI, University of Toronto Sandford Fleming Building, 10 King's College Road, Toronto, Ontario Canada M5S 1A4 S/SL, in a nutshell, is compilable pseudo-code. A small language that defines input/output/error token names (& values), semantic operations (which are really escapes to a programming language but allow good abstration in the pseudo-code), and a pseudo-code program that defines a grammar by the token stream the program accepts. Alternation, control flow, and 1-symbol lookahead constructs are part of the language. What I call an S/SL "implementation", is a program that compiles this S/SL pseudo-code into a table (think byte-codes) that is interpreted by the S/SL table-walker (interpreter). The S/SL compiler is written using S/SL in case you need a real example. You supply the table-walker, possibly based on a sample skeleton walker provided. I think the pseudo-code language is LR(1), and that the semantic mechanisms turn it into LR(N) relatively easily. It reminds me most of an abstract recursive- descent approach. You wouldn't use S/SL for off-the-cuff parsing needs, because the investment in the table walker is much higher than what is needed to throw a yacc program together. However for large or complicated jobs, anything based on yacc is likely to be contorted and unmanageable. I used to have a hand-crafted RFC822 (that's a mail protocol) parser and a lex/yacc-based /bin/sh clone implementation and got so disgusted with both that they are now implemented using S/SL. S/SL has been used to build several quite large compilers systems (Concurrent Euclid, Turing, Turing+ and variations, are those I know of). If you've read this far, you deserve a cookie... my C implementation of the S/SL compiler is now available by anonymous FTP to neat.cs.toronto.edu in pub/ssl.tar.Z. rayan [From rayan@cs.toronto.edu (Rayan Zachariassen)] -- Send compilers articles to compilers@ima.isc.com or, perhaps, Levine@YALE.EDU { decvax | harvard | yale | bbn }!ima. Meta-mail to ima!compilers-request. Please send responses to the author of the message, not the poster.
rayan@cs.toronto.edu (Rayan Zachariassen) (09/27/89)
Robert Manson <manson@riker.eng.ohio-state.edu> found a bug in the ssl.c available for FTP. Since about 60 people have fetched it already I thought posting it here would be most appropriate. In ssl.c, change int specialChar[(int)tIllegal]; to int XspecialChar[(int)tIllegal-(int)tSyntaxError]; int *specialChar=XspecialChar-(int)tSyntaxError; This doesn't make any operational difference on the two or three machines I've tried it on, but it is good form to make this fix whether you think you need it or not. If you fetched ssl.tar.Z after noon of September 16th, you don't need it. Also, here's a message from Jim Cordy, one of the S/SL progenitors: Date: Sat, 16 Sep 89 10:10:12 EDT Reply-to: cordy@qucis.queensu.ca Subject: S/SL, etc. Rayan, to my knowledge S/SL was never a "product" - it has always been distributed at the standard CSRI tape-cost-recovery price, decided in the mists of time to be the cost to CSRI of putting a copy together. There was once a separate S/SL tape, but it is now distributed with the PT Pascal compiler only, since it is most useful when it comes with an example of its use. There have been a large number of these tapes sent out over the years (like 100 or so). There are at least 20, mostly industrial, places that are currently using S/SL for real work. Some of them will not admit it for company secrecy reasons, but their employees are friends and former students, so let's just say the beer did it, and we find out. I'm always surprised by the number of people that have made "home-brew" S/SL's - I just got a letter from a fellow in Darmstadt last week about one. Of course, that was the intention of the TOPLAS article - to show you haow simple it was, and how easy to make your own (hence the publication of the walker and the table of equivalences for the assembler). The characterization as an "executable pseudo-code" misses the point. A better characterization is that S/SL is a language explicitly designed for making efficient recusive-descent parsers. Unlike most other languages, practicially the LEAST expensive thing you can do in S/SL is recur. This is by design, and is a side effect of having not native variables and data. Thanks for submitting the note to comp.compilers. Pass this stuff on if you like. Cheers Jim [From Rayan Zachariassen <rayan@cs.toronto.edu>] -- Send compilers articles to compilers@esegue.segue.boston.ma.us {spdcc | ima | lotus}!esegue. Meta-mail to compilers-request@esegue. Please send responses to the author of the message, not the poster.