Documentation
¶
Index ¶
- Constants
- Variables
- func RemoveAllSpaces(t PToken) bool
- func RemoveSpaces(t PToken) bool
- func StripCR(b []byte, comment bool) []byte
- func TrimSpace(left, right bool, s string) string
- func Unquote(s string) (string, error)
- type BlockEnd
- type BlockWrap
- type Error
- type ErrorList
- type File
- type Handlers
- type MixedDelimiter
- type Mode
- type PToken
- type ParseListHandler
- type Parser
- func NewParser(file *source.File, trace io.Writer) *Parser
- func NewParserWithOptions(file *source.File, opts *ParserOptions, scannerOptions *ScannerOptions) *Parser
- func NewParserWithScanner(scanner ScannerInterface, opts *ParserOptions) *Parser
- func NewSingleParser(input, fileName string, opts *ParserOptions, scannerOpts *ScannerOptions) *Parser
- func (p *Parser) AtComma(context string, follow token.Token) bool
- func (p *Parser) AtCommaOrNewLine(context string, follow token.Token) bool
- func (p *Parser) CallArgsOf(lparen, rparen source.Pos, exprs ...node.Expr) (params *node.CallArgs)
- func (p *Parser) DefaultParseStmt() (stmt node.Stmt)
- func (p *Parser) Error(pos source.Pos, msg string)
- func (p *Parser) ErrorExpectToken(got PToken, expected ...token.Token) (tok PToken)
- func (p *Parser) ErrorExpected(pos source.Pos, msg string)
- func (p *Parser) ErrorExpectedExpr(expected, got node.Expr)
- func (p *Parser) Expect(token token.Token) source.Pos
- func (p *Parser) ExpectLit(token token.Token) ast.Literal
- func (p *Parser) ExpectLits(toks ...token.Token) ast.Literal
- func (p *Parser) ExpectSemi()
- func (p *Parser) ExpectToken(token token.Token) (tok PToken)
- func (p *Parser) Failed() bool
- func (p *Parser) IsToken(toks ...token.Token) bool
- func (p *Parser) MakeExpr(s node.Stmt, want string) node.Expr
- func (p *Parser) Next() *Parser
- func (p *Parser) ParseArrayLitOrKeyValue() node.Expr
- func (p *Parser) ParseBinaryExpr(prec1 int) node.Expr
- func (p *Parser) ParseBlockStmt(ends ...token.Token) *node.BlockStmt
- func (p *Parser) ParseBody() (b *node.BlockStmt, lambdaPos source.Pos, closure node.Expr)
- func (p *Parser) ParseBoolLit() *node.BoolLit
- func (p *Parser) ParseBranchStmt(tok token.Token) node.Stmt
- func (p *Parser) ParseBytesLit(prefix node.BytesLitPrefix) node.Expr
- func (p *Parser) ParseCall(x node.Expr) *node.CallExpr
- func (p *Parser) ParseCallArgs(start, end token.Token) *node.CallArgs
- func (p *Parser) ParseCatchStmt() *node.CatchStmt
- func (p *Parser) ParseCharLit() node.Expr
- func (p *Parser) ParseClassExpr() node.Expr
- func (p *Parser) ParseClassStmt() node.Stmt
- func (p *Parser) ParseClosureExpr(lambdaToken token.Token, paren *node.MultiParenExpr) *node.ClosureExpr
- func (p *Parser) ParseCodeStrLit() (t *node.CodeStrLit)
- func (p *Parser) ParseComputedExpr() *node.ComputedExpr
- func (p *Parser) ParseCondExpr(cond node.Expr) node.Expr
- func (p *Parser) ParseConfigStmt() (c *node.ConfigStmt)
- func (p *Parser) ParseCurlyDestructureStmt() node.Stmt
- func (p *Parser) ParseCurlyPattern() *node.KeyValueArrayLit
- func (p *Parser) ParseDateTimeLit(suffix rune) node.Expr
- func (p *Parser) ParseDecimalLit() *node.DecimalLit
- func (p *Parser) ParseDecl() node.Decl
- func (p *Parser) ParseDeferStmt() node.Stmt
- func (p *Parser) ParseDictElementLit() *node.DictElementLit
- func (p *Parser) ParseDictElementLitFunc() *node.FuncDefLit
- func (p *Parser) ParseDictLit() node.Expr
- func (p *Parser) ParseDurationLit() node.Expr
- func (p *Parser) ParseElse(ifs bool) node.Stmt
- func (p *Parser) ParseEmbedExpr() node.Expr
- func (p *Parser) ParseEnumExpr() node.Expr
- func (p *Parser) ParseEnumStmt() node.Stmt
- func (p *Parser) ParseExportStmt() (stmt *node.ExportStmt)
- func (p *Parser) ParseExpr() node.Expr
- func (p *Parser) ParseExprList() (list []node.Expr)
- func (p *Parser) ParseFile() (file *File, err error)
- func (p *Parser) ParseFileH(listHandler ParseListHandler) (file *File, err error)
- func (p *Parser) ParseFinallyStmt() *node.FinallyStmt
- func (p *Parser) ParseFlagLit() *node.FlagLit
- func (p *Parser) ParseFloatLit() *node.FloatLit
- func (p *Parser) ParseForStmt() node.Stmt
- func (p *Parser) ParseFuncDefLit(colon token.Token) *node.FuncDefLit
- func (p *Parser) ParseFuncExpr() (e node.Expr)
- func (p *Parser) ParseFuncExprT(tok PToken) (e node.Expr)
- func (p *Parser) ParseFuncHeaderExpr() node.Expr
- func (p *Parser) ParseFuncReturnTypes() (types []*node.TypedIdentExpr)
- func (p *Parser) ParseFuncStmt() (stmt node.Stmt)
- func (p *Parser) ParseGenDecl(keyword token.Token, fn func(token.Token, bool, []node.Spec, int) node.Spec) *node.GenDecl
- func (p *Parser) ParseHeredocLit() (t *node.HeredocLit)
- func (p *Parser) ParseIdent() *node.IdentExpr
- func (p *Parser) ParseIfHeader() (init node.Stmt, cond node.Expr)
- func (p *Parser) ParseIfStmt() node.Stmt
- func (p *Parser) ParseImportExpr() node.Expr
- func (p *Parser) ParseIndexExpr(x node.Expr) *node.IndexExpr
- func (p *Parser) ParseIndexOrSlice(x node.Expr) node.Expr
- func (p *Parser) ParseIntLit() *node.IntLit
- func (p *Parser) ParseInterfaceExpr() node.Expr
- func (p *Parser) ParseInterfaceStmt() node.Stmt
- func (p *Parser) ParseKeyValueArrayLit(lbrace source.Pos) *node.KeyValueArrayLit
- func (p *Parser) ParseKeyValueArrayLitAt(lbrace source.Pos, rbraceToken token.Token) *node.KeyValueArrayLit
- func (p *Parser) ParseKeyValueLit() *node.KeyValueLit
- func (p *Parser) ParseKeyValuePairLit(endToken token.Token) *node.KeyValuePairLit
- func (p *Parser) ParseLiteral() node.Expr
- func (p *Parser) ParseMatchExpr() node.Expr
- func (p *Parser) ParseMethodInterfaceExpr() node.Expr
- func (p *Parser) ParseMethodInterfaceExprT(tok PToken) (e node.Expr)
- func (p *Parser) ParseMethodInterfaceStmt() node.Stmt
- func (p *Parser) ParseMixedTextStmt() (t *node.MixedTextStmt)
- func (p *Parser) ParseMixedValue() (ett *node.MixedValueStmt)
- func (p *Parser) ParseNullishSelector(x node.Expr) (sel node.Expr)
- func (p *Parser) ParseOperand() node.Expr
- func (p *Parser) ParseParamDecl() (d *node.GenDecl)
- func (p *Parser) ParseParamSpec(keyword token.Token, multi bool, prev []node.Spec, i int) (spec node.Spec)
- func (p *Parser) ParseParemExpr(lparenToken, rparenToken token.Token) node.ToMultiParenConverter
- func (p *Parser) ParseParenOrClosure(lparenToken, rparenToken token.Token) node.Expr
- func (p *Parser) ParsePipe(x node.Expr) node.Expr
- func (p *Parser) ParsePrimaryExpr() node.Expr
- func (p *Parser) ParsePrimitiveOperand() node.Expr
- func (p *Parser) ParsePropExpr() (e node.Expr)
- func (p *Parser) ParsePropExprT(tok PToken) (e node.Expr)
- func (p *Parser) ParsePropStmt() (stmt node.Stmt)
- func (p *Parser) ParseRawHeredocLit() (t *node.RawHeredocLit)
- func (p *Parser) ParseRawStrLit() (t *node.RawStrLit)
- func (p *Parser) ParseReturn() (ret node.Return)
- func (p *Parser) ParseReturnExpr() node.Expr
- func (p *Parser) ParseReturnStmt() node.Stmt
- func (p *Parser) ParseScopedBlockStmt() *node.BlockStmt
- func (p *Parser) ParseSelector(x node.Expr) (sel *node.SelectorExpr)
- func (p *Parser) ParseSelectorNode(x node.Expr) (expr, sel node.Expr)
- func (p *Parser) ParseSimpleSelector(x node.Expr) (sel *node.SelectorExpr)
- func (p *Parser) ParseSimpleSelectorExpr(x node.Expr) node.Expr
- func (p *Parser) ParseSimpleSelectorNode(x node.Expr) (expr, sel node.Expr)
- func (p *Parser) ParseSimpleStmt(forIn bool) node.Stmt
- func (p *Parser) ParseSingleParemExpr(lparen, rparen token.Token) node.Expr
- func (p *Parser) ParseStmt() (stmt node.Stmt)
- func (p *Parser) ParseStmtList(end ...token.Token) (list []node.Stmt)
- func (p *Parser) ParseStrLit() *node.StrLit
- func (p *Parser) ParseSymbolLit() *node.SymbolLit
- func (p *Parser) ParseTestStmt() node.Stmt
- func (p *Parser) ParseThrowExpr() *node.ThrowExpr
- func (p *Parser) ParseThrowStmt() node.Stmt
- func (p *Parser) ParseTryStmt() node.Stmt
- func (p *Parser) ParseTypedIdent() *node.TypedIdentExpr
- func (p *Parser) ParseTypes() (types []*node.TypeExpr)
- func (p *Parser) ParseUintLit() *node.UintLit
- func (p *Parser) ParseUnaryExpr() node.Expr
- func (p *Parser) ParseValueSpec(keyword token.Token, multi bool, prev []node.Spec, i int) node.Spec
- func (p *Parser) ParseWithExpr() node.Expr
- func (p *Parser) ParseWithStmt() node.Stmt
- func (p *Parser) Peek() PToken
- func (p *Parser) PeekC(count int) (t []PToken)
- func (p *Parser) PeekCb(on func(t PToken) (more bool))
- func (p *Parser) PeekNoSpace() (r PToken)
- func (p *Parser) PrintTrace(a ...any)
- func (p *Parser) SkipSpace()
- func (p *Parser) WrapPostScan(f func(in func(p *Parser)) func(p *Parser))
- type ParserOptions
- type ScanMode
- type Scanner
- func (s *Scanner) AddNextToken(n ...PToken) (r *PToken)
- func (s *Scanner) AddNextTokenPtr(n ...*PToken) (r *PToken)
- func (s *Scanner) Clone() (c *Scanner)
- func (s *Scanner) GetMixedDelimiter() *MixedDelimiter
- func (s *Scanner) List() (ret []PToken)
- func (s *Scanner) MixedCodeEnds(offsetInc int) bool
- func (s *Scanner) Mode() ScanMode
- func (s *Scanner) ModeP() *ScanMode
- func (s Scanner) PeekScan() (t PToken)
- func (s *Scanner) Scan() (t PToken)
- func (s *Scanner) ScanCodeBlock(leftText *PToken) (code PToken)
- func (s *Scanner) ScanComment() string
- func (s *Scanner) ScanIdentifier() string
- func (s *Scanner) ScanNow() (t PToken)
- func (s *Scanner) ScanNumber(seenDecimalPoint bool) (tok token.Token, lit string)
- func (s *Scanner) SetMode(m ScanMode)
- func (s *Scanner) Switch2(tok0, tok1 token.Token) token.Token
- func (s *Scanner) Switch3(tok0, tok1 token.Token, ch2 rune, tok2 token.Token) token.Token
- func (s *Scanner) Switch4(tok0, tok1 token.Token, ch2 rune, tok2, tok3 token.Token) token.Token
- type ScannerInterface
- type ScannerOptions
- type TextFlag
- type TokenHandler
- type TokenHandlers
- type TokenPool
Constants ¶
const MainName = "(main)"
Variables ¶
var ( DefaultMixedDelimiter = MixedDelimiter{ Start: []rune("{%"), End: []rune("%}"), } TemplateStrDelimiter = MixedDelimiter{ Start: []rune("{"), End: []rune("}"), } )
Functions ¶
func RemoveAllSpaces ¶ added in v0.0.2
RemoveAllSpaces reports the double-dash trim marker (`{%--` / `--%}`) on a mixed delimiter token, which strips ALL adjacent whitespace.
func RemoveSpaces ¶
func TrimSpace ¶
TrimSpace returns a slice of the string s, with all leading and trailing white space removed, as defined by Unicode.
Types ¶
type ErrorList ¶
type ErrorList []*Error
ErrorList is a collection of parser errors.
type File ¶
File represents a file unit.
func Parse ¶
func Parse(input, fileName string, opts *ParserOptions, scannerOpts *ScannerOptions) (*File, error)
func ParseFile ¶
func ParseFile(pth string, opts *ParserOptions, scannerOpts *ScannerOptions) (file *File, err error)
func ParseTemplateString ¶ added in v0.0.2
ParseTemplateString parses a template string as mixed content using { } delimiters and returns the parsed statements. It is used by TemplateLit compilation to process template interpolation expressions.
pos is the position of the string literal's opening delimiter (the quote) in the original source. The template content itself begins one byte after it, so the parsed file is based at pos+1 to keep interpolation expression positions mapped back to their location in the original source.
func (*File) WriteCode ¶
func (n *File) WriteCode(ctx *node.CodeWriteContext)
type Handlers ¶
type Handlers struct {
source.NextHandlers
ScanHandler func(ch rune) (t PToken, insertSemi, ok bool)
TokenHandlers TokenHandlers
}
func (*Handlers) CallTokenHandlers ¶
func (*Handlers) TokenHandler ¶
type MixedDelimiter ¶
type MixedDelimiter = source.StartEndDelimiter
type PToken ¶ added in v0.0.2
type PToken struct {
node.TokenLit
InsertSemi bool
Prev []PToken
utils.Data
// contains filtered or unexported fields
}
func (*PToken) LiteralRemoveLinePrefix ¶ added in v0.0.2
type ParseListHandler ¶
type Parser ¶
type Parser struct {
File *source.File
Errors ErrorList
Scanner ScannerInterface
Token PToken
PrevToken PToken
ExprLevel int // < 0: in control clause, >= 0: in expression
Trace bool
TraceOut io.Writer
ParseStmtHandler func() node.Stmt
InCode bool
BlockStart token.Token
BlockEnd token.Token
ScanFunc func() PToken
// contains filtered or unexported fields
}
Parser parses the Tengo source files. It's based on ToInterface's parser implementation.
func NewParserWithOptions ¶
func NewParserWithOptions( file *source.File, opts *ParserOptions, scannerOptions *ScannerOptions, ) *Parser
NewParserWithOptions creates a Parser with parser mode flags.
func NewParserWithScanner ¶
func NewParserWithScanner( scanner ScannerInterface, opts *ParserOptions, ) *Parser
NewParserWithScanner creates a Parser with parser mode flags.
func NewSingleParser ¶
func NewSingleParser(input, fileName string, opts *ParserOptions, scannerOpts *ScannerOptions) *Parser
func (*Parser) AtCommaOrNewLine ¶ added in v0.0.2
func (*Parser) CallArgsOf ¶
func (*Parser) DefaultParseStmt ¶
func (*Parser) ErrorExpectToken ¶ added in v0.0.2
func (*Parser) ErrorExpectedExpr ¶
func (*Parser) ExpectSemi ¶
func (p *Parser) ExpectSemi()
func (*Parser) ParseArrayLitOrKeyValue ¶
func (*Parser) ParseBlockStmt ¶
func (*Parser) ParseBoolLit ¶ added in v0.0.2
func (*Parser) ParseBytesLit ¶ added in v0.0.2
func (p *Parser) ParseBytesLit(prefix node.BytesLitPrefix) node.Expr
ParseBytesLit parses the underlying string literal of a b"..."/h"..." bytes literal and wraps it in a *node.BytesLit. The current token is the string literal token carrying the bytes prefix data.
func (*Parser) ParseCallArgs ¶
func (*Parser) ParseCatchStmt ¶
func (*Parser) ParseCharLit ¶
func (*Parser) ParseClassExpr ¶ added in v0.0.2
ParseClassExpr parses an anonymous class expression `class { … }` (the expression form). The statement form with a name is parsed by ParseClassStmt.
func (*Parser) ParseClassStmt ¶ added in v0.0.2
ParseClassStmt parses the statement form. `class Name { … }` becomes `const Name = <class expression>`; an anonymous `class { … }` used as a statement is parsed as an expression statement.
func (*Parser) ParseClosureExpr ¶
func (p *Parser) ParseClosureExpr(lambdaToken token.Token, paren *node.MultiParenExpr) *node.ClosureExpr
func (*Parser) ParseCodeStrLit ¶ added in v0.0.2
func (p *Parser) ParseCodeStrLit() (t *node.CodeStrLit)
func (*Parser) ParseComputedExpr ¶ added in v0.0.2
func (p *Parser) ParseComputedExpr() *node.ComputedExpr
func (*Parser) ParseConfigStmt ¶
func (p *Parser) ParseConfigStmt() (c *node.ConfigStmt)
func (*Parser) ParseCurlyDestructureStmt ¶ added in v0.0.2
ParseCurlyDestructureStmt parses a TypeScript-style named-data destructuring statement:
{ key, key2: target, name = default, **rest } := / = source
Entries use key-on-the-left (like TypeScript): `key` binds the value of key `key` to the variable `key`; `key2: target` binds the value of key `key2` to the variable `target`; `name = default` supplies a fallback when the key is absent; and a trailing `**rest` collects the remaining keys into a dict. It builds the same KeyValueArrayLit that the `(; … )` form produces (target:key order), so the existing dict-destructuring compiler handles it.
func (*Parser) ParseCurlyPattern ¶ added in v0.0.2
func (p *Parser) ParseCurlyPattern() *node.KeyValueArrayLit
ParseCurlyPattern parses a `{ key, key2: target, name = default, **rest }` destructuring pattern into a KeyValueArrayLit (Curly). Shared by the statement form and by `const`/`var` declarations.
func (*Parser) ParseDateTimeLit ¶ added in v0.0.2
func (*Parser) ParseDecimalLit ¶ added in v0.0.2
func (p *Parser) ParseDecimalLit() *node.DecimalLit
func (*Parser) ParseDeferStmt ¶ added in v0.0.2
func (*Parser) ParseDictElementLit ¶
func (p *Parser) ParseDictElementLit() *node.DictElementLit
func (*Parser) ParseDictElementLitFunc ¶
func (p *Parser) ParseDictElementLitFunc() *node.FuncDefLit
func (*Parser) ParseDictLit ¶
func (*Parser) ParseDurationLit ¶ added in v0.0.2
func (*Parser) ParseEmbedExpr ¶
func (*Parser) ParseEnumExpr ¶ added in v0.0.2
ParseEnumExpr parses an anonymous enum expression `enum { … }` (the expression form). The statement form with a name is parsed by ParseEnumStmt.
func (*Parser) ParseEnumStmt ¶ added in v0.0.2
ParseEnumStmt parses the statement form. `enum Name { … }` becomes `const Name = <enum expression>`; an anonymous `enum { … }` used as a statement is parsed as an expression statement.
func (*Parser) ParseExportStmt ¶ added in v0.0.2
func (p *Parser) ParseExportStmt() (stmt *node.ExportStmt)
func (*Parser) ParseExprList ¶
func (*Parser) ParseFileH ¶
func (p *Parser) ParseFileH(listHandler ParseListHandler) (file *File, err error)
ParseFileH parses the source and returns an AST file unit.
func (*Parser) ParseFinallyStmt ¶
func (p *Parser) ParseFinallyStmt() *node.FinallyStmt
func (*Parser) ParseFlagLit ¶ added in v0.0.2
func (*Parser) ParseFloatLit ¶ added in v0.0.2
func (*Parser) ParseForStmt ¶
func (*Parser) ParseFuncDefLit ¶ added in v0.0.2
func (p *Parser) ParseFuncDefLit(colon token.Token) *node.FuncDefLit
func (*Parser) ParseFuncExpr ¶
func (*Parser) ParseFuncExprT ¶ added in v0.0.2
func (*Parser) ParseFuncHeaderExpr ¶ added in v0.0.2
ParseFuncHeaderExpr parses a func-header value `< (params) <return> >`.
func (*Parser) ParseFuncReturnTypes ¶ added in v0.0.2
func (p *Parser) ParseFuncReturnTypes() (types []*node.TypedIdentExpr)
ParseFuncReturnTypes parses an optional function return-type list following the parameter list, of the form "<T>" (single) or "<T1, T2, ...>" (multiple). Each entry is a typed ident, so bare types ("<int>") and named returns ("<x int>") are both supported. It returns nil when no return type is present.
func (*Parser) ParseFuncStmt ¶ added in v0.0.2
func (*Parser) ParseGenDecl ¶
func (*Parser) ParseHeredocLit ¶ added in v0.0.2
func (p *Parser) ParseHeredocLit() (t *node.HeredocLit)
func (*Parser) ParseIdent ¶
func (*Parser) ParseIfStmt ¶
func (*Parser) ParseImportExpr ¶
func (*Parser) ParseIndexExpr ¶ added in v0.0.2
func (*Parser) ParseIntLit ¶ added in v0.0.2
func (*Parser) ParseInterfaceExpr ¶ added in v0.0.2
ParseInterfaceExpr parses an anonymous interface expression `interface { … }`. The statement form with a name is parsed by ParseInterfaceStmt.
func (*Parser) ParseInterfaceStmt ¶ added in v0.0.2
ParseInterfaceStmt parses the statement form. `interface Name { … }` becomes `const Name = <interface expression>`; an anonymous `interface { … }` used as a statement is parsed as an expression statement.
func (*Parser) ParseKeyValueArrayLit ¶
func (p *Parser) ParseKeyValueArrayLit(lbrace source.Pos) *node.KeyValueArrayLit
func (*Parser) ParseKeyValueArrayLitAt ¶
func (*Parser) ParseKeyValueLit ¶
func (p *Parser) ParseKeyValueLit() *node.KeyValueLit
func (*Parser) ParseKeyValuePairLit ¶
func (p *Parser) ParseKeyValuePairLit(endToken token.Token) *node.KeyValuePairLit
func (*Parser) ParseLiteral ¶ added in v0.0.2
func (*Parser) ParseMatchExpr ¶ added in v0.0.2
func (*Parser) ParseMethodInterfaceExpr ¶ added in v0.0.2
func (*Parser) ParseMethodInterfaceExprT ¶ added in v0.0.2
ParseMethodInterfaceExprT parses `meti Name? { (params) <return>, … }`. Each header is a func header written without the surrounding angle brackets.
func (*Parser) ParseMethodInterfaceStmt ¶ added in v0.0.2
func (*Parser) ParseMixedTextStmt ¶
func (p *Parser) ParseMixedTextStmt() (t *node.MixedTextStmt)
func (*Parser) ParseMixedValue ¶
func (p *Parser) ParseMixedValue() (ett *node.MixedValueStmt)
func (*Parser) ParseNullishSelector ¶
func (*Parser) ParseOperand ¶
func (*Parser) ParseParamDecl ¶
func (*Parser) ParseParamSpec ¶
func (*Parser) ParseParemExpr ¶
func (p *Parser) ParseParemExpr(lparenToken, rparenToken token.Token) node.ToMultiParenConverter
func (*Parser) ParseParenOrClosure ¶ added in v0.0.2
func (*Parser) ParsePrimaryExpr ¶
func (*Parser) ParsePrimitiveOperand ¶
func (*Parser) ParsePropExpr ¶ added in v0.0.2
func (*Parser) ParsePropExprT ¶ added in v0.0.2
ParsePropExprT parses a property expression introduced by the `prop` keyword. It mirrors the func-with-methods body syntax: an optional name followed by either a single accessor `(params) <ret> {body}` or a brace block holding several accessors. A method with no parameters is the getter and a method with one parameter is a setter.
func (*Parser) ParsePropStmt ¶ added in v0.0.2
func (*Parser) ParseRawHeredocLit ¶
func (p *Parser) ParseRawHeredocLit() (t *node.RawHeredocLit)
func (*Parser) ParseRawStrLit ¶ added in v0.0.2
func (*Parser) ParseReturn ¶
func (*Parser) ParseReturnExpr ¶
func (*Parser) ParseReturnStmt ¶
func (*Parser) ParseScopedBlockStmt ¶
func (*Parser) ParseSelector ¶
func (p *Parser) ParseSelector(x node.Expr) (sel *node.SelectorExpr)
func (*Parser) ParseSelectorNode ¶
func (*Parser) ParseSimpleSelector ¶ added in v0.0.2
func (p *Parser) ParseSimpleSelector(x node.Expr) (sel *node.SelectorExpr)
func (*Parser) ParseSimpleSelectorExpr ¶ added in v0.0.2
func (*Parser) ParseSimpleSelectorNode ¶ added in v0.0.2
func (*Parser) ParseSingleParemExpr ¶ added in v0.0.2
func (*Parser) ParseStmtList ¶
func (*Parser) ParseStrLit ¶ added in v0.0.2
func (*Parser) ParseSymbolLit ¶ added in v0.0.2
func (*Parser) ParseTestStmt ¶ added in v0.0.2
ParseTestStmt parses `test NAME { … }` / `bench NAME { … }`. NAME is an identifier or a string literal; the body is a block in which the injected `t` test context is available. A preceding doc comment is attached.
func (*Parser) ParseThrowExpr ¶
func (*Parser) ParseThrowStmt ¶
func (*Parser) ParseTryStmt ¶
func (*Parser) ParseTypedIdent ¶
func (p *Parser) ParseTypedIdent() *node.TypedIdentExpr
func (*Parser) ParseTypes ¶ added in v0.0.2
func (*Parser) ParseUintLit ¶ added in v0.0.2
func (*Parser) ParseUnaryExpr ¶
func (*Parser) ParseValueSpec ¶
func (*Parser) ParseWithExpr ¶ added in v0.0.2
ParseWithExpr parses the `with Resource [as IDENT]: Value` expression form.
func (*Parser) ParseWithStmt ¶ added in v0.0.2
ParseWithStmt parses a `with` context-manager statement:
with Resource { ... }
with Resource as IDENT { ... }
with IDENT = Resource { ... }
with IDENT := Resource { ... }
The `with Resource [as IDENT]: Value` expression form may also appear here as a statement (returning an ExprStmt wrapping a WithExpr).
func (*Parser) PeekNoSpace ¶ added in v0.0.2
func (*Parser) PrintTrace ¶
func (*Parser) WrapPostScan ¶
type ParserOptions ¶
type ScanMode ¶
type ScanMode uint8
ScanMode represents a scanner mode.
type Scanner ¶
type Scanner struct {
Handlers
source.Reader
MixedDelimiter MixedDelimiter // the mixed delimiters
InsertSemi bool // insert a semicolon before next newline
InCode bool
ToText bool
BraceCount int
BreacksCount int
ParenCount int
TokenPool TokenPool
SkipWhitespaceFunc func(s *Scanner)
HandleMixed func(textStart *int, rt func() *PToken)
EOF *PToken
// contains filtered or unexported fields
}
Scanner reads the Gad source text. It's based on ToInterface's scanner implementation.
func NewScanner ¶
func NewScanner( file *source.File, opts *ScannerOptions, ) *Scanner
NewScanner creates a Scanner.
func (*Scanner) AddNextToken ¶
func (*Scanner) AddNextTokenPtr ¶
func (*Scanner) GetMixedDelimiter ¶
func (s *Scanner) GetMixedDelimiter() *MixedDelimiter
func (*Scanner) MixedCodeEnds ¶
func (*Scanner) ScanCodeBlock ¶
func (*Scanner) ScanComment ¶
func (*Scanner) ScanIdentifier ¶
func (*Scanner) ScanNumber ¶
type ScannerInterface ¶
type ScannerInterface interface {
Scan() (t PToken)
Mode() ScanMode
SetMode(m ScanMode)
SourceFile() *source.File
Source() []byte
ErrorHandler(h ...source.ScannerErrorHandler)
GetMixedDelimiter() *MixedDelimiter
}
type ScannerOptions ¶
type ScannerOptions struct {
Mode ScanMode
MixedDelimiter MixedDelimiter
}
type TokenHandler ¶
type TokenHandler func(t *PToken)
type TokenHandlers ¶
type TokenHandlers []TokenHandler
func (*TokenHandlers) Remove ¶
func (th *TokenHandlers) Remove(h TokenHandler)