ivi and xvivi

In the section on Functions, we presented a driver program as a helper to the editor, supplying keys to carry out complicated editing task and saving the user from work. An alternative perspective sees ivi as a helper to a driver program.

In an earlier version of the project, we made use of two versions of the ivi editor:

As is often the case in life, the shape of tools helps to define their functions. So, we typically use ivi as an editing environment to write grammars, edit dictionaries, and so on. In conjunction with the vinci commands we will see below, the result is an integrated development environment to allow linguists to build and test grammars.

On the other hand, we use xvivi to 'talk' to web pages, notably in the VinciLingua environment. In a nutshell, the process works like this:

  1. some external process, like the PHP inside a webpage, using some 'glue' language like GNU Expect, starts up xvivi
  2. xvivi is asked to load a grammar using a PRocedure, to generate some output, and to EMit the result
  3. in the simplest case, this is handed back to the calling environment and xvivi turns itself off. We use this, for example, to produce generative web pages, where learner manipulations are based on JavaScript within the page, and new examples are called as desired. This enables us to surpass typical learning environments by creating new questions on the fly.
  4. in a more complicated case, xvivi is started within a multiplexing environment like GNU Screen, which allows sessions to be detached and reattached. xivi generates a question, like in the previous case, and hands the result to a webpage where it is seen by a learner, but then suspends itself waiting for the learner's response, produced by typing, clicking or performing some other operation on the webpage. This response is then handed back to xvivi which performs an error analysis (see above) and hands the result back to the webpage. This is the essence of the VinciLingua environment.