dopp_parser.d 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import dopp;
  2. // Parser checks tokens for correct program
  3. export void parse(Token[] tokens){
  4. auto i = 0;
  5. while(i < tokens.length){
  6. if(tokens[i].type == TokenType.Keyword && tokens[i].lexeme == "if"){
  7. if(i + 2 < tokens.length && tokens[i+1].type == TokenType.Symbol && tokens[i+1].lexeme == "("){ // if begins
  8. writeln("Found 'if' statement");
  9. i++; // goto (
  10. // here parsing inside ( .. ) can be extended
  11. while(i < tokens.length && tokens[i].lexeme != ")"){
  12. i++;
  13. }
  14. if(i < tokens.length && tokens[i].lexeme == ")"){
  15. i++; // goto )
  16. if(i < tokens.length && tokens[i].lexeme == "{"){ // block of code
  17. writeln("Opening block for if statement");
  18. // here parsing inside { .. } can be extended
  19. while(i < tokens.length && tokens[i].lexeme != "}"){
  20. i++;
  21. }
  22. if(i < tokens.length && tokens[i].lexeme == "}"){
  23. writeln("Closing block for if statement");
  24. i++;
  25. }else{
  26. writeln("Error: Missing closing brace for if block");
  27. return;
  28. }
  29. }else{
  30. writeln("Error: Expected opening brace after if condition");
  31. return;
  32. }
  33. }else{
  34. writeln("Error: Missing closing parenthesis for if condition");
  35. return;
  36. }
  37. }else{
  38. writeln("Error: Invalid if statement syntax");
  39. return;
  40. }
  41. }
  42. i++; // goto next token
  43. }
  44. }