dopp_parser.d 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import dopp;
  2. // Parser checks tokens for correct program
  3. //export void parse(Token[] tokens){
  4. export string parse(Token[] tokens){
  5. string result;
  6. auto i = 0;
  7. while(i < tokens.length){
  8. /+
  9. if(tokens[i].type == TokenType.Keyword && tokens[i].lexeme == "if"){
  10. if(i + 2 < tokens.length && tokens[i+1].type == TokenType.Symbol && tokens[i+1].lexeme == "("){ // if begins
  11. writeln("Found 'if' statement");
  12. i++; // goto (
  13. // here parsing inside ( .. ) can be extended
  14. while(i < tokens.length && tokens[i].lexeme != ")"){
  15. i++;
  16. }
  17. if(i < tokens.length && tokens[i].lexeme == ")"){
  18. i++; // goto )
  19. if(i < tokens.length && tokens[i].lexeme == "{"){ // block of code
  20. writeln("Opening block for if statement");
  21. // here parsing inside { .. } can be extended
  22. while(i < tokens.length && tokens[i].lexeme != "}"){
  23. i++;
  24. }
  25. if(i < tokens.length && tokens[i].lexeme == "}"){
  26. writeln("Closing block for if statement");
  27. i++;
  28. }else{
  29. writeln("Error: Missing closing brace for if block");
  30. return;
  31. }
  32. }else{
  33. writeln("Error: Expected opening brace after if condition");
  34. return;
  35. }
  36. }else{
  37. writeln("Error: Missing closing parenthesis for if condition");
  38. return;
  39. }
  40. }else{
  41. writeln("Error: Invalid if statement syntax");
  42. return;
  43. }
  44. }
  45. +/
  46. if(tokens[i].type == TokenType.Comment_Line){
  47. result ~= " " ~ tokens[i].lexeme; // add whitespace before single line comment
  48. }else if(tokens[i].lexeme == "="){
  49. result ~= " " ~ tokens[i].lexeme ~ " "; // add whitespace before and after =
  50. }else{
  51. result ~= tokens[i].lexeme; // for just show all text
  52. }
  53. i++; // goto next token
  54. }
  55. return result;
  56. }