utils.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package expr
  2. var op1ch = [...]bool {
  3. '+': true,
  4. '-': true,
  5. '*': true,
  6. '/': true,
  7. '%': true,
  8. '&': true,
  9. '|': true,
  10. '^': true,
  11. '~': true,
  12. '(': true,
  13. ')': true,
  14. }
  15. var op2ch = [...]bool {
  16. '*': true,
  17. '<': true,
  18. '>': true,
  19. }
  20. func neg2(v *Expr, err error) (*Expr, error) {
  21. if err != nil {
  22. return nil, err
  23. } else {
  24. return v.Neg(), nil
  25. }
  26. }
  27. func not2(v *Expr, err error) (*Expr, error) {
  28. if err != nil {
  29. return nil, err
  30. } else {
  31. return v.Not(), nil
  32. }
  33. }
  34. func isop1ch(ch rune) bool {
  35. return ch >= 0 && int(ch) < len(op1ch) && op1ch[ch]
  36. }
  37. func isop2ch(ch rune) bool {
  38. return ch >= 0 && int(ch) < len(op2ch) && op2ch[ch]
  39. }
  40. func isdigit(ch rune) bool {
  41. return ch >= '0' && ch <= '9'
  42. }
  43. func isident(ch rune) bool {
  44. return isdigit(ch) || isident0(ch)
  45. }
  46. func isident0(ch rune) bool {
  47. return (ch == '_') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
  48. }
  49. func ishexdigit(ch rune) bool {
  50. return isdigit(ch) || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')
  51. }