Parsing return direction works
This commit is contained in:
@@ -4,75 +4,6 @@ import "git.tebibyte.media/arf/arf/types"
|
||||
import "git.tebibyte.media/arf/arf/lexer"
|
||||
import "git.tebibyte.media/arf/arf/infoerr"
|
||||
|
||||
// operatorTokens lists all symbolic tokens that can act as a command to a
|
||||
// phrase.
|
||||
var operatorTokens = []lexer.TokenKind {
|
||||
lexer.TokenKindPlus,
|
||||
lexer.TokenKindMinus,
|
||||
lexer.TokenKindIncrement,
|
||||
lexer.TokenKindDecrement,
|
||||
lexer.TokenKindAsterisk,
|
||||
lexer.TokenKindSlash,
|
||||
lexer.TokenKindExclamation,
|
||||
lexer.TokenKindPercent,
|
||||
lexer.TokenKindPercentAssignment,
|
||||
lexer.TokenKindTilde,
|
||||
lexer.TokenKindTildeAssignment,
|
||||
lexer.TokenKindEqualTo,
|
||||
lexer.TokenKindNotEqualTo,
|
||||
lexer.TokenKindLessThanEqualTo,
|
||||
lexer.TokenKindLessThan,
|
||||
lexer.TokenKindLShift,
|
||||
lexer.TokenKindLShiftAssignment,
|
||||
lexer.TokenKindGreaterThan,
|
||||
lexer.TokenKindGreaterThanEqualTo,
|
||||
lexer.TokenKindRShift,
|
||||
lexer.TokenKindRShiftAssignment,
|
||||
lexer.TokenKindBinaryOr,
|
||||
lexer.TokenKindBinaryOrAssignment,
|
||||
lexer.TokenKindLogicalOr,
|
||||
lexer.TokenKindBinaryAnd,
|
||||
lexer.TokenKindBinaryAndAssignment,
|
||||
lexer.TokenKindLogicalAnd,
|
||||
lexer.TokenKindBinaryXor,
|
||||
lexer.TokenKindBinaryXorAssignment,
|
||||
}
|
||||
|
||||
// isTokenOperator returns whether or not the token is an operator token.
|
||||
func isTokenOperator (token lexer.Token) (isOperator bool) {
|
||||
for _, kind := range operatorTokens {
|
||||
if token.Is(kind) {
|
||||
isOperator = true
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// validPhraseStartTokens lists all tokens that are expected when parsing the
|
||||
// first part of a phrase.
|
||||
var validPhraseStartTokens = append (
|
||||
validArgumentStartTokens,
|
||||
operatorTokens...)
|
||||
|
||||
// validBlockLevelPhraseTokens lists all tokens that are expected when parsing
|
||||
// a block level phrase.
|
||||
var validBlockLevelPhraseTokens = append (
|
||||
validArgumentStartTokens,
|
||||
lexer.TokenKindNewline,
|
||||
lexer.TokenKindReturnDirection)
|
||||
|
||||
// validDelimitedPhraseTokens is like validBlockLevelPhraseTokens, but it also
|
||||
// includes a right brace token.
|
||||
var validDelimitedPhraseTokens = append (
|
||||
validArgumentStartTokens,
|
||||
lexer.TokenKindNewline,
|
||||
lexer.TokenKindIndent,
|
||||
lexer.TokenKindRBracket,
|
||||
lexer.TokenKindReturnDirection)
|
||||
|
||||
|
||||
// controlFlowNames contains a list of all command names that must have a block
|
||||
// underneath them.
|
||||
var controlFlowNames = []string {
|
||||
|
||||
Reference in New Issue
Block a user