A TXL solution to [[TIL Chairmarks]] #1.3, the begin-end syntax extension for the [[Tiny Imperative Language]]. TXL is designed for implementing language extensions, so adding a new syntactic feature is simple in TXL using [[Grammar Overrides]]. The "..." in the "redefine" is not a shorthand in this example, rather a language feature of TXL that denotes an extension to the existing nonterminal alternatives. Since there is no semantics for begin-end in TIL, we don't add any transform for this yet. -- Main.JamesCordy - 10 Oct 2005 _File "TILbeginparser.Txl"_ % TXL parser for begin-end language extenssion to Tiny Imperative Language % Jim Cordy, October 2005 % Begin with the standard TIL grammar include "TIL.Grm" % Add begin-end statements using grammar overrides redefine statement ... % refers to all existing forms for [statement] | [begin_statement] % add alternative for our new form end redefine define begin_statement 'begin [IN][NL] [statement*] [EX] 'end [NL] end define % No need to do anything except recognize the input, since the grammar % includes the output formatting cues function main match [program] _ [program] end function _Example run:_ cat begintest.til // Factor an input number begin var n; write "Input n please"; read n; write "The factors of n are"; begin var f; f := 2; while n != 1 do while (n / f) * f = n do // Got one - print it! write f; n := n / f; end f := f + 1; end end end txl begintest.til TILbeginparser.Txl TXL v10.4a (15.6.05) (c)1988-2005 Queen's University at Kingston Compiling TILbeginparser.Txl ... Parsing begintest.til ... Transforming ... begin var n; write "Input n please"; read n; write "The factors of n are"; begin var f; f := 2; while n != 1 do while (n / f) * f = n do write f; n := n / f; end f := f + 1; end end end