Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class line_t: object
- lineNumber = 0
- stmts = []
- tokens = []
- destruct = {
- local i;
- for(i := 1; i <= length(stmts); i++) {
- delete stmts[i];
- }
- for(i := 1; i <= length(tokens); i++) {
- delete tokens[i];
- }
- }
- ;
- parseStatement: function(parse) {
- local stmt;
- if((parse.token.type = TK_IDENT)) {
- if((upper(parse.token.s) = 'QUIT')) {
- parse.nextToken;
- return new stmtQuit;
- } else if((upper(parse.token.s) = 'LIST')) {
- parse.nextToken;
- return new stmtList;
- } else if((upper(parse.token.s) = 'CLEAR')) {
- parse.nextToken;
- return new stmtClear;
- } else if((upper(parse.token.s) = 'RUN')) {
- parse.nextToken;
- return new stmtRun;
- } else if((upper(parse.token.s) = 'PRINT')) {
- parse.nextToken;
- stmt := new stmtPrint;
- stmt.expr := parseExpression(parse);
- return stmt;
- } else if((upper(parse.token.s) = 'GOTO')) {
- parse.nextToken;
- stmt := new stmtGoto;
- stmt.expr := parseExpression(parse);
- return stmt;
- } else if((upper(parse.token.s) = 'LET')) {
- parse.nextToken;
- stmt := new stmtLet;
- if(parse.token.type <> TK_IDENT) {
- "Bad LET expression!\n";
- delete stmt;
- return nil;
- }
- stmt.var := parse.token.s;
- parse.nextToken;
- if(parse.token.s <> '=') {
- "Expected: '='\n";
- delete stmt;
- return nil;
- }
- parse.nextToken;
- stmt.expr := parseExpression(parse);
- return stmt;
- }
- }
- "Expected: keyword, found '"; say(parse.token.s); "'\n";
- parse.nextToken;
- return nil;
- }
- parseLine: function(tks) {
- local parse := new parser_t;
- local line = new line_t;
- line.tokens := tks;
- parse.tokens := tks;
- parse.nextToken;
- if(parse.token.type = TK_NUMBER) {
- line.lineNumber := cvtnum(parse.token.s);
- parse.nextToken;
- }
- line.stmts += parseStatement(parse);
- while(parse.token.type <> nil) {
- "Syntax error, near : ";
- say( parse.token.s );
- "\n";
- break;
- parse.nextToken;
- }
- delete parse;
- return line;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement