Esempio n. 1
0
        //Print ::= "print" "(" Ignored Variable Ignored ")" Ignored
        static public (Print, string) parsePrint(ref lexer.Lexer Lexer)
        {
            Print  print = new Print();
            string error;

            print.LineNum = Lexer.GetLineNum();
            Lexer.NextTokenIs(lexer.TOKEN_PRINT);
            Lexer.NextTokenIs(lexer.TOKEN_LEFT_PAREN);
            Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED);
            (print.Variable, error) = parseVariable(ref Lexer);
            if (error != null)
            {
                return(print, error);
            }
            Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED);
            Lexer.NextTokenIs(lexer.TOKEN_RIGHT_PAREN);
            Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED);
            return(print, null);
        }
Esempio n. 2
0
 static public (SourceCode, string) parse(string code)
 {
     lexer.Lexer Lexer = lexer.NewLexer(code);
     var(sourceCode, error) = parseSourceCode(ref Lexer);
     if (error != null)
     {
         return(sourceCode, error);
     }
     Lexer.NextTokenIs(lexer.TOKEN_EOF);
     return(sourceCode, null);
 }
Esempio 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.");
            }
        }
Esempio n. 4
0
        //Variable ::= "$" Name Ignored
        static public (Variable, string) parseVariable(ref lexer.Lexer Lexer)
        {
            Variable variable = new Variable();
            string   error;

            variable.LineNum = Lexer.GetLineNum();
            Lexer.NextTokenIs(lexer.TOKEN_VAR_PREFIX);
            (variable.Name, error) = parseName(ref Lexer);
            if (error != null)
            {
                return(variable, error);
            }
            Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED);
            return(variable, null);
        }
Esempio n. 5
0
        //Assignment  ::= Variable Ignored "=" Ignored String Ignored
        static public (Assignment, string) parseAssignment(ref lexer.Lexer Lexer)
        {
            Assignment assignment = new Assignment();
            string     error;

            assignment.LineNum           = Lexer.GetLineNum();
            (assignment.Variable, error) = parseVariable(ref Lexer);
            if (error != null)
            {
                return(assignment, error);
            }
            Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED);
            Lexer.NextTokenIs(lexer.TOKEN_EQUAL);
            Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED);
            (assignment.String, error) = parseString(ref Lexer);
            if (error != null)
            {
                return(assignment, error);
            }
            Lexer.LookAheadAndSkip(lexer.TOKEN_IGNORED);
            return(assignment, null);
        }
Esempio n. 6
0
 //Name ::= [_A-Za-z][_0-9A-Za-z]*
 static public (string, string) parseName(ref lexer.Lexer Lexer)
 {
     var(_, name) = Lexer.NextTokenIs(lexer.TOKEN_NAME);
     return(name, null);
 }