本文整理汇总了Golang中github.com/ark-lang/ark/src/lexer.NewSpanFromTokens函数的典型用法代码示例。如果您正苦于以下问题:Golang NewSpanFromTokens函数的具体用法?Golang NewSpanFromTokens怎么用?Golang NewSpanFromTokens使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewSpanFromTokens函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: parseMatchStat
func (v *parser) parseMatchStat() *MatchStatNode {
defer un(trace(v, "matchstat"))
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_MATCH) {
return nil
}
startToken := v.consumeToken()
value := v.parseExpr()
if value == nil {
v.err("Expected valid expresson as value in match statement")
}
v.expect(lexer.TOKEN_SEPARATOR, "{")
var cases []*MatchCaseNode
for {
if v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "}") {
break
}
var pattern ParseNode
if v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, "_") {
patTok := v.consumeToken()
pattern = &DefaultPatternNode{}
pattern.SetWhere(patTok.Where)
} else {
pattern = v.parseExpr()
}
if pattern == nil {
v.err("Expected valid expression as pattern in match statement")
}
v.expect(lexer.TOKEN_OPERATOR, "=>")
var body ParseNode
if v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "{") {
body = v.parseBlock()
} else {
body = v.parseStat()
}
if body == nil {
v.err("Expected valid arm statement in match clause")
}
v.expect(lexer.TOKEN_SEPARATOR, ",")
caseNode := &MatchCaseNode{Pattern: pattern, Body: body}
caseNode.SetWhere(lexer.NewSpan(pattern.Where().Start(), body.Where().End()))
cases = append(cases, caseNode)
}
endToken := v.expect(lexer.TOKEN_SEPARATOR, "}")
res := &MatchStatNode{Value: value, Cases: cases}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:IanMurray,项目名称:ark,代码行数:60,代码来源:parser.go
示例2: parseTypeParameter
func (v *parser) parseTypeParameter() *TypeParameterNode {
name := v.expect(lexer.TOKEN_IDENTIFIER, "")
var restrictions []*NameNode
if v.tokenMatches(0, lexer.TOKEN_OPERATOR, ":") {
v.consumeToken()
for {
restriction := v.parseName()
if restriction == nil {
v.err("Expected valid name in type restriction")
}
restrictions = append(restrictions, restriction)
if !v.tokenMatches(0, lexer.TOKEN_OPERATOR, "&") {
break
}
v.consumeToken()
}
}
res := &TypeParameterNode{Name: NewLocatedString(name), Restrictions: restrictions}
if idx := len(restrictions) - 1; idx >= 0 {
res.SetWhere(lexer.NewSpan(name.Where.Start(), restrictions[idx].Where().End()))
} else {
res.SetWhere(lexer.NewSpanFromTokens(name, name))
}
return res
}
开发者ID:IanMurray,项目名称:ark,代码行数:28,代码来源:parser.go
示例3: parseSizeofExpr
func (v *parser) parseSizeofExpr() *SizeofExprNode {
defer un(trace(v, "sizeofexpr"))
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_SIZEOF) {
return nil
}
startToken := v.consumeToken()
v.expect(lexer.TOKEN_SEPARATOR, "(")
var typ ParseNode
value := v.parseExpr()
if value == nil {
typ = v.parseType(true)
if typ == nil {
v.err("Expected valid expression or type in sizeof expression")
}
}
endToken := v.expect(lexer.TOKEN_SEPARATOR, ")")
res := &SizeofExprNode{Value: value, Type: typ}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:IanMurray,项目名称:ark,代码行数:25,代码来源:parser.go
示例4: parseBlock
func (v *parser) parseBlock() *BlockNode {
defer un(trace(v, "block"))
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "{") {
return nil
}
startToken := v.consumeToken()
var nodes []ParseNode
for {
node, is_cond := v.parseNode()
if node == nil {
break
}
if !is_cond {
v.expect(lexer.TOKEN_SEPARATOR, ";")
}
nodes = append(nodes, node)
}
endToken := v.expect(lexer.TOKEN_SEPARATOR, "}")
res := &BlockNode{Nodes: nodes}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:IanMurray,项目名称:ark,代码行数:26,代码来源:parser.go
示例5: parseEnumType
func (v *parser) parseEnumType() *EnumTypeNode {
defer un(trace(v, "enumtype"))
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_ENUM) {
return nil
}
startToken := v.consumeToken()
v.expect(lexer.TOKEN_SEPARATOR, "{")
var members []*EnumEntryNode
for {
if v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "}") {
break
}
member := v.parseEnumEntry()
if member == nil {
v.err("Expected valid enum entry in enum")
}
members = append(members, member)
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ",") {
break
}
v.consumeToken()
}
endToken := v.expect(lexer.TOKEN_SEPARATOR, "}")
res := &EnumTypeNode{Members: members}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:IanMurray,项目名称:ark,代码行数:35,代码来源:parser.go
示例6: parseToplevelDirective
func (v *parser) parseToplevelDirective() ParseNode {
defer un(trace(v, "toplevel-directive"))
if !v.tokensMatch(lexer.TOKEN_OPERATOR, "#", lexer.TOKEN_IDENTIFIER, "") {
return nil
}
start := v.expect(lexer.TOKEN_OPERATOR, "#")
directive := v.expect(lexer.TOKEN_IDENTIFIER, "")
switch directive.Contents {
case "link":
library := v.expect(lexer.TOKEN_STRING, "")
res := &LinkDirectiveNode{Library: NewLocatedString(library)}
res.SetWhere(lexer.NewSpanFromTokens(start, library))
return res
case "use":
module := v.parseName()
if module == nil {
v.errPosSpecific(directive.Where.End(), "Expected name after use directive")
}
v.deps = append(v.deps, module)
res := &UseDirectiveNode{Module: module}
res.SetWhere(lexer.NewSpan(start.Where.Start(), module.Where().End()))
return res
default:
v.errTokenSpecific(directive, "No such directive `%s`", directive.Contents)
return nil
}
}
开发者ID:IanMurray,项目名称:ark,代码行数:33,代码来源:parser.go
示例7: parseMatchStat
func (v *parser) parseMatchStat() *MatchStatNode {
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_MATCH) {
return nil
}
startToken := v.consumeToken()
value := v.parseExpr()
if value == nil {
v.err("Expected valid expresson as value in match statement")
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "{") {
v.err("Expected starting `{` after value in match statement, got `%s`", v.peek(0).Contents)
}
v.consumeToken()
var cases []*MatchCaseNode
for {
if v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "}") {
break
}
var pattern ParseNode
if v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, "_") {
patTok := v.consumeToken()
pattern = &DefaultPatternNode{}
pattern.SetWhere(patTok.Where)
} else {
pattern = v.parseExpr()
}
if pattern == nil {
v.err("Expected valid expression as pattern in match statement")
}
if !v.tokenMatches(0, lexer.TOKEN_OPERATOR, "->") {
v.err("Expected `->` after match pattern, got `%s`", v.peek(0).Contents)
}
v.consumeToken()
body := v.parseStat()
if body == nil {
v.err("Expected valid statement as body in match statement")
}
caseNode := &MatchCaseNode{Pattern: pattern, Body: body}
caseNode.SetWhere(lexer.NewSpan(pattern.Where().Start(), body.Where().End()))
cases = append(cases, caseNode)
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "}") {
v.err("Expected closing `}` after match statement, got `%s`", v.peek(0).Contents)
}
endToken := v.consumeToken()
res := &MatchStatNode{Value: value, Cases: cases}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:gitter-badger,项目名称:ark,代码行数:60,代码来源:parser.go
示例8: parseTypeDecl
func (v *parser) parseTypeDecl() *TypeDeclNode {
defer un(trace(v, "typdecl"))
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, "type") {
return nil
}
startToken := v.consumeToken()
name := v.expect(lexer.TOKEN_IDENTIFIER, "")
if isReservedKeyword(name.Contents) {
v.err("Cannot use reserved keyword `%s` as type name", name.Contents)
}
genericSigil := v.parseGenericSigil()
typ := v.parseType(true)
endToken := v.expect(lexer.TOKEN_SEPARATOR, ";")
res := &TypeDeclNode{
Name: NewLocatedString(name),
GenericSigil: genericSigil,
Type: typ,
}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:dansawkins,项目名称:ark,代码行数:29,代码来源:parser.go
示例9: parseGenericSigil
func (v *parser) parseGenericSigil() *GenericSigilNode {
defer un(trace(v, "genericsigil"))
if !v.tokenMatches(0, lexer.TOKEN_OPERATOR, "<") {
return nil
}
startToken := v.consumeToken()
var parameters []*TypeParameterNode
for {
parameter := v.parseTypeParameter()
if parameter == nil {
v.err("Expected valid type parameter in generic sigil")
}
parameters = append(parameters, parameter)
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ",") {
break
}
v.consumeToken()
}
endToken := v.expect(lexer.TOKEN_OPERATOR, ">")
res := &GenericSigilNode{Parameters: parameters}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:IanMurray,项目名称:ark,代码行数:27,代码来源:parser.go
示例10: parseArrayLit
func (v *parser) parseArrayLit() *ArrayLiteralNode {
defer un(trace(v, "arraylit"))
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "[") {
return nil
}
startToken := v.consumeToken()
var values []ParseNode
for {
if v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "]") {
break
}
value := v.parseExpr()
if value == nil {
v.err("Expected valid expression in array literal")
}
values = append(values, value)
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ",") {
break
}
v.consumeToken()
}
endToken := v.expect(lexer.TOKEN_SEPARATOR, "]")
res := &ArrayLiteralNode{Values: values}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:IanMurray,项目名称:ark,代码行数:32,代码来源:parser.go
示例11: parseTupleLit
func (v *parser) parseTupleLit() *TupleLiteralNode {
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "(") {
return nil
}
startToken := v.consumeToken()
var values []ParseNode
for {
if v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ")") {
break
}
value := v.parseExpr()
if value == nil {
v.err("Expected valid expression in tuple literal")
}
values = append(values, value)
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ",") {
break
}
v.consumeToken()
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ")") {
v.err("Expected closing `]` after tuple literal, got `%s`", v.peek(0).Contents)
}
endToken := v.consumeToken()
res := &TupleLiteralNode{Values: values}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:gitter-badger,项目名称:ark,代码行数:33,代码来源:parser.go
示例12: parseTupleType
func (v *parser) parseTupleType() *TupleTypeNode {
defer un(trace(v, "tupletype"))
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "(") {
return nil
}
startToken := v.consumeToken()
var members []ParseNode
for {
memberType := v.parseType(true)
if memberType == nil {
v.err("Expected valid type in tuple type")
}
members = append(members, memberType)
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ",") {
break
}
v.consumeToken()
}
endToken := v.expect(lexer.TOKEN_SEPARATOR, ")")
res := &TupleTypeNode{MemberTypes: members}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:IanMurray,项目名称:ark,代码行数:28,代码来源:parser.go
示例13: parseCastExpr
func (v *parser) parseCastExpr() *CastExprNode {
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_CAST) {
return nil
}
startToken := v.consumeToken()
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "(") {
v.err("Expected opening `(` in cast expression, got `%s`", v.peek(0).Contents)
}
v.consumeToken()
typ := v.parseType()
if typ == nil {
v.err("Expected valid type in cast expression")
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ",") {
v.err("Expected `,` in cast expresion, got `%s`", v.peek(0).Contents)
}
v.consumeToken()
value := v.parseExpr()
if value == nil {
v.err("Expected valid expression in cast expression")
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ")") {
v.err("Expected closing `)` after cast expression, got `%s`", v.peek(0).Contents)
}
endToken := v.consumeToken()
res := &CastExprNode{Type: typ, Value: value}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:gitter-badger,项目名称:ark,代码行数:35,代码来源:parser.go
示例14: parseSizeofExpr
func (v *parser) parseSizeofExpr() *SizeofExprNode {
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_SIZEOF) {
return nil
}
startToken := v.consumeToken()
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "(") {
v.err("Expected opening `(` in sizeof expression, got `%s`", v.peek(0).Contents)
}
v.consumeToken()
value := v.parseExpr()
if value == nil {
v.err("Expected valid expression in sizeof expression")
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ")") {
v.err("Expected closing `)` after sizeof expression, got `%s`", v.peek(0).Contents)
}
endToken := v.consumeToken()
res := &SizeofExprNode{Value: value}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:gitter-badger,项目名称:ark,代码行数:25,代码来源:parser.go
示例15: parseTupleType
func (v *parser) parseTupleType() *TupleTypeNode {
startToken := v.consumeToken()
var members []ParseNode
for {
memberType := v.parseType()
if memberType == nil {
v.err("Expected valid type in tuple type")
}
members = append(members, memberType)
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ",") {
break
}
v.consumeToken()
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ")") {
v.err("Expected closing `)` after tuple type, got `%s`", v.peek(0).Contents)
}
endToken := v.consumeToken()
res := &TupleTypeNode{MemberTypes: members}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:gitter-badger,项目名称:ark,代码行数:26,代码来源:parser.go
示例16: parseImplDecl
func (v *parser) parseImplDecl() *ImplDeclNode {
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_IMPL) {
return nil
}
startToken := v.consumeToken()
if !v.nextIs(lexer.TOKEN_IDENTIFIER) {
v.err("Expected struct name after `impl` keyword, got `%s`", v.peek(0).Contents)
}
structName := v.consumeToken()
if isReservedKeyword(structName.Contents) {
v.err("Cannot use reserved keyword `%s` as struct name", structName.Contents)
}
var traitName *lexer.Token
if v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_FOR) {
v.consumeToken()
if !v.nextIs(lexer.TOKEN_IDENTIFIER) {
v.err("Expected trait name after `for` in impl declaration, got `%s`", v.peek(0).Contents)
}
traitName = v.consumeToken()
if isReservedKeyword(traitName.Contents) {
v.err("Cannot use reserved keyword `%s` as trait name", traitName.Contents)
}
}
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, "{") {
v.err("Expected starting `{` after impl start, got `%s`", v.peek(0).Contents)
}
v.consumeToken()
var members []*FunctionDeclNode
for {
if v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "}") {
break
}
member, ok := v.parseDecl().(*FunctionDeclNode)
if member == nil || !ok {
v.err("Expected valid function declaration in impl declaration")
}
members = append(members, member)
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "}") {
v.err("Expected closing `}` after impl declaration, got `%s`", v.peek(0).Contents)
}
endToken := v.consumeToken()
res := &ImplDeclNode{StructName: NewLocatedString(structName), Members: members}
if traitName != nil {
res.TraitName = NewLocatedString(traitName)
}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:gitter-badger,项目名称:ark,代码行数:59,代码来源:parser.go
示例17: parseReturnStat
func (v *parser) parseReturnStat() *ReturnStatNode {
defer un(trace(v, "returnstat"))
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_RETURN) {
return nil
}
startToken := v.consumeToken()
value := v.parseExpr()
endToken := v.expect(lexer.TOKEN_SEPARATOR, ";")
res := &ReturnStatNode{Value: value}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:dansawkins,项目名称:ark,代码行数:16,代码来源:parser.go
示例18: parseEnumDecl
func (v *parser) parseEnumDecl() *EnumDeclNode {
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_ENUM) {
return nil
}
startToken := v.consumeToken()
if !v.nextIs(lexer.TOKEN_IDENTIFIER) {
v.err("Expected enum name after `enum` keyword, got `%s`", v.peek(0).Contents)
}
name := v.consumeToken()
if isReservedKeyword(name.Contents) {
v.err("Cannot use reserved keyword `%s` as name for enum", name.Contents)
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "{") {
v.err("Expected starting `{` after enum name, got `%s`", v.peek(0).Contents)
}
v.consumeToken()
var members []*EnumEntryNode
for {
if v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "}") {
break
}
member := v.parseEnumEntry()
if member == nil {
v.err("Expected valid enum entry in enum")
}
members = append(members, member)
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ",") {
break
}
v.consumeToken()
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "}") {
v.err("Expected closing `}` after enum, got `%s`", v.peek(0).Contents)
}
endToken := v.consumeToken()
res := &EnumDeclNode{Name: NewLocatedString(name), Members: members}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:gitter-badger,项目名称:ark,代码行数:47,代码来源:parser.go
示例19: parseStructDecl
func (v *parser) parseStructDecl() *StructDeclNode {
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_STRUCT) {
return nil
}
startToken := v.consumeToken()
if !v.nextIs(lexer.TOKEN_IDENTIFIER) {
v.err("Expected name after struct keyword, got `%s`", v.peek(0).Contents)
}
name := v.consumeToken()
if isReservedKeyword(name.Contents) {
v.err("Cannot use reserved keyword `%s` as name for struct", name.Contents)
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "{") {
v.err("Expected starting `{` after struct name, got `%s`", v.peek(0).Contents)
}
v.consumeToken()
var members []*VarDeclNode
for {
if v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "}") {
break
}
member := v.parseVarDeclBody()
if member == nil {
v.err("Expected valid variable declaration in struct")
}
members = append(members, member)
if v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ",") {
v.consumeToken()
}
}
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, "}") {
v.err("Expected closing `}` after struct, got `%s`", v.peek(0).Contents)
}
endToken := v.consumeToken()
res := &StructDeclNode{Name: NewLocatedString(name), Members: members}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:gitter-badger,项目名称:ark,代码行数:46,代码来源:parser.go
示例20: parseReturnStat
func (v *parser) parseReturnStat() *ReturnStatNode {
if !v.tokenMatches(0, lexer.TOKEN_IDENTIFIER, KEYWORD_RETURN) {
return nil
}
startToken := v.consumeToken()
value := v.parseExpr()
if !v.tokenMatches(0, lexer.TOKEN_SEPARATOR, ";") {
v.err("Expected `;` after return statement, got `%s`", v.peek(0).Contents)
}
endToken := v.consumeToken()
res := &ReturnStatNode{Value: value}
res.SetWhere(lexer.NewSpanFromTokens(startToken, endToken))
return res
}
开发者ID:gitter-badger,项目名称:ark,代码行数:17,代码来源:parser.go
注:本文中的github.com/ark-lang/ark/src/lexer.NewSpanFromTokens函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论