コード例 #1
0
ファイル: main.go プロジェクト: welterde/peg
func main() {
	runtime.GOMAXPROCS(2)
	flag.Parse()

	if flag.NArg() != 1 {
		flag.Usage()
		fmt.Fprintf(os.Stderr, "  FILE: the peg file to compile\n")
		os.Exit(1)
	}
	file := flag.Arg(0)

	buffer, error := ioutil.ReadFile(file)
	if error != nil {
		fmt.Printf("%v\n", error)
		return
	}
	p := &peg.Peg{Tree: peg.New(*inline, *_switch), Buffer: string(buffer)}
	p.Init()
	if p.Parse() {
		p.Compile(file + ".go")
	} else {
		p.PrintError()
	}
}
コード例 #2
0
ファイル: main.go プロジェクト: welterde/peg
func main() {
	runtime.GOMAXPROCS(2)
	t := peg.New(true, true)

	/*package peg

	  type Peg Peg {
	   *Tree
	  }*/
	t.AddPackage("peg")
	t.AddPeg("Peg")
	t.AddState(`
 *Tree
`)

	/* Grammar         <- Spacing 'package' Spacing Identifier      { p.AddPackage(buffer[begin:end]) }
	   'type' Spacing Identifier         { p.AddPeg(buffer[begin:end]) }
	   'Peg' Spacing Action              { p.AddState(buffer[begin:end]) }
	   commit
	   Definition+ EndOfFile */
	t.AddRule("Grammar")
	t.AddName("Spacing")
	t.AddString("package")
	t.AddSequence()
	t.AddName("Spacing")
	t.AddSequence()
	t.AddName("Identifier")
	t.AddSequence()
	t.AddAction(" p.AddPackage(buffer[begin:end]) ")
	t.AddSequence()
	t.AddString("type")
	t.AddSequence()
	t.AddName("Spacing")
	t.AddSequence()
	t.AddName("Identifier")
	t.AddSequence()
	t.AddAction(" p.AddPeg(buffer[begin:end]) ")
	t.AddSequence()
	t.AddString("Peg")
	t.AddSequence()
	t.AddName("Spacing")
	t.AddSequence()
	t.AddName("Action")
	t.AddSequence()
	t.AddAction(" p.AddState(buffer[begin:end]) ")
	t.AddSequence()
	t.AddCommit()
	t.AddSequence()
	t.AddName("Definition")
	t.AddPlus()
	t.AddSequence()
	t.AddName("EndOfFile")
	t.AddSequence()
	t.AddExpression()

	/* Definition      <- Identifier                   { p.AddRule(buffer[begin:end]) }
	   LEFTARROW Expression         { p.AddExpression() } &(Identifier LEFTARROW / !.) commit */
	t.AddRule("Definition")
	t.AddName("Identifier")
	t.AddAction(" p.AddRule(buffer[begin:end]) ")
	t.AddSequence()
	t.AddName("LEFTARROW")
	t.AddSequence()
	t.AddName("Expression")
	t.AddSequence()
	t.AddAction(" p.AddExpression() ")
	t.AddSequence()
	t.AddName("Identifier")
	t.AddName("LEFTARROW")
	t.AddSequence()
	t.AddDot()
	t.AddPeekNot()
	t.AddAlternate()
	t.AddPeekFor()
	t.AddSequence()
	t.AddCommit()
	t.AddSequence()
	t.AddExpression()

	/* Expression      <- Sequence (SLASH Sequence     { p.AddAlternate() }
	           )* (SLASH           { p.AddEmptyAlternate() }
	              )?
	/ */
	t.AddRule("Expression")
	t.AddName("Sequence")
	t.AddName("SLASH")
	t.AddName("Sequence")
	t.AddSequence()
	t.AddAction(" p.AddAlternate() ")
	t.AddSequence()
	t.AddStar()
	t.AddSequence()
	t.AddName("SLASH")
	t.AddAction(" p.AddEmptyAlternate() ")
	t.AddSequence()
	t.AddQuery()
	t.AddSequence()
	t.AddEmptyAlternate()
	t.AddExpression()

	/* Sequence        <- Prefix (Prefix               { p.AddSequence() }
	   )* */
	t.AddRule("Sequence")
	t.AddName("Prefix")
	t.AddName("Prefix")
	t.AddAction(" p.AddSequence() ")
	t.AddSequence()
	t.AddStar()
	t.AddSequence()
	t.AddExpression()

	/* Prefix          <- AND Action                   { p.AddPredicate(buffer[begin:end]) }
	   / AND Suffix                   { p.AddPeekFor() }
	   / NOT Suffix                   { p.AddPeekNot() }
	   /     Suffix */
	t.AddRule("Prefix")
	t.AddName("AND")
	t.AddName("Action")
	t.AddSequence()
	t.AddAction(" p.AddPredicate(buffer[begin:end]) ")
	t.AddSequence()
	t.AddName("AND")
	t.AddName("Suffix")
	t.AddSequence()
	t.AddAction(" p.AddPeekFor() ")
	t.AddSequence()
	t.AddAlternate()
	t.AddName("NOT")
	t.AddName("Suffix")
	t.AddSequence()
	t.AddAction(" p.AddPeekNot() ")
	t.AddSequence()
	t.AddAlternate()
	t.AddName("Suffix")
	t.AddAlternate()
	t.AddExpression()

	/* Suffix          <- Primary (QUESTION            { p.AddQuery() }
	   / STAR             { p.AddStar() }
	   / PLUS             { p.AddPlus() }
	 )? */
	t.AddRule("Suffix")
	t.AddName("Primary")
	t.AddName("QUESTION")
	t.AddAction(" p.AddQuery() ")
	t.AddSequence()
	t.AddName("STAR")
	t.AddAction(" p.AddStar() ")
	t.AddSequence()
	t.AddAlternate()
	t.AddName("PLUS")
	t.AddAction(" p.AddPlus() ")
	t.AddSequence()
	t.AddAlternate()
	t.AddQuery()
	t.AddSequence()
	t.AddExpression()

	/* Primary         <- 'commit' Spacing             { p.AddCommit() }
	   / Identifier !LEFTARROW        { p.AddName(buffer[begin:end]) }
	   / OPEN Expression CLOSE
	   / Literal                      { p.AddString(buffer[begin:end]) }
	   / Class                        { p.AddClass(buffer[begin:end]) }
	   / DOT                          { p.AddDot() }
	   / Action                       { p.AddAction(buffer[begin:end]) }
	   / BEGIN                        { p.AddBegin() }
	   / END                          { p.AddEnd() } */
	t.AddRule("Primary")
	t.AddString("commit")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddAction(" p.AddCommit() ")
	t.AddSequence()
	t.AddName("Identifier")
	t.AddName("LEFTARROW")
	t.AddPeekNot()
	t.AddSequence()
	t.AddAction(" p.AddName(buffer[begin:end]) ")
	t.AddSequence()
	t.AddAlternate()
	t.AddName("OPEN")
	t.AddName("Expression")
	t.AddSequence()
	t.AddName("CLOSE")
	t.AddSequence()
	t.AddAlternate()
	t.AddName("Literal")
	t.AddAction(" p.AddString(buffer[begin:end]) ")
	t.AddSequence()
	t.AddAlternate()
	t.AddName("Class")
	t.AddAction(" p.AddClass(buffer[begin:end]) ")
	t.AddSequence()
	t.AddAlternate()
	t.AddName("DOT")
	t.AddAction(" p.AddDot() ")
	t.AddSequence()
	t.AddAlternate()
	t.AddName("Action")
	t.AddAction(" p.AddAction(buffer[begin:end]) ")
	t.AddSequence()
	t.AddAlternate()
	t.AddName("BEGIN")
	t.AddAction(" p.AddBegin() ")
	t.AddSequence()
	t.AddAlternate()
	t.AddName("END")
	t.AddAction(" p.AddEnd() ")
	t.AddSequence()
	t.AddAlternate()
	t.AddExpression()

	/* Identifier      <- < IdentStart IdentCont* > Spacing */
	t.AddRule("Identifier")
	t.AddBegin()
	t.AddName("IdentStart")
	t.AddSequence()
	t.AddName("IdentCont")
	t.AddStar()
	t.AddSequence()
	t.AddEnd()
	t.AddSequence()
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* IdentStart      <- [a-zA-Z_] */
	t.AddRule("IdentStart")
	t.AddClass("a-zA-Z_")
	t.AddExpression()

	/* IdentCont       <- IdentStart / [0-9] */
	t.AddRule("IdentCont")
	t.AddName("IdentStart")
	t.AddClass("0-9")
	t.AddAlternate()
	t.AddExpression()

	/* Literal         <- ['] < (!['] Char )* > ['] Spacing
	   / ["] < (!["] Char )* > ["] Spacing */
	t.AddRule("Literal")
	t.AddClass("'")
	t.AddBegin()
	t.AddSequence()
	t.AddClass("'")
	t.AddPeekNot()
	t.AddName("Char")
	t.AddSequence()
	t.AddStar()
	t.AddSequence()
	t.AddEnd()
	t.AddSequence()
	t.AddClass("'")
	t.AddSequence()
	t.AddName("Spacing")
	t.AddSequence()
	t.AddClass(`"`)
	t.AddBegin()
	t.AddSequence()
	t.AddClass(`"`)
	t.AddPeekNot()
	t.AddName("Char")
	t.AddSequence()
	t.AddStar()
	t.AddSequence()
	t.AddEnd()
	t.AddSequence()
	t.AddClass(`"`)
	t.AddSequence()
	t.AddName("Spacing")
	t.AddSequence()
	t.AddAlternate()
	t.AddExpression()

	/* Class           <- '[' < (!']' Range)* > ']' Spacing */
	t.AddRule("Class")
	t.AddString("[")
	t.AddBegin()
	t.AddSequence()
	t.AddString("]")
	t.AddPeekNot()
	t.AddName("Range")
	t.AddSequence()
	t.AddStar()
	t.AddSequence()
	t.AddEnd()
	t.AddSequence()
	t.AddString("]")
	t.AddSequence()
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* Range           <- Char '-' Char / Char */
	t.AddRule("Range")
	t.AddName("Char")
	t.AddString("-")
	t.AddSequence()
	t.AddName("Char")
	t.AddSequence()
	t.AddName("Char")
	t.AddAlternate()
	t.AddExpression()

	/* Char            <- '\\' [abefnrtv'"\[\]\\]
	   / '\\' [0-3][0-7][0-7]
	   / '\\' [0-7][0-7]?
	   / '\\' '-'
	   / !'\\' . */
	t.AddRule("Char")
	t.AddString(`\\`)
	t.AddClass(`abefnrtv'"\[\]\\`)
	t.AddSequence()
	t.AddString(`\\`)
	t.AddClass("0-3")
	t.AddSequence()
	t.AddClass("0-7")
	t.AddSequence()
	t.AddClass("0-7")
	t.AddSequence()
	t.AddAlternate()
	t.AddString(`\\`)
	t.AddClass("0-7")
	t.AddSequence()
	t.AddClass("0-7")
	t.AddQuery()
	t.AddSequence()
	t.AddAlternate()
	t.AddString(`\\`)
	t.AddString("-")
	t.AddSequence()
	t.AddAlternate()
	t.AddString(`\\`)
	t.AddPeekNot()
	t.AddDot()
	t.AddSequence()
	t.AddAlternate()
	t.AddExpression()

	/* LEFTARROW       <- '<-' Spacing */
	t.AddRule("LEFTARROW")
	t.AddString("<-")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* SLASH           <- '/' Spacing */
	t.AddRule("SLASH")
	t.AddString("/")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* AND             <- '&' Spacing */
	t.AddRule("AND")
	t.AddString("&")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* NOT             <- '!' Spacing */
	t.AddRule("NOT")
	t.AddString("!")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* QUESTION        <- '?' Spacing */
	t.AddRule("QUESTION")
	t.AddString("?")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* STAR            <- '*' Spacing */
	t.AddRule("STAR")
	t.AddString("*")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* PLUS            <- '+' Spacing */
	t.AddRule("PLUS")
	t.AddString("+")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* OPEN            <- '(' Spacing */
	t.AddRule("OPEN")
	t.AddString("(")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* CLOSE           <- ')' Spacing */
	t.AddRule("CLOSE")
	t.AddString(")")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* DOT             <- '.' Spacing */
	t.AddRule("DOT")
	t.AddString(".")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* Spacing         <- (Space / Comment)* */
	t.AddRule("Spacing")
	t.AddName("Space")
	t.AddName("Comment")
	t.AddAlternate()
	t.AddStar()
	t.AddExpression()

	/* Comment         <- '#' (!EndOfLine .)* EndOfLine */
	t.AddRule("Comment")
	t.AddString("#")
	t.AddName("EndOfLine")
	t.AddPeekNot()
	t.AddDot()
	t.AddSequence()
	t.AddStar()
	t.AddSequence()
	t.AddName("EndOfLine")
	t.AddSequence()
	t.AddExpression()

	/* Space           <- ' ' / '\t' / EndOfLine */
	t.AddRule("Space")
	t.AddString(" ")
	t.AddString(`\t`)
	t.AddAlternate()
	t.AddName("EndOfLine")
	t.AddAlternate()
	t.AddExpression()

	/* EndOfLine       <- '\r\n' / '\n' / '\r' */
	t.AddRule("EndOfLine")
	t.AddString(`\r\n`)
	t.AddString(`\n`)
	t.AddAlternate()
	t.AddString(`\r`)
	t.AddAlternate()
	t.AddExpression()

	/* EndOfFile       <- !. */
	t.AddRule("EndOfFile")
	t.AddDot()
	t.AddPeekNot()
	t.AddExpression()

	/* Action          <- '{' < [^}]* > '}' Spacing */
	t.AddRule("Action")
	t.AddString("{")
	t.AddBegin()
	t.AddSequence()
	t.AddClass("^}")
	t.AddStar()
	t.AddSequence()
	t.AddEnd()
	t.AddSequence()
	t.AddString("}")
	t.AddSequence()
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* BEGIN           <- '<' Spacing */
	t.AddRule("BEGIN")
	t.AddString("<")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	/* END             <- '>' Spacing */
	t.AddRule("END")
	t.AddString(">")
	t.AddName("Spacing")
	t.AddSequence()
	t.AddExpression()

	t.Compile("bootstrap.go")
}