World's most popular travel blog for travel bloggers.

How is non-ambuiguity different from determinism?

, , No Comments
Problem Detail: 

I am trying to understand what is meant by "deterministic" in expressions such as "deterministic context-free grammar". (There are more deterministic "things" in this field). I would appreciate an example more then the most elaborate explanation! If possible.

My primary source of confusion is from not being able to tell how this property of a grammar is different from (non-)ambiguity.

The closest I got to finding what it means is this quote from the paper by D. Knuth On the Translation of Languages from Left to Right:

Ginsburg and Greibach (1965) have defined the notion of a deterministic language; we show in Section V that these are precisely the languages for which there exists an L R ( k ) grammar

which becomes circular as soon you get to the Section V, because there it says that what LR(k) parser can parse is the deterministic language...


Below is an example that I could find to help me understand what "ambigous" means, please take a look:

onewartwoearewe 

Which can be parsed as one war two ear ewe or o new art woe are we - if a grammar allows that (say it has all the words I just listed).

What would I need to do to make this example language (non-)deterministic? (I could, for example, remove the word o from the grammar, to make the grammar not ambiguous).

Is the above language deterministic?

PS. The example is from the book Godel, Esher, Bach: Eternal Golden Braid.


Let's say, we define the grammar for the example language like so:

S -> A 'we' | A 'ewe' A -> B | BA B -> 'o' | 'new' | 'art' | 'woe' | 'are' | 'one' | 'war' | 'two' | 'ear' 

By the argument about having to parse the whole string, does this grammar make the language non-deterministic?


let explode s =   let rec exp i l =     if i < 0 then l else exp (i - 1) (s.[i] :: l) in   exp (String.length s - 1) [];;  let rec woe_parser s =   match s with   | 'w' :: 'e' :: [] -> true   | 'e' :: 'w' :: 'e' :: [] -> true   | 'o' :: x -> woe_parser x   | 'n' :: 'e' :: 'w' :: x -> woe_parser x   | 'a' :: 'r' :: 't' :: x -> woe_parser x   | 'w' :: 'o' :: 'e' :: x -> woe_parser x   | 'a' :: 'r' :: 'e' :: x -> woe_parser x   (* this line will trigger an error, because it creates       ambiguous grammar *)   | 'o' :: 'n' :: 'e' :: x -> woe_parser x   | 'w' :: 'a' :: 'r' :: x -> woe_parser x   | 't' :: 'w' :: 'o' :: x -> woe_parser x   | 'e' :: 'a' :: 'r' :: x -> woe_parser x   | _ -> false;;  woe_parser (explode "onewartwoearewe");; - : bool = true 

| Label   | Pattern      | |---------+--------------| | rule-01 | S -> A 'we'  | | rule-02 | S -> A 'ewe' | | rule-03 | A -> B       | | rule-04 | A -> BA      | | rule-05 | B -> 'o'     | | rule-06 | B -> 'new'   | | rule-07 | B -> 'art'   | | rule-08 | B -> 'woe'   | | rule-09 | B -> 'are'   | | rule-10 | B -> 'one'   | | rule-11 | B -> 'war'   | | rule-12 | B -> 'two'   | | rule-13 | B -> 'ear'   | #+TBLFM: @2$1..@>$1='(format "rule-%02d" (1- @#));L  Generating =onewartwoearewe=  First way to generate:  | Input             | Rule    | Product           | |-------------------+---------+-------------------| | ''                | rule-01 | A'we'             | | A'we'             | rule-04 | BA'we'            | | BA'we'            | rule-05 | 'o'A'we'          | | 'o'A'we'          | rule-04 | 'o'BA'we'         | | 'o'BA'we'         | rule-06 | 'onew'A'we'       | | 'onew'A'we'       | rule-04 | 'onew'BA'we'      | | 'onew'BA'we'      | rule-07 | 'onewart'A'we'    | | 'onewart'A'we'    | rule-04 | 'onewart'BA'we'   | | 'onewart'BA'we'   | rule-08 | 'onewartwoe'A'we' | | 'onewartwoe'A'we' | rule-03 | 'onewartwoe'B'we' | | 'onewartwoe'B'we' | rule-09 | 'onewartwoearewe' | |-------------------+---------+-------------------| |                   |         | 'onewartwoearewe' |  Second way to generate:  | Input             | Rule    | Product           | |-------------------+---------+-------------------| | ''                | rule-02 | A'ewe'            | | A'ewe'            | rule-04 | BA'ewe'           | | BA'ewe'           | rule-10 | 'one'A'ewe'       | | 'one'A'ewe'       | rule-04 | 'one'BA'ewe'      | | 'one'BA'ewe'      | rule-11 | 'onewar'A'ewe'    | | 'onewar'A'ewe'    | rule-04 | 'onewar'BA'ewe'   | | 'onewar'BA'ewe'   | rule-12 | 'onewartwo'A'ewe' | | 'onewartwo'A'ewe' | rule-03 | 'onewartwo'B'ewe' | | 'onewartwo'B'ewe' | rule-13 | 'onewartwoearewe' | |-------------------+---------+-------------------| |                   |         | 'onewartwoearewe' | 
Asked By : wvxvw

Answered By : Patrick87

A PDA is deterministic, hence a DPDA, iff for every reachable configuration of the automaton, there is at most one transition (i.e., at most one new configuration possible). If you have a PDA which can reach some configuration for which two or more unique transitions may be possible, you do not have a DPDA.

Example:

Consider the following family of PDAs with $Q = \{q_0, q_1\}$, $\Sigma = \Gamma = \{a, b\}$, $A = q_0$ and $\delta$ given by the following table:

q    e    s    q'   s' --   --   --   --   -- q0   a    Z0   q1   aZ0 q0   a    Z0   q2   bZ0 ... 

These are nondeterministic PDAs because the initial configuration - q_0, Z0 - is reachable, and there are two valid transitions leading away from it if the input symbol is a. Anytime this PDA starts trying to process a string that begins with an a, there's a choice. Choice means nondeterministic.

Consider, instead, the following transition table:

q    e    s    q'   s' --   --   --   --   -- q0   a    Z0   q1   aZ0 q0   a    Z0   q2   bZ0 q1   a    a    q0   aa q1   a    b    q0   ab q1   a    b    q2   aa q2   b    a    q0   ba q2   b    b    q0   bb q2   b    a    q1   bb 

You might be tempted to say this PDA is nondeterministic; after all, there are two valid transitions away from the configuration q1, b(a+b)*, for instance. However, since this configuration is not reachable by any path through the automaton, it doesn't count. The only reachable configurations are a subset of q_0, (a+b)*Z0, q1, a(a+b)*Z0, and q2, b(a+b)*Z0, and for each of these configurations, at most one transition is defined.

A CFL is deterministic iff it is the language of some DPDA.

A CFG is unambiguous if every string has at most one valid derivation according to the CFG. Otherwise, the grammar is ambiguous. If you have a CFG and you can produce two different derivation trees for some string, you have an ambiguous grammar.

A CFL is inherently ambiguous iff it is not the language of any unambiguous CFG.

Note the following:

  • A deterministic CFL must be the language of some DPDA.
  • Every CFL is the language of infinitely many nondeterministic PDAs.
  • An inherently ambiguous CFL is not the language of any unambiguous CFG.
  • Every CFL is the language of infinitely many ambiguous CFGs.
  • An inherently ambiguous CFL cannot be deterministic.
  • A nondeterministic CFL may or may not be inherently ambiguous.
Best Answer from StackOverflow

Question Source : http://cs.stackexchange.com/questions/14583

0 comments:

Post a Comment

Let us know your responses and feedback