103 lines
8.1 KiB
Text
103 lines
8.1 KiB
Text
(phixonline)-->
|
|
<span style="color: #000080;font-style:italic;">--
|
|
-- demo\rosetta\Compiler\js_io.e
|
|
-- =============================
|
|
--
|
|
-- Fake file i/o for running under pwa/p2js in a browser
|
|
-- Does not cover the human readable reload parts of extra.e
|
|
--</span>
|
|
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
|
|
<span style="color: #004080;">sequence</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">known_files</span><span style="color: #0000FF;">,</span><span style="color: #000000;">kfc</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">columnize</span><span style="color: #0000FF;">({</span>
|
|
<span style="color: #0000FF;">{</span><span style="color: #008000;">"test3.c"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"""
|
|
/*
|
|
All lexical tokens - not syntactically correct, but that will
|
|
have to wait until syntax analysis
|
|
*/
|
|
/* Print */ print /* Sub */ -
|
|
/* Putc */ putc /* Lss */ <
|
|
/* If */ if /* Gtr */ >
|
|
/* Else */ else /* Leq */ <=
|
|
/* While */ while /* Geq */ >=
|
|
/* Lbrace */ { /* Eq */ ==
|
|
/* Rbrace */ } /* Neq */ !=
|
|
/* Lparen */ ( /* And */ &&
|
|
/* Rparen */ ) /* Or */ ||
|
|
/* Uminus */ - /* Semi */ ;
|
|
/* Not */ ! /* Comma */ ,
|
|
/* Mul */ * /* Assign */ =
|
|
/* Div */ / /* Integer */ 42
|
|
/* Mod */ % /* String */ "String literal"
|
|
/* Add */ + /* Ident */ variable_name
|
|
/* character literal */ '\n'
|
|
/* character literal **/ '\\'
|
|
/* character literal */ ' '
|
|
"""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)},</span>
|
|
<span style="color: #0000FF;">{</span><span style="color: #008000;">"test4.c"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"""
|
|
/*** test printing, embedded \n and comments with lots of '*' ***/
|
|
print(42);
|
|
print("\nHello World\nGood Bye\nok\n");
|
|
print("Print a slash n - \\n.\n");
|
|
"""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)},</span>
|
|
<span style="color: #0000FF;">{</span><span style="color: #008000;">"primes.c"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"""
|
|
/*
|
|
Simple prime number generator
|
|
*/
|
|
count = 1;
|
|
n = 1;
|
|
limit = 100;
|
|
while (n < limit) {
|
|
k=3;
|
|
p=1;
|
|
n=n+2;
|
|
while ((k*k<=n) && (p)) {
|
|
p=n/k*k!=n;
|
|
k=k+2;
|
|
}
|
|
if (p) {
|
|
print(n, " is prime\n");
|
|
count = count + 1;
|
|
}
|
|
}
|
|
print("Total primes found: ", count, "\n");
|
|
"""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)},</span>
|
|
<span style="color: #0000FF;">{</span><span style="color: #008000;">"gcd.c"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"""
|
|
/* Compute the gcd of 1071, 1029: 21 */
|
|
|
|
a = 1071;
|
|
b = 1029;
|
|
|
|
while (b != 0) {
|
|
new_a = b;
|
|
b = a % b;
|
|
a = new_a;
|
|
}
|
|
print(a);
|
|
"""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)},</span>
|
|
<span style="color: #0000FF;">{</span><span style="color: #008000;">"Header.h"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"""
|
|
#define area(h, w) h * w
|
|
"""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)},</span>
|
|
<span style="color: #0000FF;">{</span><span style="color: #008000;">"Source.t"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"""
|
|
#include "Header.h"
|
|
#define width 5
|
|
#define height 6
|
|
area = #area(height, width)#;
|
|
"""</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)}})</span>
|
|
|
|
<span style="color: #004080;">sequence</span> <span style="color: #000000;">linenos</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">known_files</span><span style="color: #0000FF;">))</span>
|
|
|
|
<span style="color: #008080;">global</span> <span style="color: #008080;">function</span> <span style="color: #000000;">js_open</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">filename</span><span style="color: #0000FF;">)</span>
|
|
<span style="color: #004080;">integer</span> <span style="color: #000000;">fn</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">filename</span><span style="color: #0000FF;">,</span><span style="color: #000000;">known_files</span><span style="color: #0000FF;">)</span>
|
|
<span style="color: #7060A8;">assert</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
|
|
<span style="color: #000000;">linenos</span><span style="color: #0000FF;">[</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
|
|
<span style="color: #008080;">return</span> <span style="color: #000000;">fn</span>
|
|
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
|
|
|
<span style="color: #008080;">global</span> <span style="color: #008080;">function</span> <span style="color: #000000;">js_gets</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">fn</span><span style="color: #0000FF;">)</span>
|
|
<span style="color: #004080;">integer</span> <span style="color: #000000;">lineno</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">linenos</span><span style="color: #0000FF;">[</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">]+</span><span style="color: #000000;">1</span>
|
|
<span style="color: #008080;">if</span> <span style="color: #000000;">lineno</span><span style="color: #0000FF;"><=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">kfc</span><span style="color: #0000FF;">[</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">])</span> <span style="color: #008080;">then</span>
|
|
<span style="color: #000000;">linenos</span><span style="color: #0000FF;">[</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">lineno</span>
|
|
<span style="color: #008080;">return</span> <span style="color: #000000;">kfc</span><span style="color: #0000FF;">[</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">][</span><span style="color: #000000;">lineno</span><span style="color: #0000FF;">]</span>
|
|
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
|
<span style="color: #008080;">return</span> <span style="color: #000000;">EOF</span>
|
|
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
|
<!--
|