github.com/razvanm/vanadium-go-1.3@v0.0.0-20160721203343-4a65068e5915/src/cmd/yacc/doc.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 /* 6 7 Yacc is a version of yacc for Go. 8 It is written in Go and generates parsers written in Go. 9 10 Usage: 11 12 go tool yacc args... 13 14 It is largely transliterated from the Inferno version written in Limbo 15 which in turn was largely transliterated from the Plan 9 version 16 written in C and documented at 17 18 http://plan9.bell-labs.com/magic/man2html/1/yacc 19 20 Adepts of the original yacc will have no trouble adapting to this 21 form of the tool. 22 23 The directory $GOROOT/cmd/yacc/testdata/expr is a yacc program 24 for a very simple expression parser. See expr.y and main.go in that 25 directory for examples of how to write and build yacc programs. 26 27 The generated parser is reentrant. Parse expects to be given an 28 argument that conforms to the following interface: 29 30 type yyLexer interface { 31 Lex(lval *yySymType) int 32 Error(e string) 33 } 34 35 Lex should return the token identifier, and place other token 36 information in lval (which replaces the usual yylval). 37 Error is equivalent to yyerror in the original yacc. 38 39 Code inside the parser may refer to the variable yylex, 40 which holds the yyLexer passed to Parse. 41 42 Multiple grammars compiled into a single program should be placed in 43 distinct packages. If that is impossible, the "-p prefix" flag to 44 yacc sets the prefix, by default yy, that begins the names of 45 symbols, including types, the parser, and the lexer, generated and 46 referenced by yacc's generated code. Setting it to distinct values 47 allows multiple grammars to be placed in a single package. 48 49 */ 50 package main