示例#1
0
 private SyntaxNode Factor()
 {
     if (_currentToken == null)
     {
         return null;
     }
     SyntaxNode node = null;
     try
     {
         if (_currentToken.Type == TokenType.LPAREN)
         {
             Match(TokenType.LPAREN);
             node = Exp();
             Match(TokenType.RPAREN);
         }
         else if (_currentToken.Type == TokenType.NUMBER)
         {
             var tokenValue = _currentToken.Value;
             Match(TokenType.NUMBER);
             node = new SyntaxNode()
             {
                 Label = "const (" + tokenValue + ")",
                 Shape = NodeShape.Round
             };
         }
         else if (_currentToken.Type == TokenType.IDENTIFIER)
         {
             var tokenValue = _currentToken.Value;
             Match(TokenType.IDENTIFIER);
             node = new SyntaxNode()
             {
                 Label = "id (" + tokenValue + ")",
                 Shape = NodeShape.Round
             };
         }
     }
     catch (Exception e)
     {
         Error("Something Went Wrong: " + e);
     }
     return node;
 }
示例#2
0
 private SyntaxNode if_stmt()
 {
     if (_currentToken == null)
     {
         return null;
     }
     SyntaxNode node = null;
     try
     {
         Match(TokenType.IF);
         node = new SyntaxNode
         {
             Label = "if",
             Shape = NodeShape.Square
         };
         node.ChildNodes.Add(Exp());
         Match(TokenType.THEN);
         node.ChildNodes.Add(stmt_sequence());
         if (_currentToken != null && _currentToken.Type == TokenType.ELSE)
         {
             Match(TokenType.ELSE);
             node.ChildNodes.Add(stmt_sequence());
         }
         Match(TokenType.END);
     }
     catch (Exception e)
     {
         Error("Something Went Wrong: " + e);
     }
     return node;
 }
示例#3
0
 private SyntaxNode simple_exp()
 {
     if (_currentToken == null)
     {
         return null;
     }
     var node = Term();
     while (_currentToken != null && (_currentToken.Type == TokenType.PLUS 
         || _currentToken.Type == TokenType.MINUS))
     {
         try
         {
             if (_currentToken.Type == TokenType.PLUS)
             {
                 Match(TokenType.PLUS);
                 var newNode = new SyntaxNode
                 {
                     Label = "op (+)",
                     Shape = NodeShape.Round
                 };
                 newNode.ChildNodes.Add(node);
                 newNode.ChildNodes.Add(Term());
                 node = newNode;
             }
             else if (_currentToken.Type == TokenType.MINUS)
             {
                 Match(TokenType.MINUS);
                 var newNode = new SyntaxNode
                 {
                     Label = "op (-)",
                     Shape = NodeShape.Round
                 };
                 newNode.ChildNodes.Add(node);
                 newNode.ChildNodes.Add(Term());
                 node = newNode;
             }
         }
         catch (Exception e)
         {
             Error("Something Went Wrong: " + e);
         }
     }
     return node;
 }
示例#4
0
 private SyntaxNode Term()
 {
     if (_currentToken == null)
     {
         return null;
     }
     var node = Factor();
     while (_currentToken != null && (_currentToken.Type == TokenType.MLT
         || _currentToken.Type == TokenType.DIV))
     {
         try
         {
             if (_currentToken.Type == TokenType.MLT)
             {
                 Match(TokenType.MLT);
                 var newNode = new SyntaxNode
                 {
                     Label = "op (*)",
                     Shape = NodeShape.Round
                 };
                 newNode.ChildNodes.Add(node);
                 newNode.ChildNodes.Add(Factor());
                 node = newNode;
             }
             else if (_currentToken.Type == TokenType.DIV)
             {
                 Match(TokenType.DIV);
                 var newNode = new SyntaxNode
                 {
                     Label = "op (/)",
                     Shape = NodeShape.Round
                 };
                 newNode.ChildNodes.Add(node);
                 newNode.ChildNodes.Add(Factor());
                 node = newNode;
             }
         }
         catch (Exception e)
         {
             Error("Something Went Wrong: " + e);
         }
     }
     return node;
 }
示例#5
0
 private SyntaxNode Exp()
 {
     if (_currentToken == null)
     {
         return null;
     }
     var node = simple_exp();
     try
     {
         if (_currentToken != null && _currentToken.Type == TokenType.LT)
         {
             Match(TokenType.LT);
             var newNode = new SyntaxNode
             {
                 Label = "op (<)",
                 Shape = NodeShape.Round
             };
             newNode.ChildNodes.Add(node);
             newNode.ChildNodes.Add(simple_exp());
             node = newNode;
         }
         else if (_currentToken != null && _currentToken.Type == TokenType.EQ)
         {
             Match(TokenType.EQ);
             var newNode = new SyntaxNode
             {
                 Label = "op (=)",
                 Shape = NodeShape.Round
             };
             newNode.ChildNodes.Add(node);
             newNode.ChildNodes.Add(simple_exp());
             node = newNode;
         }
     }
     catch (Exception e)
     {
         Error("Something Went Wrong: " + e);
     }
     return node;
 }
示例#6
0
 private SyntaxNode write_stmt()
 {
     if (_currentToken == null)
     {
         return null;
     }
     SyntaxNode node = null;
     try
     {
         Match(TokenType.WRITE);
         node = new SyntaxNode
         {
             Label = "write",
             Shape = NodeShape.Square
         };
         node.ChildNodes.Add(Exp());
         
     }
     catch (Exception e)
     {
         Error("Something Went Wrong: " + e);
     }
     return node;
 }
示例#7
0
 private SyntaxNode read_stmt()
 {
     if (_currentToken == null)
     {
         return null;
     }
     SyntaxNode node = null;
     try
     {
         Match(TokenType.READ);
         string tokenValue = _currentToken.Value;
         Match(TokenType.IDENTIFIER);
         node = new SyntaxNode
         {
             Label = "read (" + tokenValue + ")",
             Shape = NodeShape.Square
         };
     }
     catch (Exception e)
     {
         Error("Something Went Wrong: " + e);
     }
     return node;
 }
示例#8
0
 private SyntaxNode assign_stmt()
 {
     if (_currentToken == null)
     {
         return null;
     }
     SyntaxNode node = null;
     try
     {
         string tokenValue = _currentToken.Value;
         Match(TokenType.IDENTIFIER);
         node = new SyntaxNode
         {
             Label = "assign (" + tokenValue + ")",
             Shape = NodeShape.Square
         };
         Match(TokenType.ASSIGN);
         node.ChildNodes.Add(Exp());
     }
     catch (Exception e)
     {
         Error("Something Went Wrong: " + e);
     }
     return node;
 }
示例#9
0
 private SyntaxNode repeat_stmt()
 {
     if (_currentToken == null)
     {
         return null;
     }
     SyntaxNode node = null;
     try
     {
         Match(TokenType.REPEAT);
         node = new SyntaxNode
         {
             Label = "repeat",
             Shape = NodeShape.Square
         };
         node.ChildNodes.Add(stmt_sequence());
         Match(TokenType.UNTIL);
         node.ChildNodes.Add(Exp());
     }
     catch (Exception e)
     {
         Error("Something Went Wrong: " + e);
     }
     return node;
 }