GoPLS Viewer

Home|gopls/cmd/goyacc/doc.go
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/*
6Goyacc is a version of yacc for Go.
7It is written in Go and generates parsers written in Go.
8
9Usage:
10
11    goyacc args...
12
13It is largely transliterated from the Inferno version written in Limbo
14which in turn was largely transliterated from the Plan 9 version
15written in C and documented at
16
17    https://9p.io/magic/man2html/1/yacc
18
19Adepts of the original yacc will have no trouble adapting to this
20form of the tool.
21
22The directory $GOPATH/src/golang.org/x/tools/cmd/goyacc/testdata/expr
23is a yacc program for a very simple expression parser. See expr.y and
24main.go in that directory for examples of how to write and build
25goyacc programs.
26
27The generated parser is reentrant. The parsing function yyParse expects
28to be given an argument that conforms to the following interface:
29
30    type yyLexer interface {
31        Lex(lval *yySymType) int
32        Error(e string)
33    }
34
35Lex should return the token identifier, and place other token
36information in lval (which replaces the usual yylval).
37Error is equivalent to yyerror in the original yacc.
38
39Code inside the grammar actions may refer to the variable yylex,
40which holds the yyLexer passed to yyParse.
41
42Clients that need to understand more about the parser state can
43create the parser separately from invoking it. The function yyNewParser
44returns a yyParser conforming to the following interface:
45
46    type yyParser interface {
47        Parse(yyLex) int
48        Lookahead() int
49    }
50
51Parse runs the parser; the top-level call yyParse(yylex) is equivalent
52to yyNewParser().Parse(yylex).
53
54Lookahead can be called during grammar actions to read (but not consume)
55the value of the current lookahead token, as returned by yylex.Lex.
56If there is no current lookahead token (because the parser has not called Lex
57or has consumed the token returned by the most recent call to Lex),
58Lookahead returns -1. Calling Lookahead is equivalent to reading
59yychar from within in a grammar action.
60
61Multiple grammars compiled into a single program should be placed in
62distinct packages.  If that is impossible, the "-p prefix" flag to
63goyacc sets the prefix, by default yy, that begins the names of
64symbols, including types, the parser, and the lexer, generated and
65referenced by yacc's generated code.  Setting it to distinct values
66allows multiple grammars to be placed in a single package.
67*/
68package main
69
MembersX
Members
X