Commit bcdcf395 authored by Roger Peppe's avatar Roger Peppe Committed by Ken Thompson

Add Error member to yyLexer type (yyError

has no access to yylex)

R=ken2, ken3
CC=golang-dev
https://golang.org/cl/813047
parent dbb62327
......@@ -24,10 +24,12 @@ argument that conforms to the following interface:
type yyLexer interface {
Lex(lval *yySymType) int
Error(e string)
}
Lex should return the token identifier, and place other token
information in lval (which replaces the usual yylval).
Error is equivalent to yyerror in the original yacc.
Code inside the parser may refer to the variable yylex
which holds the yyLexer passed to Parse.
......
......@@ -3080,6 +3080,7 @@ var yyDebug = 0
type yyLexer interface {
Lex(lval *yySymType) int
Error(s string)
}
const yyFlag = -1000
......@@ -3162,7 +3163,7 @@ ret1:
yystack:
/* put a state and value onto the stack */
if yyDebug >= 4 {
fmt.Printf("char %v in %v", yyTokname(yychar), yyStatname(yystate))
fmt.Printf("char %v in %v\n", yyTokname(yychar), yyStatname(yystate))
}
yyp++
......@@ -3228,7 +3229,7 @@ yydefault:
/* error ... attempt to resume parsing */
switch Errflag {
case 0: /* brand new error */
yyError("syntax error")
yylex.Error("syntax error")
Nerrs++
if yyDebug >= 1 {
fmt.Printf("%s", yyStatname(yystate))
......@@ -3273,7 +3274,7 @@ yydefault:
/* reduction by production yyn */
if yyDebug >= 2 {
fmt.Printf("reduce %v in:\n\t%v", yyn, yyStatname(yystate))
fmt.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
}
yynt := yyn
......
......@@ -215,7 +215,7 @@ expr0:
type UnitsLex int
func (l UnitsLex) Lex(yylval *yySymType) int {
func (_ UnitsLex) Lex(yylval *yySymType) int {
var c, i int
c = peekrune
......@@ -280,6 +280,10 @@ numb:
return VAL
}
func (_ UnitsLex) Error(s string) {
Error("syntax error, last name: %v", sym)
}
func main() {
var file string
......@@ -384,10 +388,6 @@ func rdigit(c int) bool {
return false
}
func yyError(s string) {
Error("syntax error, last name: %v", sym)
}
func Error(s string, v ...interface{}) {
fmt.Printf("%v: %v\n\t", lineno, line)
fmt.Printf(s, v)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment