home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / lout2.lzh / LOUT2 / DOC / TR.LOUT / ch2.04 < prev    next >
Text File  |  1994-01-25  |  3KB  |  97 lines

  1. @Section
  2.    @Title { Precedence and associativity of symbols }
  3.    @Tag { precedence }
  4. @Begin
  5. @PP
  6. Every symbol in Lout has a {@I precedence},
  7. preceden @Index { Precedence }
  8. which is a positive whole number.  When two symbols compete for an object,
  9. the one with the higher precedence wins it.  For example,
  10. @ID @Code {
  11. "a  |  b  /  c"
  12. }
  13. is equivalent to @OneCol @Code { "{" a "|" b "}" "/" c } rather than
  14. {@OneCol @Code { a "|" "{" b "/" c "}"} }, because @Code "|" has higher
  15. precedence than @Code "/" and thus wins the {@Code b}.
  16. @PP
  17. When the two competing symbols have equal precedence, Lout applies a
  18. second rule.  Each symbol is either @I left-associative or
  19. associativity @Index { Associativity }
  20. {@I right-associative}.  The value of @OneCol @Code { a op1 b op2 c} is taken
  21. to be @OneCol @Code { "{" a op1 b "}" op2 c } if the symbols are both
  22. left-associative, and @OneCol @Code "a op1 { b op2 c }" if they are
  23. right-associative.  In cases not covered by these two rules, use braces.
  24. @PP
  25. It sometimes happens that the result is the same regardless of how the
  26. expression is grouped.  For example, @OneCol @Code { "{" a "|" b "}" "|" c }
  27. and @OneCol @Code { a "|" "{" b "|" c "}" } are always the same, for any
  28. combination of objects, gaps, and variants of {@Code "|"}.  In such cases
  29. the symbols are said to be {@I associative}, and we can confidently omit
  30. the braces.
  31. @PP
  32. User-defined symbols may be given a precedence and associativity:
  33. @ID @Code {
  34. "def @Super"
  35. "   precedence 50"
  36. "   associativity right"
  37. "   left x"
  38. "   right y"
  39. "{"
  40. "   @OneRow { | -2p @Font y ^/0.5fk x }"
  41. "}"
  42. }
  43. They come just after any @Code into clause and before any parameter
  44. definitions.  The precedence may be
  45. any whole number between 10 and 100, and if omitted is assigned the
  46. value 100.  The higher the number, the higher the precedence.  The
  47. associativity may be @Code left or {@Code right}, and if omitted
  48. defaults to {@Code right}.  Lout's symbols have the following
  49. precedences and associativities:
  50. @ID @Tab
  51.    vmargin { 0.5vx }
  52.    @Fmta { @Col @CC A ! @Col @CC B ! @Col C }
  53. {
  54. @Rowa
  55.    A { Precedence }
  56.    B { Associativity }
  57.    C { Symbols }
  58. @Rowa
  59. @Rowa
  60.    A { 5 }
  61.    B { associative }
  62.    C { @Code "/  ^/  //  ^//" }
  63. @Rowa
  64.    A { 6 }
  65.    B { associative }
  66.    C { @Code "|  ^|  ||  ^||" }
  67. @Rowa
  68.    A { 7 }
  69.    B { associative }
  70.    C { @Code "&  ^&" }
  71. @Rowa
  72.    A { 7 }
  73.    B { associative }
  74.    C { @Code "&" in the form of one or more white space characters }
  75. @Rowa
  76.    A { 10-100 }
  77.    B { @Code left or @Code right }
  78.    C { user-defined symbols }
  79. @Rowa
  80.    A { 100 }
  81.    B { @Code right }
  82.    C { @@Wide, @@High, @@Graphic, etc. }
  83. @Rowa
  84.    A { 101 }
  85.    B { - }
  86.    C { @Code "&&" }
  87. @Rowa
  88.    A { 102 }
  89.    B { associative }
  90.    C { @Code "&" in the form of 0 spaces }
  91. @Rowa
  92.    A { 103 }
  93.    B { - }
  94.    C { Body parameters and right parameters of @@Open }
  95. }
  96. @End @Section
  97.