First published .

Revision History

kate

Include libexds as a partial archive, for convenience of building.

My rationalle here is that SID and TLD are likely to be the only consumers for libexds, and so requiring its installation as a library seems excessive. However, it may still be installed separately, should anybody want that.

kate

Removed error file support, and hence the build-time dependency on Perl.

kate

Terminals (and only terminals) may now be optionally quoted. This acts as a convenience for terminals with mundane names, such as punctation symbols. For example, one might write "(" instead of OPEN-BRACE. These are output as per the usual language-specific rules for transformations into legal identifiers.

kate

Types may now be ignored in a similar way to actions and terminals, by prefixing a !. This particularly helps for grammars sharing the same actions, where an action is used only by one grammar, and that action is the only use of a given type.

Ignored types may be present in ignored terminals and ignored actions, but are dissallowed elsewhere.

kate

Added BNF output as -l bnf.

The output simply dumps the grammar contents, disregarding all the entries which do not pertain to grammatical constructs. The empty set is represented as "", but otherwise literals are not used.

This is our first non-C language.

kate

Introduced a new expansion within C actions, @$terminal. This is provided to maintain consistency between actions and the grammar's references to terminals (rather than actions writing the underlying C symbols).

Since it is output using the same mechanism as references to terminals elsewhere in the generated parser, it is subject to the same expansion rules. More notably, this includes -s numeric-terminals causing @$terminal to be output numerically.

kate

Introduced a new language-specific option, -s [no-]numeric-terminals. This causes references to terminal values to be generated symbolically, rather than by their integer values. This is intended to permit centralisation of token values between several parsers, alleviating the need to keep the lists of terminals in the same order in each grammar.

This is unrelated to -s [no-]numeric-ids, which pertains to generated symbol names.

This defaults to -s no-numeric-terminals to maintain compatibility only because ERROR_TERMINAL is introduced. Should the need for ERROR_TERMINAL be removed, this may default to -s numeric-terminals.

kate

Action declarations may now be optionally ignored in much the same way as terminals may be, by prefixing a !:

%productions%
	!<an-ignored-action>;

This is particularly useful for several grammars which share the same actions, where not all of the grammars make use of the actions provided.

kate

Added a new language-specific option: -s [no-]terminals. This controls whether terminals are output in the generated header (the default), or are omitted.

Omitting these is desirable if the user wishes to define her own values for terminals, rather than using the SID-supplied macros. This is especially useful for sharing several grammars with the same actions, where the terminal values are to be centralised between the various parsers.

kévin

Added persistant variable support for C actions.

kate

Tagged version 1.10.

The first stand-alone release of sid seperately to the TenDRA compiler. It is a code clean-up release; features are unchanged from 1.9.

kate

Restructured for initial stand-alone release. The only user-visible change here is that -? is replaced with -h. An example of using sid with lex has been added. This is the first release of sid stand-alone under tendra.org.

asmodai

Moved out SID to a standalone tool.

asmodai

Converted to a new build system.

DERA

SID 1.9; TenDRA 4.1.2 release.

smf

Added support for an unreachable code macro (instead of a comment) in the C output languages.

smf

Froze version 1.8.

smf

Added assignment as an alternative to identity binding.

smf

Added initialisers for non local variables.

smf

Added support for non local variables within rules. Froze version 1.7.

smf

Added support for language specific options. Added options to control prototyping, use of numeric identifiers and casting of substituted parameters for C output language.

smf

Added support for explicit call by reference and action parameter mutation information (rather than the inconsistent function call semantics of earlier versions).

smf

Changed the format of the C definition file to provide a parameter assignment operation (this should have been in from the start for consistent semantics). Also, the prefix section, maps section and all three assignment operation sections are now optional.

smf

Improved error messages. Made dump file be updated with information from the phase that failed in the case of an error (this is not always useful though - the grammar may be in a useless state after a failed transform; left recursion elimination is particularly bad for this).

smf

Added a stricter ANSI C language that uses numeric identifiers to keep the identifier length below 32 characters. Froze version 1.6.

smf

Changed the syntax of the input files so that the grammar looks more like a conventional programming language. Removed basics (replacing them with terminal symbols). Added a header file to the C language output.

smf

Added "--show-errors" option to show the error table status, and a "--help" option to show the command line syntax. Froze version 1.5.

smf

Changed command line syntax to be compatible with the TDF linker.

smf

Froze version 1.4.

smf

Added #line directives to header and trailer. Ensured that there is always a newline at the end of a code block.

smf

Added support for anonymous rules and in alternative exception handlers. Fixed cycle detection routine used in needed function computation. Froze version 1.3.

smf

Changed syntax of code blocks in action file. SID now inlines all actions, basics, assignments etc. and performs the substitutions. Substitutions allow for identifier and label substitution, as well as exception raising.

smf

Put name identifiers in a separate namespace. Stopped it being an error if the "-version" switch is used with no files specified.

smf

Added a test mode language. Froze version 1.2.

smf

Added exception handling instead of old error reporting mechanism.

smf

Added option of inlining rules that only contain basics. Changed output routines, so that parameters and results of inlined functions are substituted, rather than created and assigned to.

smf

Changed identifier prefixes. Made grammar printing mark inlinable rules with a '+'.

smf

Added predicate support. Improved factoring to allow alternatives with the same dataflow, but different names to be factored. Allowed types to be defined that were only the result types of terminals. Stopped rules being declared as entry points to the grammar multiple times.

smf

Fixed the cycle detection routines used in tail recursion detection. Froze version 1.1.

smf

Fixed the cycle detection routines used in left recursion detection. Fixed bug in outputting code for see through alternatives. Sorted error lists to make comparisons easier. Modified grammar printing to mark tail calls.

smf

SID 1.0; Initial version of the new sid. Adds dataflow and marginally improved error handling to the original version of sid. Also fixes some bugs in the algorithms used in the earlier version of sid. Froze version 1.0.

This was the first version of sid to support attribute grammars. The output language was C.