Smacc: a Compiler-Compiler

About this Booklet

This booklet describes SmaCC, the Smalltalk Compiler-Compiler originally developed by John Brant.


It contains:

SmaCC was ported to Pharo by Thierry Goubier, who actively maintains the SmaCC Pharo port. SmaCC is used in production systems; for example, it supports the automatic conversion from Delphi to C#.

Obtaining SmaCC

If you haven't already done so, you will need to load SmaCC. Execute this code in a Pharo playground:

Metacello new
	baseline: 'SmaCC';
	repository: 'github://SmaCCRefactoring/SmaCC';

Note that there is another version of SmaCC that John Brant ported later on to github ( It is now also part of Moose The difference between them is that the Moose version uses different tools to load the parser and scanner. In the future, we hope that these versions will be unified.


The compilation process comprises of two phases: scanning (sometimes called lexing or lexical analysis) and parsing (which usually covers syntax analysis and semantic analysis). Scanning converts an input stream of characters into a stream of tokens. These tokens form the input to the parsing phase. Parsing converts the stream of tokens into some object: exactly what object is determined by you, the user of SmaCC.