Documentation
¶
Index ¶
- type Error
- type Errors
- type Parser
- func (p *Parser) Advance() *ast.Token
- func (p *Parser) Error(msg string, start ast.Position, end ast.Position)
- func (p *Parser) ErrorCurrent(msg string)
- func (p *Parser) Expect(tokenType string, tokenValue string) ast.Position
- func (p *Parser) HasNext() bool
- func (p *Parser) IsCurrent(t, value string) bool
- func (p *Parser) IsCurrentType(t string) bool
- func (p *Parser) IsCurrentValue(value string) bool
- func (p *Parser) IsCurrentValueIn(values []string) bool
- func (p *Parser) Log()
- func (p *Parser) Parse(prog string) (*ast.Program, error)
- func (p *Parser) ParseAssignment() ast.Statement
- func (p *Parser) ParseBracketExpression() ast.Expression
- func (p *Parser) ParseCompareExpression() ast.Expression
- func (p *Parser) ParseExpression() ast.Expression
- func (p *Parser) ParseGoto() ast.Statement
- func (p *Parser) ParseIf() ast.Statement
- func (p *Parser) ParseLine() *ast.Line
- func (p *Parser) ParseLogicExpression() ast.Expression
- func (p *Parser) ParsePostOpExpression() ast.Expression
- func (p *Parser) ParsePreOpExpression() ast.Expression
- func (p *Parser) ParsePreOrPostOperation() ast.Statement
- func (p *Parser) ParseProdExpression() ast.Expression
- func (p *Parser) ParseProgram() *ast.Program
- func (p *Parser) ParseSingleExpression() ast.Expression
- func (p *Parser) ParseStatement() ast.Statement
- func (p *Parser) ParseSumExpression() ast.Expression
- func (p *Parser) ParseUnaryExpression() ast.Expression
- func (p *Parser) Reset()
- func (p *Parser) SkipLine()
- type Printer
- type Printermode
- type YololParserFunctions
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Parser ¶
type Parser struct {
Tokenizer *ast.Tokenizer
CurrentToken *ast.Token
NextToken *ast.Token
PrevToken *ast.Token
// if true, there was whitespace between CurrentToken and NextToken
NextWouldBeWhitespace bool
// if true, current token was preceeded by whitespace
SkippedWhitespace bool
// using an interface of ourself to call the parsing-methods allows them to be overridden by 'subclasses'
This YololParserFunctions
// Contains all errors encountered during parsing
Errors Errors
// If true, return all found errors, not only one per line
AllErrors bool
// If true, print debug logs
DebugLog bool
}
Parser parses a yolol programm into an AST
func (*Parser) Advance ¶
Advance advances the current token to the next (non whitespace) token in the list
func (*Parser) Error ¶
Error appends an error to the list of errors encountered during parsing if p.AllErrors is false, only the first error per line is appended to the list of errors
func (*Parser) ErrorCurrent ¶
ErrorCurrent calls Error() with the position of the current token
func (*Parser) Expect ¶
Expect checks if the current token has the given type and value if true, the tokens position is returned, otherwise an error is logged alsways advances to the next token
func (*Parser) IsCurrent ¶ added in v0.0.13
IsCurrent checks if the current token matches the given type and value The comparison of the value is case-insensitive
func (*Parser) IsCurrentType ¶ added in v0.0.13
IsCurrentType checks if the type of the current token is equal to the given type
func (*Parser) IsCurrentValue ¶ added in v0.0.13
IsCurrentValue checks if the value of the current token is equal to the given value The comparison is case-insensitive
func (*Parser) IsCurrentValueIn ¶ added in v0.0.13
IsCurrentValueIn checks if the value of the current token is one of the provided values The comparison is case-insensitive
func (*Parser) ParseAssignment ¶
ParseAssignment parses an assignment-node
func (*Parser) ParseBracketExpression ¶
func (p *Parser) ParseBracketExpression() ast.Expression
ParseBracketExpression parses a racketed expression
func (*Parser) ParseCompareExpression ¶
func (p *Parser) ParseCompareExpression() ast.Expression
ParseCompareExpression parses a compare expression
func (*Parser) ParseExpression ¶
func (p *Parser) ParseExpression() ast.Expression
ParseExpression parses an expression
func (*Parser) ParseLogicExpression ¶
func (p *Parser) ParseLogicExpression() ast.Expression
ParseLogicExpression parses a logical expression
func (*Parser) ParsePostOpExpression ¶
func (p *Parser) ParsePostOpExpression() ast.Expression
ParsePostOpExpression parse post-expression
func (*Parser) ParsePreOpExpression ¶
func (p *Parser) ParsePreOpExpression() ast.Expression
ParsePreOpExpression parse pre-expression
func (*Parser) ParsePreOrPostOperation ¶
ParsePreOrPostOperation parses a pre-/post operation (x++, ++x) as a statement
func (*Parser) ParseProdExpression ¶
func (p *Parser) ParseProdExpression() ast.Expression
ParseProdExpression parses a product expression
func (*Parser) ParseProgram ¶
ParseProgram parses a programm-node
func (*Parser) ParseSingleExpression ¶
func (p *Parser) ParseSingleExpression() ast.Expression
ParseSingleExpression parses a single expression
func (*Parser) ParseStatement ¶
ParseStatement parses a statement-node
func (*Parser) ParseSumExpression ¶
func (p *Parser) ParseSumExpression() ast.Expression
ParseSumExpression parses a sum-expression
func (*Parser) ParseUnaryExpression ¶
func (p *Parser) ParseUnaryExpression() ast.Expression
ParseUnaryExpression parses an unary expression
type Printer ¶
type Printer struct {
// If this functiontion is set, it is called for every AST-node, before printing anything for that node.
// It can be used to customize printing of certain nodes or add new kinds of nodes.
// If it returns an errior, that errors is bubbled up.
// The function should return true, if it can handle the given node and does not want this printer to continue processing it
PrinterExtensionFunc func(node ast.Node, visitType int, p *Printer) (bool, error)
// If true, only insert spaces where absolutely necessary
Mode Printermode
// If true, at position-information to every printed token.
// Does not produce valid yolol, but is usefull for debugging
DebugPositions bool
// contains filtered or unexported fields
}
Printer generates yolol-code from an AST
func (*Printer) Newline ¶ added in v0.0.14
func (p *Printer) Newline()
Newline adds a newline to the source-code that is currently build
func (*Printer) OptionalSpace ¶ added in v0.0.14
func (p *Printer) OptionalSpace()
OptionalSpace adds a space to the source-code that is currently build, IF we are not producing compressed output
func (*Printer) Space ¶ added in v0.0.14
func (p *Printer) Space()
Space adds a space to the source-code that is currently build
func (*Printer) StatementSeparator ¶ added in v0.0.14
func (p *Printer) StatementSeparator()
StatementSeparator writes spaces to seperate statements on one line. Amount of spaces depends on settings
type Printermode ¶ added in v0.0.14
type Printermode int
Printermode describes various modes for the printer
const ( // PrintermodeReadable inserts spaces the improve readability PrintermodeReadable Printermode = 0 // PrintermodeCompact inserts only spaces that are reasonably necessary PrintermodeCompact Printermode = 1 // PrintermodeSpaceless inserts only spaces that are strictly necessary PrintermodeSpaceless Printermode = 2 )
type YololParserFunctions ¶
type YololParserFunctions interface {
ParseStatement() ast.Statement
ParsePreOrPostOperation() ast.Statement
ParseGoto() ast.Statement
ParseAssignment() ast.Statement
ParseIf() ast.Statement
ParseExpression() ast.Expression
ParseLogicExpression() ast.Expression
ParseCompareExpression() ast.Expression
ParseSumExpression() ast.Expression
ParseProdExpression() ast.Expression
ParseUnaryExpression() ast.Expression
ParseBracketExpression() ast.Expression
ParseSingleExpression() ast.Expression
ParsePreOpExpression() ast.Expression
ParsePostOpExpression() ast.Expression
}
YololParserFunctions is used together with Parser.This to allow 'subclasses' to override 'virtual functions'