yacc.1 - 9base - revived minimalist port of Plan 9 userland to Unix | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
yacc.1 (3556B) | |
--- | |
1 .TH YACC 1 | |
2 .SH NAME | |
3 yacc \- yet another compiler-compiler | |
4 .SH SYNOPSIS | |
5 .B yacc | |
6 [ | |
7 .I option ... | |
8 ] | |
9 .I grammar | |
10 .SH DESCRIPTION | |
11 .I Yacc | |
12 converts a context-free grammar and translation code | |
13 into a set of | |
14 tables for an LR(1) parser and translator. | |
15 The grammar may be ambiguous; | |
16 specified precedence rules are used to break ambiguities. | |
17 .PP | |
18 The output file, | |
19 .BR y.tab.c , | |
20 must be compiled by the C compiler | |
21 to produce a program | |
22 .LR yyparse . | |
23 This program must be loaded with a lexical analyzer function, | |
24 .B yylex(void) | |
25 (often generated by | |
26 .IR lex (1)), | |
27 with a | |
28 .B main(int argc, char *argv[]) | |
29 program, and with an error handling routine, | |
30 .BR yyerror(char*) . | |
31 .PP | |
32 The options are | |
33 .TP "\w'\fL-o \fIoutput\fLXX'u" | |
34 .BI -o " output | |
35 Direct output to the specified file instead of | |
36 .BR y.tab.c . | |
37 .TP | |
38 .BI -D n | |
39 Create file | |
40 .BR y.debug , | |
41 containing diagnostic messages. | |
42 To incorporate them in the parser, compile it with preprocessor symbol | |
43 .B yydebug | |
44 defined. | |
45 The amount of | |
46 diagnostic output from the parser is regulated by | |
47 value | |
48 .IR n . | |
49 The value 0 reports errors; 1 reports reductions; | |
50 higher values (up to 4) include more information about | |
51 state transitions. | |
52 .TP | |
53 .B -v | |
54 Create file | |
55 .BR y.output , | |
56 containing a description of the parsing tables and of | |
57 conflicts arising from ambiguities in the grammar. | |
58 .TP | |
59 .B -d | |
60 Create file | |
61 .BR y.tab.h , | |
62 containing | |
63 .B #define | |
64 statements that associate | |
65 .IR yacc -assigned | |
66 `token codes' with user-declared `token names'. | |
67 Include it in source files other than | |
68 .B y.tab.c | |
69 to give access to the token codes. | |
70 .TP | |
71 .BI -s " stem | |
72 Change the prefix | |
73 .L y | |
74 of the file names | |
75 .BR y.tab.c , | |
76 .BR y.tab.h , | |
77 .BR y.debug , | |
78 and | |
79 .B y.output | |
80 to | |
81 .IR stem . | |
82 .TP | |
83 .B -S | |
84 Write a parser that uses | |
85 Stdio | |
86 instead of the | |
87 .B print | |
88 routines in libc. | |
89 .TP | |
90 .BI -l | |
91 Disable #line directives in the generated parser. | |
92 .TP | |
93 .BI -a | |
94 Generate a parser that takes an argument of type Yyarg | |
95 and passes this argument to each invocation of the lexer | |
96 function, yylex. Yyarg contains per-instance state | |
97 and a single user-visible member, arg, of type void*. | |
98 .PP | |
99 The specification of | |
100 .I yacc | |
101 itself is essentially the same as the UNIX version | |
102 described in the references mentioned below. | |
103 Besides the | |
104 .B -D | |
105 option, the main relevant differences are: | |
106 .IP | |
107 The interface to the C environment is by default through | |
108 .B <libc.h> | |
109 rather than | |
110 .BR <stdio.h> ; | |
111 the | |
112 .B -S | |
113 option reverses this. | |
114 .IP | |
115 The parser accepts | |
116 .SM UTF | |
117 input text (see | |
118 .IR utf (7)), | |
119 which has a couple of effects. | |
120 First, the return value of | |
121 .B yylex() | |
122 no longer fits in a | |
123 .BR short ; | |
124 second, the starting value for non-terminals is now 0xE000 rather than 2… | |
125 .IP | |
126 The generated parser can be recursive: actions can call | |
127 .IR yyparse , | |
128 for example to implement a sort of | |
129 .B #include | |
130 statement in an interpreter. | |
131 .IP | |
132 Finally, some undocumented inner workings of the parser have been | |
133 changed, which may affect programs that know too much about its structur… | |
134 .SH FILES | |
135 .TF y.debug.xxxxx | |
136 .TP | |
137 .B y.output | |
138 .TP | |
139 .B y.tab.c | |
140 .TP | |
141 .B y.tab.h | |
142 .TP | |
143 .B y.debug | |
144 .TP | |
145 .B y.tmp.* | |
146 temporary file | |
147 .TP | |
148 .B y.acts.* | |
149 temporary file | |
150 .TP | |
151 .B \*9/lib/yaccpar | |
152 parser prototype | |
153 .TP | |
154 .B \*9/lib/yaccpars | |
155 parser prototype using stdio | |
156 .SH SOURCE | |
157 .B \*9/src/cmd/yacc.c | |
158 .SH "SEE ALSO" | |
159 .IR lex (1) | |
160 .br | |
161 S. C. Johnson and R. Sethi, | |
162 ``Yacc: A parser generator'', | |
163 .I | |
164 Unix Research System Programmer's Manual, | |
165 Tenth Edition, Volume 2 | |
166 .br | |
167 B. W. Kernighan and Rob Pike, | |
168 .I | |
169 The UNIX Programming Environment, | |
170 Prentice Hall, 1984 | |
171 .SH BUGS | |
172 The parser may not have full information when it writes to | |
173 .B y.debug | |
174 so that the names of the tokens returned by | |
175 .L yylex | |
176 may be missing. |