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.
31 lines
799 B
31 lines
799 B
use std::io::{self, BufRead};
|
|
|
|
#[macro_use]
|
|
extern crate nom;
|
|
extern crate nom_peg;
|
|
use nom_peg::grammar;
|
|
|
|
fn main() {
|
|
let arithmetic = grammar! {
|
|
parse: i64 = <expr> "="
|
|
|
|
expr: i64 = <l: sum> (" ")* "*" (" ")* <r: expr> => { l * r }
|
|
| sum
|
|
|
|
sum: i64 = <l: value> (" ")* "+" (" ")* <r: sum> => { l + r }
|
|
| value
|
|
|
|
value: i64 = ("0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9")+ => { result.join("").parse::<i64>().unwrap() }
|
|
| "(" <expr> ")"
|
|
};
|
|
|
|
let mut result = 0;
|
|
let stdin = io::stdin();
|
|
for line in stdin.lock().lines() {
|
|
let value = arithmetic.parse(&(line.unwrap() + "=")).unwrap().1;
|
|
println!("{}", value);
|
|
result += value;
|
|
}
|
|
|
|
println!("{}", result)
|
|
}
|
|
|