A-rule: Difference between revisions

From UNLwiki
Jump to navigationJump to search
imported>Admin
No edit summary
imported>Admin
No edit summary
Line 6: Line 6:


  <M-RULE>          ::= <CONDITION> “:=” <ACTION> [, <ACTION>]* “;”
  <M-RULE>          ::= <CONDITION> “:=” <ACTION> [, <ACTION>]* “;”
  <CONDITION>        ::= <ATAG>[&[“^”]<ATAG>]*
  <CONDITION>        ::= <ATAG>[&[“^”]<ATAG>]*
  <ATAG>            ::= {one of the attribute tags defined in the [[UNL Dictionary Tagset]]}
  <ATAG>            ::= {one of the tags defined in the [[UNL Tagset]]}
  <ACTION>          ::= <LEFT APPENDING> | <RIGHT APPENDING> | <REPLACEMENT>
  <ACTION>          ::= <LEFT APPENDING> | <RIGHT APPENDING> | <REPLACEMENT>
  <LEFT APPENDING>  ::= <ADDED> {“<” | “<<”} [ <DELETED> ]
  <LEFT APPENDING>  ::= <ADDED> {“<” | “<<”} [ <DELETED> ]
  <RIGHT APPENDING>  ::= [ <DELETED> ] {“>” | “>>”}   <ADDED>
  <RIGHT APPENDING>  ::= [ <DELETED> ] {“>” | “>>”} <ADDED>
  <REPLACEMENT>      ::= [ <DELETED> ":" ] <ADDED>
  <REPLACEMENT>      ::= [ <STRING> ":" ] <ADDED> | "[" <INTEGER> "-" <INTEGER> "]" ":"  <ADDED>
  <ADDED>            ::= <STRING>  
  <ADDED>            ::= <STRING>  
  <DELETED>          ::= <STRING> | <NUMBER>   
  <DELETED>          ::= <STRING> | <INTEGER>   
  <STRING>          ::= “ “ “ [a..Z]+ “ “ “
  <STRING>          ::= “ “ “ [a..Z]+ “ “ “
  <NUMBER>           ::= [0..9]+
  <INTEGER>         ::= [0..9]+


where
where

Revision as of 09:15, 30 November 2009

M-rule is the formalism used for describing morphological behavior in the UNL framework. It is used in inflectional paradigms, in inflectional rules, in semantic rules and in morphological settings.

Syntax

A M-rule rule should comply with the following syntax:

<M-RULE>           ::= <CONDITION> “:=” <ACTION> [, <ACTION>]* “;”
<CONDITION>        ::= <ATAG>[“&”[“^”]<ATAG>]*
<ATAG>             ::= {one of the tags defined in the UNL Tagset}
<ACTION>           ::= <LEFT APPENDING> | <RIGHT APPENDING> | <REPLACEMENT>
<LEFT APPENDING>   ::= <ADDED>	 {“<” | “<<”} 	[ <DELETED> ]
<RIGHT APPENDING>  ::= [ <DELETED> ]	 {“>” | “>>”} 	<ADDED>
<REPLACEMENT>      ::= [ <STRING> ":" ] <ADDED> | "[" <INTEGER> "-" <INTEGER> "]" ":"  <ADDED>
<ADDED>            ::= <STRING> 
<DELETED>          ::= <STRING> | <INTEGER>  
<STRING>           ::= “ “ “ [a..Z]+ “ “ “
<INTEGER>          ::= [0..9]+

where

<a> = a is a non-terminal symbol
“a“ = a is a constant
[a] = a can be omitted
a | b = a or b
{ a | b } = either a or b
a* = a can be repeated 0 or more times
a+ = a can be repeated 1 or more times

Examples

Left appending (prefixation) rules

RULE BEHAVIOR BEFORE AFTER
X:=”y”<”z”; if X replace the string “z” by the string “y” in the beginning of the string zabc yabc
X:=”y”<1; if X replace the first character of the string by “y” zabc yabc
X:=”y”<0; if X add the string “y” to the beginning of the string zabc yzabc
X:=”y”<; if X add the string “y” to the beginning of the string (idem previous) zabc yzabc
X:=”y”<<0; if X add the string “y” and a blank space to the beginning of the string zabc y zabc
X:=”y”<<; if X add the string “y” and a blank space to the beginning of the string (idem previous) zabc y zabc

Right appending (suffixation) rules

RULE BEHAVIOR BEFORE AFTER
X:=”z”>”y”; if X replace the string “z” by the string “y” in the end of the string abcz abcy
X:=1>”y”; if X replace the last character of the string by “y” abcz abcy
X:=0>”y”; if X add the string “y” to the end of the string abcz abczy
X:=>”y”; if X add the string “y” to the end of the string (idem previous) abcz abczy
X:=0>>”y”; if X add a blank space and the string “y” to the end of the string abcz abcz y
X:=>>”y”; if X add a blank space and the string “y” to the end of the string (idem previous) abcz abcz y

Replacement (infixation) rules

RULE BEHAVIOR BEFORE AFTER
X:=”y”; if X replace the whole by “y” X y
X:=”z”:”y”; if X replace the string “z” by “y” azbc aybc
X:=[2;3]:”y”; if X replace the second to the third character by “z” abcz ayz
X:=Y; replace the feature X by the feature Y X Y

Observations

The symbol “^” can be used for negation (“^MCL” means “not MCL”)
NOU&^MCL:=”x”:”y”; (If NOU and not MCL then replace “x” by “y”)
Rules will only be applied if all conditions are true
X:=”y”<”z”; ( “zabc” changes to “yabc”, but “abc” remains “abc”)
There can be as many rules as necessary, but they will always be applied from left to right.
X:=”y”<”z”,”a”<”y”; (“zabc” > “yabc” > “aabc”)
The replacement rule applies only once the same action
X:=”a”:”b”; ( “aaa” becomes “baa” and not “bbb”)
“<<” and “>>” add blank spaces
X:=”a”<<”b” (“bc” becomes “a bc” and not “abc”)

Common mistakes

  • nou:= ”y”<”z”; (WRONG: Tags are case sensitive)
  • NNN:= ”y”<”z”; (WRONG: NNN is not defined in the tagset)
  • NOUFEM:=”y”<”z”; (WRONG: Tags must be separated by “&”)
  • NOU,FEM:=”y”<”z”; (WRONG: Tags must be separated by “&”)
  • NOU & FEM:=”y”<”z”; (WRONG: There can be no blank spaces between tags)
  • X:=1<1; (WRONG: The left side must always be a string in a left appending rule)
  • X:=1>1; (WRONG: The right side must always be a string in a right appending rule)
  • X:=1; (WRONG: Replacement rules do not allow for numbers)
  • X:=1:1; (WRONG: Replacement rules do not allow for numbers)