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

How to build interperter from a grammar...



I have completed a grammar for my language, but I am somewhat 
confused by what the next step is.  The intent was to build an 
interpreted language, much like the minibasic example.  However, my 
grammar is more complex in that a has productions for more than 
just simple add subtract, etc..., it allows for full parenthesized 
expressions, etc (much like in Java, C, fortran, etc)   I am not 
sure how to go about which routines I need to actually code up in 
order to make the assignment statments work.   I was wondering if 
anyone else perhaps has an example of how to do a more complicated 
interpreted language?  Essentially, I am confused about the fact 
that I have productions that look as shown below.  I realize I need 
routines to store the computed values in a hash table, and be able 
to look up the identifiers and their values from that, but I am not 
sure if I need to do that for each production alternative (ie 
expression, term, expon, factor...) or if I need only do this at 
the lowest (factor level), etc.

If anyone has any example code I could look at, that would help.  I have looked at both the minibasic and minipascal, but they don't seem to have the same level of complexity as my grammar...

Thanks!

Roger

  assign_statement      =  lhs  assign_operator  expression  new_line    ;
expression         = {term}   term
                      | {plus}   expression plus        term
                      | {minus}  expression minus       term
                      | {mod}    expression modulo      term
                      | {remain} expression remainder   term
//                     | {condition} conditional_expression
                      ;

   term               = {expon}  expon
                      | {mult}   term star expon
                      | {div}    term slash expon
                      ;

   expon              = {factor} factor
                      | {power}  expon  power factor
                      ;

   factor             = {constant}    unop? constant_expression
                      | {identifier}  unop? identifier 
[additional_identifiers]:additional_identifier*
                      | {array}       unop? array_access
                      | {expression}  l_par expression r_par
                      ;


-- 
Be Yourself @ mail.com!
Choose From 200+ Email Addresses
Get a Free Account at www.mail.com

Attachment: AgpsSyntax.sablecc
Description: Binary data