| Language-Tea documentation | Contained in the Language-Tea distribution. |
Language::Tea - A Tea code converter.
Version 0.03
This module converts Tea code into Java.
syntax:
destea.pl filename [option]
- filename: The Tea file you want to convert.
- option: put any character after the filename if you want destea to print directly to file. This will create a directory named 'Project' with a file MainProgram.java and other files for each class in the Tea file converted.
destea will convert Tea code to Java. You have two options: - You can print Java code to standard output; - Or, you can print Java code directly to java files. If you want to use this, you just have to put any character after the filename
Example: ./destea.pl example.java a
This will create a new directory called 'Project' and inside you'll have MainProgram.java, wich contains all main Tea instructions, and you'll have another files, one for each class in your Tea file converted.
Example: Imagine you have a Tea file with two classes: Triangle and Rectangle. If you convert this file, you'll obtain MainProgram.java, Triangle.java and Rectangle.java
Mario Silva <mario.silva at verticalone.pt>
Flavio Glock <flavio.glock@verticalone.pt>
Daniel Ruoso <daniel.ruoso@verticalone.pt>
Please report any bugs or feature requests to
bug-language-tea at rt.cpan.org, or through the web interface at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Language-Tea.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
Copyright 2007 Mario Silva, Flavio Glock, Daniel Ruoso, Vertical One all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Language-Tea documentation | Contained in the Language-Tea distribution. |
package Language::Tea; use warnings; use strict; use lib ( 'lib', '../lib' ); use Language::Tea::Traverse; use Language::Tea::Grammar; use Language::Tea::Pad; use Language::Tea::Match2AST; use Language::Tea::AST2Objects; use Language::Tea::NodeUpLinker; use Language::Tea::StatementContext; use Language::Tea::ASTRefactor; use Language::Tea::StaticType; use Language::Tea::JavaEmitter; use Language::Tea::Function;
our $VERSION = '0.03'; our %Classes; our $root;
sub translate { my $source_code= shift; my $filename = shift; my @source_lines = shift; my $Env = Language::Tea::Pad->new(); Language::Tea::Function::init_prototypes( $Env ); $source_code =~ s/{/ { /g; $source_code =~ s/\(/ \( /g; $source_code =~ s/\)/ \) /g; my $match = Language::Tea::Grammar->statements( $source_code ); my $ast = Language::Tea::Match2AST::match2ast( $match, $filename, \@source_lines ); $root = Language::Tea::AST2Objects::ast2objects( $ast ); Language::Tea::NodeUpLinker::create_links( $root ); Language::Tea::StatementContext::annotate_context( $root ); Language::Tea::ASTRefactor::refactor( $root ); $root = Language::Tea::StaticType::annotate_types($root, $Env); { my $i = 0; while ( $i < @{ $root->{statement} } ) { my $node = $root->{statement}[$i]; if ( ref( $node ) eq 'TeaPart::Class' ) { my $class = $node->{class}{arg_symbol}; $Classes{$class} ||= $node; # XXX splice @{ $root->{statement} }, $i, 1; } elsif ( ref( $node ) eq 'TeaPart::Method' ) { my $class = $node->{class}{arg_symbol}; die "undeclared class $class" unless exists $Classes{$class}; my $method = $node->{method}{arg_symbol}; push @{ $Classes{$class}{statement} }, $node; splice @{ $root->{statement} }, $i, 1; } else { $i++ } } } } sub printMainProg { my $package = shift; return Language::Tea::JavaEmitter::emit($root, $package); } sub printClass { my $class = shift; return Language::Tea::JavaEmitter::emit($Classes{$class}, $class); }
1; # End of Language::Tea