Fun

Struct Fun 

Source
pub struct Fun {
    pub name: String,
    pub args: Vec<Fun>,
    pub type_: Option<String>,
}

Fields§

§name: String§args: Vec<Fun>§type_: Option<String>

Implementations§

Source§

impl Fun

Source

pub fn new(name: String, args: Vec<Fun>) -> Self

Creates a new function tree.

Source

pub fn print(&self) -> String

Prints the tree as a string.

Examples found in repository?
examples/basic_usage.rs (line 61)
18fn main() -> Result<(), Box<dyn std::error::Error>> {
19    // Uncomment the line below to see debug output from GF-Core operations
20    set_debug(true);
21    
22    // Load a PGF grammar from binary file and convert to JSON
23    println!("LOG: Reading binary PGF file from disk...");
24    let pgf_content = fs::read("grammars/Food/Food.pgf")?;
25    
26    println!("LOG: Attemp at parsing PGF file Food.pgf starting...");
27    let pgf = pgf2json::parse_pgf(&Bytes::from(pgf_content))?;
28    
29    println!("LOG: Attemp at transforming pgf data to json...");
30    let json_string = pgf2json::pgf_to_json(&pgf)?;
31    
32    println!("LOG: Result of parsing (json_string): {json_string}");
33    println!("TODO: Verify that json_string is json formated!");
34    
35    // Parse JSON string back into PGF struct for runtime usage
36    let json_value: serde_json::Value = serde_json::from_str(&json_string)?;
37    println!("TODO: Understand purpose of (json_value): {json_string}" );
38    
39    let pgf_struct: PGF = serde_json::from_value(json_value)?;
40    println!("TODO: Understand content of (pgf_struct): {:?}", pgf_struct);
41    
42    // Convert to runtime grammar
43    println!("TODO: Purpose of GFGrammar::from_json(pgf_struct)");
44    let grammar: GFGrammar = GFGrammar::from_json(pgf_struct);
45    
46    
47    // Test our fixed abstract syntax parsing
48    println!("LOG: Testing fixed abstract syntax parsing");
49    
50    let test_cases = [
51        "Fish",
52        "This(Fish)", 
53        "Is(This(Fish), Delicious)",
54        "MakeS (NP) (VP)",
55    ];
56    
57    for test_case in test_cases {
58        println!("\nTesting abstract syntax: '{}'", test_case);
59        match grammar.abstract_grammar.parse_tree(test_case, None) {
60            Some(tree) => {
61                println!("✓ Parsed successfully: {}", tree.print());
62                
63                // Try to linearize this tree
64                if let Some(eng_concrete) = grammar.concretes.get("FoodEng") {
65                    println!("LOG: Attempting linearization with FoodEng concrete grammar");
66                    let english_output = eng_concrete.linearize(&tree);
67                    println!("  English: '{}'", english_output);
68                }
69            }
70            None => {
71                println!("✗ Failed to parse");
72            }
73        }
74    }
75    
76    // Also test the natural language parsing for comparison
77    println!("\n=== Natural Language Parsing (for comparison) ===");
78    if let Some(eng_concrete) = grammar.concretes.get("FoodEng") {
79        let trees = eng_concrete.parse_string("this fish is delicious", &grammar.abstract_grammar.startcat);
80        
81        if trees.is_empty() {
82            println!("No valid parse found for 'this fish is delicious'");
83        } else {
84            println!("Found {} parse tree(s):", trees.len());
85            for (i, tree) in trees.iter().enumerate() {
86                println!("  Tree {}: {}", i + 1, tree.print());
87                
88                // Linearize back to English
89                let english_output = eng_concrete.linearize(tree);
90                println!("  English: {}", english_output);
91            }
92        }
93    }
94
95    // Note: FoodIta concrete grammar not available in this PGF file
96    println!("Available concrete grammars: {:?}", grammar.concretes.keys().collect::<Vec<_>>());
97
98    Ok(())
99}
Source

pub fn get_arg(&self, i: usize) -> Option<&Fun>

Gets argument by index.

Source

pub fn set_arg(&mut self, i: usize, c: Fun)

Sets argument by index.

Source

pub fn is_meta(&self) -> bool

Checks if this is a meta variable.

Source

pub fn is_complete(&self) -> bool

Checks if the tree is complete (no metas).

Source

pub fn is_literal(&self) -> bool

Checks if this is a literal.

Source

pub fn is_string(&self) -> bool

Checks if this is a string literal.

Source

pub fn is_int(&self) -> bool

Checks if this is an integer literal.

Source

pub fn is_float(&self) -> bool

Checks if this is a float literal.

Source

pub fn is_equal(&self, other: &Fun) -> bool

Checks equality with another tree.

Trait Implementations§

Source§

impl Clone for Fun

Source§

fn clone(&self) -> Fun

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Fun

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Fun

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for Fun

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Fun

Source§

fn eq(&self, other: &Fun) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Fun

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Fun

Auto Trait Implementations§

§

impl Freeze for Fun

§

impl RefUnwindSafe for Fun

§

impl Send for Fun

§

impl Sync for Fun

§

impl Unpin for Fun

§

impl UnwindSafe for Fun

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,