1*0c56280aSSorin Basca Mini-Mini tutorial 2*0c56280aSSorin Basca ------------------ 3*0c56280aSSorin Basca 4*0c56280aSSorin BascaMini is a very simple (semi-functional) language that I wrote to test 5*0c56280aSSorin Bascathe generic package of BCEL. 6*0c56280aSSorin Basca 7*0c56280aSSorin Basca http://commons.apache.org/bcel/ 8*0c56280aSSorin Basca 9*0c56280aSSorin BascaMini uses the JavaCC parser generator which comes precompiled from 10*0c56280aSSorin Basca 11*0c56280aSSorin Basca http://www.webgain.com/products/java_cc/ 12*0c56280aSSorin Basca 13*0c56280aSSorin BascaAfter setting the CLASSPATH to the directory just above the Mini 14*0c56280aSSorin Bascadirectory, e.g. 15*0c56280aSSorin Basca 16*0c56280aSSorin Basca % cd Mini 17*0c56280aSSorin Basca % setenv CLASSPATH $CLASSPATH:.:.. 18*0c56280aSSorin Basca 19*0c56280aSSorin Bascatry the following: 20*0c56280aSSorin Basca 21*0c56280aSSorin Basca % java Mini.MiniC max.mini 22*0c56280aSSorin Basca 23*0c56280aSSorin BascaThis produces a Java class file (max.class) which you can execute with 24*0c56280aSSorin Basca 25*0c56280aSSorin Basca % java max 26*0c56280aSSorin Basca 27*0c56280aSSorin BascaEnter a number (4, eg.) and you will be asked to enter 4 numbers. The 28*0c56280aSSorin Bascaprogram will then tell you the biggest of them. 29*0c56280aSSorin Basca 30*0c56280aSSorin BascaAlternatively you can produce a Java file (max.java) which will be 31*0c56280aSSorin Bascatranslated automatically to a .class file. 32*0c56280aSSorin Basca 33*0c56280aSSorin Basca % java Mini.MiniC -java max.mini 34*0c56280aSSorin Basca 35*0c56280aSSorin BascaThere are three examples programs (max.mini, fac.mini, fib.mini) 36*0c56280aSSorin Bascaprovided which demonstrate the language syntax and should be quite 37*0c56280aSSorin Bascaeasy to understand. 38*0c56280aSSorin Basca 39*0c56280aSSorin Basca 40*0c56280aSSorin BascaThe compiler is not that well documented, I'm afraid, but if you've 41*0c56280aSSorin Bascaever seen a compiler before, you should be able to understand what I'm 42*0c56280aSSorin Bascadoing. The part that produces the byte code is contained in the 43*0c56280aSSorin Bascabyte_code() method that all AST nodes implement. Take a look at 44*0c56280aSSorin BascaMiniC.java at line 85 and follow the recursive byte_code() calls. 45*0c56280aSSorin Basca 46*0c56280aSSorin BascaIt's also useful to use the listclass program provided with BCEL 47*0c56280aSSorin Bascato examine the generated class. For example 48*0c56280aSSorin Basca 49*0c56280aSSorin Basca % java listclass max.class 50*0c56280aSSorin Basca 51*0c56280aSSorin Basca 52*0c56280aSSorin BascaSend bug reports and suggestions to 53*0c56280aSSorin Basca 54*0c56280aSSorin Basca [email protected] (Markus Dahm) 55