diff options
| author | sanine <sanine.not@pm.me> | 2025-10-27 10:52:01 -0500 | 
|---|---|---|
| committer | sanine <sanine.not@pm.me> | 2025-10-27 10:52:01 -0500 | 
| commit | 8f63364c2b1ec54e104c189db43805917800b789 (patch) | |
| tree | 8329eb5a9955667f1aa8d2e22110062d841379c7 /expression.h | |
| parent | 11f8fd4418a068c76fc7c810967a6bf285ee74b6 (diff) | |
implement basic grammatical expansionc-version
Diffstat (limited to 'expression.h')
| -rw-r--r-- | expression.h | 22 | 
1 files changed, 20 insertions, 2 deletions
| diff --git a/expression.h b/expression.h index 36a0e02..e288a77 100644 --- a/expression.h +++ b/expression.h @@ -1,6 +1,8 @@  #ifndef LICHEN_EXPRESSION_H  #define LICHEN_EXPRESSION_H +#include <stdint.h> +  /****************************************************************   *    * a grammar is built on both nonterminals and terminals. both are @@ -32,11 +34,27 @@ int li_prod_rule_add(struct li_production_rule_t *rule, size_t seq_len, int *seq  typedef struct li_grammar_t {    struct li_production_rule_t *rules; -  size_t num_nonterminal; +  int num_nonterminal;  } li_grammar_t; -li_rammar_t * li_grammar_alloc(size_t num_nonterminal); +li_grammar_t * li_grammar_alloc(int num_nonterminal);  void li_grammar_free(li_grammar_t *grammar);  int li_grammar_rule_add(li_grammar_t *grammar, int nonterminal, size_t seq_len, int *seq); +// expand a symbol into only nonterminals +// dst is a buffer to place the expansion into, and len should initially contain the size of the buffer +// stack is a buffer used internally to expand the rule, and stack_sz is the size of the stack +// symbol is the symbol to start with +// randomness is a sequence of random values, from any source, and rand_sz is the length of the sequence +// if successful, this function will return 0 and dst will contain the expanded sequence, with len containing +// the length of the actual expansion +// if unsuccessful, this function will return nonzero. dst, len, and stack may be modified in unpredictable ways. +int li_grammar_rule_expand( +  li_grammar_t *grammar,  +  int *dst, size_t *len,  +  int *stack, size_t stack_sz,  +  int symbol,  +  const uint8_t *randomness, size_t rand_sz +); +  #endif | 
