forth

package
v2.0.0+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 1, 2018 License: BSD-3-Clause Imports: 5 Imported by: 0

Documentation

Overview

the forth package is designed for use by programs needing to evaluate command-line arguments or simple expressions to set program variables. It is designed to map host names to numbers. We use it to easily convert host names and IP addresses into parameters. The language is a Forth-like postfix notation. Elements are either commands or strings. Strings are immediately pushed. Commands consume stack variables and produce new ones. Simple examples: push hostname, strip alpha characters to produce a number. If your hostname is sb47, top of stack will be left with 47. hostname hostbase Get the hostbase, if it is 0 mod 20, return the hostbase / 20, else return hostbase mod 20

hostname hostbase dup 20 / swap 20 % dup ifelse

At the end of the evaluation the stack should have one element left; that element is popped and returned. It is an error (currently) to return with a non-empty stack. This package was used for real work at Sandia National Labs from 2010 to 2012 and possibly later. Some of the use of error may seem a bit weird but the creation of this package predates the creation of the error type (it was still an os thing back then).

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Eval

func Eval(f Forth, s string) (ret string, err error)

Eval takes a Forth and strings and splits the string on space * characters, pushing each element on the stack or invoking the * operator if it is found in the opmap. It returns TOS when it is done. * it is an error to leave the stack non-Empty.

func NewWord

func NewWord(f Forth, name, command string)

func Ops

func Ops() map[string]ForthOp

Types

type Forth

type Forth interface {
	Push(string)
	Pop() string
	Length() int
	Empty() bool
	Newop(string, ForthOp)
	Reset()
	Stack() []string
}

Forth is an interface used by the package. The interface requires definition of Push, Pop, Length, Empty (convenience function meaning Length is 0), Newop (insert a new or replacement operator), and Reset (clear the stack, mainly diagnostic)

func New

func New() Forth

New creates a new stack

type ForthOp

type ForthOp func(f Forth)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL