Sym Module
signature SYM
structure Sym :> SYM
This module provides the abstract type of Forlan symbols. (This abstract type is actually defined by the lexical analysis module, Lex, but most Forlan users will never have to directly use Lex.)
type basic = Lex.basic
val charToBasic : char -> basic
val basicToChar : basic -> char
type sym = Lex.sym
datatype top
= Basic of basic
| Compound of sym option list
val fromTop : top -> sym
val toTop : sym -> top
val inputFromLabToks : (int * Lex.tok) list -> sym * (int * Lex.tok) list
val fromString : string -> sym
val input : string -> sym
val toPP : sym -> PP.pp
val toString : sym -> string
val output : string * sym -> unit
val compare : sym Sort.total_ordering
val equal : sym * sym -> bool
val size : sym -> int
val jforlanValidate : string -> unit
val jforlanPretty : string -> unit
type basic = Lex.basic
charToBasic c
c is a digit, lowercase letter or uppercase letter, then charToBasic returns c. Otherwise, issues an error message.
basicToChar c
c.
type sym = Lex.sym
,) and angle brackets (< and >) such that:
c, [c] is a symbol;
n, and all x1 ... xn that are symbols or [,],
[<] @ x1 @ ... @ xn @ [>]is a symbol.
The concrete syntax for a symbol [c1, ..., cn] is c1 ... cn. E.g., [<, i, d, >] is written as <id>.
The type could be implemented using lists, but is actually implemented in a way that makes the construction and destruction of symbols more efficient. See fromTop and toTop.
datatype top
= Basic of basic
| Compound of sym option list
fromTop top
top. If top is BasicSymTop b, then fromTop returns [b]. Otherwise, top looks like CompoundSymTop xs, in which case the symbol returned by fromTop consists of the result of appending an initial [<], followed by the lists corresponding to xs, followed by a closing [>]. Each occurrence of NONE in xs is turned into [,]. And each occurrence of the form SOME a is turned into a.
toTop a
sym_top describing the top-level structure of a. If the only element of a is a digit or letter, then toTop returns BasicSymTop b, where b is that digit or letter. Otherwise a is the result of appending the elements of a list of lists xs, where the first and last elements of xs are [<] and [>], respectively, and each of the remaining elements are either [,] or are single symbols. In this case, toTop returns CompoundSymTop ys, where ys is the value of type sym option list corresponding to all but the first and last elements ([<] and [>]) of xs, in the following way. [,] is turned into NONE. And a symbol x is turned into SOME x.
inputFromLabToks lts
lts, returning the pair of that symbol with the rest of lts. Issues an error message if lts doesn't begin with a symbol.
fromString s
s.
input fil
fil.
toPP a
a.
toString a
a to a string.
output(fil, a)
a to the file fil.
compare(a, b)
a and b, first according to length, and then lexicographically, using the ordering in which the comma (,) comes first, followed by the digits (in ascending order), followed by the lowercase letters (in ascending order), followed by the uppercase letters (in ascending order), followed the open angle bracket (<), followed by the close angle bracket (>).
equal(a, b)
a and b are equal.
sizeSym a
a.
jforlanValidate
jforlanPretty
Forlan Version 4.15
Copyright © 2022 Alley Stoughton