SphinxBase 0.6
jsgf.c File Reference

This file implements the data structures for parsing JSGF grammars into Sphinx finite-state grammars. More...

#include <string.h>
#include <assert.h>
#include "sphinxbase/ckd_alloc.h"
#include "sphinxbase/strfuncs.h"
#include "sphinxbase/hash_table.h"
#include "sphinxbase/err.h"
#include "jsgf_internal.h"
#include "jsgf_parser.h"
#include "jsgf_scanner.h"

Go to the source code of this file.

Functions

jsgf_atom_tjsgf_atom_new (char *name, float weight)
 
int jsgf_atom_free (jsgf_atom_t *atom)
 
jsgf_tjsgf_grammar_new (jsgf_t *parent)
 Create a new JSGF grammar.
 
void jsgf_grammar_free (jsgf_t *jsgf)
 Free a JSGF grammar.
 
jsgf_atom_tjsgf_kleene_new (jsgf_t *jsgf, jsgf_atom_t *atom, int plus)
 
jsgf_rule_tjsgf_optional_new (jsgf_t *jsgf, jsgf_rhs_t *exp)
 
void jsgf_add_link (jsgf_t *grammar, jsgf_atom_t *atom, int from, int to)
 
char const * jsgf_grammar_name (jsgf_t *jsgf)
 Get the grammar name from the file.
 
jsgf_rule_iter_tjsgf_rule_iter (jsgf_t *grammar)
 Get an iterator over all rules in a grammar.
 
jsgf_rule_tjsgf_get_rule (jsgf_t *grammar, char const *name)
 Get a rule by name from a grammar.
 
char const * jsgf_rule_name (jsgf_rule_t *rule)
 Get the rule name from a rule.
 
int jsgf_rule_public (jsgf_rule_t *rule)
 Test if a rule is public or not.
 
fsg_model_tjsgf_build_fsg (jsgf_t *grammar, jsgf_rule_t *rule, logmath_t *lmath, float32 lw)
 Build a Sphinx FSG object from a JSGF rule.
 
fsg_model_tjsgf_build_fsg_raw (jsgf_t *grammar, jsgf_rule_t *rule, logmath_t *lmath, float32 lw)
 Build a Sphinx FSG object from a JSGF rule.
 
fsg_model_tjsgf_read_file (const char *file, logmath_t *lmath, float32 lw)
 Read JSGF from file and return FSG object from it.
 
int jsgf_write_fsg (jsgf_t *grammar, jsgf_rule_t *rule, FILE *outfh)
 Convert a JSGF rule to Sphinx FSG text form.
 
jsgf_rule_tjsgf_define_rule (jsgf_t *jsgf, char *name, jsgf_rhs_t *rhs, int public)
 
jsgf_rule_tjsgf_rule_retain (jsgf_rule_t *rule)
 
int jsgf_rule_free (jsgf_rule_t *rule)
 
jsgf_rule_tjsgf_import_rule (jsgf_t *jsgf, char *name)
 
jsgf_tjsgf_parse_file (const char *filename, jsgf_t *parent)
 Parse a JSGF grammar from a file.
 

Detailed Description

This file implements the data structures for parsing JSGF grammars into Sphinx finite-state grammars.

Definition in file jsgf.c.

Function Documentation

◆ jsgf_add_link()

void jsgf_add_link ( jsgf_t grammar,
jsgf_atom_t atom,
int  from,
int  to 
)

Definition at line 208 of file jsgf.c.

◆ jsgf_atom_free()

int jsgf_atom_free ( jsgf_atom_t atom)

Definition at line 69 of file jsgf.c.

◆ jsgf_atom_new()

jsgf_atom_t * jsgf_atom_new ( char *  name,
float  weight 
)

Definition at line 58 of file jsgf.c.

◆ jsgf_build_fsg()

fsg_model_t * jsgf_build_fsg ( jsgf_t grammar,
jsgf_rule_t rule,
logmath_t lmath,
float32  lw 
)

Build a Sphinx FSG object from a JSGF rule.

Definition at line 497 of file jsgf.c.

Referenced by jsgf_read_file().

◆ jsgf_build_fsg_raw()

fsg_model_t * jsgf_build_fsg_raw ( jsgf_t grammar,
jsgf_rule_t rule,
logmath_t lmath,
float32  lw 
)

Build a Sphinx FSG object from a JSGF rule.

This differs from jsgf_build_fsg() in that it does not do closure on epsilon transitions or any other postprocessing. For the time being this is necessary in order to write it to a file - the FSG code will be fixed soon.

Definition at line 504 of file jsgf.c.

Referenced by jsgf_write_fsg().

◆ jsgf_define_rule()

jsgf_rule_t * jsgf_define_rule ( jsgf_t jsgf,
char *  name,
jsgf_rhs_t rhs,
int  public 
)

Definition at line 559 of file jsgf.c.

◆ jsgf_get_rule()

jsgf_rule_t * jsgf_get_rule ( jsgf_t grammar,
char const *  name 
)

Get a rule by name from a grammar.

Definition at line 427 of file jsgf.c.

References hash_table_lookup(), and jsgf_s::rules.

◆ jsgf_grammar_free()

◆ jsgf_grammar_name()

char const * jsgf_grammar_name ( jsgf_t jsgf)

Get the grammar name from the file.

Definition at line 233 of file jsgf.c.

References jsgf_s::name.

◆ jsgf_grammar_new()

jsgf_t * jsgf_grammar_new ( jsgf_t parent)

Create a new JSGF grammar.

Parameters
parentoptional parent grammar for this one (NULL, usually).
Returns
new JSGF grammar object, or NULL on failure.

Definition at line 79 of file jsgf.c.

References ckd_calloc, ckd_salloc, glist_add_ptr(), glist_reverse(), hash_table_new(), jsgf_s::imports, jsgf_s::parent, jsgf_s::rules, and jsgf_s::searchpath.

Referenced by jsgf_parse_file().

◆ jsgf_import_rule()

jsgf_rule_t * jsgf_import_rule ( jsgf_t jsgf,
char *  name 
)

Definition at line 635 of file jsgf.c.

◆ jsgf_kleene_new()

jsgf_atom_t * jsgf_kleene_new ( jsgf_t jsgf,
jsgf_atom_t atom,
int  plus 
)

Definition at line 174 of file jsgf.c.

◆ jsgf_optional_new()

jsgf_rule_t * jsgf_optional_new ( jsgf_t jsgf,
jsgf_rhs_t exp 
)

Definition at line 198 of file jsgf.c.

◆ jsgf_parse_file()

jsgf_t * jsgf_parse_file ( const char *  filename,
jsgf_t parent 
)

Parse a JSGF grammar from a file.

Parameters
filenamethe name of the file to parse.
parentoptional parent grammar for this one (NULL, usually).
Returns
new JSGF grammar object, or NULL on failure.

Definition at line 734 of file jsgf.c.

References E_ERROR, E_ERROR_SYSTEM, jsgf_grammar_free(), and jsgf_grammar_new().

Referenced by jsgf_read_file().

◆ jsgf_read_file()

fsg_model_t * jsgf_read_file ( const char *  file,
logmath_t lmath,
float32  lw 
)

Read JSGF from file and return FSG object from it.

This function looks for a first public rule in jsgf and constructs JSGF from it.

Definition at line 511 of file jsgf.c.

References E_ERROR, jsgf_build_fsg(), jsgf_grammar_free(), jsgf_parse_file(), jsgf_rule_iter(), jsgf_rule_iter_free, jsgf_rule_iter_next, jsgf_rule_iter_rule, and jsgf_rule_public().

◆ jsgf_rule_free()

int jsgf_rule_free ( jsgf_rule_t rule)

Definition at line 599 of file jsgf.c.

◆ jsgf_rule_iter()

jsgf_rule_iter_t * jsgf_rule_iter ( jsgf_t grammar)

Get an iterator over all rules in a grammar.

Definition at line 421 of file jsgf.c.

References hash_table_iter(), and jsgf_s::rules.

Referenced by jsgf_read_file().

◆ jsgf_rule_name()

char const * jsgf_rule_name ( jsgf_rule_t rule)

Get the rule name from a rule.

Definition at line 437 of file jsgf.c.

References jsgf_rule_s::name.

◆ jsgf_rule_public()

int jsgf_rule_public ( jsgf_rule_t rule)

Test if a rule is public or not.

Definition at line 443 of file jsgf.c.

References jsgf_rule_s::public.

Referenced by jsgf_read_file().

◆ jsgf_rule_retain()

jsgf_rule_t * jsgf_rule_retain ( jsgf_rule_t rule)

Definition at line 592 of file jsgf.c.

◆ jsgf_write_fsg()

int jsgf_write_fsg ( jsgf_t grammar,
jsgf_rule_t rule,
FILE *  outfh 
)

Convert a JSGF rule to Sphinx FSG text form.

This does a direct conversion without doing transitive closure on null transitions and so forth.

Definition at line 542 of file jsgf.c.

References jsgf_build_fsg_raw(), logmath_free(), and logmath_init().