Added new token kind slices to func.go
This commit is contained in:
parent
1f68f252e0
commit
c2a8c4cd97
@ -4,6 +4,40 @@ import "git.tebibyte.media/arf/arf/types"
|
|||||||
import "git.tebibyte.media/arf/arf/lexer"
|
import "git.tebibyte.media/arf/arf/lexer"
|
||||||
import "git.tebibyte.media/arf/arf/infoerr"
|
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,
|
||||||
|
}
|
||||||
|
|
||||||
// validBlockLevelPhraseTokens lists all tokens that are expected when parsing
|
// validBlockLevelPhraseTokens lists all tokens that are expected when parsing
|
||||||
// a block level phrase.
|
// a block level phrase.
|
||||||
var validBlockLevelPhraseTokens = append (
|
var validBlockLevelPhraseTokens = append (
|
||||||
@ -11,15 +45,36 @@ var validBlockLevelPhraseTokens = append (
|
|||||||
lexer.TokenKindNewline,
|
lexer.TokenKindNewline,
|
||||||
lexer.TokenKindReturnDirection)
|
lexer.TokenKindReturnDirection)
|
||||||
|
|
||||||
// validDelimitedBlockLevelPhraseTokens is like validBlockLevelPhraseTokens, but
|
// validBlockLevelPhraseCommandTokens is like validBlockLevelPhraseTokens, but
|
||||||
// it also includes a right brace token.
|
// specifically for the command argument.
|
||||||
var validDelimitedBlockLevelPhraseTokens = append (
|
var validBlockLevelPhraseCommandTokens = append (
|
||||||
|
validBlockLevelPhraseTokens,
|
||||||
|
operatorTokens...)
|
||||||
|
|
||||||
|
// validDelimitedPhraseTokens is like validBlockLevelPhraseTokens, but it also
|
||||||
|
// includes a right brace token.
|
||||||
|
var validDelimitedPhraseTokens = append (
|
||||||
validArgumentStartTokens,
|
validArgumentStartTokens,
|
||||||
lexer.TokenKindNewline,
|
lexer.TokenKindNewline,
|
||||||
lexer.TokenKindIndent,
|
lexer.TokenKindIndent,
|
||||||
lexer.TokenKindRBracket,
|
lexer.TokenKindRBracket,
|
||||||
lexer.TokenKindReturnDirection)
|
lexer.TokenKindReturnDirection)
|
||||||
|
|
||||||
|
// validDelimitedPhraseCommandTokens is like validDelimitedPhraseTokens, but
|
||||||
|
// specifically for the command argument.
|
||||||
|
var validDelimitedPhraseCommand = append (
|
||||||
|
validDelimitedPhraseTokens,
|
||||||
|
operatorTokens...)
|
||||||
|
|
||||||
|
// controlFlowNames contains a list of all command names that must have a block
|
||||||
|
// underneath them.
|
||||||
|
var controlFlowNames = []string {
|
||||||
|
"if", "else", "elseif",
|
||||||
|
"for", "while",
|
||||||
|
"switch",
|
||||||
|
"defer",
|
||||||
|
}
|
||||||
|
|
||||||
// parseFunc parses a function section.
|
// parseFunc parses a function section.
|
||||||
func (parser *ParsingOperation) parseFuncSection () (
|
func (parser *ParsingOperation) parseFuncSection () (
|
||||||
section *FuncSection,
|
section *FuncSection,
|
||||||
@ -271,7 +326,7 @@ func (parser *ParsingOperation) parseBlockLevelPhrase (
|
|||||||
if expectRightBracket {
|
if expectRightBracket {
|
||||||
// delimited
|
// delimited
|
||||||
// [someFunc arg1 arg2 arg3] -> someVariable
|
// [someFunc arg1 arg2 arg3] -> someVariable
|
||||||
err = parser.expect(validDelimitedBlockLevelPhraseTokens...)
|
err = parser.expect(validDelimitedPhraseTokens...)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
|
|
||||||
if parser.token.Is(lexer.TokenKindRBracket) {
|
if parser.token.Is(lexer.TokenKindRBracket) {
|
||||||
@ -347,7 +402,7 @@ func (parser *ParsingOperation) parseArgumentLevelPhrase () (
|
|||||||
for {
|
for {
|
||||||
// delimited
|
// delimited
|
||||||
// [someFunc arg1 arg2 arg3] -> someVariable
|
// [someFunc arg1 arg2 arg3] -> someVariable
|
||||||
err = parser.expect(validDelimitedBlockLevelPhraseTokens...)
|
err = parser.expect(validDelimitedPhraseTokens...)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
|
|
||||||
if parser.token.Is(lexer.TokenKindRBracket) {
|
if parser.token.Is(lexer.TokenKindRBracket) {
|
||||||
|
Reference in New Issue
Block a user