diff --git a/stdlib/grammer.krak b/stdlib/grammer.krak new file mode 100644 index 0000000..8062431 --- /dev/null +++ b/stdlib/grammer.krak @@ -0,0 +1,34 @@ +import string +import vector +import set +import symbol + +obj rule (Object) { + var lhs: symbol::symbol + var rhs: vector::vector + var position: int + var lookahead: set::set + + fun construct(): rule* { + lhs.construct() + rhs.construct() + position = 0 + lookahead.construct() + } + fun copy_construct(old: rule*) { + lhs.copy_construct(&rule->lhs) + rhs.copy_construct(&rule->rhs) + position = rule->position + lookahead.copy_construct(&rule->lookahead) + } + fun operator=(other: rule) { + destruct() + copy_construct(&other) + } + fun destruct() { + lhs.destruct() + rhs.destruct() + lookahead.destruct() + } +} + diff --git a/stdlib/lexer.krak b/stdlib/lexer.krak index e30a371..9ab8e3a 100644 --- a/stdlib/lexer.krak +++ b/stdlib/lexer.krak @@ -4,7 +4,7 @@ import string import vector import util -obj lexer { +obj lexer (Object) { var regs: vector::vector var input: string::string var position: int diff --git a/stdlib/map.krak b/stdlib/map.krak index c03aa51..487b86c 100644 --- a/stdlib/map.krak +++ b/stdlib/map.krak @@ -11,7 +11,7 @@ fun map(key:T, value:U): map { return toRet } -obj map { +obj map (Object) { var keys: vector::vector var values: vector::vector diff --git a/stdlib/regex.krak b/stdlib/regex.krak index b92f267..e40955a 100644 --- a/stdlib/regex.krak +++ b/stdlib/regex.krak @@ -14,7 +14,7 @@ fun regex(in: string::string):regex { return out } -obj regexState(Object) { +obj regexState (Object) { var character: char var next_states: vector::vector fun construct(charIn:char): regexState* { @@ -40,7 +40,7 @@ obj regexState(Object) { } } -obj regex(Object) { +obj regex (Object) { var regexString: string::string var begin: regexState* diff --git a/stdlib/set.krak b/stdlib/set.krak index c9ba9b9..b31da28 100644 --- a/stdlib/set.krak +++ b/stdlib/set.krak @@ -18,7 +18,7 @@ fun from_vector(items: vector::vector): set { return toRet } -obj set { +obj set (Object) { var data: vector::vector fun construct() { data.construct() diff --git a/stdlib/symbol.krak b/stdlib/symbol.krak index 65f04de..64e2484 100644 --- a/stdlib/symbol.krak +++ b/stdlib/symbol.krak @@ -20,7 +20,7 @@ fun symbol(nameIn: string::string, terminalIn: bool, dataIn: string::string): sy return toRet } -obj symbol { +obj symbol (Object) { var data: string::string var name: string::string var terminal: bool diff --git a/stdlib/util.krak b/stdlib/util.krak index e5e7c03..20a2328 100644 --- a/stdlib/util.krak +++ b/stdlib/util.krak @@ -17,7 +17,7 @@ fun make_pair(first: T, second: U): pair { return it } -obj pair(Object) { +obj pair (Object) { var first: T var second: U