Advertisement
Guest User

Untitled

a guest
Sep 17th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. extern crate sexp;
  2.  
  3. use std::fs::File;
  4. use std::io::BufReader;
  5. use std::io::prelude::*;
  6. use sexp::Sexp::{Atom, List};
  7. use sexp::Atom::{S,I,F};
  8.  
  9. #[derive(Debug)]
  10. enum TokenType {
  11. Atom,
  12. Not,
  13. And,
  14. Or,
  15. Impl,
  16. True,
  17. False,
  18. Undef,
  19. }
  20.  
  21. struct Node<'a> {
  22. _type: TokenType,
  23. symbol: Option<&'a str>,
  24. left: Option<&'a Node<'a>>,
  25. right: Option<&'a Node<'a>>
  26. }
  27.  
  28. impl<'a> Node<'a> {
  29. fn new() -> Node<'a> {
  30. return Node{_type: TokenType::Undef, symbol: None, left: None, right: None};
  31. }
  32.  
  33. fn atom(symbol: &'a str) -> Node<'a> {
  34. return Node{_type: TokenType::Atom, symbol: Some(symbol), left: None, right: None};
  35. }
  36. }
  37.  
  38. fn parse(buf: &str) -> Result<Node,String> {
  39.  
  40. let tokens = sexp::parse(buf);
  41.  
  42. match tokens {
  43. Ok(s) => {
  44. println!("{:?}",s);
  45.  
  46. match s {
  47. Atom(atom) => {
  48.  
  49. match atom {
  50. S(s) => {
  51. // println!("ATOM: {:?}",s);
  52. return Ok(Node::atom(s.as_str()));
  53. }
  54. I(i) => {
  55. panic!("not supported");
  56. }
  57. F(f) => {
  58. panic!("not supported");
  59. }
  60. }
  61.  
  62.  
  63. }
  64. List(list) => {
  65. println!("LIST: {:?}",list);
  66.  
  67. }
  68. }
  69.  
  70. }
  71. Err(m) => {
  72. println!("{:?}",m);
  73. panic!("parse error")
  74. }
  75. }
  76.  
  77. let node = Node::new();
  78. return Ok(node);
  79. }
  80.  
  81. fn main() -> std::io::Result<()> {
  82. let file = File::open("hoge.txt")?;
  83. let mut buf_reader = BufReader::new(file);
  84. let mut contents = String::new();
  85.  
  86. buf_reader.read_to_string(&mut contents)?;
  87. let lines = contents.split('\n');
  88.  
  89. for line in lines {
  90. if line.len() != 0 {
  91. let tree = parse(line);
  92. }
  93. }
  94.  
  95. Ok(())
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement