Skip to content

Commit

Permalink
cst to ast fejler?
Browse files Browse the repository at this point in the history
  • Loading branch information
CarlHejlesen committed May 9, 2024
1 parent 1fea590 commit 8c45044
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,7 @@ public void visitFunctionDefinition(FunctionDefinitionNode node) {
* Vi skal sige hvis arguemtnet er en forkert type.
*/
public void visitFunctionCall(FunctionCallNode node) {
System.out.println("we get in here");
if (!listOfInbuiltFunctions.contains(node.getFunctionName().toString())) {
HashMap<String, Type> localETable = new HashMap<>();
scopes.add(localETable);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -394,24 +394,24 @@ void testTypeCheker14() {
@Test
void testTypeCheker15() {
/*
* Giver ikke fejl vis return er inde i en funktion
* Giver ikke fejl vis return er inde i en funktion
*/
String code = """
var variable:int =4
var y:int =3
var x:int =6
fn plus (y:int)-> int{
return y+x
}
var variable:int =4
var y:int =3
var x:int =6
fn plus (y:int)-> int{
return y+x
}
""";
AstNode astTree = treemaker(code);
""";
AstNode astTree = treemaker(code);

String correct_error = "";
typeChecker.visitor(astTree);
String terminal_Errors = normalizeOutput();
assertEquals(correct_error.trim(), terminal_Errors);
// assertTrue( terminal_Errors.contains(correct_error));
String correct_error = "";
typeChecker.visitor(astTree);
String terminal_Errors = normalizeOutput();
assertEquals(correct_error.trim(), terminal_Errors);
// assertTrue( terminal_Errors.contains(correct_error));
}

@Test
Expand All @@ -420,31 +420,54 @@ void testTypeCheker16() {
* Tester at den smider fejl vis man prøver at retunere den forkerte type.
*/
String code = """
var variable:int =4
var y:int =3
var x:int =6
fn plus (y:int)-> int{
var variable_string:string="hej"
return variable_string
}
var variable:int =4
var y:int =3
var x:int =6
fn plus (y:int)-> int{
var variable_string:string="hej"
return variable_string
}
""";
AstNode astTree = treemaker(code);
""";
AstNode astTree = treemaker(code);

String correct_error = """
Error 1
The return type STRING Does not match the return statement of the function int
""";
typeChecker.visitor(astTree);
String terminal_Errors = normalizeOutput();
assertEquals(correct_error.trim(), terminal_Errors);
// assertTrue( terminal_Errors.contains(correct_error));
String correct_error = """
Error 1
The return type STRING Does not match the return statement of the function int
""";
typeChecker.visitor(astTree);
String terminal_Errors = normalizeOutput();
assertEquals(correct_error.trim(), terminal_Errors);
// assertTrue( terminal_Errors.contains(correct_error));
}

@Test
void testTypeCheker17() {
/*
*
* Smid fejl vis :Valider at argumenterne i functions call stemmer overens med de forventede
* typer i funktionsdeklaration.
*/
String code = """
var variable:int =4
fn plus (y:int)-> int{
return y+2
}
var false_result:int =plus("string")
var true_result:int=plus(5)
""";
AstNode astTree = treemaker(code);

String correct_error = """
Error 1
Function Expected type: , as Argument but got)
""";
typeChecker.visitor(astTree);
String terminal_Errors = normalizeOutput();
assertEquals(correct_error.trim(), terminal_Errors);
// assertTrue( terminal_Errors.contains(correct_error));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# TODO-liste til test af typechecker

## Håndtering af variabler
- [ ] Kast en fejl, hvis en variabel ikke er erklæret.
- [x] Kast en fejl, hvis en forkert type er tildelt til en variabel.
- [x] Sørg for at variabel-redeklaration i samme scope kaster en fejl.
- [x] Tjek for brug af uerklærede variabler.

## Funktionshåndtering
- [x] Sikre at funktioner smider fejl vis forkert returtyper.
- [x] Sikre at funktioner ikke smider fejl vis korrect returtyper.
- [ ] Kontroller at alle nødvendige parametre er angivet i et funktionskald.
- [ ] Smid fejl vis fejler:Valider at argumenterne i functions call stemmer overens med de forventede typer i funktionsdeklaration.
- [ ] Smid ikke fejl hvis dette sker:Smid fejl vis fejler:Valider at argumenterne i functions call stemmer overens med de forventede typer i funktionsdeklaration.
- [x] Kast en fejl for retur-udtryk uden for funktioner.
- [ ] Bekræft at funktioner ikke tillader dobbelt deklarationer.

## Håndtering af arrays
- [ ] Verificer fejlhåndtering ved adgang til indekser uden for grænser.
- [ ] Sørg for typekompatibilitet i array-tildelinger.
- [ ] Kontroller for fejl i array-deklaration med forkerte størrelsestyper.
- [ ] Valider typekonsistens under tildeling af arrayelementer.

## Håndtering af strukturer
- [ ] Valider fejlhåndtering ved adgang til uerklærede strukturfelter.
- [ ] Kontroller for typefejlmatch i tildelinger af strukturfelter.
- [ ] Sørg for at strukturer ikke tillader dobbelte feltnavne.
- [ ] Bekræft at strukturdeklarationer håndterer scope korrekt.

## Generel typekontrol
- [ ] Sørg for typekompatibilitet i binære operationer.
- [ ] Valider boolean-udtryk i kontrolstrukturer (if, while).
- [ ] Tjek for typefejl i relationelle og logiske operationer.

## Fejlhåndtering og beskeder
- [ ] Gennemgå at alle fejlbeskeder er klare og informative.
- [ ] Sørg for at fejltælleren inkrementerer korrekt.

## Diverse
- [ ] Test håndtering af re-deklaration af indbyggede funktioner.
- [ ] Verificer typekontrol for adgang til egenskaber og metodekald.

0 comments on commit 8c45044

Please sign in to comment.