bnf icon indicating copy to clipboard operation
bnf copied to clipboard

reusable grammar parser

Open CrockAgile opened this issue 3 years ago • 2 comments

Is your feature request related to a problem? Please describe.

The existing Grammar::parse_input method is useful for parsing input text according to a Grammar. But the current API builds "one use" parsers. This limitation forces some redundant work to be repeated when parsing multiple input texts.

// each of these builds completely new `GrammarMatching` and other parsing tables,
// which are then freed before the next `parse_input`, wasting computation
grammar.parse_input(input_1);
grammar.parse_input(input_2);
grammar.parse_input(input_3);

Describe the solution you'd like

Instead, a single GrammarParser could be available which would reuse parser data efficiently:

let parser = grammar.input_parser();

// common immutable parser data is shared between calls
parser.parse_input(input_1);
parser.parse_input(input_2);
parser.parse_input(input_3);

Describe alternatives you've considered

Maybe this just doesn't matter! I am not sure if this new API would even make much of a performance difference. I am not sure "how much faster" would warrant a new API method. 1% faster? 5% faster? 50% faster?

CrockAgile avatar Dec 01 '22 18:12 CrockAgile

i don't like this parser API because it implies that if u just want to analyze grammars then the Grammar struct will suffice, but Grammar's are too raw to be of much use in anything, the only upside being that it's easy too append/remove productions to a grammar after it's created because they're just simple lists of Productions. i think a better idea is too just store the "parser" part (in reality the only part that understands the Grammar semantically) inside the Grammar itself and update it automatically whenever u add/remove a production

Carlyle-Foster avatar Jan 05 '25 23:01 Carlyle-Foster

we also need the "parser" info to validate Grammars ala #136, which strongly suggests it's useful for more than just parsing

Carlyle-Foster avatar Jan 05 '25 23:01 Carlyle-Foster