Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Leoni Thaben
Compilerbau_3
Commits
01552cf9
Commit
01552cf9
authored
Jun 15, 2022
by
Leoni Thaben
Browse files
more bug fixes
parent
df3cfec8
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/lexer.rs
View file @
01552cf9
...
...
@@ -413,7 +413,7 @@ impl<'a> C1Parser<'a>{
Some
(
C1Token
::
Identifier
)
=>
{
self
.eat
();
self
.chek_and_eat
(
C1Token
::
LeftParenthesis
);
self
.chek_and_eat
(
C1Token
::
Lef
tParenthesis
);
self
.chek_and_eat
(
C1Token
::
Righ
tParenthesis
);
},
_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
::
Lef
tParenthesis
);
self
.chek_and_eat
(
C1Token
::
Righ
tParenthesis
);
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
=>
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment