some more work on the first set. I think it might actually be right now
This commit is contained in:
@@ -143,6 +143,8 @@ obj grammer (Object) {
|
|||||||
for (var i = 0; i < rhs.size; i++;) {
|
for (var i = 0; i < rhs.size; i++;) {
|
||||||
var lookahead = first_set_map[rhs[i]]
|
var lookahead = first_set_map[rhs[i]]
|
||||||
if (lookahead.contains(symbol::null_symbol())) {
|
if (lookahead.contains(symbol::null_symbol())) {
|
||||||
|
// remove the null if this is not the last in the rule
|
||||||
|
if (i != rhs.size-1)
|
||||||
lookahead.remove(symbol::null_symbol())
|
lookahead.remove(symbol::null_symbol())
|
||||||
toRet.add(lookahead)
|
toRet.add(lookahead)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ a = b ;
|
|||||||
b = "c":named_c ;
|
b = "c":named_c ;
|
||||||
b = c "d":dname ;
|
b = c "d":dname ;
|
||||||
c = "a" | d ;
|
c = "a" | d ;
|
||||||
d = e post_null post_non_null ;
|
d = e post_null post_non_null inherit_null ;
|
||||||
|
inherit_null = e | post_non_null ;
|
||||||
e = f | ;
|
e = f | ;
|
||||||
f = ;
|
f = ;
|
||||||
post_null = "hi"
|
post_null = "hi" ;
|
||||||
post_non_null = "bye"
|
post_non_null = "bye" ;
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ import symbol:*
|
|||||||
|
|
||||||
fun main():int {
|
fun main():int {
|
||||||
|
|
||||||
/*var a = load_grammer(read_file(string("../krakenGrammer.kgm")))*/
|
var a = load_grammer(read_file(string("../krakenGrammer.kgm")))
|
||||||
/*var a = load_grammer(read_file(string("grammer.kgm")))*/
|
/*var a = load_grammer(read_file(string("grammer.kgm")))*/
|
||||||
var a = load_grammer(read_file(string("grammer2.kgm")))
|
/*var a = load_grammer(read_file(string("grammer2.kgm")))*/
|
||||||
println(a.to_string())
|
println(a.to_string())
|
||||||
var doFirstSet = fun() {
|
var doFirstSet = fun() {
|
||||||
a.calculate_first_set()
|
a.calculate_first_set()
|
||||||
@@ -39,10 +39,10 @@ fun main():int {
|
|||||||
|
|
||||||
var lex = lexer(a.terminals)
|
var lex = lexer(a.terminals)
|
||||||
|
|
||||||
/*lex.set_input(read_file(string("test_grammer.krak")))*/
|
lex.set_input(read_file(string("test_grammer.krak")))
|
||||||
/*lex.set_input(string("ccdahas spacedhas*/
|
/*lex.set_input(string("ccdahas spacedhas*/
|
||||||
/*returndaaaaaaaaaaaaaa"))*/
|
/*returndaaaaaaaaaaaaaa"))*/
|
||||||
lex.set_input(string("hibyed"))
|
/*lex.set_input(string("hibyed"))*/
|
||||||
println("woo lexing:")
|
println("woo lexing:")
|
||||||
range(8).for_each(fun(i: int) { println(lex.next().to_string()); } )
|
range(8).for_each(fun(i: int) { println(lex.next().to_string()); } )
|
||||||
/*range(80).for_each(fun(i: int) { println(lex.next().to_string()); } )*/
|
/*range(80).for_each(fun(i: int) { println(lex.next().to_string()); } )*/
|
||||||
|
|||||||
Reference in New Issue
Block a user