Advertisement
Guest User

Untitled

a guest
May 29th, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. #![feature(plugin)]
  2. #![feature(collections)]
  3. #![feature(str_char)]
  4. #![feature(convert)]
  5. #![plugin(peg_syntax_ext)]
  6. use std::io;
  7. peg! pynum(r#"
  8. digit -> i64
  9. = digit_nozero
  10. / "ling" {0i64}
  11.  
  12. digit_nozero -> i64
  13. = "yi" {1i64}
  14. / "er" {2i64}
  15. / "san" {3i64}
  16. / "si" {4i64}
  17. / "wu" {5i64}
  18. / "liu" {6i64}
  19. / "qi" {7i64}
  20. / "ba" {8i64}
  21. / "jiu" {9i64}
  22.  
  23. tens -> i64
  24. = hi:digit_nozero " shi " lo:digit {hi*10+lo}
  25. / "shi " lo:digit {lo+10}
  26. / hi:digit_nozero " shi" {hi*10}
  27. / "shi" {10i64}
  28.  
  29. hundreds_lo -> i64
  30. = " " lo:tens {lo} / " ling " lo:digit {lo}
  31. hundreds -> i64
  32. = hi:digit_nozero " bai" lo:hundreds_lo? {
  33. let f = hi*100;
  34. if let Some(lop) = lo {
  35. f + lop
  36. } else {
  37. f
  38. }
  39. }
  40. number_positive -> i64
  41. = hundreds / tens / digit
  42. #[pub]
  43. number -> i64
  44. = number_positive / "fu "p: number_positive {-p}
  45. "#);
  46.  
  47. fn main() {
  48. let mut input = io::stdin();
  49. let mut line = "".to_string();
  50. if let Ok(_) = input.read_line(&mut line) {
  51. let line_str = line.as_str().trim_right();
  52. if let Ok(res) = pynum::number(line_str) {
  53. println!("{}", res);
  54. } else {
  55. println!("Parse error");
  56. }
  57. }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement