Documentation
¶
Overview ¶
Package parse implements the elvish parser.
The parser builds a hybrid of AST (abstract syntax tree) and parse tree (a.k.a. concrete syntax tree). The AST part only includes parts that are semantically significant -- i.e. skipping whitespaces and symbols that do not alter the semantics, and is embodied in the fields of each *Node type. The parse tree part corresponds to all the text in the original source text, and is embodied in the children of each *Node type.
Index ¶
- func IsInlineWhitespace(r rune) bool
- func IsWhitespace(r rune) bool
- func ParseAs(src Source, n Node, w io.Writer) error
- func Quote(s string) string
- func SourceText(n Node) string
- type Array
- type Assignment
- type Chunk
- type Compound
- type ExprCtx
- type Form
- type Indexing
- type MapPair
- type MultiError
- type Node
- type Pipeline
- type Primary
- type PrimaryType
- type Redir
- type RedirMode
- type Sep
- type Source
- type Tree
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsInlineWhitespace ¶
IsInlineWhitespace reports whether r is an inline whitespace character. Currently this includes space (Unicode 0x20) and tab (Unicode 0x9).
func IsWhitespace ¶
IsWhitespace reports whether r is a whitespace. Currently this includes inline whitespace characters and newline (Unicode 0xa).
func ParseAs ¶ added in v0.14.0
ParseAs parses the given source as a node, depending on the dynamic type of n, writing deprecation warnings to the given io.Writer if it is not nil. If the error is not nil, it always has type MultiError.
func Quote ¶
Quote returns a valid Elvish expression that evaluates to the given string. If s is a valid bareword, it is returned as is; otherwise it is quoted, preferring the use of single quotes.
func SourceText ¶ added in v0.14.0
SourceText returns the part of the source text that parses to the node.
Types ¶
type Array ¶
type Array struct {
Compounds []*Compound
// When non-empty, records the occurrences of semicolons by the indices of
// the compounds they appear before. For instance, [; ; a b; c d;] results
// in Semicolons={0 0 2 4}.
Semicolons []int
// contains filtered or unexported fields
}
Array = { Space | '\n' } { Compound { Space | '\n' } }
type Assignment ¶
Assignment = Indexing '=' Compound
type Chunk ¶
type Chunk struct {
Pipelines []*Pipeline
// contains filtered or unexported fields
}
Chunk = { PipelineSep | Space } { Pipeline { PipelineSep | Space } }
type Compound ¶
type Compound struct {
ExprCtx ExprCtx
Indexings []*Indexing
// contains filtered or unexported fields
}
Compound = { Indexing }
type ExprCtx ¶
type ExprCtx int
ExprCtx represents special contexts of expression parsing.
const ( // NormalExpr represents a normal expression, namely none of the special // ones below. It is the default value. NormalExpr ExprCtx = iota // CmdExpr represents an expression used as the command in a form. In this // context, unquoted <>*^ are treated as bareword characters. CmdExpr // LHSExpr represents an expression used as the left-hand-side in either // assignments or map pairs. In this context, an unquoted = serves as an // expression terminator and is thus not treated as a bareword character. LHSExpr // BracedElemExpr represents an expression used as an element in a braced // expression. In this context, an unquoted , serves as an expression // terminator and is thus not treated as a bareword character. BracedElemExpr )
type Form ¶
type Form struct {
Assignments []*Assignment
Head *Compound
// Left-hand-sides for the spacey assignment. Right-hand-sides are in Args.
Vars []*Compound
Args []*Compound
Opts []*MapPair
Redirs []*Redir
// contains filtered or unexported fields
}
Form = { Space } { { Assignment } { Space } }
{ Compound } { Space } { ( Compound | MapPair | Redir ) { Space } }
type Indexing ¶
type Indexing struct {
ExprCtx ExprCtx
Head *Primary
Indicies []*Array
// contains filtered or unexported fields
}
Indexing = Primary { '[' Array ']' }
type MapPair ¶
type MapPair struct {
Key, Value *Compound
// contains filtered or unexported fields
}
MapPair = '&' { Space } Compound { Space } Compound
type MultiError ¶
MultiError stores multiple Error's and can pretty print them.
func (*MultiError) Error ¶
func (me *MultiError) Error() string
Error returns a string representation of the error.
func (*MultiError) Show ¶ added in v0.14.0
func (me *MultiError) Show(indent string) string
Show shows the error.
type Node ¶
Node represents a parse tree as well as an AST.
type Primary ¶
type Primary struct {
ExprCtx ExprCtx
Type PrimaryType
// The unquoted string value. Valid for Bareword, SingleQuoted,
// DoubleQuoted, Variable, Wildcard and Tilde.
Value string
Elements []*Compound // Valid for List and Labda
Chunk *Chunk // Valid for OutputCapture, ExitusCapture and Lambda
MapPairs []*MapPair // Valid for Map and Lambda
Braced []*Compound // Valid for Braced
// contains filtered or unexported fields
}
Primary is the smallest expression unit.
type PrimaryType ¶
type PrimaryType int
PrimaryType is the type of a Primary.
const ( BadPrimary PrimaryType = iota Bareword SingleQuoted DoubleQuoted Variable Wildcard Tilde ExceptionCapture OutputCapture List Lambda Map Braced )
Possible values for PrimaryType.
func QuoteAs ¶
func QuoteAs(s string, q PrimaryType) (string, PrimaryType)
QuoteAs returns a representation of s in elvish syntax, preferring the syntax specified by q, which must be one of Bareword, SingleQuoted, or DoubleQuoted. It returns the quoted string and the actual quoting.
func (PrimaryType) String ¶
func (i PrimaryType) String() string
type Redir ¶
type Redir struct {
Left *Compound
Mode RedirMode
RightIsFd bool
Right *Compound
// contains filtered or unexported fields
}
Redir = { Compound } { '<'|'>'|'<>'|'>>' } { Space } ( '&'? Compound )
type Sep ¶
type Sep struct {
// contains filtered or unexported fields
}
Sep is the catch-all node type for leaf nodes that lack internal structures and semantics, and serve solely for syntactic purposes. The parsing of separators depend on the Parent node; as such it lacks a genuine parse method.
type Source ¶ added in v0.14.0
Source describes a piece of source code.
func SourceForTest ¶ added in v0.14.0
SourceForTest returns a Source used for testing.
func (Source) IsStructMap ¶ added in v0.14.0
func (src Source) IsStructMap()
IsStructMap marks that Source is a structmap.