diff --git a/basic.cpp b/basic.cpp new file mode 100644 index 0000000..c7569ed --- /dev/null +++ b/basic.cpp @@ -0,0 +1,113 @@ +#include +#include +#include + +#define SUB inline auto +#define PROC int main +#define TEMPLATE template +#define VARARG class... +#define TYPENAME typename +#define USING using +#define RETURN return +#define BEGIN { +#define END } +#define IF if( +#define THEN ) { +#define ELSE } else { +#define ELIF(...) } else if(__VA_ARGS__) { +#define FI } +#define NEW STD::make_unique +#define RETURNS -> +#define OPERATOR operator +#define DECLARE extern +#define NAMESPACE namespace +#define CLASS struct +#define PUBLIC public: +#define SHARED protected: +#define PRIVATE private: +#define STD std +#define NOTHING void +#define INHERITS : public +#define REF & +#define PTR * +#define DPTR ** +#define TPTR *** +#define QPTR **** +#define RVAL && +#define DATA ; +#define LET auto +#define PASS {} +#define CONSTRUCTS : +#define TOPTR(p) p.get() + +USING NAMESPACE STD; + +USING INT = int; +USING DPCHAR = char DPTR; + +CLASS BaseT +BEGIN + PUBLIC INT X; + PUBLIC INT Y; + + BaseT (INT _X, INT _Y) + CONSTRUCTS + X (_X), + Y (_Y) + PASS +END DATA + +CLASS ClassT INHERITS BaseT +BEGIN + PUBLIC INT Z; + PUBLIC INT W; + + ClassT (INT _X, INT _Y, INT _Z, INT _W) + CONSTRUCTS + BaseT (_X, _Y), + Z (_Z), + W (_W) + PASS + + PUBLIC SUB Add () + BEGIN + RETURN (INT (X + Y + Z + W)); + END +END DATA + +DECLARE SUB OPERATOR << (ostream REF, ClassT PTR) RETURNS ostream REF; + +SUB PRINT () +BEGIN + cout << '\n'; +END + +TEMPLATE +SUB PRINT (T RVAL Head, ArgsT RVAL ... Tail) +BEGIN + cout << Head; + PRINT(Tail...); +END + +PROC (INT Argc, DPCHAR Argv) +BEGIN + LET Class = NEW (1, 2, 3, 4); + PRINT(Class -> Add (), ' ', Class -> Z); + PRINT(TOPTR(Class)); + LET Sine3 = sin (3); + IF Sine3 < 3 THEN + PRINT(Sine3, " < 3"); + ELSE + PRINT(Sine3, " >= 3"); + FI + RETURN (INT (0)); +END + +SUB OPERATOR << (ostream REF Out, ClassT PTR Class) RETURNS ostream REF +BEGIN + Out << "X: " << Class -> X << '\n' + << "Y: " << Class -> Y << '\n' + << "Z: " << Class -> Z << '\n' + << "W: " << Class -> W; + RETURN (Out); +END