diff --git a/parse/argument.go b/parse/argument.go index 60eca86..8d433d8 100644 --- a/parse/argument.go +++ b/parse/argument.go @@ -2,7 +2,6 @@ package parse import ( "usm/lex" - "usm/source" ) type ArgumentNode struct { @@ -13,32 +12,6 @@ type ArgumentNode struct { type ArgumentNodeParser struct{} -func ConsumeToken(v *TokenView, typ lex.TokenType) (tkn lex.Token, perr ParsingError) { - tknView, restView := v.Partition(1) - tkn, err := tknView.At(0) - - if err != nil { - perr = EofError{Expected: lex.TypToken} - return - } - - if tkn.Type != typ { - perr = UnexpectedTokenError{Expected: typ, Got: tkn} - return - } - - *v = restView - return tkn, nil -} - -func NewNodeFromBoundaryTokens(first, last lex.Token) Node { - return Node{ - View: source.UnmanagedSourceView{ - Start: first.View.Start, - End: last.View.End}, - } -} - func (p ArgumentNodeParser) Parse(v *TokenView) (node ArgumentNode, err ParsingError) { typ, err := ConsumeToken(v, lex.TypToken) if err != nil { diff --git a/parse/node.go b/parse/node.go index a5187bf..cab3bd4 100644 --- a/parse/node.go +++ b/parse/node.go @@ -15,6 +15,34 @@ type Node struct { View source.UnmanagedSourceView } +func NewNodeFromBoundaryTokens(first, last lex.Token) Node { + return Node{ + View: source.UnmanagedSourceView{ + Start: first.View.Start, + End: last.View.End}, + } +} + type NodeParser[T any] interface { Parse(view TokenView) (T, error) } + +// Parsing Utilities + +func ConsumeToken(v *TokenView, typ lex.TokenType) (tkn lex.Token, perr ParsingError) { + tknView, restView := v.Partition(1) + tkn, err := tknView.At(0) + + if err != nil { + perr = EofError{Expected: lex.TypToken} + return + } + + if tkn.Type != typ { + perr = UnexpectedTokenError{Expected: typ, Got: tkn} + return + } + + *v = restView + return tkn, nil +}