diff --git a/internal/auth/auth.go b/internal/auth/auth.go deleted file mode 100755 index 5f9c34b..0000000 --- a/internal/auth/auth.go +++ /dev/null @@ -1,40 +0,0 @@ -package auth - -// import ( -// "context" -// "log" - -// "golang.org/x/oauth2" - -// oidc "github.com/coreos/go-oidc" -// ) - -// type Authenticator struct { -// Provider *oidc.Provider -// Config oauth2.Config -// Ctx context.Context -// } - -// func NewAuthenticator(domain, clientID, clientSecret, callback string) (*Authenticator, error) { -// ctx := context.Background() - -// provider, err := oidc.NewProvider(ctx, domain) -// if err != nil { -// log.Printf("failed to get provider: %v", err) -// return nil, err -// } - -// conf := oauth2.Config{ -// ClientID: clientID, -// ClientSecret: clientSecret, -// RedirectURL: callback, -// Endpoint: provider.Endpoint(), -// Scopes: []string{oidc.ScopeOpenID, "profile"}, -// } - -// return &Authenticator{ -// Provider: provider, -// Config: conf, -// Ctx: ctx, -// }, nil -// } diff --git a/internal/auth/callback.go b/internal/auth/callback.go deleted file mode 100755 index 9fcf46f..0000000 --- a/internal/auth/callback.go +++ /dev/null @@ -1,89 +0,0 @@ -package auth - -// import ( -// "context" -// "log" -// "net/http" - -// oidc "github.com/coreos/go-oidc" -// ) - -// func NewCallbackHandler(c Config) http.HandlerFunc { - -// return func(w http.ResponseWriter, r *http.Request) { -// session, err := Store.Get(r, SessionName) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// if r.URL.Query().Get("state") != session.Values["state"] { -// http.Error(w, "Invalid state parameter", http.StatusBadRequest) -// return -// } - -// authenticator, err := NewAuthenticator(c.Domain, c.ClientID, c.ClientSecret, c.CallbackURL) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// token, err := authenticator.Config.Exchange(context.TODO(), r.URL.Query().Get("code")) -// if err != nil { -// log.Printf("no token found: %v", err) -// w.WriteHeader(http.StatusUnauthorized) -// return -// } - -// rawIDToken, ok := token.Extra("id_token").(string) -// if !ok { -// http.Error(w, "No id_token field in oauth2 token.", http.StatusInternalServerError) -// return -// } - -// oidcConfig := &oidc.Config{ -// ClientID: c.ClientID, -// } - -// idToken, err := authenticator.Provider.Verifier(oidcConfig).Verify(context.TODO(), rawIDToken) - -// if err != nil { -// http.Error(w, "Failed to verify ID Token: "+err.Error(), http.StatusInternalServerError) -// return -// } - -// // Getting now the userInfo -// user := User{} -// if err := idToken.Claims(&user); err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// session.Values["id_token"] = rawIDToken -// session.Values["access_token"] = token.AccessToken -// session.Values["profile"] = user -// err = session.Save(r, w) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// // if application ID is non existent, and therefore does not have a tenant -// // Create or associate? -// // Create: -// // - Create Tenant -// // - Specify plan -// // - Specify payment info -// // - Associate Tenant -// // - by email address domain? -// //set tenant ID on application ID in App Metadata on user - -// // if c.CallbackFunc != nil { -// // c.CallbackFunc(c, user) -// // } else { -// // Redirect to logged in page -// http.Redirect(w, r, c.RedirectURL, http.StatusSeeOther) -// // } - -// } -// } diff --git a/internal/auth/config.go b/internal/auth/config.go deleted file mode 100755 index 4c8eb4f..0000000 --- a/internal/auth/config.go +++ /dev/null @@ -1,36 +0,0 @@ -package auth - -// import ( -// "fmt" -// "os" -// ) - -// type Config struct { -// Domain string -// ClientID string -// ClientSecret string -// ManagementClientID string -// ManagementClientSecret string - -// CallbackURL string -// RedirectURL string -// } - -// func FromEnv() Config { -// return Config{ -// Domain: os.Getenv("AUTH_DOMAIN"), -// ClientID: os.Getenv("AUTH_CLIENT_ID"), -// ClientSecret: os.Getenv("AUTH_CLIENT_SECRET"), -// ManagementClientID: os.Getenv("AUTH_MGMT_CLIENT_ID"), -// ManagementClientSecret: os.Getenv("AUTH_MGMT_CLIENT_SECRET"), - -// CallbackURL: os.Getenv("AUTH_CALLBACK_URL"), -// RedirectURL: "/user", -// } -// } - -// func PrintConfig() { -// fmt.Printf("%#v\n", FromEnv()) -// } - -// type CallbackFunc func(c Config, u User) error diff --git a/internal/auth/login.go b/internal/auth/login.go deleted file mode 100755 index 7f4c0f2..0000000 --- a/internal/auth/login.go +++ /dev/null @@ -1,43 +0,0 @@ -// routes/login/login.go - -package auth - -// import ( -// "crypto/rand" -// "encoding/base64" -// "net/http" -// ) - -// func NewLoginHandler(c Config) http.HandlerFunc { -// return func(w http.ResponseWriter, r *http.Request) { -// // Generate random state -// b := make([]byte, 32) -// _, err := rand.Read(b) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } -// state := base64.StdEncoding.EncodeToString(b) - -// session, err := Store.Get(r, SessionName) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } -// session.Values["state"] = state -// err = session.Save(r, w) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// authenticator, err := NewAuthenticator(c.Domain, c.ClientID, c.ClientSecret, c.CallbackURL) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// http.Redirect(w, r, authenticator.Config.AuthCodeURL(state), http.StatusTemporaryRedirect) -// } - -// } diff --git a/internal/auth/logout.go b/internal/auth/logout.go deleted file mode 100755 index 9e4860f..0000000 --- a/internal/auth/logout.go +++ /dev/null @@ -1,43 +0,0 @@ -package auth - -// import ( -// "net/http" -// "net/url" -// ) - -// func LogoutHandler(w http.ResponseWriter, r *http.Request) { - -// if cook, err := r.Cookie(SessionName); err == nil { -// cook.MaxAge = -1 -// http.SetCookie(w, cook) -// } - -// domain := "dev-pb4s8m55.auth0.com" - -// // var Url *url.URL -// URL, err := url.Parse("https://" + domain) - -// if err != nil { -// panic(err.Error()) -// } - -// session, err := Store.Get(r, SessionName) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } -// session.Options.MaxAge = -1 - -// err = session.Save(r, w) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// } - -// URL.Path += "/v2/logout" -// parameters := url.Values{} -// parameters.Add("returnTo", "http://localhost:3000") -// parameters.Add("client_id", "ae1e02bTwXA35O3r3Xxk4kbRf31j5ge9") -// URL.RawQuery = parameters.Encode() - -// http.Redirect(w, r, URL.String(), http.StatusTemporaryRedirect) -// } diff --git a/internal/auth/middleware.go b/internal/auth/middleware.go deleted file mode 100755 index 2df42ab..0000000 --- a/internal/auth/middleware.go +++ /dev/null @@ -1,19 +0,0 @@ -package auth - -// import "net/http" - -// func IsAuthenticated(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) { - -// session, err := Store.Get(r, SessionName) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// if _, ok := session.Values["profile"]; !ok { -// //TODO allow customization of redirect -// http.Redirect(w, r, "/", http.StatusSeeOther) -// } else { -// next(w, r) -// } -// } diff --git a/internal/auth/service.go b/internal/auth/service.go deleted file mode 100755 index 2a993f9..0000000 --- a/internal/auth/service.go +++ /dev/null @@ -1,38 +0,0 @@ -package auth - -// import ( -// "github.com/jchenry/x/internal/http" -// ) - -// func Service(c Config) ServiceInstance { -// return ServiceInstance{c: c} -// } - -// type ServiceInstance struct { -// c Config -// } - -// func (si ServiceInstance) Register(m *http.Mux) { -// } - -// func (si ServiceInstance) Register(uriBase string, s *_http.Server) { - -// s.Get(uriBase+"/login", "login endpoint", http.HandlerFunc(NewLoginHandler(si.c))) -// s.Get(uriBase+"/logout", "logout endpoint", http.HandlerFunc(LogoutHandler)) -// s.Get(uriBase+"/callback", "oidc callback", http.HandlerFunc(NewCallbackHandler(si.c))) -// s.Get(uriBase+"/user", "user info endpoint", negroni.New( -// negroni.HandlerFunc(IsAuthenticated), -// negroni.Wrap(http.HandlerFunc(UserHandler)), -// )) -// } - -// func (si ServiceInstance) UpdateUser(u User) error { -// m, err := management.New(si.c.Domain, si.c.ManagementClientID, si.c.ManagementClientSecret) -// if err != nil { -// return err -// } - -// um := management.NewUserManager(m) - -// return um.Update(u.ID, &management.User{AppMetadata: u.Apps}) -// } diff --git a/internal/auth/session.go b/internal/auth/session.go deleted file mode 100755 index d237604..0000000 --- a/internal/auth/session.go +++ /dev/null @@ -1,19 +0,0 @@ -package auth - -// import ( -// "encoding/gob" - -// "github.com/gorilla/sessions" -// ) - -// const SessionName = "auth-session" - -// var ( -// Store *sessions.FilesystemStore -// ) - -// func Init() error { -// Store = sessions.NewFilesystemStore("", []byte("something-very-secret")) -// gob.Register(User{}) -// return nil -// } diff --git a/internal/auth/user.go b/internal/auth/user.go deleted file mode 100755 index bb5dc3e..0000000 --- a/internal/auth/user.go +++ /dev/null @@ -1,28 +0,0 @@ -package auth - -// import ( -// "net/http" - -// jchenry_http "github.com/jchenry/x/internal/http" -// ) - -// func UserHandler(w http.ResponseWriter, r *http.Request) { - -// session, err := Store.Get(r, SessionName) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// jchenry_http.RenderTemplate(w, "user", session.Values["profile"]) -// } - -// type User struct { -// ID string `json:"sub"` -// Email string `json:"email"` -// FirstName string `json:"given_name"` -// LastName string `json:"family_name"` -// Picture string `json:"picture"` -// Nickname string `json:"nickname"` -// Apps map[string]interface{} `json:"app_metadata,omitempty"` -// } diff --git a/internal/crud/service.go b/internal/crud/service.go deleted file mode 100644 index 46d7726..0000000 --- a/internal/crud/service.go +++ /dev/null @@ -1,42 +0,0 @@ -package crud - -// import "github.com/jchenry/jchenry/pkg/db" - -// type Service interface { -// // Find returns a pointer to an array of the results found based on params -// // or an error -// Find(entityArrPtr interface{}, params map[string]interface{}) (err error) -// // Create returns the identifier for the newly accepted entity, or error -// Create(entityPtr interface{}) (err error) -// // Update returns the id of the newly updated entity, or error -// Update(entityPtr interface{}) (err error) -// // Delete returns whether the entity, specified by id, was successfully deleted -// // or error -// Delete(entityPtr interface{}) error -// } - -// type Storage struct { -// Actor db.Actor -// FindOp func(entityArrPtr interface{}, params map[string]interface{}) db.Func -// CreateOp func(entityPtr interface{}) db.Func -// UpdateOp func(entityPtr interface{}) db.Func -// DeleteOp func(entityPtr interface{}) db.Func -// } - -// func (s *Storage) Find(entityArrPtr interface{}, params map[string]interface{}) (err error) { -// s.Actor.ActionChan <- s.FindOp(entityArrPtr, params) -// return nil -// } - -// func (s *Storage) Create(entityPtr interface{}) (err error) { -// s.Actor.ActionChan <- s.CreateOp(entityPtr) -// return nil -// } -// func (s *Storage) Update(entityPtr interface{}) (err error) { -// s.Actor.ActionChan <- s.UpdateOp(entityPtr) -// return nil -// } -// func (s *Storage) Delete(entityPtr interface{}) error { -// s.Actor.ActionChan <- s.DeleteOp(entityPtr) -// return nil -// } diff --git a/internal/data/db_collection_store.go b/internal/data/db_collection_store.go deleted file mode 100755 index d7214ba..0000000 --- a/internal/data/db_collection_store.go +++ /dev/null @@ -1,56 +0,0 @@ -package data - -import ( - "database/sql" - - "rsc.io/dbstore" -) - -type DatabaseCollectionInstance struct { - db *sql.DB - store *dbstore.Storage -} - -func DatabaseCollection( - db *sql.DB, - createTables bool, - types ...interface{}) (*DatabaseCollectionInstance, error) { - - dbi := &DatabaseCollectionInstance{ - db: db, - store: new(dbstore.Storage), - } - - for _, t := range types { - dbi.store.Register(t) - } - - if err := dbi.store.CreateTables(db); err != nil { - return nil, err - } - - return dbi, nil -} - -// Find returns a pointer to an array of the results found based on params -// or an error -func (d *DatabaseCollectionInstance) Find(entityArrPtr interface{}, params map[string]interface{}) error { - return d.store.Select(d.db, entityArrPtr, "") -} - -// Create returns the identifier for the newly accepted entity, or error -func (d *DatabaseCollectionInstance) Create(entityPtr interface{}) error { - return d.store.Insert(d.db, entityPtr) -} - -// Update returns the id of the newly updated entity, or error -func (d *DatabaseCollectionInstance) Update(entityPtr interface{}) error { - return d.store.Insert(d.db, entityPtr) - // return nil -} - -// Delete returns whether the entity, specified by id, was successfully deleted -// or error -func (d *DatabaseCollectionInstance) Delete(entityPtr interface{}) error { - return d.store.Delete(d.db, entityPtr) -} diff --git a/internal/gopher/client.go b/internal/gopher/client.go deleted file mode 100644 index 4762e24..0000000 --- a/internal/gopher/client.go +++ /dev/null @@ -1,79 +0,0 @@ -package gopher - -import ( - "bufio" - "bytes" - "net" - "sync" -) - -const ( - // RFC 1436 types - Text byte = '0' - Submenu byte = '1' - Nameserver byte = '2' - Error byte = '3' - Binhex byte = '4' - DOS byte = '5' - UUencode byte = '6' - Search byte = '7' - Telnet byte = '8' - Binary byte = '9' - Mirror byte = '+' - Gif byte = 'g' - Image byte = 'I' - Telnet3270 byte = 'T' - - // UnRFC'd Extensions - Doc byte = 'd' - Html byte = 'h' - Info byte = 'i' - Sound byte = 's' -) - -type Client struct { - Socket net.Conn - in *bufio.Reader - out *bufio.Writer - init sync.Once -} - -func (c *Client) Select(selector string) (m Menu, err error) { - c.init.Do(func() { - c.in = bufio.NewReader(c.Socket) - c.out = bufio.NewWriter(c.Socket) - }) - c.out.WriteString(selector) - - for { - if l, _, err := c.in.ReadLine(); err == nil { - s := Selector{} - s.Type = l[0] - bs := bytes.Split(l[1:], []byte{'\t'}) - s.Display = string(bs[0]) - s.Path = string(bs[1]) - s.Hostname = string(bytes.Join(bs[2:3], []byte{':'})) - m = append(m, s) - } else { - break - } - } - - // s := Selector{ - // Type: Text, - // Display: "", - // Hostname: "", - // Path: "", - // } - return Menu{}, nil -} - -type Menu []Selector - -type Selector struct { - Type byte - Display string - Path string - Hostname string - Port string -} diff --git a/internal/http/error.go b/internal/http/error.go deleted file mode 100644 index a36f17f..0000000 --- a/internal/http/error.go +++ /dev/null @@ -1,14 +0,0 @@ -package http - -import "net/http" - -// Error is an error wrapper for the standard HTTP error codes -type Error int - -func (e Error) Error() string { - return http.StatusText(int(e)) -} - -func (e Error) Code() int { - return int(e) -} diff --git a/internal/http/julienschmidt_router.go b/internal/http/julienschmidt_router.go deleted file mode 100755 index 076bb90..0000000 --- a/internal/http/julienschmidt_router.go +++ /dev/null @@ -1,36 +0,0 @@ -package http - -import ( - "net/http" - "net/url" - - "github.com/julienschmidt/httprouter" -) - -type JulienschmidtHTTPRouter struct { - httprouter.Router -} - -func NewJulienschmidtHTTPRouter() *JulienschmidtHTTPRouter { - return &JulienschmidtHTTPRouter{ - httprouter.Router{ - RedirectTrailingSlash: true, - RedirectFixedPath: true, - HandleMethodNotAllowed: true, - HandleOPTIONS: true, - }, - } -} - -func (j *JulienschmidtHTTPRouter) AddHandler(method, path string, handler http.Handler) { - j.Handle(method, path, func(w http.ResponseWriter, req *http.Request, params httprouter.Params) { - if req.Form == nil { - req.Form = url.Values{} - } - for _, param := range params { - // stuffing values back into request.Form to honor the handler contract - req.Form.Add(param.Key, param.Value) - } - handler.ServeHTTP(w, req) - }) -} diff --git a/internal/http/mux.go b/internal/http/mux.go deleted file mode 100644 index ff066a2..0000000 --- a/internal/http/mux.go +++ /dev/null @@ -1,8 +0,0 @@ -package http - -import "net/http" - -type Mux interface { - Handle(pattern string, handler http.Handler) - HandleFunc(pattern string, handler func(http.ResponseWriter, *http.Request)) -} diff --git a/internal/http/server.go b/internal/http/server.go deleted file mode 100755 index 363b0a9..0000000 --- a/internal/http/server.go +++ /dev/null @@ -1,104 +0,0 @@ -package http - -import ( - - // "log" - "net/http" - go_http "net/http" -) - -type Middleware interface { - go_http.Handler - UseHandler(handler http.Handler) -} - -type Router interface { - go_http.Handler - ServeFiles(path string, root go_http.FileSystem) - AddHandler(method, path string, handler go_http.Handler) -} - -// type Service interface { -// Register(uriBase string, restServer *Server) -// } - -// type ServiceFunc func(uriBase string, restServer *Server) - -// func (f ServiceFunc) Register(uriBase string, restServer *Server) { -// f(uriBase, restServer) -// } - -// var docString = "%s \t%s\t- %s" - -type Server struct { - router Router - middleware Middleware -} - -// func NewServer(m Middleware, r Router) *Server { -// s := &Server{ -// router: r, -// middleware: m, -// } - -// s.middleware.UseHandler(s.router) - -// return s -// } - -func (r *Server) Get(path string, documentation string, handle go_http.Handler) *Server { - r.handle("GET", path, documentation, handle) - return r -} - -// func (r *Server) Patch(path string, documentation string, handle go_http.Handler) *Server { -// r.handle("PATCH", path, documentation, handle) - -// return r -// } -func (r *Server) Post(path string, documentation string, handle go_http.Handler) *Server { - r.handle("POST", path, documentation, handle) - return r -} - -// func (r *Server) Put(path string, documentation string, handle go_http.Handler) *Server { -// r.handle("PUT", path, documentation, handle) - -// return r -// } -// func (r *Server) Delete(path string, documentation string, handle go_http.Handler) *Server { -// r.handle("DELETE", path, documentation, handle) - -// return r -// } -func (r *Server) handle(method, path string, documentation string, handler go_http.Handler) { - // log.Printf(docString, method, path, documentation) - r.router.AddHandler(method, path, handler) -} - -// func (r *Server) Banner(banner string) *Server { -// log.Printf(banner) -// return r -// } - -// func (r *Server) Service(basePath string, service Service) *Server { -// service.Register(basePath, r) -// return r -// } -// func (r *Server) Static(path string, root go_http.FileSystem) *Server { -// r.router.ServeFiles(path, root) -// return r -// } -// func (r *Server) Middleware(handler go_http.Handler) *Server { -// r.middleware.UseHandler(handler) -// return r -// } - -// func (r *Server) Run(addr string) { -// log.Printf("listening on %s", addr) -// log.Fatal(http.ListenAndServe(addr, r.middleware)) -// } - -// func (r *Server) ServeHTTP(w go_http.ResponseWriter, req *go_http.Request) { -// r.middleware.ServeHTTP(w, req) -// } diff --git a/internal/http/server_test.go b/internal/http/server_test.go deleted file mode 100755 index bbdb381..0000000 --- a/internal/http/server_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package http_test - -// import ( -// "os" - -// "github.com/codegangsta/negroni" -// "github.com/jchenry/jchenry/http" -// "github.com/jchenry/jchenry/rest" -// ) - -// func ExampleServer() { -// type contact struct { -// ID int64 `json:"id"` -// First string `json:"firstName"` -// Last string `json:"lastName"` -// Email string `json:"emailAddress"` -// } - -// s := http.NewServer( -// negroni.Classic(), -// http.NewJulienschmidtHTTPRouter()). -// Service("", -// rest.Collection(new(contact), -// nil, -// ), -// ) - -// port := os.Getenv("PORT") -// if port == "" { -// port = "8080" -// } - -// s.Run(":" + port) -// } diff --git a/internal/http/service.go b/internal/http/service.go deleted file mode 100644 index 9adb4d8..0000000 --- a/internal/http/service.go +++ /dev/null @@ -1,38 +0,0 @@ -package http - -// import "net/http" - -// type Service interface { -// Register(s Server) -// } - -// type Mux interface { -// Head(pattern string, handler http.Handler) -// Post(pattern string, handler http.Handler) -// Put(pattern string, handler http.Handler) -// Patch(pattern string, handler http.Handler) -// Delete(pattern string, handler http.Handler) -// Connect(pattern string, handler http.Handler) -// Options(pattern string, handler http.Handler) -// Trace(pattern string, handler http.Handler) -// } - -// MethodGet = "GET" -// MethodHead = "HEAD" -// MethodPost = "POST" -// MethodPut = "PUT" -// MethodPatch = "PATCH" // RFC 5789 -// MethodDelete = "DELETE" -// MethodConnect = "CONNECT" -// MethodOptions = "OPTIONS" -// MethodTrace = "TRACE" - -type Service interface { - Register(m *Mux) error -} - -type ServiceFunc func(m *Mux) error - -func (s ServiceFunc) Register(m *Mux) error { - return s(m) -} diff --git a/internal/http/templates.go b/internal/http/templates.go deleted file mode 100755 index 0e6500c..0000000 --- a/internal/http/templates.go +++ /dev/null @@ -1,30 +0,0 @@ -package http - -import ( - "net/http" - "os" - "path/filepath" - "text/template" -) - -func RenderTemplate(w http.ResponseWriter, tmpl string, data interface{}) { - cwd, _ := os.Getwd() - // t, err := template.ParseFiles(filepath.Join(cwd, "./routes/"+tmpl+"/"+tmpl+".html")) - t, err := template.ParseFiles(filepath.Join(cwd, "./"+tmpl+".html")) - - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - err = t.Execute(w, data) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - } -} - -func render(w http.ResponseWriter, tmpl string, data interface{}) (err error) { - if t, err := template.ParseFiles(tmpl); err == nil { - return t.Execute(w, data) - } - return err -} diff --git a/internal/http/util.go b/internal/http/util.go deleted file mode 100755 index c9ec641..0000000 --- a/internal/http/util.go +++ /dev/null @@ -1,62 +0,0 @@ -package http - -import ( - "encoding/json" - "errors" - "log" - "net/http" -) - -const ( - HeaderContentType = "Content-Type" - MimeJSON = "application/json" -) - -//ErrNotFound is returned when an entity could not be found in Find -var ErrNotFound = errors.New("entity not found") - -func WriteEntity(w http.ResponseWriter, entityPtr interface{}) error { - w.Header().Set(HeaderContentType, MimeJSON) - - var out []byte - var err error - - if entityPtr == nil { - return nil - } - - out, err = json.MarshalIndent(entityPtr, " ", " ") - - if err != nil { - return WriteErrorResponse(w, http.StatusInternalServerError, err.Error()) - } - - if _, err = w.Write(out); err != nil { - return err - } - return nil -} - -func ReadEntity(request *http.Request, entityPtr interface{}) error { - decoder := json.NewDecoder(request.Body) - err := decoder.Decode(entityPtr) - if err != nil { - return err - } - - return nil -} - -// ErrorResponse - A structured Error HTTP response -type ErrorResponse struct { - Status int - DeveloperMessage string -} - -// WriteErrorResponse - Creates a new ErrorResponse and writes it to -// the response -func WriteErrorResponse(w http.ResponseWriter, status int, message string) error { - log.Println(status, message) - w.WriteHeader(status) - return WriteEntity(w, ErrorResponse{status, message}) -} diff --git a/internal/model/database_model.go b/internal/model/database_model.go deleted file mode 100755 index 1ce3aef..0000000 --- a/internal/model/database_model.go +++ /dev/null @@ -1,38 +0,0 @@ -package model - -// import "database/sql" - -// type Storage interface { -// Insert(ctxt StorageContext, val interface{}) error -// Read(ctxt StorageContext, val interface{}, columns ...string) error -// Select(ctxt StorageContext, val interface{}, query string, args ...interface{}) error -// Write(ctxt StorageContext, val interface{}, columns ...string) error -// Delete(ctxt StorageContext, val interface{}) error -// } - -// type StorageContext interface { -// Exec(query string, args ...interface{}) (sql.Result, error) -// Query(query string, args ...interface{}) (*sql.Rows, error) -// } - -// type ModelService struct { -// db Storage -// ctx *StorageContext -// } - -// // Find returns a pointer to an array of the results found based on params -// // or an error -// func (s *ModelService) Find(entityArrPtr interface{}, params map[string]interface{}) (err error) { -// s.db.Select(s.ctx, ) - -// } - -// // Create returns the identifier for the newly accepted entity, or error -// func (s *ModelService) Create(entityPtr interface{}) (id interface{}, err error) {} - -// // Update returns the id of the newly updated entity, or error -// func (s *ModelService) Update(entityPtr interface{}) (id interface{}, err error) {} - -// // Delete returns whether the entity, specified by id, was successfully deleted -// // or error -// func (s *ModelService) Delete(entityPtr interface{}) error {} diff --git a/internal/payments/config.go b/internal/payments/config.go deleted file mode 100755 index 15875d1..0000000 --- a/internal/payments/config.go +++ /dev/null @@ -1,25 +0,0 @@ -package payments - -// import ( -// "fmt" -// "os" -// ) - -// type Config struct { -// StripeKey string -// StripeProductID string -// RedirectURL string -// TenantSetup func(subscriptionID, customerID string) (tenantID string) -// } - -// func FromEnv() Config { -// return Config{ -// StripeKey: os.Getenv("STRIPE_KEY"), -// StripeProductID: os.Getenv("STRIPE_PRODUCT_ID"), -// RedirectURL: "/", -// } -// } - -// func PrintConfig() { -// fmt.Printf("%#v\n", FromEnv()) -// } diff --git a/internal/payments/doc.go b/internal/payments/doc.go deleted file mode 100755 index 929fe39..0000000 --- a/internal/payments/doc.go +++ /dev/null @@ -1 +0,0 @@ -package payments diff --git a/internal/payments/middleware.go b/internal/payments/middleware.go deleted file mode 100755 index 6c4d407..0000000 --- a/internal/payments/middleware.go +++ /dev/null @@ -1,26 +0,0 @@ -package payments - -// import ( -// "net/http" - -// "github.com/jchenry/x/internal/auth" -// ) - -// func HasTenantAndSubscription(productID string) func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) { -// return func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) { -// session, err := auth.Store.Get(r, auth.SessionName) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// if u, ok := session.Values["profile"]; ok { -// user := u.(auth.User) -// if _, exist := user.Apps[productID]; exist { -// next(w, r) -// } else { -// http.Redirect(w, r, "/subscription", http.StatusSeeOther) -// } -// } -// } -// } diff --git a/internal/payments/service.go b/internal/payments/service.go deleted file mode 100755 index f89ea35..0000000 --- a/internal/payments/service.go +++ /dev/null @@ -1,121 +0,0 @@ -package payments - -// import ( -// "fmt" -// "net/http" - -// "github.com/codegangsta/negroni" -// "github.com/jchenry/x/internal/auth" -// _http "github.com/jchenry/x/internal/http" -// "github.com/stripe/stripe-go" -// "github.com/stripe/stripe-go/client" -// "github.com/stripe/stripe-go/customer" -// "github.com/stripe/stripe-go/plan" -// "github.com/stripe/stripe-go/product" -// "github.com/stripe/stripe-go/sub" -// ) - -// func Service(c Config, auth *auth.ServiceInstance) ServiceInstance { -// stripe.Key = c.StripeKey -// sc := &client.API{} -// sc.Init(c.StripeKey, nil) -// return ServiceInstance{ -// c: c, -// stripe: sc, -// auth: auth, -// } -// } - -// type ServiceInstance struct { -// c Config -// stripe *client.API -// auth *auth.ServiceInstance -// } - -// func (si ServiceInstance) Register(uriBase string, s *_http.Server) { -// s.Get(uriBase+"/subscription", "subscription info endpoint", negroni.New( -// negroni.HandlerFunc(auth.IsAuthenticated), -// negroni.Wrap(http.HandlerFunc(si.subscriptionHandler)), -// )).Post(uriBase+"/subscription", "subscription payment endpoint", negroni.New( -// negroni.HandlerFunc(auth.IsAuthenticated), -// negroni.Wrap(http.HandlerFunc(si.paymentHandler)), -// )) - -// } - -// func (si ServiceInstance) subscriptionHandler(w http.ResponseWriter, r *http.Request) { - -// prod, _ := product.Get(si.c.StripeProductID, nil) - -// params := &stripe.PlanListParams{ -// Product: &si.c.StripeProductID, -// } - -// it := plan.List(params) -// var plans []stripe.Plan -// for it.Next() { -// plans = append(plans, *it.Plan()) -// } -// _http.RenderTemplate(w, "subscription", offering{Product: *prod, Plans: plans}) -// } - -// type offering struct { -// Product stripe.Product -// Plans []stripe.Plan -// } - -// func (si ServiceInstance) paymentHandler(w http.ResponseWriter, r *http.Request) { - -// session, err := auth.Store.Get(r, auth.SessionName) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// if u, ok := session.Values["profile"]; ok { -// user := u.(auth.User) -// r.ParseForm() - -// params := &stripe.CustomerParams{ -// Email: stripe.String(user.Email), -// Name: stripe.String(fmt.Sprintf("%s, %s", user.LastName, user.FirstName)), -// } -// params.SetSource(r.PostFormValue("stripeToken")) -// cus, err := customer.New(params) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// p := &stripe.SubscriptionParams{ -// Customer: stripe.String(cus.ID), -// Items: []*stripe.SubscriptionItemsParams{ -// { -// Plan: stripe.String(r.PostFormValue("plan")), -// }, -// }, -// } -// s, err := sub.New(p) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// if si.c.TenantSetup == nil { -// panic("need code to setup the tenant") -// } - -// if user.Apps == nil { -// user.Apps = map[string]interface{}{} -// } -// user.Apps[si.c.StripeProductID] = si.c.TenantSetup(s.ID, user.ID) -// err = si.auth.UpdateUser(user) -// if err != nil { -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } - -// http.Redirect(w, r, si.c.RedirectURL, http.StatusSeeOther) - -// } -// } diff --git a/internal/pic/parser.go b/internal/pic/parser.go deleted file mode 100755 index da159a3..0000000 --- a/internal/pic/parser.go +++ /dev/null @@ -1,1483 +0,0 @@ -package pic - -// type yySymType struct{ -// yys int -// str string -// result Result -// } - -// /* -// * Changes by Gunnar Ritter, Freiburg i. Br., Germany, October 2005. -// * -// * Derived from Plan 9 v4 /sys/src/cmd/pic/ -// * -// * Copyright (C) 2003, Lucent Technologies Inc. and others. -// * All Rights Reserved. -// * -// * Distributed under the terms of the Lucent Public License Version 1.02. -// */ - -// /* Sccsid @(#)picy.y 1.4 (gritter) 11/28/05 */ - -// // #include -// // #include "pic.h" -// // #include -// // #include -// // #include - -// // #ifndef RAND_MAX -// // #define RAND_MAX 32767 -// // #endif - -// // YYSTYPE y; - -// // extern void yyerror(char *); -// // extern int yylex(void); -// const BOX = 1 -// const LINE = 2 -// const ARROW = 3 -// const CIRCLE = 4 -// const ELLIPSE = 5 -// const ARC = 6 -// const SPLINE = 7 -// const BLOCK = 8 -// const TEXT = 9 -// const TROFF = 10 -// const MOVE = 11 -// const BLOCKEND = 12 -// const PLACE = 13 -// const PRINT = 57359 -// const RESET = 57360 -// const THRU = 57361 -// const UNTIL = 57362 -// const FOR = 57363 -// const IF = 57364 -// const COPY = 57365 -// const THENSTR = 57366 -// const ELSESTR = 57367 -// const DOSTR = 57368 -// const PLACENAME = 57369 -// const VARNAME = 57370 -// const SPRINTF = 57371 -// const DEFNAME = 57372 -// const ATTR = 57373 -// const TEXTATTR = 57374 -// const LEFT = 57375 -// const RIGHT = 57376 -// const UP = 57377 -// const DOWN = 57378 -// const FROM = 57379 -// const TO = 57380 -// const AT = 57381 -// const BY = 57382 -// const WITH = 57383 -// const HEAD = 57384 -// const CW = 57385 -// const CCW = 57386 -// const THEN = 57387 -// const HEIGHT = 57388 -// const WIDTH = 57389 -// const RADIUS = 57390 -// const DIAMETER = 57391 -// const LENGTH = 57392 -// const SIZE = 57393 -// const CORNER = 57394 -// const HERE = 57395 -// const LAST = 57396 -// const NTH = 57397 -// const SAME = 57398 -// const BETWEEN = 57399 -// const AND = 57400 -// const EAST = 57401 -// const WEST = 57402 -// const NORTH = 57403 -// const SOUTH = 57404 -// const NE = 57405 -// const NW = 57406 -// const SE = 57407 -// const SW = 57408 -// const START = 57409 -// const END = 57410 -// const DOTX = 57411 -// const DOTY = 57412 -// const DOTHT = 57413 -// const DOTWID = 57414 -// const DOTRAD = 57415 -// const NUMBER = 57416 -// const LOG = 57417 -// const EXP = 57418 -// const SIN = 57419 -// const COS = 57420 -// const ATAN2 = 57421 -// const SQRT = 57422 -// const RAND = 57423 -// const MIN = 57424 -// const MAX = 57425 -// const INT = 57426 -// const DIR = 57427 -// const DOT = 57428 -// const DASH = 57429 -// const CHOP = 57430 -// const FILL = 57431 -// const NOEDGE = 57432 -// const ST = 57433 -// const OROR = 57434 -// const ANDAND = 57435 -// const GT = 57436 -// const LT = 57437 -// const LE = 57438 -// const GE = 57439 -// const EQ = 57440 -// const NEQ = 57441 -// const UMINUS = 57442 -// const NOT = 57443 - -// var yyToknames = [...]string{ -// "$end", -// "error", -// "$unk", -// "BOX", -// "LINE", -// "ARROW", -// "CIRCLE", -// "ELLIPSE", -// "ARC", -// "SPLINE", -// "BLOCK", -// "TEXT", -// "TROFF", -// "MOVE", -// "BLOCKEND", -// "PLACE", -// "PRINT", -// "RESET", -// "THRU", -// "UNTIL", -// "FOR", -// "IF", -// "COPY", -// "THENSTR", -// "ELSESTR", -// "DOSTR", -// "PLACENAME", -// "VARNAME", -// "SPRINTF", -// "DEFNAME", -// "ATTR", -// "TEXTATTR", -// "LEFT", -// "RIGHT", -// "UP", -// "DOWN", -// "FROM", -// "TO", -// "AT", -// "BY", -// "WITH", -// "HEAD", -// "CW", -// "CCW", -// "THEN", -// "HEIGHT", -// "WIDTH", -// "RADIUS", -// "DIAMETER", -// "LENGTH", -// "SIZE", -// "CORNER", -// "HERE", -// "LAST", -// "NTH", -// "SAME", -// "BETWEEN", -// "AND", -// "EAST", -// "WEST", -// "NORTH", -// "SOUTH", -// "NE", -// "NW", -// "SE", -// "SW", -// "START", -// "END", -// "DOTX", -// "DOTY", -// "DOTHT", -// "DOTWID", -// "DOTRAD", -// "NUMBER", -// "LOG", -// "EXP", -// "SIN", -// "COS", -// "ATAN2", -// "SQRT", -// "RAND", -// "MIN", -// "MAX", -// "INT", -// "DIR", -// "DOT", -// "DASH", -// "CHOP", -// "FILL", -// "NOEDGE", -// "ST", -// "'='", -// "OROR", -// "ANDAND", -// "GT", -// "LT", -// "LE", -// "GE", -// "EQ", -// "NEQ", -// "'+'", -// "'-'", -// "'*'", -// "'/'", -// "'%'", -// "UMINUS", -// "NOT", -// "'^'", -// "'}'", -// "':'", -// "','", -// "'{'", -// "']'", -// "'['", -// "'.'", -// "'('", -// "')'", -// } -// var yyStatenames = [...]string{} - -// const yyEofCode = 1 -// const yyErrCode = 2 -// const yyInitialStackSize = 16 - -// var yyExca = [...]int{ -// -1, 0, -// 1, 2, -// -2, 0, -// -1, 1, -// 1, -1, -// -2, 0, -// -1, 206, -// 95, 0, -// 96, 0, -// 97, 0, -// 98, 0, -// 99, 0, -// 100, 0, -// -2, 159, -// -1, 213, -// 95, 0, -// 96, 0, -// 97, 0, -// 98, 0, -// 99, 0, -// 100, 0, -// -2, 158, -// -1, 214, -// 95, 0, -// 96, 0, -// 97, 0, -// 98, 0, -// 99, 0, -// 100, 0, -// -2, 160, -// -1, 215, -// 95, 0, -// 96, 0, -// 97, 0, -// 98, 0, -// 99, 0, -// 100, 0, -// -2, 161, -// -1, 216, -// 95, 0, -// 96, 0, -// 97, 0, -// 98, 0, -// 99, 0, -// 100, 0, -// -2, 162, -// -1, 217, -// 95, 0, -// 96, 0, -// 97, 0, -// 98, 0, -// 99, 0, -// 100, 0, -// -2, 163, -// -1, 264, -// 69, 112, -// 70, 112, -// 71, 112, -// 72, 112, -// 73, 112, -// -2, 85, -// -1, 270, -// 95, 0, -// 96, 0, -// 97, 0, -// 98, 0, -// 99, 0, -// 100, 0, -// -2, 159, -// } - -// const yyPrivate = 57344 - -// const yyLast = 1654 - -// var yyAct = [...]int{ - -// 173, 334, 139, 32, 53, 68, 312, 242, 124, 125, -// 137, 42, 115, 197, 116, 117, 118, 119, 110, 111, -// 112, 113, 114, 95, 227, 122, 162, 320, 81, 43, -// 274, 137, 92, 319, 51, 299, 273, 161, 137, 160, -// 159, 105, 158, 157, 156, 155, 154, 153, 98, 127, -// 128, 131, 109, 298, 246, 235, 152, 149, 233, 40, -// 112, 113, 114, 122, 51, 122, 41, 72, 40, 194, -// 102, 164, 166, 138, 130, 110, 111, 112, 113, 114, -// 129, 83, 122, 169, 190, 73, 74, 75, 76, 77, -// 78, 79, 80, 276, 246, 200, 110, 111, 112, 113, -// 114, 138, 126, 122, 124, 125, 107, 38, 204, 206, -// 105, 208, 209, 210, 211, 212, 213, 214, 215, 216, -// 217, 218, 219, 220, 195, 221, 224, 132, 133, 134, -// 135, 136, 51, 51, 124, 125, 124, 125, 205, 207, -// 198, 199, 34, 316, 275, 321, 168, 85, 223, 226, -// 234, 124, 125, 44, 236, 237, 238, 239, 240, 241, -// 203, 243, 244, 245, 232, 167, 170, 247, 249, 228, -// 124, 125, 86, 252, 93, 253, 105, 105, 105, 105, -// 105, 96, 97, 123, 261, 262, 263, 265, 335, 336, -// 337, 338, 81, 124, 125, 267, 268, 192, 270, 51, -// 51, 51, 51, 51, 251, 254, 255, 256, 257, 260, -// 121, 120, 115, 197, 116, 117, 118, 119, 110, 111, -// 112, 113, 114, 278, 90, 122, 280, 86, 311, 282, -// 287, 193, 191, 283, 229, 132, 133, 134, 135, 136, -// 71, 201, 142, 146, 147, 143, 144, 145, 148, 250, -// 285, 35, 281, 300, 66, 67, 69, 284, 87, 88, -// 287, 288, 35, 164, 166, 269, 2, 4, 36, 230, -// 37, 285, 286, 39, 163, 305, 105, 105, 308, 36, -// 310, 196, 188, 24, 171, 24, 266, 149, 84, 24, -// 230, 231, 151, 82, 313, 70, 314, 315, 1, 51, -// 51, 69, 165, 317, 318, 306, 307, 37, 100, 24, -// 322, 5, 323, 142, 146, 147, 143, 144, 145, 148, -// 248, 331, 24, 24, 26, 6, 12, 13, 14, 304, -// 89, 339, 91, 0, 301, 340, 0, 0, 0, 0, -// 341, 271, 272, 16, 20, 21, 17, 18, 19, 22, -// 37, 35, 25, 23, 52, 46, 10, 11, 0, 0, -// 30, 31, 29, 141, 0, 24, 103, 46, 36, 202, -// 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, -// 67, 69, 54, 0, 24, 0, 0, 0, 0, 0, -// 0, 66, 67, 69, 54, 0, 0, 0, 0, 0, -// 0, 45, 56, 57, 58, 59, 60, 61, 62, 64, -// 63, 65, 0, 45, 56, 57, 58, 59, 60, 61, -// 62, 64, 63, 65, 9, 0, 0, 0, 49, 48, -// 101, 0, 303, 0, 55, 0, 0, 0, 0, 0, -// 49, 48, 35, 94, 0, 0, 55, 0, 0, 0, -// 0, 27, 0, 33, 0, 50, 0, 52, 46, 36, -// 0, 172, 181, 0, 0, 0, 0, 175, 176, 177, -// 178, 179, 182, 0, 142, 146, 147, 143, 144, 145, -// 148, 150, 66, 67, 69, 54, 180, 121, 120, 115, -// 197, 116, 117, 118, 119, 110, 111, 112, 113, 114, -// 0, 0, 122, 0, 45, 56, 57, 58, 59, 60, -// 61, 62, 64, 63, 65, 174, 183, 184, 185, 186, -// 187, 0, 0, 35, 151, 0, 0, 0, 0, 0, -// 0, 49, 48, 0, 35, 0, 0, 55, 52, 46, -// 36, 0, 0, 0, 0, 0, 94, 0, 0, 52, -// 46, 36, 0, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 66, 67, 69, 54, 0, 0, 0, -// 0, 0, 0, 0, 66, 67, 69, 54, 0, 0, -// 0, 0, 0, 0, 0, 45, 56, 57, 58, 59, -// 60, 61, 62, 64, 63, 65, 45, 56, 57, 58, -// 59, 60, 61, 62, 64, 63, 65, 52, 46, 0, -// 0, 0, 49, 48, 0, 0, 0, 0, 55, 52, -// 46, 0, 0, 49, 48, 0, 0, 94, 0, 55, -// 0, 0, 258, 67, 69, 54, 0, 0, 50, 0, -// 0, 0, 0, 0, 66, 67, 69, 54, 0, 0, -// 0, 0, 0, 0, 45, 56, 57, 58, 59, 60, -// 61, 62, 64, 63, 65, 0, 45, 56, 57, 58, -// 59, 60, 61, 62, 64, 63, 65, 264, 46, 0, -// 0, 49, 48, 0, 0, 0, 0, 55, 52, 46, -// 0, 0, 0, 49, 48, 259, 50, 0, 0, 55, -// 0, 0, 66, 67, 69, 54, 0, 0, 50, 0, -// 0, 0, 0, 66, 67, 69, 54, 0, 0, 0, -// 0, 0, 0, 0, 45, 56, 57, 58, 59, 60, -// 61, 62, 64, 63, 65, 45, 56, 57, 58, 59, -// 60, 61, 62, 64, 63, 65, 52, 46, 0, 0, -// 0, 49, 48, 0, 0, 0, 0, 55, 0, 0, -// 0, 0, 49, 48, 0, 0, 94, 0, 55, 0, -// 0, 66, 67, 69, 54, 0, 0, 225, 120, 115, -// 197, 116, 117, 118, 119, 110, 111, 112, 113, 114, -// 0, 0, 122, 45, 56, 57, 58, 59, 60, 61, -// 62, 64, 63, 65, 0, 16, 20, 21, 17, 18, -// 19, 22, 0, 35, 25, 23, 0, 0, 10, 11, -// 49, 48, 30, 31, 29, 0, 55, 0, 7, 28, -// 36, 0, 0, 0, 0, 222, 16, 20, 21, 17, -// 18, 19, 22, 0, 35, 25, 23, 0, 0, 10, -// 11, 0, 0, 30, 31, 29, 0, 0, 0, 7, -// 28, 36, 3, 0, 16, 20, 21, 17, 18, 19, -// 22, 0, 35, 25, 23, 0, 0, 10, 11, 0, -// 0, 30, 31, 29, 0, 0, 9, 7, 28, 36, -// 0, 0, 15, 0, 0, 121, 120, 115, 197, 116, -// 117, 118, 119, 110, 111, 112, 113, 114, 0, 0, -// 122, 0, 0, 27, 189, 33, 0, 9, 0, 333, -// 0, 0, 0, 15, 121, 120, 115, 197, 116, 117, -// 118, 119, 110, 111, 112, 113, 114, 0, 0, 122, -// 0, 99, 109, 0, 27, 9, 33, 0, 332, 0, -// 0, 15, 16, 20, 21, 17, 18, 19, 22, 0, -// 35, 25, 23, 0, 0, 10, 11, 0, 0, 30, -// 31, 29, 27, 0, 33, 7, 28, 36, 121, 120, -// 115, 108, 116, 117, 118, 119, 110, 111, 112, 113, -// 114, 0, 0, 122, 0, 0, 107, 0, 0, 0, -// 0, 0, 229, 121, 120, 115, 197, 116, 117, 118, -// 119, 110, 111, 112, 113, 114, 0, 0, 122, 0, -// 0, 309, 0, 0, 0, 0, 0, 229, 0, 0, -// 0, 0, 0, 9, 0, 0, 0, 0, 0, 15, -// 121, 120, 115, 197, 116, 117, 118, 119, 110, 111, -// 112, 113, 114, 0, 0, 122, 0, 0, 0, 0, -// 27, 0, 33, 0, 326, 121, 120, 115, 197, 116, -// 117, 118, 119, 110, 111, 112, 113, 114, 0, 0, -// 122, 142, 146, 147, 143, 144, 145, 148, 140, 325, -// 121, 120, 115, 197, 116, 117, 118, 119, 110, 111, -// 112, 113, 114, 0, 0, 122, 0, 0, 0, 0, -// 0, 0, 0, 0, 324, 121, 120, 115, 197, 116, -// 117, 118, 119, 110, 111, 112, 113, 114, 0, 0, -// 122, 141, 0, 0, 0, 0, 0, 0, 0, 297, -// 121, 120, 115, 197, 116, 117, 118, 119, 110, 111, -// 112, 113, 114, 0, 0, 122, 0, 0, 0, 0, -// 0, 0, 0, 0, 294, 121, 120, 115, 197, 116, -// 117, 118, 119, 110, 111, 112, 113, 114, 0, 0, -// 122, 0, 0, 0, 0, 0, 0, 0, 0, 292, -// 121, 120, 115, 197, 116, 117, 118, 119, 110, 111, -// 112, 113, 114, 0, 0, 122, 0, 0, 0, 0, -// 0, 0, 0, 0, 291, 121, 120, 115, 197, 116, -// 117, 118, 119, 110, 111, 112, 113, 114, 0, 0, -// 122, 0, 0, 0, 0, 0, 0, 0, 0, 290, -// 121, 120, 115, 197, 116, 117, 118, 119, 110, 111, -// 112, 113, 114, 0, 109, 122, 0, 0, 0, 0, -// 0, 0, 0, 0, 289, 121, 120, 115, 197, 116, -// 117, 118, 119, 110, 111, 112, 113, 114, 109, 0, -// 122, 0, 0, 0, 0, 0, 0, 0, 106, 229, -// 121, 120, 115, 108, 116, 117, 118, 119, 110, 111, -// 112, 113, 114, 0, 0, 122, 0, 0, 107, 0, -// 0, 0, 0, 0, 121, 120, 115, 108, 116, 117, -// 118, 119, 110, 111, 112, 113, 114, 0, 0, 122, -// 0, 0, 107, 121, 120, 115, 197, 116, 117, 118, -// 119, 110, 111, 112, 113, 114, 0, 0, 122, 0, -// 0, 296, 121, 120, 115, 197, 116, 117, 118, 119, -// 110, 111, 112, 113, 114, 0, 0, 122, 0, 0, -// 295, 121, 120, 115, 197, 116, 117, 118, 119, 110, -// 111, 112, 113, 114, 0, 0, 122, 343, 0, 293, -// 121, 120, 115, 197, 116, 117, 118, 119, 110, 111, -// 112, 113, 114, 342, 0, 122, 0, 0, 279, 121, -// 120, 115, 197, 116, 117, 118, 119, 110, 111, 112, -// 113, 114, 330, 0, 122, 0, 0, 277, 0, 0, -// 0, 0, 0, 0, 0, 0, 329, 0, 328, 0, -// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 327, 0, 121, 120, 115, 197, 116, 117, -// 118, 119, 110, 111, 112, 113, 114, 302, 0, 122, -// 121, 120, 115, 197, 116, 117, 118, 119, 110, 111, -// 112, 113, 114, 0, 0, 122, 0, 0, 0, 121, -// 120, 115, 197, 116, 117, 118, 119, 110, 111, 112, -// 113, 114, 0, 0, 122, 121, 120, 115, 197, 116, -// 117, 118, 119, 110, 111, 112, 113, 114, 0, 0, -// 122, 0, 121, 120, 115, 197, 116, 117, 118, 119, -// 110, 111, 112, 113, 114, 0, 0, 122, 121, 120, -// 115, 197, 116, 117, 118, 119, 110, 111, 112, 113, -// 114, 47, 8, 122, 8, 0, 0, 0, 8, 0, -// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, -// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -// 0, 8, 104, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, -// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 8, -// } -// var yyPact = [...]int{ - -// 860, -1000, 948, -1000, -1000, 16, 948, -51, -25, -1000, -// 522, 212, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -// -1000, -1000, -1000, -1000, 250, -1000, 948, -1000, -11, 239, -// 196, 511, 149, -1000, 150, -1000, -68, -1000, -1000, 832, -// 339, -1000, 1197, 92, 11, -1000, -11, -1000, 327, 327, -// 592, 166, -14, 1077, 470, 327, -69, -70, -71, -72, -// -73, -74, -76, -77, -79, -90, 247, -1000, 113, -1000, -// 55, -1000, 430, 430, 430, 430, 430, 430, 430, 430, -// 430, 149, 801, 327, 239, -1000, -1000, 167, 250, 32, -// -1000, 257, 1445, 41, 327, 166, -1000, -1000, 250, -1000, -// -1000, 948, 69, -42, -25, 1221, -1000, 327, 592, 592, -// 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, -// 327, 327, 327, -1000, 719, 661, -1000, -45, -45, -93, -// 58, 885, -1000, -1000, -1000, -1000, -1000, -1000, 263, 112, -// -57, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 98, -// -60, -1000, -45, 327, 327, 327, 327, 327, 327, -110, -// 327, 327, 327, -61, 309, 238, -1000, -1000, -1000, -1000, -// 176, -1000, 327, 1445, 327, 592, 592, 592, 592, 580, -// -1000, -1000, -1000, 327, 327, 650, 327, -1000, 250, -1000, -// 1445, -1000, -1000, -1000, 327, 327, 240, 327, 250, 250, -// 1172, -81, -1000, -1000, 1445, 33, -5, 35, -43, -43, -// -45, -45, -45, -26, -26, -26, -26, -26, -83, 684, -// -45, 1316, 327, 166, 1297, 327, 166, -1000, 202, -1000, -// -1000, -1000, -1000, 244, -1000, 233, 1147, 1122, 1097, 1072, -// 1278, 1047, -1000, 1259, 1240, 1022, 242, -1000, -62, -1000, -// -80, -1000, 1445, 1445, 3, 3, 3, 3, 247, 226, -// 3, 1445, 1445, 1445, -14, 1445, -1000, 1429, 394, -1000, -// -26, -1000, -1000, -1000, 327, 592, 592, 327, 910, 327, -// 117, -111, -21, 309, 238, -1000, -1000, -1000, -1000, -1000, -// -1000, -1000, -1000, 327, -1000, 327, 327, -1000, 223, 203, -// 91, 430, 327, 327, -84, 1445, 50, 3, 1445, 327, -// 1445, 327, -1000, 997, 972, 947, -1000, 1412, 1396, -1000, -// 327, -1000, 831, 802, -1000, -1000, -1000, 87, -1000, 87, -// -1000, 1445, -1000, -1000, 327, -1000, -1000, -1000, -1000, 327, -// 1377, 1361, -1000, -1000, -// } -// var yyPgo = [...]int{ - -// 0, 0, 332, 1551, 330, 142, 1, 329, 328, 327, -// 326, 325, 267, 266, 29, 324, 311, 23, 5, 282, -// 3, 4, 2, 298, 295, 288, 147, 67, 286, 284, -// } -// var yyR1 = [...]int{ - -// 0, 23, 23, 23, 13, 13, 12, 12, 12, 12, -// 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, -// 12, 24, 24, 24, 24, 3, 10, 25, 25, 26, -// 26, 26, 9, 9, 9, 9, 8, 8, 2, 2, -// 2, 4, 6, 6, 6, 6, 6, 11, 16, 16, -// 16, 16, 16, 16, 16, 16, 16, 16, 28, 16, -// 15, 27, 27, 29, 29, 29, 29, 29, 29, 29, -// 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, -// 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, -// 19, 19, 20, 20, 20, 5, 5, 5, 7, 7, -// 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -// 14, 14, 17, 17, 17, 17, 17, 17, 17, 17, -// 17, 17, 17, 17, 17, 18, 18, 18, 21, 21, -// 21, 22, 22, 22, 22, 22, 22, 22, 22, 1, -// 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -// 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -// 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -// 1, 1, 1, 1, 1, 1, 1, 1, -// } -// var yyR2 = [...]int{ - -// 0, 1, 0, 1, 1, 2, 2, 3, 3, 4, -// 4, 2, 1, 3, 3, 3, 3, 1, 1, 1, -// 1, 0, 1, 2, 3, 3, 2, 1, 2, 1, -// 2, 2, 10, 7, 10, 7, 4, 3, 1, 3, -// 3, 1, 1, 1, 1, 1, 0, 1, 2, 2, -// 2, 2, 2, 2, 2, 2, 2, 1, 0, 5, -// 1, 2, 0, 2, 1, 1, 2, 1, 2, 2, -// 2, 2, 2, 3, 4, 2, 1, 1, 1, 2, -// 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, -// 1, 2, 1, 2, 2, 1, 4, 6, 1, 3, -// 1, 3, 3, 5, 5, 7, 7, 3, 3, 5, -// 6, 5, 1, 2, 2, 1, 2, 3, 3, 2, -// 3, 3, 1, 2, 2, 4, 4, 3, 2, 2, -// 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -// 1, 1, 3, 3, 3, 3, 3, 2, 2, 3, -// 2, 2, 2, 2, 2, 3, 4, 4, 3, 3, -// 3, 3, 3, 3, 3, 3, 2, 4, 4, 3, -// 4, 4, 6, 4, 3, 6, 6, 4, -// } -// var yyChk = [...]int{ - -// -1000, -23, -13, 2, -12, -16, -11, 27, -3, 85, -// 17, 18, -10, -9, -8, 91, 4, 7, 8, 9, -// 5, 6, 10, 14, -19, 13, -15, 112, 28, 23, -// 21, 22, -20, 114, -5, 12, 29, -12, 91, -13, -// 110, 91, -1, -14, -5, 74, 28, -3, 102, 101, -// 116, -17, 27, -21, 55, 107, 75, 76, 77, 78, -// 79, 80, 81, 83, 82, 84, 52, 53, -18, 54, -// -24, 28, -27, -27, -27, -27, -27, -27, -27, -27, -// -27, -20, -13, 92, -25, -26, -5, 19, 20, -4, -// 28, -2, -1, -5, 116, -17, 32, 32, 116, 109, -// -12, 91, -14, 27, -3, -1, 91, 111, 96, 57, -// 101, 102, 103, 104, 105, 95, 97, 98, 99, 100, -// 94, 93, 108, 91, 101, 102, 91, -1, -1, -14, -// -17, -1, 69, 70, 71, 72, 73, 52, 115, -22, -// 11, 54, 4, 7, 8, 9, 5, 6, 10, -22, -// 11, 54, -1, 116, 116, 116, 116, 116, 116, 116, -// 116, 116, 116, 27, -21, 55, -18, 52, 91, 28, -// 111, -29, 31, -1, 85, 37, 38, 39, 40, 41, -// 56, 32, 42, 86, 87, 88, 89, 90, -19, 113, -// -1, -26, 30, -5, 37, 92, 24, 96, 99, 100, -// -1, -5, -12, 91, -1, -14, -1, -14, -1, -1, -// -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -// -1, -1, 116, -17, -1, 116, -17, 117, 111, 117, -// 27, 28, 52, 115, 52, 115, -1, -1, -1, -1, -// -1, -1, 117, -1, -1, -1, 115, -22, 11, -22, -// 11, 28, -1, -1, -14, -14, -14, -14, 52, 115, -// -14, -1, -1, -1, 27, -1, -28, -1, -1, 25, -// -1, -5, -5, 117, 111, 111, 58, 111, -1, 111, -// -1, -17, 27, -21, 55, 27, 28, 27, 28, 117, -// 117, 117, 117, 111, 117, 111, 111, 117, 115, 115, -// 27, -27, 38, 38, -7, -1, -14, -14, -1, 111, -// -1, 111, 117, -1, -1, -1, 52, -1, -1, 117, -// 111, 95, -1, -1, 117, 117, 117, 40, 26, 40, -// 26, -1, 117, 117, -6, 101, 102, 103, 104, -6, -// -1, -1, 26, 26, -// } -// var yyDef = [...]int{ - -// -2, -2, 1, 3, 4, 0, 0, 0, 0, 12, -// 0, 21, 17, 18, 19, 20, 62, 62, 62, 62, -// 62, 62, 62, 62, 62, 57, 0, 47, 0, 0, -// 0, 0, 90, 60, 92, 95, 0, 5, 6, 0, -// 0, 11, 0, 0, 0, 139, 140, 141, 0, 0, -// 0, 100, 112, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 0, 0, 0, 0, 115, 122, 130, -// 0, 22, 48, 49, 50, 51, 52, 53, 54, 55, -// 56, 91, 0, 0, 26, 27, 29, 0, 0, 0, -// 41, 0, 38, 0, 0, 0, 94, 93, 0, 7, -// 8, 20, 0, 112, 141, 0, 13, 0, 0, 0, -// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 14, 0, 0, 15, 147, 148, 0, -// 100, 0, 150, 151, 152, 153, 154, 113, 0, 116, -// 138, 128, 131, 132, 133, 134, 135, 136, 137, 119, -// 138, 129, 166, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 114, 0, 0, 124, 123, 16, 23, -// 0, 61, 64, 65, 67, 0, 0, 0, 0, 0, -// 76, 77, 78, 80, 82, 84, 87, 88, 89, 58, -// 25, 28, 30, 31, 0, 0, 37, 0, 0, 0, -// 0, 0, 9, 10, 102, 0, -2, 0, 142, 143, -// 144, 145, 146, -2, -2, -2, -2, -2, 164, 165, -// 169, 0, 0, 107, 0, 0, 108, 101, 0, 149, -// 127, 155, 117, 0, 120, 0, 0, 0, 0, 0, -// 0, 0, 174, 0, 0, 0, 0, 118, 138, 121, -// 138, 24, 63, 66, 68, 69, 70, 71, 72, 0, -// 75, 79, 81, 83, -2, 86, 62, 0, 0, 36, -// -2, 39, 40, 96, 0, 0, 0, 0, 0, 0, -// 0, 0, 112, 0, 0, 125, 156, 126, 157, 167, -// 168, 170, 171, 0, 173, 0, 0, 177, 0, 0, -// 73, 59, 0, 0, 0, 98, 0, 111, 103, 0, -// 104, 0, 109, 0, 0, 0, 74, 0, 0, 97, -// 0, 110, 0, 0, 172, 175, 176, 46, 33, 46, -// 35, 99, 105, 106, 0, 42, 43, 44, 45, 0, -// 0, 0, 32, 34, -// } -// var yyTok1 = [...]int{ - -// 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, -// 13, 14, 15, 16, 3, 3, 3, 3, 3, 3, -// 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -// 3, 3, 3, 3, 3, 3, 3, 105, 3, 3, -// 116, 117, 103, 101, 111, 102, 115, 104, 3, 3, -// 3, 3, 3, 3, 3, 3, 3, 3, 110, 3, -// 3, 92, 3, 3, 3, 3, 3, 3, 3, 3, -// 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -// 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -// 3, 114, 3, 113, 108, 3, 3, 3, 3, 3, -// 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -// 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -// 3, 3, 3, 112, 3, 109, -// } -// var yyTok2 = [...]int{ - -// 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, -// 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, -// 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, -// 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, -// 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -// 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -// 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, -// 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, -// 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, -// 93, 94, 95, 96, 97, 98, 99, 100, 106, 107, -// } -// var yyTok3 = [...]int{ -// 0, -// } - -// var yyErrorMessages = [...]struct { -// state int -// token int -// msg string -// }{ -// } - -// /* parser for yacc output */ - -// var ( -// yyDebug = 0 -// yyErrorVerbose = false -// ) - -// type yyLexer interface { -// Lex(lval *yySymType) int -// Error(s string) -// } - -// type yyParser interface { -// Parse(yyLexer) int -// Lookahead() int -// } - -// type yyParserImpl struct { -// lval yySymType -// stack [yyInitialStackSize]yySymType -// char int -// } - -// func (p *yyParserImpl) Lookahead() int { -// return p.char -// } - -// func yyNewParser() yyParser { -// return &yyParserImpl{} -// } - -// const yyFlag = -1000 - -// func yyTokname(c int) string { -// if c >= 1 && c-1 < len(yyToknames) { -// if yyToknames[c-1] != "" { -// return yyToknames[c-1] -// } -// } -// return __yyfmt__.Sprintf("tok-%v", c) -// } - -// func yyStatname(s int) string { -// if s >= 0 && s < len(yyStatenames) { -// if yyStatenames[s] != "" { -// return yyStatenames[s] -// } -// } -// return __yyfmt__.Sprintf("state-%v", s) -// } - -// func yyErrorMessage(state, lookAhead int) string { -// const TOKSTART = 4 - -// if !yyErrorVerbose { -// return "syntax error" -// } - -// for _, e := range yyErrorMessages { -// if e.state == state && e.token == lookAhead { -// return "syntax error: " + e.msg -// } -// } - -// res := "syntax error: unexpected " + yyTokname(lookAhead) - -// // To match Bison, suggest at most four expected tokens. -// expected := make([]int, 0, 4) - -// // Look for shiftable tokens. -// base := yyPact[state] -// for tok := TOKSTART; tok-1 < len(yyToknames); tok++ { -// if n := base + tok; n >= 0 && n < yyLast && yyChk[yyAct[n]] == tok { -// if len(expected) == cap(expected) { -// return res -// } -// expected = append(expected, tok) -// } -// } - -// if yyDef[state] == -2 { -// i := 0 -// for yyExca[i] != -1 || yyExca[i+1] != state { -// i += 2 -// } - -// // Look for tokens that we accept or reduce. -// for i += 2; yyExca[i] >= 0; i += 2 { -// tok := yyExca[i] -// if tok < TOKSTART || yyExca[i+1] == 0 { -// continue -// } -// if len(expected) == cap(expected) { -// return res -// } -// expected = append(expected, tok) -// } - -// // If the default action is to accept or reduce, give up. -// if yyExca[i+1] != 0 { -// return res -// } -// } - -// for i, tok := range expected { -// if i == 0 { -// res += ", expecting " -// } else { -// res += " or " -// } -// res += yyTokname(tok) -// } -// return res -// } - -// func yylex1(lex yyLexer, lval *yySymType) (char, token int) { -// token = 0 -// char = lex.Lex(lval) -// if char <= 0 { -// token = yyTok1[0] -// goto out -// } -// if char < len(yyTok1) { -// token = yyTok1[char] -// goto out -// } -// if char >= yyPrivate { -// if char < yyPrivate+len(yyTok2) { -// token = yyTok2[char-yyPrivate] -// goto out -// } -// } -// for i := 0; i < len(yyTok3); i += 2 { -// token = yyTok3[i+0] -// if token == char { -// token = yyTok3[i+1] -// goto out -// } -// } - -// out: -// if token == 0 { -// token = yyTok2[1] /* unknown char */ -// } -// if yyDebug >= 3 { -// __yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char)) -// } -// return char, token -// } - -// func yyParse(yylex yyLexer) int { -// return yyNewParser().Parse(yylex) -// } - -// func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int { -// var yyn int -// var yyVAL yySymType -// var yyDollar []yySymType -// _ = yyDollar // silence set and not used -// yyS := yyrcvr.stack[:] - -// Nerrs := 0 /* number of errors */ -// Errflag := 0 /* error recovery flag */ -// yystate := 0 -// yyrcvr.char = -1 -// yytoken := -1 // yyrcvr.char translated into internal numbering -// defer func() { -// // Make sure we report no lookahead when not parsing. -// yystate = -1 -// yyrcvr.char = -1 -// yytoken = -1 -// }() -// yyp := -1 -// goto yystack - -// ret0: -// return 0 - -// ret1: -// return 1 - -// yystack: -// /* put a state and value onto the stack */ -// if yyDebug >= 4 { -// __yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate)) -// } - -// yyp++ -// if yyp >= len(yyS) { -// nyys := make([]yySymType, len(yyS)*2) -// copy(nyys, yyS) -// yyS = nyys -// } -// yyS[yyp] = yyVAL -// yyS[yyp].yys = yystate - -// yynewstate: -// yyn = yyPact[yystate] -// if yyn <= yyFlag { -// goto yydefault /* simple state */ -// } -// if yyrcvr.char < 0 { -// yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval) -// } -// yyn += yytoken -// if yyn < 0 || yyn >= yyLast { -// goto yydefault -// } -// yyn = yyAct[yyn] -// if yyChk[yyn] == yytoken { /* valid shift */ -// yyrcvr.char = -1 -// yytoken = -1 -// yyVAL = yyrcvr.lval -// yystate = yyn -// if Errflag > 0 { -// Errflag-- -// } -// goto yystack -// } - -// yydefault: -// /* default state action */ -// yyn = yyDef[yystate] -// if yyn == -2 { -// if yyrcvr.char < 0 { -// yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval) -// } - -// /* look through exception table */ -// xi := 0 -// for { -// if yyExca[xi+0] == -1 && yyExca[xi+1] == yystate { -// break -// } -// xi += 2 -// } -// for xi += 2; ; xi += 2 { -// yyn = yyExca[xi+0] -// if yyn < 0 || yyn == yytoken { -// break -// } -// } -// yyn = yyExca[xi+1] -// if yyn < 0 { -// goto ret0 -// } -// } -// if yyn == 0 { -// /* error ... attempt to resume parsing */ -// switch Errflag { -// case 0: /* brand new error */ -// yylex.Error(yyErrorMessage(yystate, yytoken)) -// Nerrs++ -// if yyDebug >= 1 { -// __yyfmt__.Printf("%s", yyStatname(yystate)) -// __yyfmt__.Printf(" saw %s\n", yyTokname(yytoken)) -// } -// fallthrough - -// case 1, 2: /* incompletely recovered error ... try again */ -// Errflag = 3 - -// /* find a state where "error" is a legal shift action */ -// for yyp >= 0 { -// yyn = yyPact[yyS[yyp].yys] + yyErrCode -// if yyn >= 0 && yyn < yyLast { -// yystate = yyAct[yyn] /* simulate a shift of "error" */ -// if yyChk[yystate] == yyErrCode { -// goto yystack -// } -// } - -// /* the current p has no shift on "error", pop stack */ -// if yyDebug >= 2 { -// __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys) -// } -// yyp-- -// } -// /* there is no state on the stack with an error shift ... abort */ -// goto ret1 - -// case 3: /* no shift yet; clobber input char */ -// if yyDebug >= 2 { -// __yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken)) -// } -// if yytoken == yyEofCode { -// goto ret1 -// } -// yyrcvr.char = -1 -// yytoken = -1 -// goto yynewstate /* try again in the same state */ -// } -// } - -// /* reduction by production yyn */ -// if yyDebug >= 2 { -// __yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate)) -// } - -// yynt := yyn -// yypt := yyp -// _ = yypt // guard against "declared and not used" - -// yyp -= yyR2[yyn] -// // yyp is now the index of $0. Perform the default action. Iff the -// // reduced production is ε, $1 is possibly out of range. -// if yyp+1 >= len(yyS) { -// nyys := make([]yySymType, len(yyS)*2) -// copy(nyys, yyS) -// yyS = nyys -// } -// yyVAL = yyS[yyp+1] - -// /* consult goto table to find next state */ -// yyn = yyR1[yyn] -// yyg := yyPgo[yyn] -// yyj := yyg + yyS[yyp].yys + 1 - -// if yyj >= yyLast { -// yystate = yyAct[yyg] -// } else { -// yystate = yyAct[yyj] -// if yyChk[yystate] != -yyn { -// yystate = yyAct[yyg] -// } -// } -// // dummy call; replaced with literal code -// switch yynt { - -// case 3: -// yyDollar = yyS[yypt-1:yypt+1] -// { WARNING("syntax error"); } -// case 6: -// yyDollar = yyS[yypt-2:yypt+1] -// { codegen = 1; makeiattr(0, 0); } -// case 7: -// yyDollar = yyS[yypt-3:yypt+1] -// { rightthing(yyDollar[1].o, '}'); yyVAL.o = yyDollar[2].o; } -// case 8: -// yyDollar = yyS[yypt-3:yypt+1] -// { y.o=yyDollar[3].o; makevar(yyDollar[1].p,PLACENAME,y); yyVAL.o = yyDollar[3].o; } -// case 9: -// yyDollar = yyS[yypt-4:yypt+1] -// { y.o=yyDollar[4].o; makevar(yyDollar[1].p,PLACENAME,y); yyVAL.o = yyDollar[4].o; } -// case 10: -// yyDollar = yyS[yypt-4:yypt+1] -// { y.o=yyDollar[3].o; makevar(yyDollar[1].p,PLACENAME,y); yyVAL.o = yyDollar[3].o; } -// case 11: -// yyDollar = yyS[yypt-2:yypt+1] -// { y.f = yyDollar[1].f; yyVAL.o = y.o; yyVAL.o = makenode(PLACE, 0); } -// case 12: -// yyDollar = yyS[yypt-1:yypt+1] -// { setdir(yyDollar[1].i); yyVAL.o = makenode(PLACE, 0); } -// case 13: -// yyDollar = yyS[yypt-3:yypt+1] -// { printexpr(yyDollar[2].f); yyVAL.o = makenode(PLACE, 0); } -// case 14: -// yyDollar = yyS[yypt-3:yypt+1] -// { printpos(yyDollar[2].o); yyVAL.o = makenode(PLACE, 0); } -// case 15: -// yyDollar = yyS[yypt-3:yypt+1] -// { printf("%s\n", yyDollar[2].p); free(yyDollar[2].p); yyVAL.o = makenode(PLACE, 0); } -// case 16: -// yyDollar = yyS[yypt-3:yypt+1] -// { resetvar(); makeiattr(0, 0); yyVAL.o = makenode(PLACE, 0); } -// case 22: -// yyDollar = yyS[yypt-1:yypt+1] -// { makevattr(yyDollar[1].p); } -// case 23: -// yyDollar = yyS[yypt-2:yypt+1] -// { makevattr(yyDollar[2].p); } -// case 24: -// yyDollar = yyS[yypt-3:yypt+1] -// { makevattr(yyDollar[3].p); } -// case 25: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f=y.f=yyDollar[3].f; makevar(yyDollar[1].p,VARNAME,y); checkscale(yyDollar[1].p); } -// case 26: -// yyDollar = yyS[yypt-2:yypt+1] -// { copy(); } -// case 29: -// yyDollar = yyS[yypt-1:yypt+1] -// { copyfile(yyDollar[1].p); } -// case 30: -// yyDollar = yyS[yypt-2:yypt+1] -// { copydef(yyDollar[2].st); } -// case 31: -// yyDollar = yyS[yypt-2:yypt+1] -// { copyuntil(yyDollar[2].p); } -// case 32: -// yyDollar = yyS[yypt-10:yypt+1] -// { forloop(yyDollar[2].p, yyDollar[4].f, yyDollar[6].f, yyDollar[8].i, yyDollar[9].f, yyDollar[10].p); } -// case 33: -// yyDollar = yyS[yypt-7:yypt+1] -// { forloop(yyDollar[2].p, yyDollar[4].f, yyDollar[6].f, '+', 1.0, yyDollar[7].p); } -// case 34: -// yyDollar = yyS[yypt-10:yypt+1] -// { forloop(yyDollar[2].p, yyDollar[4].f, yyDollar[6].f, yyDollar[8].i, yyDollar[9].f, yyDollar[10].p); } -// case 35: -// yyDollar = yyS[yypt-7:yypt+1] -// { forloop(yyDollar[2].p, yyDollar[4].f, yyDollar[6].f, '+', 1.0, yyDollar[7].p); } -// case 36: -// yyDollar = yyS[yypt-4:yypt+1] -// { ifstat(yyDollar[2].f, yyDollar[3].p, yyDollar[4].p); } -// case 37: -// yyDollar = yyS[yypt-3:yypt+1] -// { ifstat(yyDollar[2].f, yyDollar[3].p, (char *) 0); } -// case 39: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = strcmp(yyDollar[1].p,yyDollar[3].p) == 0; free(yyDollar[1].p); free(yyDollar[3].p); } -// case 40: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = strcmp(yyDollar[1].p,yyDollar[3].p) != 0; free(yyDollar[1].p); free(yyDollar[3].p); } -// case 41: -// yyDollar = yyS[yypt-1:yypt+1] -// { y.f = 0; makevar(yyDollar[1].p, VARNAME, y); } -// case 42: -// yyDollar = yyS[yypt-1:yypt+1] -// { yyVAL.i = '+'; } -// case 43: -// yyDollar = yyS[yypt-1:yypt+1] -// { yyVAL.i = '-'; } -// case 44: -// yyDollar = yyS[yypt-1:yypt+1] -// { yyVAL.i = '*'; } -// case 45: -// yyDollar = yyS[yypt-1:yypt+1] -// { yyVAL.i = '/'; } -// case 46: -// yyDollar = yyS[yypt-0:yypt+1] -// { yyVAL.i = ' '; } -// case 47: -// yyDollar = yyS[yypt-1:yypt+1] -// { yyVAL.o = leftthing('{'); } -// case 48: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = boxgen(); } -// case 49: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = circgen(yyDollar[1].i); } -// case 50: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = circgen(yyDollar[1].i); } -// case 51: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = arcgen(yyDollar[1].i); } -// case 52: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = linegen(yyDollar[1].i); } -// case 53: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = linegen(yyDollar[1].i); } -// case 54: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = linegen(yyDollar[1].i); } -// case 55: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = movegen(); } -// case 56: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = textgen(); } -// case 57: -// yyDollar = yyS[yypt-1:yypt+1] -// { yyVAL.o = troffgen(yyDollar[1].p); } -// case 58: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.o=rightthing(yyDollar[1].o,']'); } -// case 59: -// yyDollar = yyS[yypt-5:yypt+1] -// { yyVAL.o = blockgen(yyDollar[1].o, yyDollar[4].o); } -// case 60: -// yyDollar = yyS[yypt-1:yypt+1] -// { yyVAL.o = leftthing('['); } -// case 63: -// yyDollar = yyS[yypt-2:yypt+1] -// { makefattr(yyDollar[1].i, !DEFAULT, yyDollar[2].f); } -// case 64: -// yyDollar = yyS[yypt-1:yypt+1] -// { makefattr(yyDollar[1].i, DEFAULT, 0.0); } -// case 65: -// yyDollar = yyS[yypt-1:yypt+1] -// { makefattr(curdir(), !DEFAULT, yyDollar[1].f); } -// case 66: -// yyDollar = yyS[yypt-2:yypt+1] -// { makefattr(yyDollar[1].i, !DEFAULT, yyDollar[2].f); } -// case 67: -// yyDollar = yyS[yypt-1:yypt+1] -// { makefattr(yyDollar[1].i, DEFAULT, 0.0); } -// case 68: -// yyDollar = yyS[yypt-2:yypt+1] -// { makeoattr(yyDollar[1].i, yyDollar[2].o); } -// case 69: -// yyDollar = yyS[yypt-2:yypt+1] -// { makeoattr(yyDollar[1].i, yyDollar[2].o); } -// case 70: -// yyDollar = yyS[yypt-2:yypt+1] -// { makeoattr(yyDollar[1].i, yyDollar[2].o); } -// case 71: -// yyDollar = yyS[yypt-2:yypt+1] -// { makeoattr(yyDollar[1].i, yyDollar[2].o); } -// case 72: -// yyDollar = yyS[yypt-2:yypt+1] -// { makeiattr(WITH, yyDollar[2].i); } -// case 73: -// yyDollar = yyS[yypt-3:yypt+1] -// { makeoattr(PLACE, getblock(getlast(1,BLOCK), yyDollar[3].p)); } -// case 74: -// yyDollar = yyS[yypt-4:yypt+1] -// { makeoattr(PLACE, getpos(getblock(getlast(1,BLOCK), yyDollar[3].p), yyDollar[4].i)); } -// case 75: -// yyDollar = yyS[yypt-2:yypt+1] -// { makeoattr(PLACE, yyDollar[2].o); } -// case 76: -// yyDollar = yyS[yypt-1:yypt+1] -// { makeiattr(SAME, yyDollar[1].i); } -// case 77: -// yyDollar = yyS[yypt-1:yypt+1] -// { maketattr(yyDollar[1].i, (char *) 0); } -// case 78: -// yyDollar = yyS[yypt-1:yypt+1] -// { makeiattr(HEAD, yyDollar[1].i); } -// case 79: -// yyDollar = yyS[yypt-2:yypt+1] -// { makefattr(DOT, !DEFAULT, yyDollar[2].f); } -// case 80: -// yyDollar = yyS[yypt-1:yypt+1] -// { makefattr(DOT, DEFAULT, 0.0); } -// case 81: -// yyDollar = yyS[yypt-2:yypt+1] -// { makefattr(DASH, !DEFAULT, yyDollar[2].f); } -// case 82: -// yyDollar = yyS[yypt-1:yypt+1] -// { makefattr(DASH, DEFAULT, 0.0); } -// case 83: -// yyDollar = yyS[yypt-2:yypt+1] -// { makefattr(CHOP, !DEFAULT, yyDollar[2].f); } -// case 84: -// yyDollar = yyS[yypt-1:yypt+1] -// { makefattr(CHOP, DEFAULT, 0.0); } -// case 85: -// yyDollar = yyS[yypt-2:yypt+1] -// { makeattr(CHOP, PLACENAME, getvar(yyDollar[2].p)); } -// case 86: -// yyDollar = yyS[yypt-2:yypt+1] -// { makefattr(FILL, !DEFAULT, yyDollar[2].f); } -// case 87: -// yyDollar = yyS[yypt-1:yypt+1] -// { makefattr(FILL, DEFAULT, 0.0); } -// case 88: -// yyDollar = yyS[yypt-1:yypt+1] -// { makeiattr(NOEDGE, 0); } -// case 92: -// yyDollar = yyS[yypt-1:yypt+1] -// { maketattr(CENTER, yyDollar[1].p); } -// case 93: -// yyDollar = yyS[yypt-2:yypt+1] -// { maketattr(yyDollar[2].i, yyDollar[1].p); } -// case 94: -// yyDollar = yyS[yypt-2:yypt+1] -// { addtattr(yyDollar[2].i); } -// case 96: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.p = sprintgen(yyDollar[3].p); } -// case 97: -// yyDollar = yyS[yypt-6:yypt+1] -// { yyVAL.p = sprintgen(yyDollar[3].p); } -// case 98: -// yyDollar = yyS[yypt-1:yypt+1] -// { exprsave(yyDollar[1].f); yyVAL.i = 0; } -// case 99: -// yyDollar = yyS[yypt-3:yypt+1] -// { exprsave(yyDollar[3].f); } -// case 101: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.o = yyDollar[2].o; } -// case 102: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.o = makepos(yyDollar[1].f, yyDollar[3].f); } -// case 103: -// yyDollar = yyS[yypt-5:yypt+1] -// { yyVAL.o = fixpos(yyDollar[1].o, yyDollar[3].f, yyDollar[5].f); } -// case 104: -// yyDollar = yyS[yypt-5:yypt+1] -// { yyVAL.o = fixpos(yyDollar[1].o, -yyDollar[3].f, -yyDollar[5].f); } -// case 105: -// yyDollar = yyS[yypt-7:yypt+1] -// { yyVAL.o = fixpos(yyDollar[1].o, yyDollar[4].f, yyDollar[6].f); } -// case 106: -// yyDollar = yyS[yypt-7:yypt+1] -// { yyVAL.o = fixpos(yyDollar[1].o, -yyDollar[4].f, -yyDollar[6].f); } -// case 107: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.o = addpos(yyDollar[1].o, yyDollar[3].o); } -// case 108: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.o = subpos(yyDollar[1].o, yyDollar[3].o); } -// case 109: -// yyDollar = yyS[yypt-5:yypt+1] -// { yyVAL.o = makepos(getcomp(yyDollar[2].o,DOTX), getcomp(yyDollar[4].o,DOTY)); } -// case 110: -// yyDollar = yyS[yypt-6:yypt+1] -// { yyVAL.o = makebetween(yyDollar[1].f, yyDollar[3].o, yyDollar[5].o); } -// case 111: -// yyDollar = yyS[yypt-5:yypt+1] -// { yyVAL.o = makebetween(yyDollar[1].f, yyDollar[3].o, yyDollar[5].o); } -// case 112: -// yyDollar = yyS[yypt-1:yypt+1] -// { y = getvar(yyDollar[1].p); yyVAL.o = y.o; } -// case 113: -// yyDollar = yyS[yypt-2:yypt+1] -// { y = getvar(yyDollar[1].p); yyVAL.o = getpos(y.o, yyDollar[2].i); } -// case 114: -// yyDollar = yyS[yypt-2:yypt+1] -// { y = getvar(yyDollar[2].p); yyVAL.o = getpos(y.o, yyDollar[1].i); } -// case 115: -// yyDollar = yyS[yypt-1:yypt+1] -// { yyVAL.o = gethere(); } -// case 116: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = getlast(yyDollar[1].i, yyDollar[2].i); } -// case 117: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.o = getpos(getlast(yyDollar[1].i, yyDollar[2].i), yyDollar[3].i); } -// case 118: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.o = getpos(getlast(yyDollar[2].i, yyDollar[3].i), yyDollar[1].i); } -// case 119: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = getfirst(yyDollar[1].i, yyDollar[2].i); } -// case 120: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.o = getpos(getfirst(yyDollar[1].i, yyDollar[2].i), yyDollar[3].i); } -// case 121: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.o = getpos(getfirst(yyDollar[2].i, yyDollar[3].i), yyDollar[1].i); } -// case 123: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = getpos(yyDollar[1].o, yyDollar[2].i); } -// case 124: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.o = getpos(yyDollar[2].o, yyDollar[1].i); } -// case 125: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.o = getblock(getlast(yyDollar[1].i,yyDollar[2].i), yyDollar[4].p); } -// case 126: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.o = getblock(getfirst(yyDollar[1].i,yyDollar[2].i), yyDollar[4].p); } -// case 127: -// yyDollar = yyS[yypt-3:yypt+1] -// { y = getvar(yyDollar[1].p); yyVAL.o = getblock(y.o, yyDollar[3].p); } -// case 128: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.i = yyDollar[1].i + 1; } -// case 129: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.i = yyDollar[1].i; } -// case 130: -// yyDollar = yyS[yypt-1:yypt+1] -// { yyVAL.i = 1; } -// case 140: -// yyDollar = yyS[yypt-1:yypt+1] -// { yyVAL.f = getfval(yyDollar[1].p); } -// case 142: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f + yyDollar[3].f; } -// case 143: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f - yyDollar[3].f; } -// case 144: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f * yyDollar[3].f; } -// case 145: -// yyDollar = yyS[yypt-3:yypt+1] -// { if (yyDollar[3].f == 0.0) { -// WARNING("division by 0"); yyDollar[3].f = 1; } -// yyVAL.f = yyDollar[1].f / yyDollar[3].f; } -// case 146: -// yyDollar = yyS[yypt-3:yypt+1] -// { if ((long)yyDollar[3].f == 0) { -// WARNING("mod division by 0"); yyDollar[3].f = 1; } -// yyVAL.f = (long)yyDollar[1].f % (long)yyDollar[3].f; } -// case 147: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.f = -yyDollar[2].f; } -// case 148: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.f = yyDollar[2].f; } -// case 149: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[2].f; } -// case 150: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.f = getcomp(yyDollar[1].o, yyDollar[2].i); } -// case 151: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.f = getcomp(yyDollar[1].o, yyDollar[2].i); } -// case 152: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.f = getcomp(yyDollar[1].o, yyDollar[2].i); } -// case 153: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.f = getcomp(yyDollar[1].o, yyDollar[2].i); } -// case 154: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.f = getcomp(yyDollar[1].o, yyDollar[2].i); } -// case 155: -// yyDollar = yyS[yypt-3:yypt+1] -// { y = getvar(yyDollar[1].p); yyVAL.f = getblkvar(y.o, yyDollar[3].p); } -// case 156: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.f = getblkvar(getlast(yyDollar[1].i,yyDollar[2].i), yyDollar[4].p); } -// case 157: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.f = getblkvar(getfirst(yyDollar[1].i,yyDollar[2].i), yyDollar[4].p); } -// case 158: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f > yyDollar[3].f; } -// case 159: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f < yyDollar[3].f; } -// case 160: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f <= yyDollar[3].f; } -// case 161: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f >= yyDollar[3].f; } -// case 162: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f == yyDollar[3].f; } -// case 163: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f != yyDollar[3].f; } -// case 164: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f && yyDollar[3].f; } -// case 165: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = yyDollar[1].f || yyDollar[3].f; } -// case 166: -// yyDollar = yyS[yypt-2:yypt+1] -// { yyVAL.f = !(yyDollar[2].f); } -// case 167: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.f = Log10(yyDollar[3].f); } -// case 168: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.f = Exp(yyDollar[3].f * log(10.0)); } -// case 169: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = pow(yyDollar[1].f, yyDollar[3].f); } -// case 170: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.f = sin(yyDollar[3].f); } -// case 171: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.f = cos(yyDollar[3].f); } -// case 172: -// yyDollar = yyS[yypt-6:yypt+1] -// { yyVAL.f = atan2(yyDollar[3].f, yyDollar[5].f); } -// case 173: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.f = Sqrt(yyDollar[3].f); } -// case 174: -// yyDollar = yyS[yypt-3:yypt+1] -// { yyVAL.f = (float)rand() / RAND_MAX; } -// case 175: -// yyDollar = yyS[yypt-6:yypt+1] -// { yyVAL.f = yyDollar[3].f >= yyDollar[5].f ? yyDollar[3].f : yyDollar[5].f; } -// case 176: -// yyDollar = yyS[yypt-6:yypt+1] -// { yyVAL.f = yyDollar[3].f <= yyDollar[5].f ? yyDollar[3].f : yyDollar[5].f; } -// case 177: -// yyDollar = yyS[yypt-4:yypt+1] -// { yyVAL.f = (long) yyDollar[3].f; } -// } -// goto yystack /* stack new state and value */ -// } diff --git a/internal/pic/pic.y b/internal/pic/pic.y deleted file mode 100755 index b5f218a..0000000 --- a/internal/pic/pic.y +++ /dev/null @@ -1,351 +0,0 @@ -%union{ - str string - result Result -} - - -%{ -/* - * Changes by Gunnar Ritter, Freiburg i. Br., Germany, October 2005. - * - * Derived from Plan 9 v4 /sys/src/cmd/pic/ - * - * Copyright (C) 2003, Lucent Technologies Inc. and others. - * All Rights Reserved. - * - * Distributed under the terms of the Lucent Public License Version 1.02. - */ - -/* Sccsid @(#)picy.y 1.4 (gritter) 11/28/05 */ - -#include -#include "pic.h" -#include -#include -#include - -#ifndef RAND_MAX -#define RAND_MAX 32767 -#endif - -YYSTYPE y; - -extern void yyerror(char *); -extern int yylex(void); -%} - -%token BOX 1 /* DON'T CHANGE THESE! */ -%token LINE 2 -%token ARROW 3 -%token CIRCLE 4 -%token ELLIPSE 5 -%token ARC 6 -%token SPLINE 7 -%token BLOCK 8 -%token

TEXT 9 -%token

TROFF 10 -%token MOVE 11 -%token BLOCKEND 12 -%token PLACE 13 -%token PRINT RESET THRU UNTIL -%token FOR IF COPY -%token

THENSTR ELSESTR DOSTR PLACENAME VARNAME SPRINTF -%token DEFNAME -%token ATTR TEXTATTR -%token LEFT RIGHT UP DOWN FROM TO AT BY WITH HEAD CW CCW THEN -%token HEIGHT WIDTH RADIUS DIAMETER LENGTH SIZE -%token CORNER HERE LAST NTH SAME BETWEEN AND -%token EAST WEST NORTH SOUTH NE NW SE SW START END -%token DOTX DOTY DOTHT DOTWID DOTRAD -%token NUMBER -%token LOG EXP SIN COS ATAN2 SQRT RAND MIN MAX INT -%token DIR -%token DOT DASH CHOP FILL NOEDGE -%token ST /* statement terminator */ - -%right '=' -%left OROR -%left ANDAND -%nonassoc GT LT LE GE EQ NEQ -%left '+' '-' -%left '*' '/' '%' -%right UMINUS NOT -%right '^' - -%type expr if_expr asgn -%type

name text -%type optop exprlist -%type if for copy - -/* this is a lie: picture and position are really the whole union */ -%type leftbrace picture piclist position lbracket -%type prim place blockname -%type textlist textattr /* not a sensible value */ -%type last type - -%% - -top: - piclist - | /* empty */ - | error { WARNING("syntax error"); } - ; - -piclist: - picture - | piclist picture - ; - -picture: - prim ST { codegen = 1; makeiattr(0, 0); } - | leftbrace piclist '}' { rightthing($1, '}'); $$ = $2; } - | PLACENAME ':' picture { y.o=$3; makevar($1,PLACENAME,y); $$ = $3; } - | PLACENAME ':' ST picture { y.o=$4; makevar($1,PLACENAME,y); $$ = $4; } - | PLACENAME ':' position ST { y.o=$3; makevar($1,PLACENAME,y); $$ = $3; } - | asgn ST { y.f = $1; $$ = y.o; $$ = makenode(PLACE, 0); } - | DIR { setdir($1); $$ = makenode(PLACE, 0); } - | PRINT expr ST { printexpr($2); $$ = makenode(PLACE, 0); } - | PRINT position ST { printpos($2); $$ = makenode(PLACE, 0); } - | PRINT text ST { printf("%s\n", $2); free($2); $$ = makenode(PLACE, 0); } - | RESET varlist ST { resetvar(); makeiattr(0, 0); $$ = makenode(PLACE, 0); } - | copy - | for - | if - | ST - ; - -varlist: - /* empty */ - | VARNAME { makevattr($1); } - | varlist VARNAME { makevattr($2); } - | varlist ',' VARNAME { makevattr($3); } - ; - -asgn: - VARNAME '=' expr { $$=y.f=$3; makevar($1,VARNAME,y); checkscale($1); } - ; - -copy: - COPY copylist { copy(); } - ; -copylist: - copyattr - | copylist copyattr - ; -copyattr: - text { copyfile($1); } - | THRU DEFNAME { copydef($2); } - | UNTIL text { copyuntil($2); } - ; - -for: - FOR name FROM expr TO expr BY optop expr DOSTR - { forloop($2, $4, $6, $8, $9, $10); } - | FOR name FROM expr TO expr DOSTR - { forloop($2, $4, $6, '+', 1.0, $7); } - | FOR name '=' expr TO expr BY optop expr DOSTR - { forloop($2, $4, $6, $8, $9, $10); } - | FOR name '=' expr TO expr DOSTR - { forloop($2, $4, $6, '+', 1.0, $7); } - ; - -if: - IF if_expr THENSTR ELSESTR { ifstat($2, $3, $4); } - | IF if_expr THENSTR { ifstat($2, $3, (char *) 0); } - ; -if_expr: - expr - | text EQ text { $$ = strcmp($1,$3) == 0; free($1); free($3); } - | text NEQ text { $$ = strcmp($1,$3) != 0; free($1); free($3); } - ; - -name: - VARNAME { y.f = 0; makevar($1, VARNAME, y); } - ; -optop: - '+' { $$ = '+'; } - | '-' { $$ = '-'; } - | '*' { $$ = '*'; } - | '/' { $$ = '/'; } - | /* empty */ { $$ = ' '; } - ; - - -leftbrace: - '{' { $$ = leftthing('{'); } - ; - -prim: - BOX attrlist { $$ = boxgen(); } - | CIRCLE attrlist { $$ = circgen($1); } - | ELLIPSE attrlist { $$ = circgen($1); } - | ARC attrlist { $$ = arcgen($1); } - | LINE attrlist { $$ = linegen($1); } - | ARROW attrlist { $$ = linegen($1); } - | SPLINE attrlist { $$ = linegen($1); } - | MOVE attrlist { $$ = movegen(); } - | textlist attrlist { $$ = textgen(); } - | TROFF { $$ = troffgen($1); } - | lbracket piclist ']' { $$=rightthing($1,']'); } attrlist - { $$ = blockgen($1, $4); } - ; - -lbracket: - '[' { $$ = leftthing('['); } - ; - -attrlist: - attrlist attr - | /* empty */ - ; - -attr: - ATTR expr { makefattr($1, !DEFAULT, $2); } - | ATTR { makefattr($1, DEFAULT, 0.0); } - | expr { makefattr(curdir(), !DEFAULT, $1); } - | DIR expr { makefattr($1, !DEFAULT, $2); } - | DIR { makefattr($1, DEFAULT, 0.0); } - | FROM position { makeoattr($1, $2); } - | TO position { makeoattr($1, $2); } - | AT position { makeoattr($1, $2); } - | BY position { makeoattr($1, $2); } - | WITH CORNER { makeiattr(WITH, $2); } - | WITH '.' PLACENAME { makeoattr(PLACE, getblock(getlast(1,BLOCK), $3)); } - | WITH '.' PLACENAME CORNER - { makeoattr(PLACE, getpos(getblock(getlast(1,BLOCK), $3), $4)); } - | WITH position { makeoattr(PLACE, $2); } - | SAME { makeiattr(SAME, $1); } - | TEXTATTR { maketattr($1, (char *) 0); } - | HEAD { makeiattr(HEAD, $1); } - | DOT expr { makefattr(DOT, !DEFAULT, $2); } - | DOT { makefattr(DOT, DEFAULT, 0.0); } - | DASH expr { makefattr(DASH, !DEFAULT, $2); } - | DASH { makefattr(DASH, DEFAULT, 0.0); } - | CHOP expr { makefattr(CHOP, !DEFAULT, $2); } - | CHOP { makefattr(CHOP, DEFAULT, 0.0); } - | CHOP PLACENAME { makeattr(CHOP, PLACENAME, getvar($2)); } - | FILL expr { makefattr(FILL, !DEFAULT, $2); } - | FILL { makefattr(FILL, DEFAULT, 0.0); } - | NOEDGE { makeiattr(NOEDGE, 0); } - | textlist - ; - -textlist: - textattr - | textlist textattr - ; -textattr: - text { maketattr(CENTER, $1); } - | text TEXTATTR { maketattr($2, $1); } - | textattr TEXTATTR { addtattr($2); } - ; -text: - TEXT - | SPRINTF '(' text ')' { $$ = sprintgen($3); } - | SPRINTF '(' text ',' exprlist ')' { $$ = sprintgen($3); } - ; - -exprlist: - expr { exprsave($1); $$ = 0; } - | exprlist ',' expr { exprsave($3); } - ; - -position: /* absolute, not relative */ - place - | '(' position ')' { $$ = $2; } - | expr ',' expr { $$ = makepos($1, $3); } - | position '+' expr ',' expr { $$ = fixpos($1, $3, $5); } - | position '-' expr ',' expr { $$ = fixpos($1, -$3, -$5); } - | position '+' '(' expr ',' expr ')' { $$ = fixpos($1, $4, $6); } - | position '-' '(' expr ',' expr ')' { $$ = fixpos($1, -$4, -$6); } - | position '+' place { $$ = addpos($1, $3); } - | position '-' place { $$ = subpos($1, $3); } - | '(' place ',' place ')' { $$ = makepos(getcomp($2,DOTX), getcomp($4,DOTY)); } - | expr LT position ',' position GT { $$ = makebetween($1, $3, $5); } - | expr BETWEEN position AND position { $$ = makebetween($1, $3, $5); } - ; - -place: - PLACENAME { y = getvar($1); $$ = y.o; } - | PLACENAME CORNER { y = getvar($1); $$ = getpos(y.o, $2); } - | CORNER PLACENAME { y = getvar($2); $$ = getpos(y.o, $1); } - | HERE { $$ = gethere(); } - | last type { $$ = getlast($1, $2); } - | last type CORNER { $$ = getpos(getlast($1, $2), $3); } - | CORNER last type { $$ = getpos(getlast($2, $3), $1); } - | NTH type { $$ = getfirst($1, $2); } - | NTH type CORNER { $$ = getpos(getfirst($1, $2), $3); } - | CORNER NTH type { $$ = getpos(getfirst($2, $3), $1); } - | blockname - | blockname CORNER { $$ = getpos($1, $2); } - | CORNER blockname { $$ = getpos($2, $1); } - ; - -blockname: - last BLOCK '.' PLACENAME { $$ = getblock(getlast($1,$2), $4); } - | NTH BLOCK '.' PLACENAME { $$ = getblock(getfirst($1,$2), $4); } - | PLACENAME '.' PLACENAME { y = getvar($1); $$ = getblock(y.o, $3); } - ; - -last: - last LAST { $$ = $1 + 1; } - | NTH LAST { $$ = $1; } - | LAST { $$ = 1; } - ; - -type: - BOX - | CIRCLE - | ELLIPSE - | ARC - | LINE - | ARROW - | SPLINE - | BLOCK - ; - -expr: - NUMBER - | VARNAME { $$ = getfval($1); } - | asgn - | expr '+' expr { $$ = $1 + $3; } - | expr '-' expr { $$ = $1 - $3; } - | expr '*' expr { $$ = $1 * $3; } - | expr '/' expr { if ($3 == 0.0) { - WARNING("division by 0"); $3 = 1; } - $$ = $1 / $3; } - | expr '%' expr { if ((long)$3 == 0) { - WARNING("mod division by 0"); $3 = 1; } - $$ = (long)$1 % (long)$3; } - | '-' expr %prec UMINUS { $$ = -$2; } - | '+' expr %prec UMINUS { $$ = $2; } - | '(' expr ')' { $$ = $2; } - | place DOTX { $$ = getcomp($1, $2); } - | place DOTY { $$ = getcomp($1, $2); } - | place DOTHT { $$ = getcomp($1, $2); } - | place DOTWID { $$ = getcomp($1, $2); } - | place DOTRAD { $$ = getcomp($1, $2); } - | PLACENAME '.' VARNAME { y = getvar($1); $$ = getblkvar(y.o, $3); } - | last BLOCK '.' VARNAME { $$ = getblkvar(getlast($1,$2), $4); } - | NTH BLOCK '.' VARNAME { $$ = getblkvar(getfirst($1,$2), $4); } - | expr GT expr { $$ = $1 > $3; } - | expr LT expr { $$ = $1 < $3; } - | expr LE expr { $$ = $1 <= $3; } - | expr GE expr { $$ = $1 >= $3; } - | expr EQ expr { $$ = $1 == $3; } - | expr NEQ expr { $$ = $1 != $3; } - | expr ANDAND expr { $$ = $1 && $3; } - | expr OROR expr { $$ = $1 || $3; } - | NOT expr { $$ = !($2); } - | LOG '(' expr ')' { $$ = Log10($3); } - | EXP '(' expr ')' { $$ = Exp($3 * log(10.0)); } - | expr '^' expr { $$ = pow($1, $3); } - | SIN '(' expr ')' { $$ = sin($3); } - | COS '(' expr ')' { $$ = cos($3); } - | ATAN2 '(' expr ',' expr ')' { $$ = atan2($3, $5); } - | SQRT '(' expr ')' { $$ = Sqrt($3); } - | RAND '(' ')' { $$ = (float)rand() / RAND_MAX; } - | MAX '(' expr ',' expr ')' { $$ = $3 >= $5 ? $3 : $5; } - | MIN '(' expr ',' expr ')' { $$ = $3 <= $5 ? $3 : $5; } - | INT '(' expr ')' { $$ = (long) $3; } - ; diff --git a/internal/pic/y.output b/internal/pic/y.output deleted file mode 100755 index 4e7521f..0000000 --- a/internal/pic/y.output +++ /dev/null @@ -1,6893 +0,0 @@ - -state 0 - $accept: .top $end - top: . (2) - - $end reduce 2 (src line 90) - error shift 3 - BOX shift 16 - LINE shift 20 - ARROW shift 21 - CIRCLE shift 17 - ELLIPSE shift 18 - ARC shift 19 - SPLINE shift 22 - TEXT shift 35 - TROFF shift 25 - MOVE shift 23 - PRINT shift 10 - RESET shift 11 - FOR shift 30 - IF shift 31 - COPY shift 29 - PLACENAME shift 7 - VARNAME shift 28 - SPRINTF shift 36 - DIR shift 9 - ST shift 15 - '{' shift 27 - '[' shift 33 - . error - - asgn goto 8 - text goto 34 - if goto 14 - for goto 13 - copy goto 12 - leftbrace goto 6 - picture goto 4 - piclist goto 2 - lbracket goto 26 - prim goto 5 - textlist goto 24 - textattr goto 32 - top goto 1 - -state 1 - $accept: top.$end - - $end accept - . error - - -state 2 - top: piclist. (1) - piclist: piclist.picture - - BOX shift 16 - LINE shift 20 - ARROW shift 21 - CIRCLE shift 17 - ELLIPSE shift 18 - ARC shift 19 - SPLINE shift 22 - TEXT shift 35 - TROFF shift 25 - MOVE shift 23 - PRINT shift 10 - RESET shift 11 - FOR shift 30 - IF shift 31 - COPY shift 29 - PLACENAME shift 7 - VARNAME shift 28 - SPRINTF shift 36 - DIR shift 9 - ST shift 15 - '{' shift 27 - '[' shift 33 - . reduce 1 (src line 88) - - asgn goto 8 - text goto 34 - if goto 14 - for goto 13 - copy goto 12 - leftbrace goto 6 - picture goto 37 - lbracket goto 26 - prim goto 5 - textlist goto 24 - textattr goto 32 - -state 3 - top: error. (3) - - . reduce 3 (src line 91) - - -state 4 - piclist: picture. (4) - - . reduce 4 (src line 94) - - -state 5 - picture: prim.ST - - ST shift 38 - . error - - -state 6 - picture: leftbrace.piclist '}' - - BOX shift 16 - LINE shift 20 - ARROW shift 21 - CIRCLE shift 17 - ELLIPSE shift 18 - ARC shift 19 - SPLINE shift 22 - TEXT shift 35 - TROFF shift 25 - MOVE shift 23 - PRINT shift 10 - RESET shift 11 - FOR shift 30 - IF shift 31 - COPY shift 29 - PLACENAME shift 7 - VARNAME shift 28 - SPRINTF shift 36 - DIR shift 9 - ST shift 15 - '{' shift 27 - '[' shift 33 - . error - - asgn goto 8 - text goto 34 - if goto 14 - for goto 13 - copy goto 12 - leftbrace goto 6 - picture goto 4 - piclist goto 39 - lbracket goto 26 - prim goto 5 - textlist goto 24 - textattr goto 32 - -state 7 - picture: PLACENAME.':' picture - picture: PLACENAME.':' ST picture - picture: PLACENAME.':' position ST - - ':' shift 40 - . error - - -state 8 - picture: asgn.ST - - ST shift 41 - . error - - -state 9 - picture: DIR. (12) - - . reduce 12 (src line 106) - - -state 10 - picture: PRINT.expr ST - picture: PRINT.position ST - picture: PRINT.text ST - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 50 - . error - - expr goto 42 - asgn goto 47 - text goto 44 - position goto 43 - place goto 51 - blockname goto 68 - last goto 53 - -11: shift/reduce conflict (shift 71(0), red'n 21(0)) on VARNAME -state 11 - picture: RESET.varlist ST - varlist: . (21) - - VARNAME shift 71 - . reduce 21 (src line 117) - - varlist goto 70 - -state 12 - picture: copy. (17) - - . reduce 17 (src line 111) - - -state 13 - picture: for. (18) - - . reduce 18 (src line 112) - - -state 14 - picture: if. (19) - - . reduce 19 (src line 113) - - -state 15 - picture: ST. (20) - - . reduce 20 (src line 114) - - -state 16 - prim: BOX.attrlist - attrlist: . (62) - - . reduce 62 (src line 199) - - attrlist goto 72 - -state 17 - prim: CIRCLE.attrlist - attrlist: . (62) - - . reduce 62 (src line 199) - - attrlist goto 73 - -state 18 - prim: ELLIPSE.attrlist - attrlist: . (62) - - . reduce 62 (src line 199) - - attrlist goto 74 - -state 19 - prim: ARC.attrlist - attrlist: . (62) - - . reduce 62 (src line 199) - - attrlist goto 75 - -state 20 - prim: LINE.attrlist - attrlist: . (62) - - . reduce 62 (src line 199) - - attrlist goto 76 - -state 21 - prim: ARROW.attrlist - attrlist: . (62) - - . reduce 62 (src line 199) - - attrlist goto 77 - -state 22 - prim: SPLINE.attrlist - attrlist: . (62) - - . reduce 62 (src line 199) - - attrlist goto 78 - -state 23 - prim: MOVE.attrlist - attrlist: . (62) - - . reduce 62 (src line 199) - - attrlist goto 79 - -24: shift/reduce conflict (shift 35(0), red'n 62(0)) on TEXT -24: shift/reduce conflict (shift 36(0), red'n 62(0)) on SPRINTF -state 24 - prim: textlist.attrlist - textlist: textlist.textattr - attrlist: . (62) - - TEXT shift 35 - SPRINTF shift 36 - . reduce 62 (src line 199) - - text goto 34 - textattr goto 81 - attrlist goto 80 - -state 25 - prim: TROFF. (57) - - . reduce 57 (src line 188) - - -state 26 - prim: lbracket.piclist ']' $$58 attrlist - - BOX shift 16 - LINE shift 20 - ARROW shift 21 - CIRCLE shift 17 - ELLIPSE shift 18 - ARC shift 19 - SPLINE shift 22 - TEXT shift 35 - TROFF shift 25 - MOVE shift 23 - PRINT shift 10 - RESET shift 11 - FOR shift 30 - IF shift 31 - COPY shift 29 - PLACENAME shift 7 - VARNAME shift 28 - SPRINTF shift 36 - DIR shift 9 - ST shift 15 - '{' shift 27 - '[' shift 33 - . error - - asgn goto 8 - text goto 34 - if goto 14 - for goto 13 - copy goto 12 - leftbrace goto 6 - picture goto 4 - piclist goto 82 - lbracket goto 26 - prim goto 5 - textlist goto 24 - textattr goto 32 - -state 27 - leftbrace: '{'. (47) - - . reduce 47 (src line 174) - - -state 28 - asgn: VARNAME.'=' expr - - '=' shift 83 - . error - - -state 29 - copy: COPY.copylist - - TEXT shift 35 - THRU shift 87 - UNTIL shift 88 - SPRINTF shift 36 - . error - - text goto 86 - copylist goto 84 - copyattr goto 85 - -state 30 - for: FOR.name FROM expr TO expr BY optop expr DOSTR - for: FOR.name FROM expr TO expr DOSTR - for: FOR.name '=' expr TO expr BY optop expr DOSTR - for: FOR.name '=' expr TO expr DOSTR - - VARNAME shift 90 - . error - - name goto 89 - -state 31 - if: IF.if_expr THENSTR ELSESTR - if: IF.if_expr THENSTR - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 92 - if_expr goto 91 - asgn goto 47 - text goto 93 - place goto 95 - blockname goto 68 - last goto 53 - -32: shift/reduce conflict (shift 96(0), red'n 90(0)) on TEXTATTR -state 32 - textlist: textattr. (90) - textattr: textattr.TEXTATTR - - TEXTATTR shift 96 - . reduce 90 (src line 233) - - -state 33 - lbracket: '['. (60) - - . reduce 60 (src line 193) - - -34: shift/reduce conflict (shift 97(0), red'n 92(0)) on TEXTATTR -state 34 - textattr: text. (92) - textattr: text.TEXTATTR - - TEXTATTR shift 97 - . reduce 92 (src line 237) - - -state 35 - text: TEXT. (95) - - . reduce 95 (src line 242) - - -state 36 - text: SPRINTF.'(' text ')' - text: SPRINTF.'(' text ',' exprlist ')' - - '(' shift 98 - . error - - -state 37 - piclist: piclist picture. (5) - - . reduce 5 (src line 96) - - -state 38 - picture: prim ST. (6) - - . reduce 6 (src line 99) - - -state 39 - piclist: piclist.picture - picture: leftbrace piclist.'}' - - BOX shift 16 - LINE shift 20 - ARROW shift 21 - CIRCLE shift 17 - ELLIPSE shift 18 - ARC shift 19 - SPLINE shift 22 - TEXT shift 35 - TROFF shift 25 - MOVE shift 23 - PRINT shift 10 - RESET shift 11 - FOR shift 30 - IF shift 31 - COPY shift 29 - PLACENAME shift 7 - VARNAME shift 28 - SPRINTF shift 36 - DIR shift 9 - ST shift 15 - '}' shift 99 - '{' shift 27 - '[' shift 33 - . error - - asgn goto 8 - text goto 34 - if goto 14 - for goto 13 - copy goto 12 - leftbrace goto 6 - picture goto 37 - lbracket goto 26 - prim goto 5 - textlist goto 24 - textattr goto 32 - -state 40 - picture: PLACENAME ':'.picture - picture: PLACENAME ':'.ST picture - picture: PLACENAME ':'.position ST - - BOX shift 16 - LINE shift 20 - ARROW shift 21 - CIRCLE shift 17 - ELLIPSE shift 18 - ARC shift 19 - SPLINE shift 22 - TEXT shift 35 - TROFF shift 25 - MOVE shift 23 - PRINT shift 10 - RESET shift 11 - FOR shift 30 - IF shift 31 - COPY shift 29 - PLACENAME shift 103 - VARNAME shift 46 - SPRINTF shift 36 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 9 - ST shift 101 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '{' shift 27 - '[' shift 33 - '(' shift 50 - . error - - expr goto 105 - asgn goto 104 - text goto 34 - if goto 14 - for goto 13 - copy goto 12 - leftbrace goto 6 - picture goto 100 - position goto 102 - lbracket goto 26 - prim goto 5 - place goto 51 - blockname goto 68 - textlist goto 24 - textattr goto 32 - last goto 53 - -state 41 - picture: asgn ST. (11) - - . reduce 11 (src line 105) - - -state 42 - picture: PRINT expr.ST - position: expr.',' expr - position: expr.LT position ',' position GT - position: expr.BETWEEN position AND position - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - BETWEEN shift 109 - ST shift 106 - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 108 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 107 - . error - - -state 43 - picture: PRINT position.ST - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - - ST shift 123 - '+' shift 124 - '-' shift 125 - . error - - -state 44 - picture: PRINT text.ST - - ST shift 126 - . error - - -state 45 - expr: NUMBER. (139) - - . reduce 139 (src line 307) - - -state 46 - asgn: VARNAME.'=' expr - expr: VARNAME. (140) - - '=' shift 83 - . reduce 140 (src line 309) - - -state 47 - expr: asgn. (141) - - . reduce 141 (src line 310) - - -state 48 - expr: '-'.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 127 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 49 - expr: '+'.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 128 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 50 - position: '('.position ')' - position: '('.place ',' place ')' - expr: '('.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 50 - . error - - expr goto 131 - asgn goto 47 - position goto 129 - place goto 130 - blockname goto 68 - last goto 53 - -state 51 - position: place. (100) - expr: place.DOTX - expr: place.DOTY - expr: place.DOTHT - expr: place.DOTWID - expr: place.DOTRAD - - DOTX shift 132 - DOTY shift 133 - DOTHT shift 134 - DOTWID shift 135 - DOTRAD shift 136 - . reduce 100 (src line 253) - - -52: shift/reduce conflict (shift 137(0), red'n 112(0)) on CORNER -state 52 - place: PLACENAME. (112) - place: PLACENAME.CORNER - blockname: PLACENAME.'.' PLACENAME - expr: PLACENAME.'.' VARNAME - - CORNER shift 137 - '.' shift 138 - . reduce 112 (src line 268) - - -state 53 - place: last.type - place: last.type CORNER - blockname: last.BLOCK '.' PLACENAME - last: last.LAST - expr: last.BLOCK '.' VARNAME - - BOX shift 142 - LINE shift 146 - ARROW shift 147 - CIRCLE shift 143 - ELLIPSE shift 144 - ARC shift 145 - SPLINE shift 148 - BLOCK shift 140 - LAST shift 141 - . error - - type goto 139 - -state 54 - place: NTH.type - place: NTH.type CORNER - blockname: NTH.BLOCK '.' PLACENAME - last: NTH.LAST - expr: NTH.BLOCK '.' VARNAME - - BOX shift 142 - LINE shift 146 - ARROW shift 147 - CIRCLE shift 143 - ELLIPSE shift 144 - ARC shift 145 - SPLINE shift 148 - BLOCK shift 150 - LAST shift 151 - . error - - type goto 149 - -state 55 - expr: NOT.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 152 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 56 - expr: LOG.'(' expr ')' - - '(' shift 153 - . error - - -state 57 - expr: EXP.'(' expr ')' - - '(' shift 154 - . error - - -state 58 - expr: SIN.'(' expr ')' - - '(' shift 155 - . error - - -state 59 - expr: COS.'(' expr ')' - - '(' shift 156 - . error - - -state 60 - expr: ATAN2.'(' expr ',' expr ')' - - '(' shift 157 - . error - - -state 61 - expr: SQRT.'(' expr ')' - - '(' shift 158 - . error - - -state 62 - expr: RAND.'(' ')' - - '(' shift 159 - . error - - -state 63 - expr: MAX.'(' expr ',' expr ')' - - '(' shift 160 - . error - - -state 64 - expr: MIN.'(' expr ',' expr ')' - - '(' shift 161 - . error - - -state 65 - expr: INT.'(' expr ')' - - '(' shift 162 - . error - - -state 66 - place: CORNER.PLACENAME - place: CORNER.last type - place: CORNER.NTH type - place: CORNER.blockname - - PLACENAME shift 163 - LAST shift 69 - NTH shift 165 - . error - - blockname goto 166 - last goto 164 - -state 67 - place: HERE. (115) - - . reduce 115 (src line 272) - - -68: shift/reduce conflict (shift 167(0), red'n 122(0)) on CORNER -state 68 - place: blockname. (122) - place: blockname.CORNER - - CORNER shift 167 - . reduce 122 (src line 279) - - -state 69 - last: LAST. (130) - - . reduce 130 (src line 293) - - -state 70 - picture: RESET varlist.ST - varlist: varlist.VARNAME - varlist: varlist.',' VARNAME - - VARNAME shift 169 - ST shift 168 - ',' shift 170 - . error - - -state 71 - varlist: VARNAME. (22) - - . reduce 22 (src line 119) - - -state 72 - prim: BOX attrlist. (48) - attrlist: attrlist.attr - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - ATTR shift 172 - TEXTATTR shift 181 - FROM shift 175 - TO shift 176 - AT shift 177 - BY shift 178 - WITH shift 179 - HEAD shift 182 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - SAME shift 180 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 174 - DOT shift 183 - DASH shift 184 - CHOP shift 185 - FILL shift 186 - NOEDGE shift 187 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 48 (src line 178) - - expr goto 173 - asgn goto 47 - text goto 34 - place goto 95 - blockname goto 68 - textlist goto 188 - textattr goto 32 - last goto 53 - attr goto 171 - -state 73 - prim: CIRCLE attrlist. (49) - attrlist: attrlist.attr - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - ATTR shift 172 - TEXTATTR shift 181 - FROM shift 175 - TO shift 176 - AT shift 177 - BY shift 178 - WITH shift 179 - HEAD shift 182 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - SAME shift 180 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 174 - DOT shift 183 - DASH shift 184 - CHOP shift 185 - FILL shift 186 - NOEDGE shift 187 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 49 (src line 180) - - expr goto 173 - asgn goto 47 - text goto 34 - place goto 95 - blockname goto 68 - textlist goto 188 - textattr goto 32 - last goto 53 - attr goto 171 - -state 74 - prim: ELLIPSE attrlist. (50) - attrlist: attrlist.attr - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - ATTR shift 172 - TEXTATTR shift 181 - FROM shift 175 - TO shift 176 - AT shift 177 - BY shift 178 - WITH shift 179 - HEAD shift 182 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - SAME shift 180 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 174 - DOT shift 183 - DASH shift 184 - CHOP shift 185 - FILL shift 186 - NOEDGE shift 187 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 50 (src line 181) - - expr goto 173 - asgn goto 47 - text goto 34 - place goto 95 - blockname goto 68 - textlist goto 188 - textattr goto 32 - last goto 53 - attr goto 171 - -state 75 - prim: ARC attrlist. (51) - attrlist: attrlist.attr - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - ATTR shift 172 - TEXTATTR shift 181 - FROM shift 175 - TO shift 176 - AT shift 177 - BY shift 178 - WITH shift 179 - HEAD shift 182 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - SAME shift 180 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 174 - DOT shift 183 - DASH shift 184 - CHOP shift 185 - FILL shift 186 - NOEDGE shift 187 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 51 (src line 182) - - expr goto 173 - asgn goto 47 - text goto 34 - place goto 95 - blockname goto 68 - textlist goto 188 - textattr goto 32 - last goto 53 - attr goto 171 - -state 76 - prim: LINE attrlist. (52) - attrlist: attrlist.attr - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - ATTR shift 172 - TEXTATTR shift 181 - FROM shift 175 - TO shift 176 - AT shift 177 - BY shift 178 - WITH shift 179 - HEAD shift 182 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - SAME shift 180 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 174 - DOT shift 183 - DASH shift 184 - CHOP shift 185 - FILL shift 186 - NOEDGE shift 187 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 52 (src line 183) - - expr goto 173 - asgn goto 47 - text goto 34 - place goto 95 - blockname goto 68 - textlist goto 188 - textattr goto 32 - last goto 53 - attr goto 171 - -state 77 - prim: ARROW attrlist. (53) - attrlist: attrlist.attr - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - ATTR shift 172 - TEXTATTR shift 181 - FROM shift 175 - TO shift 176 - AT shift 177 - BY shift 178 - WITH shift 179 - HEAD shift 182 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - SAME shift 180 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 174 - DOT shift 183 - DASH shift 184 - CHOP shift 185 - FILL shift 186 - NOEDGE shift 187 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 53 (src line 184) - - expr goto 173 - asgn goto 47 - text goto 34 - place goto 95 - blockname goto 68 - textlist goto 188 - textattr goto 32 - last goto 53 - attr goto 171 - -state 78 - prim: SPLINE attrlist. (54) - attrlist: attrlist.attr - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - ATTR shift 172 - TEXTATTR shift 181 - FROM shift 175 - TO shift 176 - AT shift 177 - BY shift 178 - WITH shift 179 - HEAD shift 182 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - SAME shift 180 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 174 - DOT shift 183 - DASH shift 184 - CHOP shift 185 - FILL shift 186 - NOEDGE shift 187 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 54 (src line 185) - - expr goto 173 - asgn goto 47 - text goto 34 - place goto 95 - blockname goto 68 - textlist goto 188 - textattr goto 32 - last goto 53 - attr goto 171 - -state 79 - prim: MOVE attrlist. (55) - attrlist: attrlist.attr - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - ATTR shift 172 - TEXTATTR shift 181 - FROM shift 175 - TO shift 176 - AT shift 177 - BY shift 178 - WITH shift 179 - HEAD shift 182 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - SAME shift 180 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 174 - DOT shift 183 - DASH shift 184 - CHOP shift 185 - FILL shift 186 - NOEDGE shift 187 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 55 (src line 186) - - expr goto 173 - asgn goto 47 - text goto 34 - place goto 95 - blockname goto 68 - textlist goto 188 - textattr goto 32 - last goto 53 - attr goto 171 - -state 80 - prim: textlist attrlist. (56) - attrlist: attrlist.attr - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - ATTR shift 172 - TEXTATTR shift 181 - FROM shift 175 - TO shift 176 - AT shift 177 - BY shift 178 - WITH shift 179 - HEAD shift 182 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - SAME shift 180 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 174 - DOT shift 183 - DASH shift 184 - CHOP shift 185 - FILL shift 186 - NOEDGE shift 187 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 56 (src line 187) - - expr goto 173 - asgn goto 47 - text goto 34 - place goto 95 - blockname goto 68 - textlist goto 188 - textattr goto 32 - last goto 53 - attr goto 171 - -81: shift/reduce conflict (shift 96(0), red'n 91(0)) on TEXTATTR -state 81 - textlist: textlist textattr. (91) - textattr: textattr.TEXTATTR - - TEXTATTR shift 96 - . reduce 91 (src line 235) - - -state 82 - piclist: piclist.picture - prim: lbracket piclist.']' $$58 attrlist - - BOX shift 16 - LINE shift 20 - ARROW shift 21 - CIRCLE shift 17 - ELLIPSE shift 18 - ARC shift 19 - SPLINE shift 22 - TEXT shift 35 - TROFF shift 25 - MOVE shift 23 - PRINT shift 10 - RESET shift 11 - FOR shift 30 - IF shift 31 - COPY shift 29 - PLACENAME shift 7 - VARNAME shift 28 - SPRINTF shift 36 - DIR shift 9 - ST shift 15 - '{' shift 27 - ']' shift 189 - '[' shift 33 - . error - - asgn goto 8 - text goto 34 - if goto 14 - for goto 13 - copy goto 12 - leftbrace goto 6 - picture goto 37 - lbracket goto 26 - prim goto 5 - textlist goto 24 - textattr goto 32 - -state 83 - asgn: VARNAME '='.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 190 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -84: shift/reduce conflict (shift 35(0), red'n 26(0)) on TEXT -84: shift/reduce conflict (shift 36(0), red'n 26(0)) on SPRINTF -state 84 - copy: COPY copylist. (26) - copylist: copylist.copyattr - - TEXT shift 35 - THRU shift 87 - UNTIL shift 88 - SPRINTF shift 36 - . reduce 26 (src line 128) - - text goto 86 - copyattr goto 191 - -state 85 - copylist: copyattr. (27) - - . reduce 27 (src line 131) - - -state 86 - copyattr: text. (29) - - . reduce 29 (src line 135) - - -state 87 - copyattr: THRU.DEFNAME - - DEFNAME shift 192 - . error - - -state 88 - copyattr: UNTIL.text - - TEXT shift 35 - SPRINTF shift 36 - . error - - text goto 193 - -state 89 - for: FOR name.FROM expr TO expr BY optop expr DOSTR - for: FOR name.FROM expr TO expr DOSTR - for: FOR name.'=' expr TO expr BY optop expr DOSTR - for: FOR name.'=' expr TO expr DOSTR - - FROM shift 194 - '=' shift 195 - . error - - -state 90 - name: VARNAME. (41) - - . reduce 41 (src line 162) - - -state 91 - if: IF if_expr.THENSTR ELSESTR - if: IF if_expr.THENSTR - - THENSTR shift 196 - . error - - -state 92 - if_expr: expr. (38) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 38 (src line 156) - - -state 93 - if_expr: text.EQ text - if_expr: text.NEQ text - - EQ shift 198 - NEQ shift 199 - . error - - -state 94 - expr: '('.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 200 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 95 - expr: place.DOTX - expr: place.DOTY - expr: place.DOTHT - expr: place.DOTWID - expr: place.DOTRAD - - DOTX shift 132 - DOTY shift 133 - DOTHT shift 134 - DOTWID shift 135 - DOTRAD shift 136 - . error - - -state 96 - textattr: textattr TEXTATTR. (94) - - . reduce 94 (src line 240) - - -state 97 - textattr: text TEXTATTR. (93) - - . reduce 93 (src line 239) - - -state 98 - text: SPRINTF '('.text ')' - text: SPRINTF '('.text ',' exprlist ')' - - TEXT shift 35 - SPRINTF shift 36 - . error - - text goto 201 - -state 99 - picture: leftbrace piclist '}'. (7) - - . reduce 7 (src line 101) - - -state 100 - picture: PLACENAME ':' picture. (8) - - . reduce 8 (src line 102) - - -101: shift/reduce conflict (shift 16(0), red'n 20(0)) on BOX -101: shift/reduce conflict (shift 20(0), red'n 20(0)) on LINE -101: shift/reduce conflict (shift 21(0), red'n 20(0)) on ARROW -101: shift/reduce conflict (shift 17(0), red'n 20(0)) on CIRCLE -101: shift/reduce conflict (shift 18(0), red'n 20(0)) on ELLIPSE -101: shift/reduce conflict (shift 19(0), red'n 20(0)) on ARC -101: shift/reduce conflict (shift 22(0), red'n 20(0)) on SPLINE -101: shift/reduce conflict (shift 35(0), red'n 20(0)) on TEXT -101: shift/reduce conflict (shift 25(0), red'n 20(0)) on TROFF -101: shift/reduce conflict (shift 23(0), red'n 20(0)) on MOVE -101: shift/reduce conflict (shift 10(0), red'n 20(0)) on PRINT -101: shift/reduce conflict (shift 11(0), red'n 20(0)) on RESET -101: shift/reduce conflict (shift 30(0), red'n 20(0)) on FOR -101: shift/reduce conflict (shift 31(0), red'n 20(0)) on IF -101: shift/reduce conflict (shift 29(0), red'n 20(0)) on COPY -101: shift/reduce conflict (shift 7(0), red'n 20(0)) on PLACENAME -101: shift/reduce conflict (shift 28(0), red'n 20(0)) on VARNAME -101: shift/reduce conflict (shift 36(0), red'n 20(0)) on SPRINTF -101: shift/reduce conflict (shift 9(0), red'n 20(0)) on DIR -101: shift/reduce conflict (shift 15(0), red'n 20(0)) on ST -101: shift/reduce conflict (shift 27(0), red'n 20(0)) on '{' -101: shift/reduce conflict (shift 33(0), red'n 20(0)) on '[' -state 101 - picture: PLACENAME ':' ST.picture - picture: ST. (20) - - BOX shift 16 - LINE shift 20 - ARROW shift 21 - CIRCLE shift 17 - ELLIPSE shift 18 - ARC shift 19 - SPLINE shift 22 - TEXT shift 35 - TROFF shift 25 - MOVE shift 23 - PRINT shift 10 - RESET shift 11 - FOR shift 30 - IF shift 31 - COPY shift 29 - PLACENAME shift 7 - VARNAME shift 28 - SPRINTF shift 36 - DIR shift 9 - ST shift 15 - '{' shift 27 - '[' shift 33 - . reduce 20 (src line 114) - - asgn goto 8 - text goto 34 - if goto 14 - for goto 13 - copy goto 12 - leftbrace goto 6 - picture goto 202 - lbracket goto 26 - prim goto 5 - textlist goto 24 - textattr goto 32 - -state 102 - picture: PLACENAME ':' position.ST - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - - ST shift 203 - '+' shift 124 - '-' shift 125 - . error - - -state 103 - picture: PLACENAME.':' picture - picture: PLACENAME.':' ST picture - picture: PLACENAME.':' position ST - place: PLACENAME. (112) - place: PLACENAME.CORNER - blockname: PLACENAME.'.' PLACENAME - expr: PLACENAME.'.' VARNAME - - CORNER shift 137 - ':' shift 40 - '.' shift 138 - . reduce 112 (src line 268) - - -state 104 - picture: asgn.ST - expr: asgn. (141) - - ST shift 41 - . reduce 141 (src line 310) - - -state 105 - position: expr.',' expr - position: expr.LT position ',' position GT - position: expr.BETWEEN position AND position - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - BETWEEN shift 109 - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 108 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 107 - . error - - -state 106 - picture: PRINT expr ST. (13) - - . reduce 13 (src line 107) - - -state 107 - position: expr ','.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 204 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 108 - position: expr LT.position ',' position GT - expr: expr LT.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 50 - . error - - expr goto 206 - asgn goto 47 - position goto 205 - place goto 51 - blockname goto 68 - last goto 53 - -state 109 - position: expr BETWEEN.position AND position - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 50 - . error - - expr goto 105 - asgn goto 47 - position goto 207 - place goto 51 - blockname goto 68 - last goto 53 - -state 110 - expr: expr '+'.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 208 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 111 - expr: expr '-'.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 209 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 112 - expr: expr '*'.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 210 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 113 - expr: expr '/'.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 211 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 114 - expr: expr '%'.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 212 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 115 - expr: expr GT.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 213 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 116 - expr: expr LE.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 214 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 117 - expr: expr GE.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 215 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 118 - expr: expr EQ.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 216 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 119 - expr: expr NEQ.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 217 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 120 - expr: expr ANDAND.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 218 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 121 - expr: expr OROR.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 219 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 122 - expr: expr '^'.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 220 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 123 - picture: PRINT position ST. (14) - - . reduce 14 (src line 108) - - -state 124 - position: position '+'.expr ',' expr - position: position '+'.'(' expr ',' expr ')' - position: position '+'.place - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 222 - . error - - expr goto 221 - asgn goto 47 - place goto 223 - blockname goto 68 - last goto 53 - -state 125 - position: position '-'.expr ',' expr - position: position '-'.'(' expr ',' expr ')' - position: position '-'.place - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 225 - . error - - expr goto 224 - asgn goto 47 - place goto 226 - blockname goto 68 - last goto 53 - -state 126 - picture: PRINT text ST. (15) - - . reduce 15 (src line 109) - - -state 127 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: '-' expr. (147) - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - '^' shift 122 - . reduce 147 (src line 320) - - -state 128 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: '+' expr. (148) - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - '^' shift 122 - . reduce 148 (src line 321) - - -state 129 - position: '(' position.')' - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - - '+' shift 124 - '-' shift 125 - ')' shift 227 - . error - - -state 130 - position: place. (100) - position: '(' place.',' place ')' - expr: place.DOTX - expr: place.DOTY - expr: place.DOTHT - expr: place.DOTWID - expr: place.DOTRAD - - DOTX shift 132 - DOTY shift 133 - DOTHT shift 134 - DOTWID shift 135 - DOTRAD shift 136 - ',' shift 228 - . reduce 100 (src line 253) - - -state 131 - position: expr.',' expr - position: expr.LT position ',' position GT - position: expr.BETWEEN position AND position - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: '(' expr.')' - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - BETWEEN shift 109 - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 108 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 107 - ')' shift 229 - . error - - -state 132 - expr: place DOTX. (150) - - . reduce 150 (src line 323) - - -state 133 - expr: place DOTY. (151) - - . reduce 151 (src line 324) - - -state 134 - expr: place DOTHT. (152) - - . reduce 152 (src line 325) - - -state 135 - expr: place DOTWID. (153) - - . reduce 153 (src line 326) - - -state 136 - expr: place DOTRAD. (154) - - . reduce 154 (src line 327) - - -state 137 - place: PLACENAME CORNER. (113) - - . reduce 113 (src line 270) - - -state 138 - blockname: PLACENAME '.'.PLACENAME - expr: PLACENAME '.'.VARNAME - - PLACENAME shift 230 - VARNAME shift 231 - . error - - -139: shift/reduce conflict (shift 232(0), red'n 116(0)) on CORNER -state 139 - place: last type. (116) - place: last type.CORNER - - CORNER shift 232 - . reduce 116 (src line 273) - - -state 140 - blockname: last BLOCK.'.' PLACENAME - type: BLOCK. (138) - expr: last BLOCK.'.' VARNAME - - '.' shift 233 - . reduce 138 (src line 304) - - -state 141 - last: last LAST. (128) - - . reduce 128 (src line 290) - - -state 142 - type: BOX. (131) - - . reduce 131 (src line 296) - - -state 143 - type: CIRCLE. (132) - - . reduce 132 (src line 298) - - -state 144 - type: ELLIPSE. (133) - - . reduce 133 (src line 299) - - -state 145 - type: ARC. (134) - - . reduce 134 (src line 300) - - -state 146 - type: LINE. (135) - - . reduce 135 (src line 301) - - -state 147 - type: ARROW. (136) - - . reduce 136 (src line 302) - - -state 148 - type: SPLINE. (137) - - . reduce 137 (src line 303) - - -149: shift/reduce conflict (shift 234(0), red'n 119(0)) on CORNER -state 149 - place: NTH type. (119) - place: NTH type.CORNER - - CORNER shift 234 - . reduce 119 (src line 276) - - -state 150 - blockname: NTH BLOCK.'.' PLACENAME - type: BLOCK. (138) - expr: NTH BLOCK.'.' VARNAME - - '.' shift 235 - . reduce 138 (src line 304) - - -state 151 - last: NTH LAST. (129) - - . reduce 129 (src line 292) - - -state 152 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: NOT expr. (166) - expr: expr.'^' expr - - '^' shift 122 - . reduce 166 (src line 339) - - -state 153 - expr: LOG '('.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 236 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 154 - expr: EXP '('.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 237 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 155 - expr: SIN '('.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 238 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 156 - expr: COS '('.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 239 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 157 - expr: ATAN2 '('.expr ',' expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 240 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 158 - expr: SQRT '('.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 241 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 159 - expr: RAND '('.')' - - ')' shift 242 - . error - - -state 160 - expr: MAX '('.expr ',' expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 243 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 161 - expr: MIN '('.expr ',' expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 244 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 162 - expr: INT '('.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 245 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 163 - place: CORNER PLACENAME. (114) - blockname: PLACENAME.'.' PLACENAME - - '.' shift 246 - . reduce 114 (src line 271) - - -state 164 - place: CORNER last.type - blockname: last.BLOCK '.' PLACENAME - last: last.LAST - - BOX shift 142 - LINE shift 146 - ARROW shift 147 - CIRCLE shift 143 - ELLIPSE shift 144 - ARC shift 145 - SPLINE shift 148 - BLOCK shift 248 - LAST shift 141 - . error - - type goto 247 - -state 165 - place: CORNER NTH.type - blockname: NTH.BLOCK '.' PLACENAME - last: NTH.LAST - - BOX shift 142 - LINE shift 146 - ARROW shift 147 - CIRCLE shift 143 - ELLIPSE shift 144 - ARC shift 145 - SPLINE shift 148 - BLOCK shift 250 - LAST shift 151 - . error - - type goto 249 - -state 166 - place: CORNER blockname. (124) - - . reduce 124 (src line 281) - - -state 167 - place: blockname CORNER. (123) - - . reduce 123 (src line 280) - - -state 168 - picture: RESET varlist ST. (16) - - . reduce 16 (src line 110) - - -state 169 - varlist: varlist VARNAME. (23) - - . reduce 23 (src line 120) - - -state 170 - varlist: varlist ','.VARNAME - - VARNAME shift 251 - . error - - -state 171 - attrlist: attrlist attr. (61) - - . reduce 61 (src line 197) - - -172: shift/reduce conflict (shift 52(0), red'n 64(0)) on PLACENAME -172: shift/reduce conflict (shift 46(0), red'n 64(0)) on VARNAME -172: shift/reduce conflict (shift 66(0), red'n 64(0)) on CORNER -172: shift/reduce conflict (shift 67(0), red'n 64(0)) on HERE -172: shift/reduce conflict (shift 69(0), red'n 64(0)) on LAST -172: shift/reduce conflict (shift 54(0), red'n 64(0)) on NTH -172: shift/reduce conflict (shift 45(0), red'n 64(0)) on NUMBER -172: shift/reduce conflict (shift 56(0), red'n 64(0)) on LOG -172: shift/reduce conflict (shift 57(0), red'n 64(0)) on EXP -172: shift/reduce conflict (shift 58(0), red'n 64(0)) on SIN -172: shift/reduce conflict (shift 59(0), red'n 64(0)) on COS -172: shift/reduce conflict (shift 60(0), red'n 64(0)) on ATAN2 -172: shift/reduce conflict (shift 61(0), red'n 64(0)) on SQRT -172: shift/reduce conflict (shift 62(0), red'n 64(0)) on RAND -172: shift/reduce conflict (shift 64(0), red'n 64(0)) on MIN -172: shift/reduce conflict (shift 63(0), red'n 64(0)) on MAX -172: shift/reduce conflict (shift 65(0), red'n 64(0)) on INT -172: shift/reduce conflict (shift 49(5), red'n 64(0)) on '+' -172: shift/reduce conflict (shift 48(5), red'n 64(0)) on '-' -172: shift/reduce conflict (shift 55(7), red'n 64(0)) on NOT -172: shift/reduce conflict (shift 94(0), red'n 64(0)) on '(' -state 172 - attr: ATTR.expr - attr: ATTR. (64) - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 64 (src line 204) - - expr goto 252 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -173: shift/reduce conflict (shift 110(5), red'n 65(0)) on '+' -173: shift/reduce conflict (shift 111(5), red'n 65(0)) on '-' -state 173 - attr: expr. (65) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 65 (src line 205) - - -174: shift/reduce conflict (shift 52(0), red'n 67(0)) on PLACENAME -174: shift/reduce conflict (shift 46(0), red'n 67(0)) on VARNAME -174: shift/reduce conflict (shift 66(0), red'n 67(0)) on CORNER -174: shift/reduce conflict (shift 67(0), red'n 67(0)) on HERE -174: shift/reduce conflict (shift 69(0), red'n 67(0)) on LAST -174: shift/reduce conflict (shift 54(0), red'n 67(0)) on NTH -174: shift/reduce conflict (shift 45(0), red'n 67(0)) on NUMBER -174: shift/reduce conflict (shift 56(0), red'n 67(0)) on LOG -174: shift/reduce conflict (shift 57(0), red'n 67(0)) on EXP -174: shift/reduce conflict (shift 58(0), red'n 67(0)) on SIN -174: shift/reduce conflict (shift 59(0), red'n 67(0)) on COS -174: shift/reduce conflict (shift 60(0), red'n 67(0)) on ATAN2 -174: shift/reduce conflict (shift 61(0), red'n 67(0)) on SQRT -174: shift/reduce conflict (shift 62(0), red'n 67(0)) on RAND -174: shift/reduce conflict (shift 64(0), red'n 67(0)) on MIN -174: shift/reduce conflict (shift 63(0), red'n 67(0)) on MAX -174: shift/reduce conflict (shift 65(0), red'n 67(0)) on INT -174: shift/reduce conflict (shift 49(5), red'n 67(0)) on '+' -174: shift/reduce conflict (shift 48(5), red'n 67(0)) on '-' -174: shift/reduce conflict (shift 55(7), red'n 67(0)) on NOT -174: shift/reduce conflict (shift 94(0), red'n 67(0)) on '(' -state 174 - attr: DIR.expr - attr: DIR. (67) - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 67 (src line 207) - - expr goto 253 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 175 - attr: FROM.position - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 50 - . error - - expr goto 105 - asgn goto 47 - position goto 254 - place goto 51 - blockname goto 68 - last goto 53 - -state 176 - attr: TO.position - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 50 - . error - - expr goto 105 - asgn goto 47 - position goto 255 - place goto 51 - blockname goto 68 - last goto 53 - -state 177 - attr: AT.position - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 50 - . error - - expr goto 105 - asgn goto 47 - position goto 256 - place goto 51 - blockname goto 68 - last goto 53 - -state 178 - attr: BY.position - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 50 - . error - - expr goto 105 - asgn goto 47 - position goto 257 - place goto 51 - blockname goto 68 - last goto 53 - -state 179 - attr: WITH.CORNER - attr: WITH.'.' PLACENAME - attr: WITH.'.' PLACENAME CORNER - attr: WITH.position - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 258 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '.' shift 259 - '(' shift 50 - . error - - expr goto 105 - asgn goto 47 - position goto 260 - place goto 51 - blockname goto 68 - last goto 53 - -state 180 - attr: SAME. (76) - - . reduce 76 (src line 217) - - -state 181 - attr: TEXTATTR. (77) - - . reduce 77 (src line 218) - - -state 182 - attr: HEAD. (78) - - . reduce 78 (src line 219) - - -183: shift/reduce conflict (shift 52(0), red'n 80(0)) on PLACENAME -183: shift/reduce conflict (shift 46(0), red'n 80(0)) on VARNAME -183: shift/reduce conflict (shift 66(0), red'n 80(0)) on CORNER -183: shift/reduce conflict (shift 67(0), red'n 80(0)) on HERE -183: shift/reduce conflict (shift 69(0), red'n 80(0)) on LAST -183: shift/reduce conflict (shift 54(0), red'n 80(0)) on NTH -183: shift/reduce conflict (shift 45(0), red'n 80(0)) on NUMBER -183: shift/reduce conflict (shift 56(0), red'n 80(0)) on LOG -183: shift/reduce conflict (shift 57(0), red'n 80(0)) on EXP -183: shift/reduce conflict (shift 58(0), red'n 80(0)) on SIN -183: shift/reduce conflict (shift 59(0), red'n 80(0)) on COS -183: shift/reduce conflict (shift 60(0), red'n 80(0)) on ATAN2 -183: shift/reduce conflict (shift 61(0), red'n 80(0)) on SQRT -183: shift/reduce conflict (shift 62(0), red'n 80(0)) on RAND -183: shift/reduce conflict (shift 64(0), red'n 80(0)) on MIN -183: shift/reduce conflict (shift 63(0), red'n 80(0)) on MAX -183: shift/reduce conflict (shift 65(0), red'n 80(0)) on INT -183: shift/reduce conflict (shift 49(5), red'n 80(0)) on '+' -183: shift/reduce conflict (shift 48(5), red'n 80(0)) on '-' -183: shift/reduce conflict (shift 55(7), red'n 80(0)) on NOT -183: shift/reduce conflict (shift 94(0), red'n 80(0)) on '(' -state 183 - attr: DOT.expr - attr: DOT. (80) - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 80 (src line 221) - - expr goto 261 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -184: shift/reduce conflict (shift 52(0), red'n 82(0)) on PLACENAME -184: shift/reduce conflict (shift 46(0), red'n 82(0)) on VARNAME -184: shift/reduce conflict (shift 66(0), red'n 82(0)) on CORNER -184: shift/reduce conflict (shift 67(0), red'n 82(0)) on HERE -184: shift/reduce conflict (shift 69(0), red'n 82(0)) on LAST -184: shift/reduce conflict (shift 54(0), red'n 82(0)) on NTH -184: shift/reduce conflict (shift 45(0), red'n 82(0)) on NUMBER -184: shift/reduce conflict (shift 56(0), red'n 82(0)) on LOG -184: shift/reduce conflict (shift 57(0), red'n 82(0)) on EXP -184: shift/reduce conflict (shift 58(0), red'n 82(0)) on SIN -184: shift/reduce conflict (shift 59(0), red'n 82(0)) on COS -184: shift/reduce conflict (shift 60(0), red'n 82(0)) on ATAN2 -184: shift/reduce conflict (shift 61(0), red'n 82(0)) on SQRT -184: shift/reduce conflict (shift 62(0), red'n 82(0)) on RAND -184: shift/reduce conflict (shift 64(0), red'n 82(0)) on MIN -184: shift/reduce conflict (shift 63(0), red'n 82(0)) on MAX -184: shift/reduce conflict (shift 65(0), red'n 82(0)) on INT -184: shift/reduce conflict (shift 49(5), red'n 82(0)) on '+' -184: shift/reduce conflict (shift 48(5), red'n 82(0)) on '-' -184: shift/reduce conflict (shift 55(7), red'n 82(0)) on NOT -184: shift/reduce conflict (shift 94(0), red'n 82(0)) on '(' -state 184 - attr: DASH.expr - attr: DASH. (82) - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 82 (src line 223) - - expr goto 262 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -185: shift/reduce conflict (shift 264(0), red'n 84(0)) on PLACENAME -185: shift/reduce conflict (shift 46(0), red'n 84(0)) on VARNAME -185: shift/reduce conflict (shift 66(0), red'n 84(0)) on CORNER -185: shift/reduce conflict (shift 67(0), red'n 84(0)) on HERE -185: shift/reduce conflict (shift 69(0), red'n 84(0)) on LAST -185: shift/reduce conflict (shift 54(0), red'n 84(0)) on NTH -185: shift/reduce conflict (shift 45(0), red'n 84(0)) on NUMBER -185: shift/reduce conflict (shift 56(0), red'n 84(0)) on LOG -185: shift/reduce conflict (shift 57(0), red'n 84(0)) on EXP -185: shift/reduce conflict (shift 58(0), red'n 84(0)) on SIN -185: shift/reduce conflict (shift 59(0), red'n 84(0)) on COS -185: shift/reduce conflict (shift 60(0), red'n 84(0)) on ATAN2 -185: shift/reduce conflict (shift 61(0), red'n 84(0)) on SQRT -185: shift/reduce conflict (shift 62(0), red'n 84(0)) on RAND -185: shift/reduce conflict (shift 64(0), red'n 84(0)) on MIN -185: shift/reduce conflict (shift 63(0), red'n 84(0)) on MAX -185: shift/reduce conflict (shift 65(0), red'n 84(0)) on INT -185: shift/reduce conflict (shift 49(5), red'n 84(0)) on '+' -185: shift/reduce conflict (shift 48(5), red'n 84(0)) on '-' -185: shift/reduce conflict (shift 55(7), red'n 84(0)) on NOT -185: shift/reduce conflict (shift 94(0), red'n 84(0)) on '(' -state 185 - attr: CHOP.expr - attr: CHOP. (84) - attr: CHOP.PLACENAME - - PLACENAME shift 264 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 84 (src line 225) - - expr goto 263 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -186: shift/reduce conflict (shift 52(0), red'n 87(0)) on PLACENAME -186: shift/reduce conflict (shift 46(0), red'n 87(0)) on VARNAME -186: shift/reduce conflict (shift 66(0), red'n 87(0)) on CORNER -186: shift/reduce conflict (shift 67(0), red'n 87(0)) on HERE -186: shift/reduce conflict (shift 69(0), red'n 87(0)) on LAST -186: shift/reduce conflict (shift 54(0), red'n 87(0)) on NTH -186: shift/reduce conflict (shift 45(0), red'n 87(0)) on NUMBER -186: shift/reduce conflict (shift 56(0), red'n 87(0)) on LOG -186: shift/reduce conflict (shift 57(0), red'n 87(0)) on EXP -186: shift/reduce conflict (shift 58(0), red'n 87(0)) on SIN -186: shift/reduce conflict (shift 59(0), red'n 87(0)) on COS -186: shift/reduce conflict (shift 60(0), red'n 87(0)) on ATAN2 -186: shift/reduce conflict (shift 61(0), red'n 87(0)) on SQRT -186: shift/reduce conflict (shift 62(0), red'n 87(0)) on RAND -186: shift/reduce conflict (shift 64(0), red'n 87(0)) on MIN -186: shift/reduce conflict (shift 63(0), red'n 87(0)) on MAX -186: shift/reduce conflict (shift 65(0), red'n 87(0)) on INT -186: shift/reduce conflict (shift 49(5), red'n 87(0)) on '+' -186: shift/reduce conflict (shift 48(5), red'n 87(0)) on '-' -186: shift/reduce conflict (shift 55(7), red'n 87(0)) on NOT -186: shift/reduce conflict (shift 94(0), red'n 87(0)) on '(' -state 186 - attr: FILL.expr - attr: FILL. (87) - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 87 (src line 228) - - expr goto 265 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 187 - attr: NOEDGE. (88) - - . reduce 88 (src line 229) - - -188: shift/reduce conflict (shift 35(0), red'n 89(0)) on TEXT -188: shift/reduce conflict (shift 36(0), red'n 89(0)) on SPRINTF -state 188 - attr: textlist. (89) - textlist: textlist.textattr - - TEXT shift 35 - SPRINTF shift 36 - . reduce 89 (src line 230) - - text goto 34 - textattr goto 81 - -state 189 - prim: lbracket piclist ']'.$$58 attrlist - $$58: . (58) - - . reduce 58 (src line 189) - - $$58 goto 266 - -state 190 - asgn: VARNAME '=' expr. (25) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 25 (src line 124) - - -state 191 - copylist: copylist copyattr. (28) - - . reduce 28 (src line 133) - - -state 192 - copyattr: THRU DEFNAME. (30) - - . reduce 30 (src line 137) - - -state 193 - copyattr: UNTIL text. (31) - - . reduce 31 (src line 138) - - -state 194 - for: FOR name FROM.expr TO expr BY optop expr DOSTR - for: FOR name FROM.expr TO expr DOSTR - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 267 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 195 - for: FOR name '='.expr TO expr BY optop expr DOSTR - for: FOR name '='.expr TO expr DOSTR - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 268 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 196 - if: IF if_expr THENSTR.ELSESTR - if: IF if_expr THENSTR. (37) - - ELSESTR shift 269 - . reduce 37 (src line 154) - - -state 197 - expr: expr LT.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 270 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 198 - if_expr: text EQ.text - - TEXT shift 35 - SPRINTF shift 36 - . error - - text goto 271 - -state 199 - if_expr: text NEQ.text - - TEXT shift 35 - SPRINTF shift 36 - . error - - text goto 272 - -state 200 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: '(' expr.')' - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 229 - . error - - -state 201 - text: SPRINTF '(' text.')' - text: SPRINTF '(' text.',' exprlist ')' - - ',' shift 274 - ')' shift 273 - . error - - -state 202 - picture: PLACENAME ':' ST picture. (9) - - . reduce 9 (src line 103) - - -state 203 - picture: PLACENAME ':' position ST. (10) - - . reduce 10 (src line 104) - - -204: shift/reduce conflict (shift 115(4), red'n 102(0)) on GT -204: shift/reduce conflict (shift 110(5), red'n 102(0)) on '+' -204: shift/reduce conflict (shift 111(5), red'n 102(0)) on '-' -state 204 - position: expr ',' expr. (102) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 102 (src line 256) - - -state 205 - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - position: expr LT position.',' position GT - - '+' shift 124 - '-' shift 125 - ',' shift 275 - . error - - -206: shift/reduce conflict (shift 109(0), red'n 159(4)) on BETWEEN -206: shift/reduce conflict (shift 107(0), red'n 159(4)) on ',' -state 206 - position: expr.',' expr - position: expr.LT position ',' position GT - position: expr.BETWEEN position AND position - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr LT expr. (159) - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - BETWEEN shift 109 - GT error - LT error - LE error - GE error - EQ error - NEQ error - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 107 - . reduce 159 (src line 332) - - -state 207 - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - position: expr BETWEEN position.AND position - - AND shift 276 - '+' shift 124 - '-' shift 125 - . error - - -state 208 - expr: expr.'+' expr - expr: expr '+' expr. (142) - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 142 (src line 311) - - -state 209 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr '-' expr. (143) - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 143 (src line 312) - - -state 210 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr '*' expr. (144) - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - '^' shift 122 - . reduce 144 (src line 313) - - -state 211 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr '/' expr. (145) - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - '^' shift 122 - . reduce 145 (src line 314) - - -state 212 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr '%' expr. (146) - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - '^' shift 122 - . reduce 146 (src line 317) - - -state 213 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr GT expr. (158) - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - GT error - LT error - LE error - GE error - EQ error - NEQ error - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 158 (src line 331) - - -state 214 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr LE expr. (160) - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - GT error - LT error - LE error - GE error - EQ error - NEQ error - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 160 (src line 333) - - -state 215 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr GE expr. (161) - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - GT error - LT error - LE error - GE error - EQ error - NEQ error - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 161 (src line 334) - - -state 216 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr EQ expr. (162) - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - GT error - LT error - LE error - GE error - EQ error - NEQ error - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 162 (src line 335) - - -state 217 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr NEQ expr. (163) - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - GT error - LT error - LE error - GE error - EQ error - NEQ error - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 163 (src line 336) - - -state 218 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr ANDAND expr. (164) - expr: expr.OROR expr - expr: expr.'^' expr - - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 164 (src line 337) - - -state 219 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr OROR expr. (165) - expr: expr.'^' expr - - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 165 (src line 338) - - -state 220 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: expr '^' expr. (169) - - '^' shift 122 - . reduce 169 (src line 342) - - -state 221 - position: position '+' expr.',' expr - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 277 - . error - - -state 222 - position: position '+' '('.expr ',' expr ')' - expr: '('.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 278 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 223 - position: position '+' place. (107) - expr: place.DOTX - expr: place.DOTY - expr: place.DOTHT - expr: place.DOTWID - expr: place.DOTRAD - - DOTX shift 132 - DOTY shift 133 - DOTHT shift 134 - DOTWID shift 135 - DOTRAD shift 136 - . reduce 107 (src line 261) - - -state 224 - position: position '-' expr.',' expr - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 279 - . error - - -state 225 - position: position '-' '('.expr ',' expr ')' - expr: '('.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 280 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 226 - position: position '-' place. (108) - expr: place.DOTX - expr: place.DOTY - expr: place.DOTHT - expr: place.DOTWID - expr: place.DOTRAD - - DOTX shift 132 - DOTY shift 133 - DOTHT shift 134 - DOTWID shift 135 - DOTRAD shift 136 - . reduce 108 (src line 262) - - -state 227 - position: '(' position ')'. (101) - - . reduce 101 (src line 255) - - -state 228 - position: '(' place ','.place ')' - - PLACENAME shift 282 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 284 - . error - - place goto 281 - blockname goto 68 - last goto 283 - -state 229 - expr: '(' expr ')'. (149) - - . reduce 149 (src line 322) - - -state 230 - blockname: PLACENAME '.' PLACENAME. (127) - - . reduce 127 (src line 287) - - -state 231 - expr: PLACENAME '.' VARNAME. (155) - - . reduce 155 (src line 328) - - -state 232 - place: last type CORNER. (117) - - . reduce 117 (src line 274) - - -state 233 - blockname: last BLOCK '.'.PLACENAME - expr: last BLOCK '.'.VARNAME - - PLACENAME shift 285 - VARNAME shift 286 - . error - - -state 234 - place: NTH type CORNER. (120) - - . reduce 120 (src line 277) - - -state 235 - blockname: NTH BLOCK '.'.PLACENAME - expr: NTH BLOCK '.'.VARNAME - - PLACENAME shift 287 - VARNAME shift 288 - . error - - -state 236 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: LOG '(' expr.')' - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 289 - . error - - -state 237 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: EXP '(' expr.')' - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 290 - . error - - -state 238 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: SIN '(' expr.')' - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 291 - . error - - -state 239 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: COS '(' expr.')' - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 292 - . error - - -state 240 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: ATAN2 '(' expr.',' expr ')' - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 293 - . error - - -state 241 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: SQRT '(' expr.')' - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 294 - . error - - -state 242 - expr: RAND '(' ')'. (174) - - . reduce 174 (src line 347) - - -state 243 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: MAX '(' expr.',' expr ')' - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 295 - . error - - -state 244 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: MIN '(' expr.',' expr ')' - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 296 - . error - - -state 245 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: INT '(' expr.')' - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 297 - . error - - -state 246 - blockname: PLACENAME '.'.PLACENAME - - PLACENAME shift 230 - . error - - -state 247 - place: CORNER last type. (118) - - . reduce 118 (src line 275) - - -state 248 - blockname: last BLOCK.'.' PLACENAME - type: BLOCK. (138) - - '.' shift 298 - . reduce 138 (src line 304) - - -state 249 - place: CORNER NTH type. (121) - - . reduce 121 (src line 278) - - -state 250 - blockname: NTH BLOCK.'.' PLACENAME - type: BLOCK. (138) - - '.' shift 299 - . reduce 138 (src line 304) - - -state 251 - varlist: varlist ',' VARNAME. (24) - - . reduce 24 (src line 121) - - -252: shift/reduce conflict (shift 110(5), red'n 63(0)) on '+' -252: shift/reduce conflict (shift 111(5), red'n 63(0)) on '-' -state 252 - attr: ATTR expr. (63) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 63 (src line 202) - - -253: shift/reduce conflict (shift 110(5), red'n 66(0)) on '+' -253: shift/reduce conflict (shift 111(5), red'n 66(0)) on '-' -state 253 - attr: DIR expr. (66) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 66 (src line 206) - - -254: shift/reduce conflict (shift 124(5), red'n 68(0)) on '+' -254: shift/reduce conflict (shift 125(5), red'n 68(0)) on '-' -state 254 - attr: FROM position. (68) - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - - '+' shift 124 - '-' shift 125 - . reduce 68 (src line 208) - - -255: shift/reduce conflict (shift 124(5), red'n 69(0)) on '+' -255: shift/reduce conflict (shift 125(5), red'n 69(0)) on '-' -state 255 - attr: TO position. (69) - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - - '+' shift 124 - '-' shift 125 - . reduce 69 (src line 209) - - -256: shift/reduce conflict (shift 124(5), red'n 70(0)) on '+' -256: shift/reduce conflict (shift 125(5), red'n 70(0)) on '-' -state 256 - attr: AT position. (70) - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - - '+' shift 124 - '-' shift 125 - . reduce 70 (src line 210) - - -257: shift/reduce conflict (shift 124(5), red'n 71(0)) on '+' -257: shift/reduce conflict (shift 125(5), red'n 71(0)) on '-' -state 257 - attr: BY position. (71) - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - - '+' shift 124 - '-' shift 125 - . reduce 71 (src line 211) - - -258: shift/reduce conflict (shift 163(0), red'n 72(0)) on PLACENAME -258: shift/reduce conflict (shift 69(0), red'n 72(0)) on LAST -258: shift/reduce conflict (shift 165(0), red'n 72(0)) on NTH -state 258 - attr: WITH CORNER. (72) - place: CORNER.PLACENAME - place: CORNER.last type - place: CORNER.NTH type - place: CORNER.blockname - - PLACENAME shift 163 - LAST shift 69 - NTH shift 165 - . reduce 72 (src line 212) - - blockname goto 166 - last goto 164 - -state 259 - attr: WITH '.'.PLACENAME - attr: WITH '.'.PLACENAME CORNER - - PLACENAME shift 300 - . error - - -260: shift/reduce conflict (shift 124(5), red'n 75(0)) on '+' -260: shift/reduce conflict (shift 125(5), red'n 75(0)) on '-' -state 260 - attr: WITH position. (75) - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - - '+' shift 124 - '-' shift 125 - . reduce 75 (src line 216) - - -261: shift/reduce conflict (shift 110(5), red'n 79(0)) on '+' -261: shift/reduce conflict (shift 111(5), red'n 79(0)) on '-' -state 261 - attr: DOT expr. (79) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 79 (src line 220) - - -262: shift/reduce conflict (shift 110(5), red'n 81(0)) on '+' -262: shift/reduce conflict (shift 111(5), red'n 81(0)) on '-' -state 262 - attr: DASH expr. (81) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 81 (src line 222) - - -263: shift/reduce conflict (shift 110(5), red'n 83(0)) on '+' -263: shift/reduce conflict (shift 111(5), red'n 83(0)) on '-' -state 263 - attr: CHOP expr. (83) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 83 (src line 224) - - -264: shift/reduce conflict (shift 137(0), red'n 85(0)) on CORNER -state 264 - attr: CHOP PLACENAME. (85) - place: PLACENAME. (112) - place: PLACENAME.CORNER - blockname: PLACENAME.'.' PLACENAME - expr: PLACENAME.'.' VARNAME - - CORNER shift 137 - DOTX reduce 112 (src line 268) - DOTY reduce 112 (src line 268) - DOTHT reduce 112 (src line 268) - DOTWID reduce 112 (src line 268) - DOTRAD reduce 112 (src line 268) - '.' shift 138 - . reduce 85 (src line 226) - - -265: shift/reduce conflict (shift 110(5), red'n 86(0)) on '+' -265: shift/reduce conflict (shift 111(5), red'n 86(0)) on '-' -state 265 - attr: FILL expr. (86) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 86 (src line 227) - - -state 266 - prim: lbracket piclist ']' $$58.attrlist - attrlist: . (62) - - . reduce 62 (src line 199) - - attrlist goto 301 - -state 267 - for: FOR name FROM expr.TO expr BY optop expr DOSTR - for: FOR name FROM expr.TO expr DOSTR - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - TO shift 302 - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . error - - -state 268 - for: FOR name '=' expr.TO expr BY optop expr DOSTR - for: FOR name '=' expr.TO expr DOSTR - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - TO shift 303 - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . error - - -state 269 - if: IF if_expr THENSTR ELSESTR. (36) - - . reduce 36 (src line 152) - - -state 270 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr LT expr. (159) - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - GT error - LT error - LE error - GE error - EQ error - NEQ error - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 159 (src line 332) - - -state 271 - if_expr: text EQ text. (39) - - . reduce 39 (src line 158) - - -state 272 - if_expr: text NEQ text. (40) - - . reduce 40 (src line 159) - - -state 273 - text: SPRINTF '(' text ')'. (96) - - . reduce 96 (src line 244) - - -state 274 - text: SPRINTF '(' text ','.exprlist ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 305 - asgn goto 47 - exprlist goto 304 - place goto 95 - blockname goto 68 - last goto 53 - -state 275 - position: expr LT position ','.position GT - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 50 - . error - - expr goto 105 - asgn goto 47 - position goto 306 - place goto 51 - blockname goto 68 - last goto 53 - -state 276 - position: expr BETWEEN position AND.position - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 50 - . error - - expr goto 105 - asgn goto 47 - position goto 307 - place goto 51 - blockname goto 68 - last goto 53 - -state 277 - position: position '+' expr ','.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 308 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 278 - position: position '+' '(' expr.',' expr ')' - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: '(' expr.')' - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 309 - ')' shift 229 - . error - - -state 279 - position: position '-' expr ','.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 310 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 280 - position: position '-' '(' expr.',' expr ')' - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: '(' expr.')' - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ',' shift 311 - ')' shift 229 - . error - - -state 281 - position: '(' place ',' place.')' - - ')' shift 312 - . error - - -state 282 - place: PLACENAME. (112) - place: PLACENAME.CORNER - blockname: PLACENAME.'.' PLACENAME - - CORNER shift 137 - '.' shift 246 - . reduce 112 (src line 268) - - -state 283 - place: last.type - place: last.type CORNER - blockname: last.BLOCK '.' PLACENAME - last: last.LAST - - BOX shift 142 - LINE shift 146 - ARROW shift 147 - CIRCLE shift 143 - ELLIPSE shift 144 - ARC shift 145 - SPLINE shift 148 - BLOCK shift 248 - LAST shift 141 - . error - - type goto 139 - -state 284 - place: NTH.type - place: NTH.type CORNER - blockname: NTH.BLOCK '.' PLACENAME - last: NTH.LAST - - BOX shift 142 - LINE shift 146 - ARROW shift 147 - CIRCLE shift 143 - ELLIPSE shift 144 - ARC shift 145 - SPLINE shift 148 - BLOCK shift 250 - LAST shift 151 - . error - - type goto 149 - -state 285 - blockname: last BLOCK '.' PLACENAME. (125) - - . reduce 125 (src line 284) - - -state 286 - expr: last BLOCK '.' VARNAME. (156) - - . reduce 156 (src line 329) - - -state 287 - blockname: NTH BLOCK '.' PLACENAME. (126) - - . reduce 126 (src line 286) - - -state 288 - expr: NTH BLOCK '.' VARNAME. (157) - - . reduce 157 (src line 330) - - -state 289 - expr: LOG '(' expr ')'. (167) - - . reduce 167 (src line 340) - - -state 290 - expr: EXP '(' expr ')'. (168) - - . reduce 168 (src line 341) - - -state 291 - expr: SIN '(' expr ')'. (170) - - . reduce 170 (src line 343) - - -state 292 - expr: COS '(' expr ')'. (171) - - . reduce 171 (src line 344) - - -state 293 - expr: ATAN2 '(' expr ','.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 313 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 294 - expr: SQRT '(' expr ')'. (173) - - . reduce 173 (src line 346) - - -state 295 - expr: MAX '(' expr ','.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 314 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 296 - expr: MIN '(' expr ','.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 315 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 297 - expr: INT '(' expr ')'. (177) - - . reduce 177 (src line 350) - - -state 298 - blockname: last BLOCK '.'.PLACENAME - - PLACENAME shift 285 - . error - - -state 299 - blockname: NTH BLOCK '.'.PLACENAME - - PLACENAME shift 287 - . error - - -300: shift/reduce conflict (shift 316(0), red'n 73(0)) on CORNER -state 300 - attr: WITH '.' PLACENAME. (73) - attr: WITH '.' PLACENAME.CORNER - - CORNER shift 316 - . reduce 73 (src line 213) - - -state 301 - prim: lbracket piclist ']' $$58 attrlist. (59) - attrlist: attrlist.attr - - TEXT shift 35 - PLACENAME shift 52 - VARNAME shift 46 - SPRINTF shift 36 - ATTR shift 172 - TEXTATTR shift 181 - FROM shift 175 - TO shift 176 - AT shift 177 - BY shift 178 - WITH shift 179 - HEAD shift 182 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - SAME shift 180 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - DIR shift 174 - DOT shift 183 - DASH shift 184 - CHOP shift 185 - FILL shift 186 - NOEDGE shift 187 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . reduce 59 (src line 189) - - expr goto 173 - asgn goto 47 - text goto 34 - place goto 95 - blockname goto 68 - textlist goto 188 - textattr goto 32 - last goto 53 - attr goto 171 - -state 302 - for: FOR name FROM expr TO.expr BY optop expr DOSTR - for: FOR name FROM expr TO.expr DOSTR - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 317 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 303 - for: FOR name '=' expr TO.expr BY optop expr DOSTR - for: FOR name '=' expr TO.expr DOSTR - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 318 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 304 - text: SPRINTF '(' text ',' exprlist.')' - exprlist: exprlist.',' expr - - ',' shift 320 - ')' shift 319 - . error - - -state 305 - exprlist: expr. (98) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 98 (src line 248) - - -state 306 - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - position: expr LT position ',' position.GT - - GT shift 321 - '+' shift 124 - '-' shift 125 - . error - - -307: shift/reduce conflict (shift 124(5), red'n 111(0)) on '+' -307: shift/reduce conflict (shift 125(5), red'n 111(0)) on '-' -state 307 - position: position.'+' expr ',' expr - position: position.'-' expr ',' expr - position: position.'+' '(' expr ',' expr ')' - position: position.'-' '(' expr ',' expr ')' - position: position.'+' place - position: position.'-' place - position: expr BETWEEN position AND position. (111) - - '+' shift 124 - '-' shift 125 - . reduce 111 (src line 265) - - -308: shift/reduce conflict (shift 115(4), red'n 103(0)) on GT -308: shift/reduce conflict (shift 110(5), red'n 103(0)) on '+' -308: shift/reduce conflict (shift 111(5), red'n 103(0)) on '-' -state 308 - position: position '+' expr ',' expr. (103) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 103 (src line 257) - - -state 309 - position: position '+' '(' expr ','.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 322 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -310: shift/reduce conflict (shift 115(4), red'n 104(0)) on GT -310: shift/reduce conflict (shift 110(5), red'n 104(0)) on '+' -310: shift/reduce conflict (shift 111(5), red'n 104(0)) on '-' -state 310 - position: position '-' expr ',' expr. (104) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 104 (src line 258) - - -state 311 - position: position '-' '(' expr ','.expr ')' - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 323 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 312 - position: '(' place ',' place ')'. (109) - - . reduce 109 (src line 263) - - -state 313 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: ATAN2 '(' expr ',' expr.')' - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 324 - . error - - -state 314 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: MAX '(' expr ',' expr.')' - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 325 - . error - - -state 315 - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - expr: MIN '(' expr ',' expr.')' - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 326 - . error - - -state 316 - attr: WITH '.' PLACENAME CORNER. (74) - - . reduce 74 (src line 214) - - -state 317 - for: FOR name FROM expr TO expr.BY optop expr DOSTR - for: FOR name FROM expr TO expr.DOSTR - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - DOSTR shift 328 - BY shift 327 - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . error - - -state 318 - for: FOR name '=' expr TO expr.BY optop expr DOSTR - for: FOR name '=' expr TO expr.DOSTR - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - DOSTR shift 330 - BY shift 329 - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . error - - -state 319 - text: SPRINTF '(' text ',' exprlist ')'. (97) - - . reduce 97 (src line 245) - - -state 320 - exprlist: exprlist ','.expr - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 331 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 321 - position: expr LT position ',' position GT. (110) - - . reduce 110 (src line 264) - - -state 322 - position: position '+' '(' expr ',' expr.')' - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 332 - . error - - -state 323 - position: position '-' '(' expr ',' expr.')' - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - ')' shift 333 - . error - - -state 324 - expr: ATAN2 '(' expr ',' expr ')'. (172) - - . reduce 172 (src line 345) - - -state 325 - expr: MAX '(' expr ',' expr ')'. (175) - - . reduce 175 (src line 348) - - -state 326 - expr: MIN '(' expr ',' expr ')'. (176) - - . reduce 176 (src line 349) - - -327: shift/reduce conflict (shift 335(5), red'n 46(0)) on '+' -327: shift/reduce conflict (shift 336(5), red'n 46(0)) on '-' -state 327 - for: FOR name FROM expr TO expr BY.optop expr DOSTR - optop: . (46) - - '+' shift 335 - '-' shift 336 - '*' shift 337 - '/' shift 338 - . reduce 46 (src line 170) - - optop goto 334 - -state 328 - for: FOR name FROM expr TO expr DOSTR. (33) - - . reduce 33 (src line 144) - - -329: shift/reduce conflict (shift 335(5), red'n 46(0)) on '+' -329: shift/reduce conflict (shift 336(5), red'n 46(0)) on '-' -state 329 - for: FOR name '=' expr TO expr BY.optop expr DOSTR - optop: . (46) - - '+' shift 335 - '-' shift 336 - '*' shift 337 - '/' shift 338 - . reduce 46 (src line 170) - - optop goto 339 - -state 330 - for: FOR name '=' expr TO expr DOSTR. (35) - - . reduce 35 (src line 148) - - -state 331 - exprlist: exprlist ',' expr. (99) - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . reduce 99 (src line 250) - - -state 332 - position: position '+' '(' expr ',' expr ')'. (105) - - . reduce 105 (src line 259) - - -state 333 - position: position '-' '(' expr ',' expr ')'. (106) - - . reduce 106 (src line 260) - - -state 334 - for: FOR name FROM expr TO expr BY optop.expr DOSTR - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 340 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 335 - optop: '+'. (42) - - . reduce 42 (src line 165) - - -state 336 - optop: '-'. (43) - - . reduce 43 (src line 167) - - -state 337 - optop: '*'. (44) - - . reduce 44 (src line 168) - - -state 338 - optop: '/'. (45) - - . reduce 45 (src line 169) - - -state 339 - for: FOR name '=' expr TO expr BY optop.expr DOSTR - - PLACENAME shift 52 - VARNAME shift 46 - CORNER shift 66 - HERE shift 67 - LAST shift 69 - NTH shift 54 - NUMBER shift 45 - LOG shift 56 - EXP shift 57 - SIN shift 58 - COS shift 59 - ATAN2 shift 60 - SQRT shift 61 - RAND shift 62 - MIN shift 64 - MAX shift 63 - INT shift 65 - '+' shift 49 - '-' shift 48 - NOT shift 55 - '(' shift 94 - . error - - expr goto 341 - asgn goto 47 - place goto 95 - blockname goto 68 - last goto 53 - -state 340 - for: FOR name FROM expr TO expr BY optop expr.DOSTR - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - DOSTR shift 342 - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . error - - -state 341 - for: FOR name '=' expr TO expr BY optop expr.DOSTR - expr: expr.'+' expr - expr: expr.'-' expr - expr: expr.'*' expr - expr: expr.'/' expr - expr: expr.'%' expr - expr: expr.GT expr - expr: expr.LT expr - expr: expr.LE expr - expr: expr.GE expr - expr: expr.EQ expr - expr: expr.NEQ expr - expr: expr.ANDAND expr - expr: expr.OROR expr - expr: expr.'^' expr - - DOSTR shift 343 - OROR shift 121 - ANDAND shift 120 - GT shift 115 - LT shift 197 - LE shift 116 - GE shift 117 - EQ shift 118 - NEQ shift 119 - '+' shift 110 - '-' shift 111 - '*' shift 112 - '/' shift 113 - '%' shift 114 - '^' shift 122 - . error - - -state 342 - for: FOR name FROM expr TO expr BY optop expr DOSTR. (32) - - . reduce 32 (src line 141) - - -state 343 - for: FOR name '=' expr TO expr BY optop expr DOSTR. (34) - - . reduce 34 (src line 146) - - -117 terminals, 30 nonterminals -178 grammar rules, 344/8000 states -208 shift/reduce, 0 reduce/reduce conflicts reported -129 working sets used -memory: parser 785/120000 -323 extra closures -2895 shift entries, 49 exceptions -175 goto entries -398 entries saved by goto default -Optimizer space used: output 1654/120000 -1654 table entries, 501 zero -maximum spread: 117, maximum offset: 339 diff --git a/internal/rss/model.go b/internal/rss/model.go deleted file mode 100644 index 72c8e25..0000000 --- a/internal/rss/model.go +++ /dev/null @@ -1,118 +0,0 @@ -package rss - -import ( - "encoding/json" - "time" -) - -// Feed is an RSS Feed -type Feed struct { - Title string `json:"title,omitempty"` - Link string `json:"link,omitempty"` - Description string `json:"description,omitempty"` - Language string `json:"language,omitempty"` - Copyright string `json:"copyright,omitempty"` - ManagingEditor string `json:"managingEditor,omitempty"` - WebMaster string `json:"webMaster,omitempty"` - PubDate string `json:"pubDate,omitempty"` - PubDateParsed *time.Time `json:"pubDateParsed,omitempty"` - LastBuildDate string `json:"lastBuildDate,omitempty"` - LastBuildDateParsed *time.Time `json:"lastBuildDateParsed,omitempty"` - Categories []*Category `json:"categories,omitempty"` - Generator string `json:"generator,omitempty"` - Docs string `json:"docs,omitempty"` - TTL string `json:"ttl,omitempty"` - Image *Image `json:"image,omitempty"` - Rating string `json:"rating,omitempty"` - SkipHours []string `json:"skipHours,omitempty"` - SkipDays []string `json:"skipDays,omitempty"` - Cloud *Cloud `json:"cloud,omitempty"` - TextInput *TextInput `json:"textInput,omitempty"` - // DublinCoreExt *ext.DublinCoreExtension `json:"dcExt,omitempty"` - // ITunesExt *ext.ITunesFeedExtension `json:"itunesExt,omitempty"` - // Extensions ext.Extensions `json:"extensions,omitempty"` - Items []*Item `json:"items"` - Version string `json:"version"` -} - -func (f Feed) String() string { - json, _ := json.MarshalIndent(f, "", " ") - return string(json) -} - -// Item is an RSS Item -type Item struct { - Title string `json:"title,omitempty"` - Link string `json:"link,omitempty"` - Description string `json:"description,omitempty"` - Content string `json:"content,omitempty"` - Author string `json:"author,omitempty"` - Categories []*Category `json:"categories,omitempty"` - Comments string `json:"comments,omitempty"` - Enclosure *Enclosure `json:"enclosure,omitempty"` - GUID *GUID `json:"guid,omitempty"` - PubDate string `json:"pubDate,omitempty"` - PubDateParsed *time.Time `json:"pubDateParsed,omitempty"` - Source *Source `json:"source,omitempty"` - // DublinCoreExt *ext.DublinCoreExtension `json:"dcExt,omitempty"` - // ITunesExt *ext.ITunesItemExtension `json:"itunesExt,omitempty"` - // Extensions ext.Extensions `json:"extensions,omitempty"` -} - -// Image is an image that represents the feed -type Image struct { - URL string `json:"url,omitempty"` - Link string `json:"link,omitempty"` - Title string `json:"title,omitempty"` - Width string `json:"width,omitempty"` - Height string `json:"height,omitempty"` - Description string `json:"description,omitempty"` -} - -// Enclosure is a media object that is attached to -// the item -type Enclosure struct { - URL string `json:"url,omitempty"` - Length string `json:"length,omitempty"` - Type string `json:"type,omitempty"` -} - -// GUID is a unique identifier for an item -type GUID struct { - Value string `json:"value,omitempty"` - IsPermalink string `json:"isPermalink,omitempty"` -} - -// Source contains feed information for another -// feed if a given item came from that feed -type Source struct { - Title string `json:"title,omitempty"` - URL string `json:"url,omitempty"` -} - -// Category is category metadata for Feeds and Entries -type Category struct { - Domain string `json:"domain,omitempty"` - Value string `json:"value,omitempty"` -} - -// TextInput specifies a text input box that -// can be displayed with the channel -type TextInput struct { - Title string `json:"title,omitempty"` - Description string `json:"description,omitempty"` - Name string `json:"name,omitempty"` - Link string `json:"link,omitempty"` -} - -// Cloud allows processes to register with a -// cloud to be notified of updates to the channel, -// implementing a lightweight publish-subscribe protocol -// for RSS feeds -type Cloud struct { - Domain string `json:"domain,omitempty"` - Port string `json:"port,omitempty"` - Path string `json:"path,omitempty"` - RegisterProcedure string `json:"registerProcedure,omitempty"` - Protocol string `json:"protocol,omitempty"` -} diff --git a/internal/rss/parser.go b/internal/rss/parser.go deleted file mode 100644 index a5a98b9..0000000 --- a/internal/rss/parser.go +++ /dev/null @@ -1,21 +0,0 @@ -package rss - -import ( - "io" - - "golang.org/x/net/html" -) - -func Parse(r io.Reader) *Feed { - - // z := html.NewTokenizer(r) - - return nil -} - -func parseFeed(z html.Tokenizer) *Feed { - z.Next() - return nil -} - -func parseVersion(z html.Tokenizer) {}