本文整理汇总了Golang中piquant/lang/ast.Node类的典型用法代码示例。如果您正苦于以下问题:Golang Node类的具体用法?Golang Node怎么用?Golang Node使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Node类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: primConcat
func primConcat(e Env, head ast.Node, args []ast.Node) ast.Node {
var sum ast.Node
for _, arg := range args {
if sum == nil {
sum = arg
} else {
switch sumVal := sum.(type) {
case ast.Coll:
switch argVal := arg.(type) {
case ast.Coll:
sum = sumVal.Append(argVal)
default:
panicEvalError(arg, "Cannot concat a collection with a non-collection: "+arg.String())
}
default:
panicEvalError(arg, "Cannot concat a non-collection type: "+sum.String())
}
}
}
if sum == nil {
return &ast.Nil{}
} else {
return sum
}
}
示例2: ensureSymbol
func ensureSymbol(n ast.Node) *ast.Symbol {
if v, ok := n.(*ast.Symbol); ok {
return v
}
panic("Expected symbol: " + n.String())
}
示例3: ensureList
func ensureList(n ast.Node) *ast.List {
if v, ok := n.(*ast.List); ok {
return v
}
panic("Expected list: " + n.String())
}
示例4: panicEvalError
func panicEvalError(n ast.Node, s string) {
var loc *token.Location
if n != nil {
loc = n.Loc()
}
panic(NewEvalError(s, loc))
}
示例5: toSymbolName
func toSymbolName(n ast.Node) string {
switch value := n.(type) {
case *ast.Symbol:
return value.Name
}
panic("Not a symbol: " + n.String())
}
示例6: toListValue
func toListValue(n ast.Node) *ast.List {
switch value := n.(type) {
case *ast.List:
return value
}
panicEvalError(n, "Expression is not a list: "+n.String())
return nil
}
示例7: toSymbolValue
func toSymbolValue(n ast.Node) string {
switch value := n.(type) {
case *ast.Symbol:
return value.Name
}
panicEvalError(n, "Expression is not a symbol: "+n.String())
return ""
}
示例8: toNumberValue
func toNumberValue(n ast.Node) float64 {
switch value := n.(type) {
case *ast.Number:
return value.Value
}
panicEvalError(n, "Expression is not a number: "+n.String())
return 0.0
}
示例9: testInputFile
func testInputFile(sourceFilePath string, t *testing.T) {
sourceDirPart, sourceFileNamePart := filepath.Split(sourceFilePath)
parts := strings.Split(sourceFileNamePart, ".")
testName := parts[0]
outputFilePath := sourceDirPart + testName + ".out"
input, errIn := util.ReadFile(sourceFilePath)
if errIn != nil {
t.Errorf("Error reading file <" + sourceFilePath + ">: " + errIn.Error())
return
}
expectedRaw, errOut := util.ReadFile(outputFilePath)
if errOut != nil {
t.Errorf("Error reading file <" + outputFilePath + ">: " + errOut.Error())
return
}
// Remove any carriage return line endings from .out file
expectedWithUntrimmed := strings.Replace(expectedRaw, "\r", "", -1)
expected := strings.TrimSpace(expectedWithUntrimmed)
nodes, errors := parser.Parse(input, sourceFilePath)
if errors.Len() != 0 {
verify(t, sourceFilePath, input, expected, errors.String())
} else {
e := interpreter.NewTopLevelMapEnv()
var outputBuffer bytes.Buffer
var result ast.Node
var evalError error
for _, n := range nodes {
result, evalError = interpreter.Eval(e, n, &outputBuffer)
if evalError != nil {
break
}
}
actual := (&outputBuffer).String()
if evalError == nil {
//DEBUG fmt.Printf("RESULT(%v): %v\n", sourceFilePath, result)
if result != nil {
actual = actual + result.String()
}
} else {
actual = actual + evalError.Error()
}
verify(t, sourceFilePath, input, expected, actual)
}
}
示例10: specialCond
func specialCond(e Env, head ast.Node, args []ast.Node) packet {
for i := 0; i < len(args); i += 2 {
predicate := toBooleanValue(trampoline(func() packet {
return evalNode(e, args[i])
}))
if predicate {
return bounce(func() packet {
return evalNode(e, args[i+1])
})
}
}
panicEvalError(head, "No matching cond clause: "+head.String())
return respond(&ast.Nil{})
}
示例11: Equals
func (f *Function) Equals(n ast.Node) bool {
panicEvalError(n, "Cannot compare the values of functions: "+
f.String()+" and "+n.String())
return false
}