syntax.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // package syntax -- синтаксический потоковый анализатор
  2. //
  3. // Читает по одно литере и пытается определеить символ
  4. package syntax
  5. import (
  6. "fmt"
  7. лог "log"
  8. )
  9. // Синтаксис -- синтаксический потоковый анализатор
  10. type Синтаксис struct {
  11. списокРун []rune // Исходный набор рун для анализа
  12. рунаТекущ rune
  13. }
  14. // НовСинтаксис -- возвращает новый потоовый синтаксический анализатор
  15. func НовСинтаксис(списРун []rune) (*Синтаксис, error) {
  16. лог.Printf("NewSyntax()\n")
  17. if списРун == nil {
  18. return nil, fmt.Errorf("НовСинтаксис(): runeSrc==nil")
  19. }
  20. sf := &Синтаксис{
  21. списокРун: списРун,
  22. }
  23. return sf, nil
  24. }
  25. // Пуск -- обрабатыает входящий поток данных
  26. func (сам *Синтаксис) Пуск() error {
  27. лог.Printf("Синтаксис.Пуск()\n")
  28. i := 0
  29. for {
  30. if len(сам.списокРун) == 0 {
  31. break
  32. }
  33. i++
  34. }
  35. return fmt.Errorf("Синтаксис.Пуск(): доделать")
  36. }
  37. // Пытается вычислить начало модуля
  38. func (сам *Синтаксис) checkModuleBegin() bool {
  39. return false
  40. }
  41. // Классифицирует очередную руну из текста
  42. func (sf *Синтаксис) classifyRune(rune_ rune) string {
  43. return ""
  44. }