Quote:1>------ Build started: Project: Compiler2, Configuration: Debug Win32 ------ 1> Source.cpp 1>Source.cpp(21): error C2143: syntax error : missing ';' before '^' 1>Source.cpp(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>Source.cpp(28): error C2143: syntax error : missing ';' before '^' 1>Source.cpp(28): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>Source.cpp(36): error C2143: syntax error : missing ';' before '^' 1>Source.cpp(36): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>Source.cpp(44): error C2143: syntax error : missing ';' before '^' 1>Source.cpp(44): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>Source.cpp(45): error C2143: syntax error : missing ';' before '^' 1>Source.cpp(45): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>Source.cpp(101): error C2146: syntax error : missing ';' before identifier 'Op' 1>Source.cpp(101): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
// AST.cs using namespace System; /* <stmt> := var <ident> = <expr> | <ident> = <expr> | for <ident> = <expr> to <expr> do <stmt> end | read_int <ident> | print <expr> | <stmt> ; <stmt> */ public ref class Stmt abstract { }; // var <ident> = <expr> public ref class DeclareVar : Stmt { public: String^ Ident; Expr^ expr; }; // print <expr> public ref class Print : Stmt { public: Expr^ Expr; }; // <ident> = <expr> public ref class Assign : Stmt { public: String^ Ident; Expr^ Expr; }; // for <ident> = <expr> to <expr> do <stmt> end public ref class ForLoop : Stmt { public: String^ Ident; Expr^ From; Expr^ To; Stmt^ Body; }; // read_int <ident> public ref class ReadInt : Stmt { public: String^ Ident; }; // <stmt> ; <stmt> public ref class Sequence : Stmt { public: Stmt^ First; Stmt^ Second; }; /* <expr> := <string> * | <int> * | <arith_expr> * | <ident> */ public ref class Expr abstract { }; // <string> := " <string_elem>* " public ref class StringLiteral : Expr { public: String^ Value; }; // <int> := <digit>+ public ref class IntLiteral : Expr { public: int Value; }; // <ident> := <char> <ident_rest>* // <ident_rest> := <char> | <digit> public ref class Variable : Expr { public: String^ Ident; }; // <bin_expr> := <expr> <bin_op> <expr> public ref class BinExpr : Expr { public: Expr^ Left; Expr^ Right; BinOp Op; }; // <bin_op> := + | - | * | / public enum class BinOp { Add, Sub, Mul, Div };
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)