# S/SL programming language

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/S/SL_programming_language
> Markdown URL: https://mediated.wiki/source/S/SL_programming_language.md
> Source: https://en.wikipedia.org/wiki/S%2FSL_programming_language
> Source revision: 1346822685
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

The **Syntax/Semantic Language** (**S/SL**) is an executable [high level](/source/High-level_programming_language) [specification language](/source/Specification_language) for [recursive descent parsers](/source/Recursive_descent_parser), semantic analyzers and code generators developed by [James Cordy](/source/James_Cordy), [Ric Holt](/source/Ric_Holt) and [David Wortman](/source/David_Wortman) at the [University of Toronto](/source/University_of_Toronto) in 1980.[1]

S/SL is a small [programming language](/source/Programming_language) that supports cheap [recursion](/source/Recursion) and defines input, output, and error token names (& values), semantic mechanisms (class interfaces whose methods are really escapes to routines in a host programming language but allow good abstraction in the [pseudocode](/source/Pseudocode)) and a pseudocode program that defines the [syntax](/source/Syntax) of the input language by the token stream the program accepts. Alternation, control flow and one-symbol look-ahead constructs are part of the language.

The S/SL processor [compiles](/source/Compiler) this pseudocode into a table (byte-codes) that is interpreted by the S/SL table-walker ([interpreter](/source/Interpreter_(computing))). The pseudocode language processes the input language in [LL(1)](/source/LL(1)) [recursive descent](/source/Recursive_descent) style but extensions allow it to process any [LR(k)](/source/LR_parser) language relatively easily.[2] S/SL is designed to provide excellent syntax error recovery and repair. It is more powerful and transparent than [Yacc](/source/Yacc) but can be slower.

S/SL's "semantic mechanisms" extend its capabilities to all phases of compiling, and it has been used to implement all phases of compilation, including [scanners](/source/Lexical_analysis), [parsers](/source/Parser), [semantic analyzers](/source/Semantic_analysis_(compilers)), [code generators](/source/Code_generation_(compiler)) and [virtual machine](/source/Virtual_machine) interpreters in multi-pass language processors.[3]

S/SL has been used to implement production commercial [compilers](/source/Compiler) for languages such as [PL/I](/source/PL/I), [Euclid](/source/Euclid_(programming_language)), [Turing](/source/Turing_(programming_language)), [Ada](/source/Ada_(programming_language)), and [COBOL](/source/COBOL), as well as interpreters, command processors, and domain specific languages of many kinds. It is the primary technology used in [IBM](/source/IBM)'s ILE/400 COBOL compiler,[4] and the [ZMailer](/source/ZMailer) [mail transfer agent](/source/Mail_transfer_agent) uses S/SL[5] for defining both its mail router processing language and its RFC 822 email address validation.

## References

1. J. R. Cordy, R. C. Holt and D. B. Wortman, "S/SL: Syntax/Semantic Language - Introduction and Specification", Technical Report CSRG-118, Computer Systems Research Group, University of Toronto, Sept. 1980

1. Barnard, D.T. & Cordy, J.R. (1988). "SL Parses the LR Languages". *Computer Languages*. **13** (2): 65–74. [doi:10.1016/0096-0551(88)90010-0](https://doi.org/10.1016/0096-0551(88)90010-0)

1. Holt, Richard C.; Cordy, James R.; Wortman, David B. (1982). "An Introduction to S/SL: Syntax/Semantic Language". *ACM Transactions on Programming Languages and Systems*. **4** (2): 149–178. [doi:10.1145/357162.357164](https://doi.org/10.1145/357162.357164)

1. Ian H. Carmichael and Stephen Perelgut. "S/SL revisited". Proc. CASCON'95, Conference of the Centre for Advanced Studies on Collaborative Research, Toronto, Canada, November 1995 [http://portal.acm.org/citation.cfm?id=781915.781926](http://portal.acm.org/citation.cfm?id=781915.781926)

1. ZMailer the Manual, [http://www.zmailer.org/zman/zmanual.shtml](http://www.zmailer.org/zman/zmanual.shtml)

---
Adapted from the Wikipedia article [S/SL programming language](https://en.wikipedia.org/wiki/S%2FSL_programming_language) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/S%2FSL_programming_language?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
