1
0
Fork 0
master
Marrub 2016-12-01 20:17:27 -05:00
parent 8831696c79
commit 40dd6079f5
1 changed files with 113 additions and 0 deletions

113
basic.cpp Normal file
View File

@ -0,0 +1,113 @@
#include <iostream>
#include <cmath>
#include <memory>
#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<TYPENAME T, VARARG ArgsT>
SUB PRINT (T RVAL Head, ArgsT RVAL ... Tail)
BEGIN
cout << Head;
PRINT(Tail...);
END
PROC (INT Argc, DPCHAR Argv)
BEGIN
LET Class = NEW <ClassT> (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