Commit 01552cf9 authored by Leoni Thaben's avatar Leoni Thaben
Browse files

more bug fixes

parent df3cfec8
......@@ -413,7 +413,7 @@ impl<'a> C1Parser<'a>{
Some(C1Token::Identifier) => {
self.eat();
self.chek_and_eat(C1Token::LeftParenthesis);
self.chek_and_eat(C1Token::LeftParenthesis);
self.chek_and_eat(C1Token::RightParenthesis);
},
_other => {
let linenumber = self.lexer.current_line_number().unwrap().to_string();
......@@ -449,10 +449,7 @@ impl<'a> C1Parser<'a>{
// TODO: hier fehlt noch die follows menge statementlist ist epsilon ableitbar
// vermutlich eifach im other nicht teun und keine fehlerbehandlung
// dann die Fehlerbehandlung der nächsten höheren funktion überlassen
_other => {
//let linenumber = self.lexer.current_line_number().unwrap().to_string();
//self.result = Result::Err("expekted {, if, return, Print or identifier got: ".to_string() + self.lexer.current_text().unwrap() + &"at line".to_string() + &linenumber)
}, // TODO: Fehlerbehandlung hinzufügen
_other => {}, // TODO: Fehlerbehandlung hinzufügen
};
}
}
......@@ -482,7 +479,6 @@ impl<'a> C1Parser<'a>{
match self.lexer.current_token() {
Some(C1Token::KwIf) => {
self.ifstatement();
self.chek_and_eat(C1Token::Semicolon);
},
Some(C1Token::KwReturn) => {
self.returnstatement();
......@@ -503,7 +499,7 @@ impl<'a> C1Parser<'a>{
},
_other => {
let linenumber = self.lexer.current_line_number().unwrap().to_string();
self.result = Result::Err("expekted == or ( got: ".to_string() + self.lexer.current_text().unwrap() + "at line" + &linenumber)
self.result = Result::Err("expekted = or ( got: ".to_string() + self.lexer.peek_text().unwrap() + "at line" + &linenumber)
},
};
},
......@@ -518,10 +514,11 @@ impl<'a> C1Parser<'a>{
fn ifstatement(&mut self) {
if self.result == Ok(()){
match self.lexer.current_token() {
Some(C1Token::KwIf) => {self.eat();
Some(C1Token::KwIf) => {
self.eat();
self.chek_and_eat(C1Token::LeftParenthesis);
self.assignment();
self.chek_and_eat(C1Token::LeftParenthesis);
self.chek_and_eat(C1Token::RightParenthesis);
self.block();
},
_other => {
......@@ -575,7 +572,7 @@ impl<'a> C1Parser<'a>{
fn r#type(&mut self) {
if self.result == Ok(()){
match &self.lexer.current_token() {
match self.lexer.current_token() {
Some(C1Token::KwBoolean) => self.eat(),
Some(C1Token::KwFloat) => self.eat(),
Some(C1Token::KwInt) => self.eat(),
......@@ -590,7 +587,7 @@ impl<'a> C1Parser<'a>{
fn statassignment(&mut self) {
if self.result == Ok(()){
match&self.lexer.current_token() {
match self.lexer.current_token() {
Some(C1Token::Identifier) => {
self.eat();
self.chek_and_eat(C1Token::Assign);
......@@ -674,10 +671,7 @@ impl<'a> C1Parser<'a>{
Some(C1Token::GreaterEqual) => {self.eat(); self.simpexpr();},
Some(C1Token::Less) => {self.eat(); self.simpexpr();},
Some(C1Token::Greater) => {self.eat(); self.simpexpr();},
// TODO: hier fehlt noch die follows menge helpexpr ist epsilon ableitbar
// vermutlich eifach im other nicht teun und keine fehlerbehandlung
// dann die Fehlerbehandlung der nächsten höheren funktion überlassen
_other => {}, // TODO: Fehlerbehanddlung hinzufügen
_other => {},
};
}
}
......@@ -781,22 +775,19 @@ impl<'a> C1Parser<'a>{
Some(C1Token::Asterisk) => {
self.eat();
self.factor();
self.helpterm();
},
Some(C1Token::Slash) => {
self.eat();
self.factor();
self.helpterm();
},
Some(C1Token::And) => {
self.eat();
self.factor();
self.helpterm();
},
// TODO: hier fehlt noch die follows menge helpterm ist epsilon ableitbar
// vermutlich eifach im other nicht teun und keine fehlerbehandlung
// dann die Fehlerbehandlung der nächsten höheren funktion überlassen
_other => {}, // TODO: fehlerbehandlung hinzufügen
_other => {
let linenumber = self.lexer.current_line_number().unwrap().to_string();
self.result = Result::Err("expekted *, /, or & got: ".to_string() + self.lexer.current_text().unwrap() + "at line" + &linenumber)
},
};
}
}
......@@ -839,7 +830,12 @@ impl<'a> C1Parser<'a>{
self.eat()
}else{
let linenumber = self.lexer.current_line_number().unwrap().to_string();
self.result = Result::Err(String::from("expekted another token got: ".to_string() + "at line: " + &linenumber + self.lexer.current_text().unwrap()));
let mut resultstring = "expekted another token got: ".to_string();
resultstring.push_str(self.lexer.current_text().unwrap());
resultstring.push_str("at line: ");
resultstring.push_str(&linenumber);
self.result = Result::Err(resultstring);
}
},
None => {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment