[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."