Little break work on grammer, added Object trait to other stdlib objects
This commit is contained in:
34
stdlib/grammer.krak
Normal file
34
stdlib/grammer.krak
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import string
|
||||||
|
import vector
|
||||||
|
import set
|
||||||
|
import symbol
|
||||||
|
|
||||||
|
obj rule (Object) {
|
||||||
|
var lhs: symbol::symbol
|
||||||
|
var rhs: vector::vector<symbol::symbol>
|
||||||
|
var position: int
|
||||||
|
var lookahead: set::set<symbol::symbol>
|
||||||
|
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -4,7 +4,7 @@ import string
|
|||||||
import vector
|
import vector
|
||||||
import util
|
import util
|
||||||
|
|
||||||
obj lexer {
|
obj lexer (Object) {
|
||||||
var regs: vector::vector<regex::regex>
|
var regs: vector::vector<regex::regex>
|
||||||
var input: string::string
|
var input: string::string
|
||||||
var position: int
|
var position: int
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ fun map<T,U>(key:T, value:U): map<T,U> {
|
|||||||
return toRet
|
return toRet
|
||||||
}
|
}
|
||||||
|
|
||||||
obj map<T,U> {
|
obj map<T,U> (Object) {
|
||||||
var keys: vector::vector<T>
|
var keys: vector::vector<T>
|
||||||
var values: vector::vector<U>
|
var values: vector::vector<U>
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ fun regex(in: string::string):regex {
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
obj regexState(Object) {
|
obj regexState (Object) {
|
||||||
var character: char
|
var character: char
|
||||||
var next_states: vector::vector<regexState*>
|
var next_states: vector::vector<regexState*>
|
||||||
fun construct(charIn:char): regexState* {
|
fun construct(charIn:char): regexState* {
|
||||||
@@ -40,7 +40,7 @@ obj regexState(Object) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
obj regex(Object) {
|
obj regex (Object) {
|
||||||
var regexString: string::string
|
var regexString: string::string
|
||||||
var begin: regexState*
|
var begin: regexState*
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ fun from_vector<T>(items: vector::vector<T>): set<T> {
|
|||||||
return toRet
|
return toRet
|
||||||
}
|
}
|
||||||
|
|
||||||
obj set<T> {
|
obj set<T> (Object) {
|
||||||
var data: vector::vector<T>
|
var data: vector::vector<T>
|
||||||
fun construct() {
|
fun construct() {
|
||||||
data.construct()
|
data.construct()
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ fun symbol(nameIn: string::string, terminalIn: bool, dataIn: string::string): sy
|
|||||||
return toRet
|
return toRet
|
||||||
}
|
}
|
||||||
|
|
||||||
obj symbol {
|
obj symbol (Object) {
|
||||||
var data: string::string
|
var data: string::string
|
||||||
var name: string::string
|
var name: string::string
|
||||||
var terminal: bool
|
var terminal: bool
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ fun make_pair<T,U>(first: T, second: U): pair<T,U> {
|
|||||||
return it
|
return it
|
||||||
}
|
}
|
||||||
|
|
||||||
obj pair<T,U>(Object) {
|
obj pair<T,U> (Object) {
|
||||||
var first: T
|
var first: T
|
||||||
var second: U
|
var second: U
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user