grammar

package
v0.6.0 Latest Latest
Warning

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

Go to latest
Published: Nov 9, 2022 License: MIT Imports: 2 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// StateIDNil represents an empty entry of a transition table.
	// When the driver reads this value, it raises an error meaning lexical analysis failed.
	StateIDNil = StateID(0)

	// StateIDMin is the minimum value of the state ID. All valid state IDs are represented as
	// sequential numbers starting from this value.
	StateIDMin = StateID(1)
)
View Source
const (
	LexModeIDNil     = LexModeID(0)
	LexModeIDDefault = LexModeID(1)
)
View Source
const (
	LexModeNameNil     = LexModeName("")
	LexModeNameDefault = LexModeName("default")
)
View Source
const (
	LexKindIDNil = LexKindID(0)
	LexKindIDMin = LexKindID(1)
)
View Source
const (
	LexModeKindIDNil = LexModeKindID(0)
	LexModeKindIDMin = LexModeKindID(1)
)
View Source
const LexKindNameNil = LexKindName("")

Variables

This section is empty.

Functions

func EscapePattern

func EscapePattern(s string) string

EscapePattern escapes the special characters. For example, EscapePattern(`+`) returns `\+`.

Types

type ASTAction

type ASTAction struct {
	Entries [][]int `json:"entries"`
}

type CompiledGrammar

type CompiledGrammar struct {
	Name      string         `json:"name"`
	Lexical   *LexicalSpec   `json:"lexical"`
	Syntactic *SyntacticSpec `json:"syntactic"`
	ASTAction *ASTAction     `json:"ast_action"`
}

type CompiledLexModeSpec

type CompiledLexModeSpec struct {
	KindNames []LexKindName    `json:"kind_names"`
	Push      []LexModeID      `json:"push"`
	Pop       []int            `json:"pop"`
	DFA       *TransitionTable `json:"dfa"`
}

type Item

type Item struct {
	Production int `json:"production"`
	Dot        int `json:"dot"`
}

type LexKindID

type LexKindID int

LexKindID represents an ID of a lexical kind and is unique across all modes.

func (LexKindID) Int

func (id LexKindID) Int() int

type LexKindName

type LexKindName string

LexKindName represents a name of a lexical kind.

func (LexKindName) String

func (k LexKindName) String() string

type LexModeID

type LexModeID int

LexModeID represents an ID of a lex mode.

func (LexModeID) Int

func (n LexModeID) Int() int

func (LexModeID) IsNil

func (n LexModeID) IsNil() bool

func (LexModeID) String

func (n LexModeID) String() string

type LexModeKindID

type LexModeKindID int

LexModeKindID represents an ID of a lexical kind and is unique within a mode. Use LexKindID to identify a kind across all modes uniquely.

func (LexModeKindID) Int

func (id LexModeKindID) Int() int

type LexModeName

type LexModeName string

LexModeName represents a name of a lex mode.

func (LexModeName) String

func (m LexModeName) String() string

type LexicalSpec

type LexicalSpec struct {
	InitialModeID    LexModeID              `json:"initial_mode_id"`
	ModeNames        []LexModeName          `json:"mode_names"`
	KindNames        []LexKindName          `json:"kind_names"`
	KindIDs          [][]LexKindID          `json:"kind_ids"`
	CompressionLevel int                    `json:"compression_level"`
	Specs            []*CompiledLexModeSpec `json:"specs"`
}

type NonTerminal

type NonTerminal struct {
	Number int    `json:"number"`
	Name   string `json:"name"`
}

type Production

type Production struct {
	Number        int    `json:"number"`
	LHS           int    `json:"lhs"`
	RHS           []int  `json:"rhs"`
	Precedence    int    `json:"prec"`
	Associativity string `json:"assoc"`
}

type RRConflict

type RRConflict struct {
	Symbol            int `json:"symbol"`
	Production1       int `json:"production_1"`
	Production2       int `json:"production_2"`
	AdoptedProduction int `json:"adopted_production"`
	ResolvedBy        int `json:"resolved_by"`
}

type Reduce

type Reduce struct {
	LookAhead  []int `json:"look_ahead"`
	Production int   `json:"production"`
}

type Report

type Report struct {
	Terminals    []*Terminal    `json:"terminals"`
	NonTerminals []*NonTerminal `json:"non_terminals"`
	Productions  []*Production  `json:"productions"`
	States       []*State       `json:"states"`
}

type RowDisplacementTable

type RowDisplacementTable struct {
	OriginalRowCount int       `json:"original_row_count"`
	OriginalColCount int       `json:"original_col_count"`
	EmptyValue       StateID   `json:"empty_value"`
	Entries          []StateID `json:"entries"`
	Bounds           []int     `json:"bounds"`
	RowDisplacement  []int     `json:"row_displacement"`
}

type SRConflict

type SRConflict struct {
	Symbol            int  `json:"symbol"`
	State             int  `json:"state"`
	Production        int  `json:"production"`
	AdoptedState      *int `json:"adopted_state"`
	AdoptedProduction *int `json:"adopted_production"`
	ResolvedBy        int  `json:"resolved_by"`
}

type State

type State struct {
	Number     int           `json:"number"`
	Kernel     []*Item       `json:"kernel"`
	Shift      []*Transition `json:"shift"`
	Reduce     []*Reduce     `json:"reduce"`
	GoTo       []*Transition `json:"goto"`
	SRConflict []*SRConflict `json:"sr_conflict"`
	RRConflict []*RRConflict `json:"rr_conflict"`
}

type StateID

type StateID int

StateID represents an ID of a state of a transition table.

func (StateID) Int

func (id StateID) Int() int

type SyntacticSpec

type SyntacticSpec struct {
	Action                  []int    `json:"action"`
	GoTo                    []int    `json:"goto"`
	StateCount              int      `json:"state_count"`
	InitialState            int      `json:"initial_state"`
	StartProduction         int      `json:"start_production"`
	LHSSymbols              []int    `json:"lhs_symbols"`
	AlternativeSymbolCounts []int    `json:"alternative_symbol_counts"`
	Terminals               []string `json:"terminals"`
	TerminalCount           int      `json:"terminal_count"`
	TerminalSkip            []int    `json:"terminal_skip"`
	KindToTerminal          []int    `json:"kind_to_terminal"`
	NonTerminals            []string `json:"non_terminals"`
	NonTerminalCount        int      `json:"non_terminal_count"`
	EOFSymbol               int      `json:"eof_symbol"`
	ErrorSymbol             int      `json:"error_symbol"`
	ErrorTrapperStates      []int    `json:"error_trapper_states"`
	RecoverProductions      []int    `json:"recover_productions"`
}

type Terminal

type Terminal struct {
	Number        int    `json:"number"`
	Name          string `json:"name"`
	Pattern       string `json:"pattern"`
	Precedence    int    `json:"prec"`
	Associativity string `json:"assoc"`
}

type Transition

type Transition struct {
	Symbol int `json:"symbol"`
	State  int `json:"state"`
}

type TransitionTable

type TransitionTable struct {
	InitialStateID         StateID             `json:"initial_state_id"`
	AcceptingStates        []LexModeKindID     `json:"accepting_states"`
	RowCount               int                 `json:"row_count"`
	ColCount               int                 `json:"col_count"`
	Transition             *UniqueEntriesTable `json:"transition,omitempty"`
	UncompressedTransition []StateID           `json:"uncompressed_transition,omitempty"`
}

type UniqueEntriesTable

type UniqueEntriesTable struct {
	UniqueEntries             *RowDisplacementTable `json:"unique_entries,omitempty"`
	UncompressedUniqueEntries []StateID             `json:"uncompressed_unique_entries,omitempty"`
	RowNums                   []int                 `json:"row_nums"`
	OriginalRowCount          int                   `json:"original_row_count"`
	OriginalColCount          int                   `json:"original_col_count"`
	EmptyValue                int                   `json:"empty_value"`
}

Directories

Path Synopsis
Code generated by maleeni-go.
Code generated by maleeni-go.

Jump to

Keyboard shortcuts

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