# How to convert this regular grammar into a finite state automaton?

In a French course (p. 13) there is a language of words of {a,b,c} containing at least one occurrence of the string bac.

The course provide also among other things this right-regular grammar below:

T = { a,b,c }
N = { S,U,V,W }
R = { S → aS | bS | cS | bU
U → aV
V → cW | c
W → aW | bW | cW | a | b | c }


What bugs me is the first rule: b can be followed both by S or U but it sounds like a non-deterministic grammar. I tried to build a finite-state automaton from this language, starting for the description phrased at the beginning to see if I could end with something looking like the grammar. It is reproduced below (fixed, thanks to @rici). I don't think it is, except if I remove bS in the first rule. Where am I wrong?

• (The left-regular grammar in the text hyperlinked seems to accept words ending in bac, only.) Oct 1, 2021 at 4:29
• @greybeard I made a typo by writing abc, sorry (edit accepted). Oct 1, 2021 at 7:35
• Regular grammars correspond to NFAs. Oct 1, 2021 at 9:09
• @YuvalFilmus, oh thanks, I believed they have to be deterministic. Oct 1, 2021 at 11:02

The language of a right-regular grammar is certainly deterministic, because the grammar can be written as an NFA and any NFA can be mechanically transformed into an equivalent DFA using the subset construction.

However, the grammar may well be ambiguous (i.e. capable of producing multiple parse trees for the same input.) That's the case for the grammar you show, which might transition to $$U$$ after any instance of $$bac$$, not just the first one.

Since the NFA can be transformed into a DFA and the DFA back into a right regular grammar, we can conclude that the language is deterministic, in the sense that a deterministic grammar exists. (And a deterministic grammar is clearly not ambiguous.) But that deterministic grammar does not use the same grammatical categories (non-terminals), so it won't produce the intended parse tree (if there was such an intention).

This distinction probably makes little difference at this point in your studies, but it may be useful to hold it in mind. Regular expressions are typically used when the internal structure of the input is unimportant, so that a machine which simply returns a yes/no indication is of practical value and the determinism of the machine's internal workings is irrelevant.

Parsing, on the other hand, means analyzing the input into its component parts (the similarity of the two words is not a coincidence). So when you later want to build parsers, you'll want a machine which transforms a correct input into a parse tree (or some other similar representation), and the question of determinism becomes more interesting.

In any case, you need always to clearly distinguish between a characteristic of a grammar and a characteristic of a language, even if the same word is used for both.

Typically we say that a language $$L$$ has property $$P$$ if and only if there exists some grammar $$G$$ which has property $$P$$ and which generates (or recognises) language $$L$$. That's a notational shortcut which lets us extend characteristics of grammars onto languages, but it must not be read to imply that every grammar for the language has the indicated property. This is a frequent cause of confusion.

• Thank you for this detailed answer. I had studied language theory a long time ago, I forgot a lot... :) My basic mistake was to assume a regular language must be generated only by deterministic grammar and automata. Your answer provide a global view on this point. Oct 5, 2021 at 8:02
• Just to be sure, could you please confirm if the automata in my question is correct? Oct 5, 2021 at 8:03
• @Amessihel It won't match $bbac$ or $babac$. The $b$ transitions need to go to $U$, not $S$.
– rici
Oct 5, 2021 at 11:44
• I've just fixed it, thank you! Oct 15, 2021 at 10:48