本文整理汇总了Golang中github.com/gbbr/textmate/vendor/quarnster/parser.Node.Data方法的典型用法代码示例。如果您正苦于以下问题:Golang Node.Data方法的具体用法?Golang Node.Data怎么用?Golang Node.Data使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/gbbr/textmate/vendor/quarnster/parser.Node
的用法示例。
在下文中一共展示了Node.Data方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: ResolveType
func (c *Compiler) ResolveType(node *parser.Node) string {
if node.Name != "Type" {
panic(node)
}
return node.Data()
}
示例2: Recurse
func (c *Compiler) Recurse(node *parser.Node) string {
ret := ""
var cf parser.CodeFormatter
p := primitives[node.Name]
if p != "" {
return p
}
switch node.Name {
case "Identifier", "Boolean", "Float", "Integer":
return node.Data()
case "Text":
return "\"" + node.Data() + "\""
case "Comparison":
a := c.Recurse(node.Children[0])
cmp := c.Recurse(node.Children[1])
b := c.Recurse(node.Children[2])
return a + cmp + b
case "While":
return "while (" + c.Recurse(node.Children[0]) + ")\n" + c.Recurse(node.Children[1])
case "If":
return "if (" + c.Recurse(node.Children[0]) + ")\n" + c.Recurse(node.Children[1])
case "ElseIf":
ret += "else "
case "Else":
ret += "else\n"
case "For":
variable := c.Recurse(node.Children[0])
array := c.Recurse(node.Children[1])
block := c.Recurse(node.Children[2])
typeName := "TODO"
ret := "for (int i = 0; i < " + array + ".size(); i++)\n{\n\t"
ret += typeName + " " + variable + " = " + array + "[i];\n"
ret += block[2:]
return ret
case "NewStatement":
return "new " + c.Recurse(node.Children[0])
case "ReturnStatement":
return "return " + c.Recurse(node.Children[0])
case "ArrayIndexing":
return c.Recurse(node.Children[0]) + "[" + c.Recurse(node.Children[1]) + "]"
case "ArraySlicing":
id := c.Recurse(node.Children[0])
a := "0"
b := id + ".size()"
if node.Children[1].Name != "colon" {
a = c.Recurse(node.Children[1])
}
back := node.Children[len(node.Children)-1]
if back.Name != "colon" {
b = c.Recurse(back)
}
return id + ".slice(" + a + ", " + b + ")"
case "PostInc":
return c.Recurse(node.Children[0]) + "++"
case "PostDec":
return c.Recurse(node.Children[0]) + "--"
case "FunctionCall":
ret = node.Children[0].Data()
args := ""
for _, child := range node.Children[1:] {
if args != "" {
args += ", "
}
args += c.Recurse(child)
}
return ret + "(" + args + ")"
case "Class":
cn := node.Children[0].Data()
c.currentClass = cn
cf.Add("class " + cn + "\n{\npublic:\n")
cf.Inc()
for _, child := range node.Children[1:] {
ret := c.Recurse(child)
if child.Name == "VariableDeclaration" {
ret += ";\n"
}
cf.Add(ret)
}
cf.Dec()
cf.Add("};\n")
c.currentClass = ""
return cf.String()
case "Assignment":
return node.Children[0].Data() + " = " + c.Recurse(node.Children[1])
case "PlusEquals":
return node.Children[0].Data() + " += " + c.Recurse(node.Children[1])
case "VariableDeclaration":
ret := c.ResolveType(node.Children[0]) + " "
n1 := node.Children[1]
if n1.Name == "Assignment" {
ret += c.Recurse(n1)
} else {
ret += n1.Data()
}
return ret
case "Block":
//.........这里部分代码省略.........
示例3: Recurse
func (c *PyCompiler) Recurse(node *parser.Node) string {
ret := ""
var cf parser.CodeFormatter
p := pyprimitives[node.Name]
if p != "" {
return p
}
switch node.Name {
case "Identifier", "Float", "Integer":
return node.Data()
case "Boolean":
if node.Data() == "true" {
return "True"
} else {
return "False"
}
case "Text":
return "\"" + node.Data() + "\""
case "Comparison":
a := c.Recurse(node.Children[0])
cmp := c.Recurse(node.Children[1])
b := c.Recurse(node.Children[2])
return a + cmp + b
case "While":
return "while " + c.Recurse(node.Children[0]) + ":\n" + c.Recurse(node.Children[1])
case "If":
return "if " + c.Recurse(node.Children[0]) + ":\n" + c.Recurse(node.Children[1])
case "ElseIf":
return "el" + c.Recurse(node.Children[0])
case "Else":
return "else:" + c.Recurse(node.Children[0])
case "For":
variable := c.Recurse(node.Children[0])
array := c.Recurse(node.Children[1])
block := c.Recurse(node.Children[2])
return "for " + variable + " in " + array + ":\n" + block
case "NewStatement":
return c.Recurse(node.Children[0]) + "()"
case "ReturnStatement":
return "return " + c.Recurse(node.Children[0])
case "ArrayIndexing":
return c.Recurse(node.Children[0]) + "[" + c.Recurse(node.Children[1]) + "]"
case "ArraySlicing":
id := c.Recurse(node.Children[0])
a := ""
b := ""
if node.Children[1].Name != "colon" {
a = c.Recurse(node.Children[1])
}
back := node.Children[len(node.Children)-1]
if back.Name != "colon" {
b = c.Recurse(back)
}
return id + "[" + a + ":" + b + "]"
case "PostInc":
return c.Recurse(node.Children[0]) + " += 1"
case "PostDec":
return c.Recurse(node.Children[0]) + " -= 1"
case "FunctionCall":
ret = node.Children[0].Data()
args := ""
for _, child := range node.Children[1:] {
if args != "" {
args += ", "
}
args += c.Recurse(child)
}
return ret + "(" + args + ")"
case "Class":
cn := node.Children[0].Data()
c.currentClass = cn
cf.Add("class " + cn + ":\n")
cf.Inc()
for _, child := range node.Children[1:] {
ret := c.Recurse(child)
if child.Name == "VariableDeclaration" {
ret += "\n"
}
cf.Add(ret)
}
cf.Dec()
cf.Add("\n")
c.currentClass = ""
return cf.String()
case "Assignment":
return node.Children[0].Data() + " = " + c.Recurse(node.Children[1])
case "PlusEquals":
return node.Children[0].Data() + " += " + c.Recurse(node.Children[1])
case "VariableDeclaration":
ret := "" //c.ResolveType(node.Children[0]) + " "
n1 := node.Children[1]
if n1.Name == "Assignment" {
ret += c.Recurse(n1)
} else {
ret += n1.Data()
}
//.........这里部分代码省略.........