Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
847 B
49 lines
847 B
package ssh_config |
|
|
|
import "fmt" |
|
|
|
type token struct { |
|
Position |
|
typ tokenType |
|
val string |
|
} |
|
|
|
func (t token) String() string { |
|
switch t.typ { |
|
case tokenEOF: |
|
return "EOF" |
|
} |
|
return fmt.Sprintf("%q", t.val) |
|
} |
|
|
|
type tokenType int |
|
|
|
const ( |
|
eof = -(iota + 1) |
|
) |
|
|
|
const ( |
|
tokenError tokenType = iota |
|
tokenEOF |
|
tokenEmptyLine |
|
tokenComment |
|
tokenKey |
|
tokenEquals |
|
tokenString |
|
) |
|
|
|
func isSpace(r rune) bool { |
|
return r == ' ' || r == '\t' |
|
} |
|
|
|
func isKeyStartChar(r rune) bool { |
|
return !(isSpace(r) || r == '\r' || r == '\n' || r == eof) |
|
} |
|
|
|
// I'm not sure that this is correct |
|
func isKeyChar(r rune) bool { |
|
// Keys start with the first character that isn't whitespace or [ and end |
|
// with the last non-whitespace character before the equals sign. Keys |
|
// cannot contain a # character." |
|
return !(r == '\r' || r == '\n' || r == eof || r == '=') |
|
}
|
|
|