start 04
This commit is contained in:
parent
31c9f4ca2a
commit
b48712f9c9
6 changed files with 190 additions and 0 deletions
95
04b/in04
Normal file
95
04b/in04
Normal file
|
@ -0,0 +1,95 @@
|
|||
// types: char, uchar, short, ushort, int, uint, long, ulong, *type
|
||||
// declaration:
|
||||
// static <type> <name>;
|
||||
// local <type> <name>;
|
||||
// :<label>
|
||||
// statement:
|
||||
// <declaration>
|
||||
// if <term> <==/</>/>=/<=/!=> <term> goto <label>
|
||||
// goto <label>
|
||||
// <lvalue> = <rvalue>
|
||||
// <lvalue> += <rvalue>
|
||||
// <lvalue> -= <rvalue>
|
||||
// <function>(<term>, <term>, ...)
|
||||
// syscall(<term>, <term>, ...)
|
||||
// return <rvalue>;
|
||||
// term:
|
||||
// <var>
|
||||
// <number>
|
||||
// number:
|
||||
// 'c
|
||||
// 12345
|
||||
// 0xabc
|
||||
// lvalue:
|
||||
// <var>
|
||||
// *<var>
|
||||
// <var>[<term>]
|
||||
// rvalue:
|
||||
// `<string>`
|
||||
// <var>
|
||||
// &<var>
|
||||
// *<var>
|
||||
// <var>[<term>]
|
||||
// ~<var>
|
||||
// <function>(<term>, <term>, ...)
|
||||
// syscall(<term>, <term>, ...)
|
||||
// <term> + <term>
|
||||
// <term> - <term>
|
||||
// <term> * <term>
|
||||
// <term> / <term>
|
||||
// <term> % <term>
|
||||
// <term> & <term>
|
||||
// <term> | <term>
|
||||
// <term> ^ <term>
|
||||
// <term> < <term> (left shift)
|
||||
// <term> > <term> (right shift)
|
||||
// (<term> ] <term>)
|
||||
|
||||
main();
|
||||
|
||||
static char x;
|
||||
static uchar y;
|
||||
static long z;
|
||||
|
||||
function strlen(*char s)
|
||||
local ulong len;
|
||||
local char c;
|
||||
len = 0;
|
||||
:strlen.loop
|
||||
c = s[len];
|
||||
if c == 0 goto strlen.loop_end;
|
||||
len += 1;
|
||||
goto strlen.loop
|
||||
:strlen.loop_end
|
||||
return len;
|
||||
|
||||
function putc(char c)
|
||||
local char *p;
|
||||
p = &c;
|
||||
syscall(1, 1, p, 1, 0, 0, 0, 0);
|
||||
return;
|
||||
|
||||
function puts(*char s)
|
||||
local ulong len;
|
||||
len = strlen(s);
|
||||
syscall(1, 1, s, len, 0, 0, 0, 0);
|
||||
return;
|
||||
|
||||
function main()
|
||||
local *char hello;
|
||||
hello = `Hello, world!
|
||||
`;
|
||||
puts(hello);
|
||||
syscall(0x3c, 0, 0, 0, 0, 0, 0, 0);
|
||||
|
||||
function f(*long x, **long y)
|
||||
local long v;
|
||||
local *long p;
|
||||
v = *x;
|
||||
p = *y;
|
||||
*p = v;
|
||||
if v == 0 goto something;
|
||||
p[1] = v + 1;
|
||||
return p[2];
|
||||
:something
|
||||
return p[1];
|
Loading…
Add table
Add a link
Reference in a new issue