[add] Added AST types.
This commit is contained in:
parent
6c34b1d24d
commit
6886416a30
51
sjscript/src/sjscript/Expression.d
Normal file
51
sjscript/src/sjscript/Expression.d
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/// License: MIT
|
||||||
|
module sjscript.Expression;
|
||||||
|
|
||||||
|
import std.variant;
|
||||||
|
|
||||||
|
///
|
||||||
|
struct Expression {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
Term opBinary(string op : "+", T)(T rhs) const {
|
||||||
|
return Expression(terms ~ rhs);
|
||||||
|
}
|
||||||
|
///
|
||||||
|
Term opBinary(string op : "-", T)(T rhs) const {
|
||||||
|
return Expression(terms ~ rhs*(-1f));
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
Term[] terms;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
struct Term {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
alias Value = Algebraic!(float, string, FunctionCall);
|
||||||
|
|
||||||
|
///
|
||||||
|
Term opBinary(string op : "*", T)(T rhs) const {
|
||||||
|
return Term(multipled_values ~ Value(rhs), divided_values);
|
||||||
|
}
|
||||||
|
///
|
||||||
|
Term opBinary(string op : "/", T)(T rhs) const {
|
||||||
|
return Term(multipled_values, divided_values ~ Value(rhs));
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
Value[] multipled_values;
|
||||||
|
///
|
||||||
|
Value[] divided_values;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
struct FunctionCall {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
string name;
|
||||||
|
|
||||||
|
///
|
||||||
|
Expression[] args;
|
||||||
|
}
|
53
sjscript/src/sjscript/ParametersBlock.d
Normal file
53
sjscript/src/sjscript/ParametersBlock.d
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/// License: MIT
|
||||||
|
module sjscript.ParametersBlock;
|
||||||
|
|
||||||
|
import sjscript.Expression,
|
||||||
|
sjscript.Token;
|
||||||
|
|
||||||
|
///
|
||||||
|
struct ParametersBlock {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
string name;
|
||||||
|
|
||||||
|
///
|
||||||
|
Period period;
|
||||||
|
|
||||||
|
///
|
||||||
|
Parameter[] parameters;
|
||||||
|
|
||||||
|
///
|
||||||
|
TokenPos pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
struct Period {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
size_t start;
|
||||||
|
|
||||||
|
///
|
||||||
|
size_t end;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
enum ParameterType {
|
||||||
|
Assign,
|
||||||
|
AddAssign,
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
struct Parameter {
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
string name;
|
||||||
|
|
||||||
|
///
|
||||||
|
ParameterType type;
|
||||||
|
|
||||||
|
///
|
||||||
|
Expression rhs;
|
||||||
|
|
||||||
|
///
|
||||||
|
TokenPos pos;
|
||||||
|
}
|
@ -7,6 +7,9 @@ import std.algorithm,
|
|||||||
|
|
||||||
import dast.tokenize;
|
import dast.tokenize;
|
||||||
|
|
||||||
|
///
|
||||||
|
alias TokenPos = dast.tokenize.TokenPos;
|
||||||
|
|
||||||
///
|
///
|
||||||
enum TokenType {
|
enum TokenType {
|
||||||
@TextFuncMatcher!((string text, string next) {
|
@TextFuncMatcher!((string text, string next) {
|
||||||
|
Reference in New Issue
Block a user