1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//! awk-rs - A 100% POSIX-compatible AWK implementation in Rust
//!
//! This crate provides a complete AWK interpreter that aims for full compatibility
//! with POSIX AWK and GNU AWK extensions.
//!
//! # Example
//!
//! ```
//! use awk_rs::{Lexer, Parser, Interpreter};
//! use std::io::BufReader;
//!
//! // Parse an AWK program
//! let source = r#"BEGIN { print "Hello, World!" }"#;
//! let mut lexer = Lexer::new(source);
//! let tokens = lexer.tokenize().unwrap();
//! let mut parser = Parser::new(tokens);
//! let program = parser.parse().unwrap();
//!
//! // Run the program
//! let mut interpreter = Interpreter::new(&program);
//! let mut output = Vec::new();
//! let inputs: Vec<BufReader<&[u8]>> = vec![];
//! interpreter.run(inputs, &mut output).unwrap();
//!
//! assert_eq!(String::from_utf8(output).unwrap(), "Hello, World!\n");
//! ```
//!
//! # Field Processing Example
//!
//! ```
//! use awk_rs::{Lexer, Parser, Interpreter};
//! use std::io::BufReader;
//!
//! let source = r#"{ print $1, $2 }"#;
//! let mut lexer = Lexer::new(source);
//! let tokens = lexer.tokenize().unwrap();
//! let mut parser = Parser::new(tokens);
//! let program = parser.parse().unwrap();
//!
//! let mut interpreter = Interpreter::new(&program);
//! interpreter.set_fs(","); // Use comma as field separator
//!
//! let input = b"hello,world\nfoo,bar\n";
//! let mut output = Vec::new();
//! let inputs = vec![BufReader::new(&input[..])];
//! interpreter.run(inputs, &mut output).unwrap();
//!
//! assert_eq!(String::from_utf8(output).unwrap(), "hello world\nfoo bar\n");
//! ```
//!
//! # Pattern Matching Example
//!
//! ```
//! use awk_rs::{Lexer, Parser, Interpreter};
//! use std::io::BufReader;
//!
//! let source = r#"/error/ { print "Found:", $0 }"#;
//! let mut lexer = Lexer::new(source);
//! let tokens = lexer.tokenize().unwrap();
//! let mut parser = Parser::new(tokens);
//! let program = parser.parse().unwrap();
//!
//! let mut interpreter = Interpreter::new(&program);
//! let input = b"info: ok\nerror: failed\ninfo: done\n";
//! let mut output = Vec::new();
//! let inputs = vec![BufReader::new(&input[..])];
//! interpreter.run(inputs, &mut output).unwrap();
//!
//! assert_eq!(String::from_utf8(output).unwrap(), "Found: error: failed\n");
//! ```
pub
pub use ;
pub use Interpreter;
pub use ;
pub use Parser;
pub use Value;