parser (still doesn't work)

This commit is contained in:
2024-08-11 13:53:53 +02:00
parent c502131aa7
commit 154e9597ae
5 changed files with 96 additions and 25 deletions
+34 -4
View File
@@ -4,32 +4,62 @@ import (
"fmt"
)
type RuleKind int
const (
RK_Required RuleKind = iota
RK_Optional
RK_Repeat
RK_Port
)
type Rule struct {
Name string
Kind RuleKind
Inner []Rule
}
type AstNode struct {
Rule Rule
Value string
Inner []AstNode
}
func (t AstNode) String() string {
return fmt.Sprintf("AstNode(\n rule=%v,\n inner=%v,\n)", t.Rule, t.Inner)
return fmt.Sprintf("AstNode(\n value=%s\n rule=%v,\n inner=%v,\n)", t.Value, t.Rule, t.Inner)
}
func (t Rule) String() string {
return t.Name
}
func NewRule(name string, inner []Rule) Rule {
return Rule{name, inner}
return Rule{name, RK_Required, inner}
}
func NewPort(name string, inner []Rule) Rule {
return Rule{name, RK_Port, inner}
}
func Optional(rule Rule) Rule {
rule.Kind = RK_Optional
return rule
}
func Repeat(rule Rule) Rule {
rule.Kind = RK_Repeat
return rule
}
var (
IDENTIFIER = NewRule("IDENTIFIER", []Rule{})
IDENTIFIER = NewPort("IDENTIFIER", []Rule{})
NUMBER = NewPort("NUMBER", []Rule{})
SEMICOLON = NewPort("SEMICOLON", []Rule{})
EXPR = NewRule("EXPR", []Rule{IDENTIFIER})
CODE_BLOCK = NewRule("CODE_BLOCK", []Rule{EXPR, SEMICOLON})
VAR_DEF = NewRule("VAR_DEF", []Rule{IDENTIFIER, IDENTIFIER})
FUNC_DEF = NewRule("FUNC_DEF", []Rule{IDENTIFIER, IDENTIFIER, CODE_BLOCK})
)
var (
RULE_SET = []Rule{IDENTIFIER, VAR_DEF}
TOP_RULE = []Rule{FUNC_DEF}
)