CONFIG.INI

Spejd has now a configuration file, which may be used to customise its
behaviour, from diagnostics and file locations to rule semantics and
matching strategy.  See config.ini for details.

Requests for more customisation options are welcome.

Program invocation has changes a bit.  You no longer have to pass
sample.cfg and rules.sr as arguments every time.  Instead, variables
defined in config.ini may be overriden by invocation parameters.  The
syntax for such parameters is:

<var>=<value> 
(note: no spaces)

Examples:

java ipipan.spejd.Parser corpus nullAgreement=1
java ipipan.spejd.Parser corpus rules=rules2.sr logDir=log2
java ipipan.spejd.Parser corpus discardDeleted=true outputFile=morphShort.xml

Note: parse.sh is therefore obsolete.

MACRO DEFINITIONS

You can now define macros in Spejd, at the beginning of a rules file
(before the rules).  Macros can be referenced in Left, Match and Right
parts of rules.  Macros are defined by the keyword "Define":

Define <macro_id> = <entity spec>;

where 

<macro_id> is a sequence of letters, - and _

<entity spec> is anything that can be put in the Left, Match and Right
     parts of rules, including reference to earlier defined macros.
     It has to be "complete" (ie. all parentheses match, no loose 
     quantifiers etc.)	

Macros are called by the dollar sign, $<macro_id>.

See rules_sr for examples.

VALUE LISTS

In addition to universal quantification over attribute (for example
"case*") you can now use value lists in actions like word, add and
set.  The list elements should be seperated by dot (.), for example 

add(adj:sg:dat:m1.m2.m3.n:pos,,1);

- will add four interpretations (all genders but female).

set(num:pl:nom.acc.voc:m2.m3.n.f,"ile",1);

- will set 12 interpretations (3 cases * 4 genders).

WORD() EXTENDED

word(3, negation*, base);
word(3, aff.neg, base);

- create a syntactic word with interpretations based on 3rd
  specification, but with uncertain negation value (with both aff and
  neg interpretations)

word(3,, 2.orth " " base);

- create a syntactic word with interpretations based on 3rd segment,
  but with 2.orth and space prepended to each base form corresponding
  to a given interpretation.  Note that:

word(3,, 2.orth " " 3.base);

- has a slightly different semantics - only one base form from 3.base
  is taken.

word(3,, 0.base);

- create a syntactic word with interpretations based on 3rd segment,
  but with base created as concatenation of base forms of all match
  segments (with or without spaces, depending on the presence of ns).

SET 

set(tag, base, tok); 

is now equivalent to 

delete( , tok); add(tag, base, tok);

RULES PARSING

The diagnostics has been improved a bit.  Hopefully.