Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Perl: Oma tulkki Perlillä

Oippa [04.12.2004 20:31:25]

#

Mitäs mieltä ootte tästä tulkista, joka on perlillä tehty?

itse tulkattava koodi löytyy viestin lopusta.

#!/usr/bin/perl -w

use strict;

my $fp = "default.oippa";

if ($ARGV[0]) { $fp = $ARGV[0]; }

my $pphp = 0;
my @filef = &openf($fp);

foreach my $file (@filef)
{
	chomp($file);

	next if ($file =~ /^\s*\#/);
	next if ($file =~ /^\s*$/);

 	if ($file =~ /^\s*\!oippa\s*$/) { $pphp = 1; }

 	if ($pphp eq 1)
	{
  		my @com = split(/;/, $file);

  		foreach my $comi (@com)
		{

   			if ($comi =~ /^\s*if\s*(.*)\s(.*)\s=>\s*(.*)\s*$/ig)
			{
    				if ($1 eq $2)
				{
     					my @elsecom = split(/:/,$3);

     					foreach my $elsec (@elsecom)
					{
      						&commands($elsec);
     					}
    				}
	   		}

   			else
			{
    				&commands($comi);
   			}
		}

	}

 	if ($file =~ /^\s*\?oippa\s*$/) { $pphp = 0; }
}

sub commands {
	if ($_[0] =~ /^\s*print\s\s*"(.*)"\s*$/ig) { print $1; }
	if ($_[0] =~ /^\s*endl\s*$/ig) { print "\n"; }
	if ($_[0] =~ /^\s*echo\s\s*"(.*)"\s*$/ig) { print $1; }
}

sub openf {
	my @farray;

	open(FILE, $_[0]);
	@farray = <FILE>;
 	close(FILE);

	return @farray;
}

tulkattava koodi:

!oippa

#tulostetaan hello world!
echo "hello world!"; endl
if 1 1 => echo "1 on 1": endl
?oippa

tähän voi sepustaa ihan mitä lystää, jota ei suoriteta...

!oippa
endl; echo "jee"; endl
?oippa

eli tulostaa:

lainaus:

hello world!
1 on 1

jee

Heikki [04.12.2004 23:09:47]

#

Ehkä hieman rajoittunut, mutta aika pienellä koodimäärällä tuo näyttää onnistuvan. Kommentointi ainakin niin laiskaa, että Perliä osaamattoman on paha saada mitään tolkkua.
Pistä tavoitteeksi sama taso kuin tässä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta