[ Control | Reference Manual | Alphabetic Index ]

# phrase(+Grammar, ?Tokens, ?Remainder)

Succeeds if Tokens can be parsed as part of the grammar defined in Grammar and Remainder contains any remaining terms in Tokens.

Grammar
  Compound Term or Atom.
Tokens
  List of Prolog terms.
Remainder
  List of Prolog terms.

## Description

phrase/3 is used to parse grammars (DCGs) defined using the grammar rule operator -->. The flag macro_expansion must be set on when compiling grammar rules.

Giving a list of terms in Tokens, phrase/3 parses it according to the grammar defined in Grammar. As the terms in Tokens are parsed in order, any remaining terms are returned in Remainder. Further acceptable solutions are returned on backtracking.

### Modes and Determinism

- phrase(+, -, -) is nondet
- phrase(+, +, -) is nondet
- phrase(+, +, +) is semidet

### Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

### Fail Conditions

The initial terms in Tokens do not belong to Grammar

### Resatisfiable

Depends on the grammar

### Exceptions

(4) instantiation fault
  Grammar is not instantiated.
(5) type error
  Grammar is a number or a string.

## Examples

       [eclipse]: [user].
        a --> [].
        a --> [z],a.
        user compiled 212 bytes in 0.03 seconds
       yes.
       [eclipse]: phrase(a,[z,z],[]).

       yes.
       [eclipse]: phrase(a,[z,z,z,y],[z,y]).

       yes.
       [eclipse]: phrase(a,[z,z,y],R).

       R = [z, z, y]     More? (;)

       R = [z, y]     More? (;)

       R = [y]     More? (;)

       no (more) solution.
       [eclipse]: phrase(a,X,[y]).

       X = [y]     More? (;)

       X = [z, y]     More? (;)

       X = [z, z, y]     More? (;)

       X = [z, z, z, y]     More? (;)

       X = [z, z, z, z, y]     More? (;)
       yes.
       [eclipse]:

    Fail:
       phrase(a, [z, z, y], []).

    Error:
       phrase(X, [what, time, is, it], [is, it],R).  (Error 4).
       phrase("a", X,R).                             (Error 5).
       phrase(456, X,R).                             (Error 5).

## See Also

phrase / 2, current_macro / 4, macro / 3, erase_macro / 2