[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CST->AST (default)



	I would like to do a partial CST->AST transformation. For my 
grammar, CST is fine except for expression.
I would like to rewrite exp without having to write all node in AST.
Why SableCC doesn't have a default CST->AST transformation?

Here's a simple example:

[...]
Productions

    grammar           = exp_list ;              /**
    exp_list          = exp_list_tail* exp ;     * Suppose I want CST as AST.
    exp_list_tail     = exp comma ;              */

    exp               {-> exp} =  
                        {plus}   exp plus factor    {-> New exp.mult( exp.exp, factor.exp ) }
                      | {minus}  exp minus factor   {-> New exp.mult( exp.exp, factor.exp ) }
                      | {factor} factor             {-> factor.exp }
                      ;


    factor            {-> exp} =
                        {mult}   factor mult term   {-> New exp.mult( factor.exp, term.exp ) }
                      | {div}    factor div term    {-> New exp.div( factor.exp, term.exp ) }
                      | {term}   term               {-> term.exp }
                      ;

    term              {-> exp} =
                        {number}   number           {-> New exp.number(number) }
                      | {exp}      l_par exp r_par  {-> exp.exp }
                      ;


Abstract Syntax Tree

    grammar       = exp_list;               /** 
    exp_list      = exp_list_tail* exp;      * Why should I define these rules? 
    exp_list_tail = exp comma ;              */

    exp = {plus}    [l]:exp  [r]:exp |
          {minus}   [l]:exp  [r]:exp |
          {div}     [l]:exp  [r]:exp |
          {mult}    [l]:exp  [r]:exp |
          {number}  number;




				ciao

-- 
Bergeron Etienne
Laboratoire de compilation et traitement parallele
Universite de Montreal 
http://www.iro.umontreal.ca/~bergeret
---------------------------------------------------------
"I'm writing a program that takes the input in, and puts the output out."