$ template make_tokens() $ output $basedir + '/tokens.cs' /* This file was generated by SableCC (http://www.sablecc.org/). */ using System; using System.Collections; using System.Text; using @package.analysis; namespace @package.node { $ // generate all fixed token classes $ foreach {//token[@value]} public sealed class @ename : Token { public @ename() { base.Text = "${sablecc:escape_string_literal(string(@value))}"; } public @ename(int line, int pos) { base.Text = "${sablecc:escape_string_literal(string(@value))}"; Line = line; Pos = pos; } public override Object Clone() { return new @ename(Line, Pos); } public override void Apply(Switch sw) { ((Analysis) sw).Case@ename(this); } public override string Text { get { return base.Text; } set { throw new ApplicationException("Cannot change @ename text."); } } } $ end foreach $ // generate all variable token classes $ foreach {//token[not(@value)]} public sealed class @ename : Token { public @ename(string text) { Text = text; } public @ename(string text, int line, int pos) { Text = text; Line = line; Pos = pos; } public override Object Clone() { return new @ename(Text, Line, Pos); } public override void Apply(Switch sw) { ((Analysis) sw).Case@ename(this); } } $ end foreach $ // Generate the Token class public abstract class Token : Node { private string text; private int line; private int pos; public virtual string Text { get { return text; } set { text = value; } } public int Line { get { return line; } set { line = value; } } public int Pos { get { return pos; } set { pos = value; } } public override string ToString() { return text + " "; } internal override void RemoveChild(Node child) { } internal override void ReplaceChild(Node oldChild, Node newChild) { } } $ // Generate the EOF class public sealed class EOF : Token { public EOF() { Text = ""; } public EOF(int line, int pos) { Text = ""; Line = line; Pos = pos; } public override Object Clone() { return new EOF(Line, Pos); } public override void Apply(Switch sw) { ((Analysis) sw).CaseEOF(this); } } } $ end output $ end template