Language "OCaml Light"

#3 Names

## Naming objects

Syntax
  VN : value-name
  ::= lowercase-ident  
 	| '(' operator-name ')'
  
  ON : operator-name ::= prefix-op | infix-op  
  
  PO : prefix-op ::= prefix-symbol // added
 
//  infix-op
//  ::= infix-symbol 
//    | '*' | '+' | '-' | '-.' | '=' | '<' | '>' | '||' | '&' | '&&' 
// 	  | '!=' | 'or' | ':=' | 'mod' 
// 	  | 'land' | 'lor' | 'lxor' | 'lsl' | 'lsr' | 'asr'  

### Infix operator precedence

Syntax
  IO : infix-op
  ::= infix-op-1 | infix-op-2 | infix-op-3 | infix-op-4
	| infix-op-5 | infix-op-6 | infix-op-7 | infix-op-8
Lexis
  IO-1 : infix-op-1
  ::= '**' operator-char* | 'lsl' | 'lsr' | 'asr'
  
  IO-2 : infix-op-2
  ::= '*'
    | '*' operator-char-not-asterisk operator-char*
    | ( '/' | '%' ) operator-char*
    | 'mod' | 'land' | 'lor' | 'lxor' 
  
  IO-3 : infix-op-3
  ::= ( '+' | '-' ) operator-char*
  
  IO-4 : infix-op-4
  ::= ( '@' | '^' ) operator-char*
  
  IO-5 : infix-op-5
  ::= ( '=' | '<' | '>' | '$' ) operator-char*
    | '|' ( operator-char-not-bar operator-char* )?
    | '||' operator-char+
    | '&' operator-char-not-ampersand operator-char*
    | '&&' operator-char+
    | '!='
  
  IO-6 : infix-op-6
  ::= '&' | '&&'
  
  IO-7 : infix-op-7
  ::= 'or' | '||'
  
  IO-8 : infix-op-8
  ::= ':='
  
Lexis
  CN :  constr-name     ::= capitalized-ident  
 
  TCN : typeconstr-name ::= lowercase-ident  
 
  FN :  field-name      ::= lowercase-ident  

  MN :  module-name     ::= capitalized-ident  


## Referring to named objects

Syntax
  VP :    value-path ::= value-name
 
  CSTR :  constr     ::= constr-name  
 
  TCSTR : typeconstr ::= typeconstr-name  
 
  F :     field      ::= field-name  


Semantics
  value-name[[ _:value-path ]] : =>ids
Rule
  value-name[[ LI ]] = \"LI\"
Rule
  value-name[[ '(' PS ')' ]] = string-append("(", \"PS\", ")")
Rule
  value-name[[ '(' IO-1 ')' ]] = string-append("(", \"IO-1\", ")")
Rule
  value-name[[ '(' IO-2 ')' ]] = string-append("(", \"IO-2\", ")")
Rule
  value-name[[ '(' IO-3 ')' ]] = string-append("(", \"IO-3\", ")")
Rule
  value-name[[ '(' IO-4 ')' ]] = string-append("(", \"IO-4\", ")")
Rule
  value-name[[ '(' IO-5 ')' ]] = string-append("(", \"IO-5\", ")")
Rule
  value-name[[ '(' IO-6 ')' ]] = string-append("(", \"IO-6\", ")")
Rule
  value-name[[ '(' IO-7 ')' ]] = string-append("(", \"IO-7\", ")")
Rule
  value-name[[ '(' IO-8 ')' ]] = string-append("(", \"IO-8\", ")")

Semantics
  constr-name[[ _:constr ]] : =>ids
Rule
  constr-name[[ CN ]] = \"CN\"

Semantics
  typeconstr-name[[ _:typeconstr ]] : =>ids
Rule
  typeconstr-name[[ TCN ]] = \"TCN\"

Semantics
  field-name[[ _:field ]] : =>ids 
Rule
  field-name[[ FN ]] = \"FN\"