SphinxBase 0.6

src/libsphinxbase/lm/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

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_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_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().

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().

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().