diff options
author | Ryo Nihei <nihei.dev@gmail.com> | 2022-05-27 02:11:39 +0900 |
---|---|---|
committer | Ryo Nihei <nihei.dev@gmail.com> | 2022-05-27 02:25:50 +0900 |
commit | 4c0f7eb15db566a19eb753e6ffc3a2354078f5fc (patch) | |
tree | f3956aa60561ede7d6ccfb288eabfd47de60ffe4 /spec/grammar/description.go | |
parent | Allows a directory to be specified as the --output option for the vartan-comp... (diff) | |
download | urubu-4c0f7eb15db566a19eb753e6ffc3a2354078f5fc.tar.gz urubu-4c0f7eb15db566a19eb753e6ffc3a2354078f5fc.tar.xz |
Rename spec package to spec/grammar package
Diffstat (limited to 'spec/grammar/description.go')
-rw-r--r-- | spec/grammar/description.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/spec/grammar/description.go b/spec/grammar/description.go new file mode 100644 index 0000000..dd66950 --- /dev/null +++ b/spec/grammar/description.go @@ -0,0 +1,73 @@ +package grammar + +type Terminal struct { + Number int `json:"number"` + Name string `json:"name"` + Anonymous bool `json:"anonymous"` + Alias string `json:"alias"` + Pattern string `json:"pattern"` + Precedence int `json:"prec"` + Associativity string `json:"assoc"` +} + +type NonTerminal struct { + Number int `json:"number"` + Name string `json:"name"` +} + +type Production struct { + Number int `json:"number"` + LHS int `json:"lhs"` + RHS []int `json:"rhs"` + Precedence int `json:"prec"` + Associativity string `json:"assoc"` +} + +type Item struct { + Production int `json:"production"` + Dot int `json:"dot"` +} + +type Transition struct { + Symbol int `json:"symbol"` + State int `json:"state"` +} + +type Reduce struct { + LookAhead []int `json:"look_ahead"` + Production int `json:"production"` +} + +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 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 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 Report struct { + Terminals []*Terminal `json:"terminals"` + NonTerminals []*NonTerminal `json:"non_terminals"` + Productions []*Production `json:"productions"` + States []*State `json:"states"` +} |