# HG changeset patch # User Shinji KONO # Date 1602669031 -32400 # Node ID 7e03f04b23ec58cf510d451f96d869018e501c25 # Parent 76f88d2d6cd6a815742e61908d584dba36b95fab first simple translateor to C diff -r 76f88d2d6cd6 -r 7e03f04b23ec tl1trans/tl1trans.pl --- a/tl1trans/tl1trans.pl Wed Oct 14 18:22:25 2020 +0900 +++ b/tl1trans/tl1trans.pl Wed Oct 14 18:50:31 2020 +0900 @@ -83,17 +83,15 @@ } print <<"EOFEOF"; #include +#include +#include -void write() { -} - $gvar; $procs; $funcs; int main(int ac, char *av[]) { EOFEOF - &getline; &statement; print <<"EOFEOF"; return 0; @@ -111,9 +109,31 @@ while($_ ne "") { if (s/^WRITE\((\d+)://) { my $d = $1; - while(s/.//) { - if ($& eq ")") { - &output(" write(); "); + while($_ ne "") { + if (s/^\"//) { + my $str = ""; + while(s/.//) { + last if ($& eq '"') ; + if ($& eq '\\') { + if (s/.//) { + if ($& eq "\"") { $str .= "\\\"" ; + } else { $str .= "\\$&" ; } + } + } else { + $str .= $&; + } + } + if ($str ne "") { + $str = "\"$str\""; + print "write($d,$str,strlen($str));" + } + } elsif (s/^CRLF//) { + print "write($d,\"\\n\",1);"; + } elsif (s/^\w+//) { + print "dprintf($d,\"%d\",$&);"; + } elsif (s/.//) { + } elsif ($& eq ")") { + last; } } } elsif (s/^[[({]//) { @@ -160,10 +180,9 @@ $lvar; EOFEOF } elsif (/^BEGIN/) { - &getline; &statement; print <<"EOFEOF"; -// end $proc +} // end $proc EOFEOF } elsif (/^(\w+)/) { $proc = $1;