In TXL, all parsers are also pretty printers, so see the [[TIL Parser Using TXL]] if comments are not an issue. Because the TXL solution to preserving formatting and comments in a transformation is [[Source Factoring]], comments are not normally handled using TXL itself. However, in TXL it is also possible to handle comments by parsing them, either as disciplined comments (those appearing in predicted places, which of course is possible using any system), or using [[Robust Parsing]] techniques. TXL allows for the addition of disciplined comments to an existing base grammar using [[Grammar Overrides]]. The example below is based on the TXL base grammar for TIL given on the [[TIL Parser Using TXL]] page, and implements a pretty printer for TIL with discplined comment handling. -- Main.JamesCordy - 17 Aug 2005 (revised Main.JamesCordy - 10 Oct 2005) _File "TILpretty.Txl"_ % TXL parser / pretty-printer for Tiny Imperative Language, % with disciplined comment handling include "TIL.Grm" #define COMMENTS % Add optional grammar overrides for disciplined end-of-line comments % in the C++ style. You can either control this either by commenting/uncommenting % the #define above, or by using -d COMMENTS on the TXL command line #if COMMENTS then include "TILCommentOverrides.Grm" #end if % No need to do anything except recognize the input, since the grammar % includes the formatting cues function main match [program] _ [program] end function _File "TILCommentOverrides.Grm"_ % Grammar overrides to allow for disciplined TIL comments in the C++ style. % (Handling more general undisciplined comments is more complicated, % see the TXL C grammar.) #pragma -comment comments // end comments redefine statement ... | [comment_statement] end redefine define comment_statement [repeat comment_NL+] end define define comment_NL [comment] [NL] end define _Example run:_ cat factors.til // Factor an input number var n; write "Input n please"; read n; write "The factors of n are"; 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 txl factors.til TILpretty.Txl TXL v10.4a (15.6.05) (c)1988-2005 Queen's University at Kingston Compiling TILpretty.Txl ... Parsing factors.til ... Transforming ... // Factor an input number var n; write "Input n please"; read n; write "The factors of n are"; 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