private SyntaxTreeNode AddOp() { SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken }; if (curToken.TokenType == TokenType.Plus) Match(TokenType.Plus); else if (curToken.TokenType == TokenType.Minus) Match(TokenType.Minus); return node; }
private SyntaxTreeNode AssignStatement() { SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode(); if (curToken.TokenType == TokenType.Identifier) { node.Left = new SyntaxTreeBinaryNode() { Token = curToken }; Match(TokenType.Identifier); } if (curToken.TokenType == TokenType.Assignment) { node.Token = curToken; Match(TokenType.Assignment); } node.Right = Expression(); return node; }
private SyntaxTreeNode ComparisonOp() { SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken }; if (curToken.TokenType == TokenType.Greater) Match(TokenType.Greater); else if (curToken.TokenType == TokenType.LessThan) Match(TokenType.LessThan); else if (curToken.TokenType == TokenType.LessThanOrEqual) Match(TokenType.LessThanOrEqual); else if (curToken.TokenType == TokenType.GreaterThanOrEqual) Match(TokenType.GreaterThanOrEqual); else if (curToken.TokenType == TokenType.Equal) Match(TokenType.Equal); return node; }
private SyntaxTreeNode Term() { SyntaxTreeNode node = Factor(); while (curToken.TokenType == TokenType.Multiply || curToken.TokenType == TokenType.Division) { SyntaxTreeBinaryNode temp = new SyntaxTreeBinaryNode() { Token = curToken }; temp.Left = node; Match(curToken.TokenType); temp.Right = Factor(); node = temp; } return node; }
private SyntaxTreeNode WriteStatement() { SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken }; Match(TokenType.Write); node.Left = Expression(); return node; }
private SyntaxTreeNode RepeatStatement() { SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken }; Match(TokenType.Repeat); SyntaxTreeNode statements = StatementSequence(); Match(TokenType.Until); SyntaxTreeNode condition = Expression(); node.Left = condition; node.Right = statements; return node; }
private SyntaxTreeNode SimpleExpression() { SyntaxTreeNode node = Term(); while (curToken.TokenType == TokenType.Plus || curToken.TokenType == TokenType.Minus) { SyntaxTreeBinaryNode temp = new SyntaxTreeBinaryNode() { Token = curToken }; temp.Left = node; Match(curToken.TokenType); temp.Right = Term(); node = temp; } return node; }
private SyntaxTreeNode ReadStatement() { SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken }; Match(TokenType.Read); if (curToken.TokenType == TokenType.Identifier) { node.Left = new SyntaxTreeBinaryNode() { Token = curToken }; Match(TokenType.Identifier); } return node; }
private SyntaxTreeNode MulOp() { SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken }; if (curToken.TokenType == TokenType.Multiply) Match(TokenType.Multiply); else if (curToken.TokenType == TokenType.Division) Match(TokenType.Division); return node; }
private SyntaxTreeNode IfStatement() { SyntaxTreeBinaryNode ifNode = new SyntaxTreeBinaryNode() { Token = curToken }; Match(TokenType.If); ifNode.Left = Expression(); Match(TokenType.Then); SyntaxTreeNode thenPart = StatementSequence(); SyntaxTreeBinaryNode ifParts = new SyntaxTreeBinaryNode() { Left = thenPart }; if (curToken.TokenType == TokenType.Else) { Match(TokenType.Else); ifParts.Right = StatementSequence(); } ifNode.Right = ifParts; Match(TokenType.End); return ifNode; }
private SyntaxTreeNode Factor() { SyntaxTreeNode node = null; if (curToken.TokenType == TokenType.LeftParenthesis) { Match(TokenType.LeftParenthesis); node = Expression(); Match(TokenType.RightParenthesis); } else if (curToken.TokenType == TokenType.Number) { node = new SyntaxTreeBinaryNode() { Token = curToken }; Match(TokenType.Number); } else { node = new SyntaxTreeBinaryNode() { Token = curToken }; Match(TokenType.Identifier); } return node; }
private SyntaxTreeNode Expression() { SyntaxTreeNode node = SimpleExpression(); if (IsComparison(curToken.TokenType)) { SyntaxTreeBinaryNode temp = new SyntaxTreeBinaryNode() { Token = curToken }; Match(curToken.TokenType); temp.Left = node; temp.Right = SimpleExpression(); node = temp; } return node; }