blob: 69f6b3ec44ff9837adb2c026308f1fda609ee4a1 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
Mini-Mini tutorial
------------------
Mini is a very simple (semi-functional) language that I wrote to test
the generic package of BCEL.
https://commons.apache.org/bcel/
Mini uses the JavaCC parser generator which comes precompiled from
http://www.webgain.com/products/java_cc/
After setting the CLASSPATH to the directory just above the Mini
directory, e.g.
% cd Mini
% setenv CLASSPATH $CLASSPATH:.:..
try the following:
% java Mini.MiniC max.mini
This produces a Java class file (max.class) which you can execute with
% java max
Enter a number (for example, 4) and you will be asked to enter 4 numbers. The
program will then tell you the biggest of them.
Alternatively you can produce a Java file (max.java) which will be
translated automatically to a .class file.
% java Mini.MiniC -java max.mini
There are three examples programs (max.mini, fac.mini, fib.mini)
provided which demonstrate the language syntax and should be quite
easy to understand.
The compiler is not that well documented, I'm afraid, but if you've
ever seen a compiler before, you should be able to understand what I'm
doing. The part that produces the byte code is contained in the
byte_code() method that all AST nodes implement. Take a look at
MiniC.java at line 85 and follow the recursive byte_code() calls.
It's also useful to use the listclass program provided with BCEL
to examine the generated class. For example
% java listclass max.class
Send bug reports and suggestions to
m.dahm@gmx.de (Markus Dahm)