Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. class line_t: object
  2. lineNumber = 0
  3. stmts = []
  4. tokens = []
  5. destruct = {
  6. local i;
  7.  
  8. for(i := 1; i <= length(stmts); i++) {
  9. delete stmts[i];
  10. }
  11.  
  12. for(i := 1; i <= length(tokens); i++) {
  13. delete tokens[i];
  14. }
  15. }
  16. ;
  17.  
  18. parseStatement: function(parse) {
  19. local stmt;
  20.  
  21. if((parse.token.type = TK_IDENT)) {
  22. if((upper(parse.token.s) = 'QUIT')) {
  23. parse.nextToken;
  24. return new stmtQuit;
  25. } else if((upper(parse.token.s) = 'LIST')) {
  26. parse.nextToken;
  27. return new stmtList;
  28. } else if((upper(parse.token.s) = 'CLEAR')) {
  29. parse.nextToken;
  30. return new stmtClear;
  31. } else if((upper(parse.token.s) = 'RUN')) {
  32. parse.nextToken;
  33. return new stmtRun;
  34. } else if((upper(parse.token.s) = 'PRINT')) {
  35. parse.nextToken;
  36. stmt := new stmtPrint;
  37. stmt.expr := parseExpression(parse);
  38. return stmt;
  39. } else if((upper(parse.token.s) = 'GOTO')) {
  40. parse.nextToken;
  41. stmt := new stmtGoto;
  42. stmt.expr := parseExpression(parse);
  43. return stmt;
  44. } else if((upper(parse.token.s) = 'LET')) {
  45. parse.nextToken;
  46. stmt := new stmtLet;
  47. if(parse.token.type <> TK_IDENT) {
  48. "Bad LET expression!\n";
  49. delete stmt;
  50. return nil;
  51. }
  52. stmt.var := parse.token.s;
  53. parse.nextToken;
  54. if(parse.token.s <> '=') {
  55. "Expected: '='\n";
  56. delete stmt;
  57. return nil;
  58. }
  59. parse.nextToken;
  60. stmt.expr := parseExpression(parse);
  61. return stmt;
  62. }
  63. }
  64.  
  65. "Expected: keyword, found '"; say(parse.token.s); "'\n";
  66. parse.nextToken;
  67.  
  68. return nil;
  69. }
  70.  
  71. parseLine: function(tks) {
  72. local parse := new parser_t;
  73. local line = new line_t;
  74.  
  75. line.tokens := tks;
  76.  
  77. parse.tokens := tks;
  78. parse.nextToken;
  79.  
  80. if(parse.token.type = TK_NUMBER) {
  81. line.lineNumber := cvtnum(parse.token.s);
  82. parse.nextToken;
  83. }
  84.  
  85. line.stmts += parseStatement(parse);
  86.  
  87. while(parse.token.type <> nil) {
  88. "Syntax error, near : ";
  89. say( parse.token.s );
  90. "\n";
  91. break;
  92. parse.nextToken;
  93. }
  94.  
  95. delete parse;
  96.  
  97. return line;
  98.  
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement