Ejemplo n.º 1
0
        static public (Statement, string) parseStatement(ref lexer.Lexer Lexer)
        {
            Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED);
            switch (Lexer.LookAhead())
            {
            case lexer.TOKEN_PRINT:
                return(parsePrint(ref Lexer));

            case lexer.TOKEN_VAR_PREFIX:
                return(parseAssignment(ref Lexer));

            default:
                return(null, "parseStatement(): unknown Statement.");
            }
        }
Ejemplo n.º 2
0
        //Statement ::= Print | Assignment
        static public (List <Statement>, string) parseStatements(ref lexer.Lexer Lexer)
        {
            List <Statement> statements = new List <Statement>();

            while (!isSourceCodeEnd(Lexer.LookAhead()))
            {
                var(statement, error) = parseStatement(ref Lexer);
                if (error != null)
                {
                    return(null, error);
                }
                statements.Add(statement);
            }
            return(statements, null);
        }
Ejemplo n.º 3
0
        //String ::= '"' '"' Ignored | '"' StringCharacter '"' Ignored
        static public (string, string) parseString(ref lexer.Lexer Lexer)
        {
            string str = "";

            switch (Lexer.LookAhead())
            {
            case lexer.TOKEN_DUOQUOTE:
                Lexer.NextTokenIs(lexer.TOKEN_DUOQUOTE);
                Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED);
                return(str, null);

            case lexer.TOKEN_QUOTE:
                Lexer.NextTokenIs(lexer.TOKEN_QUOTE);
                str = Lexer.scanBeforeToken(lexer.tokenNameMap[lexer.TOKEN_QUOTE]);
                Lexer.NextTokenIs(lexer.TOKEN_QUOTE);
                Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED);
                return(str, null);

            default:
                return(null, "parseString(): not a string.");
            }
        }