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
+6 -3
View File
@@ -14,13 +14,16 @@ func (t Rule) String() string {
return fmt.Sprintf("TokenRule(%s)", t.Name)
}
var RULES = []Rule{}
func NewRule(name string, pattern regexp.Regexp) Rule {
return Rule{Name: name, Pattern: pattern}
var rule = Rule{Name: name, Pattern: pattern}
RULES = append(RULES, rule)
return rule
}
var (
NUMBER = NewRule("NUMBER", *regexp.MustCompile(`^\d+`))
IDENTIFIER = NewRule("IDENTIFIER", *regexp.MustCompile("^[A-Za-z_][A-Za-z_0-9]*"))
SEMICOLON = NewRule("SEMICOLON", *regexp.MustCompile("^;"))
)
var RULES = []Rule{IDENTIFIER, NUMBER}
+4 -2
View File
@@ -23,6 +23,7 @@ func (t Token) String() string {
func Tokenize(code string) ([]Token, State, error) {
var tokens = []Token{}
var state = State{1, 0}
var err error = nil
for code != "" {
matched := false
for i := 0; i < len(RULES); i++ {
@@ -45,8 +46,9 @@ func Tokenize(code string) ([]Token, State, error) {
}
}
if !matched {
return tokens, state, fmt.Errorf("invalid character or token")
code = code[1:]
err = fmt.Errorf("invalid character or token")
}
}
return tokens, state, nil
return tokens, state, err
}