%! %% Copyright (C) 1989, Digital Equipment Corporation %% All rights reserved. %% See the file COPYRIGHT for a full description. %% %%Title: m3tokens.txt %%Creator: Bill Kalsow %%CreationDate: Fri Oct 23 13:21:27 1987 by kalsow %%EditDate: Last modified on Fri Oct 4 18:50:20 1991 by kalsow %%EditDate: modified on Tue Jul 3 20:08:45 1990 by muller %% %% railroad diagrams for Modula-3's lexical tokens %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % railroad primitives /SCALE 7.7 def % sizing parameter #include "railroad.h" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 500 dict begin % local Modula-3 dictionary % % terminals % /zA {(A) :TERM} def /zB {(B) :TERM} def /zC {(C) :TERM} def /zD {(D) :TERM} def /zE {(E) :TERM} def /zF {(F) :TERM} def /zG {(G) :TERM} def /zH {(H) :TERM} def /zI {(I) :TERM} def /zJ {(J) :TERM} def /zK {(K) :TERM} def /zL {(L) :TERM} def /zM {(M) :TERM} def /zN {(N) :TERM} def /zO {(O) :TERM} def /zP {(P) :TERM} def /zQ {(Q) :TERM} def /zR {(R) :TERM} def /zS {(S) :TERM} def /zT {(T) :TERM} def /zU {(U) :TERM} def /zV {(V) :TERM} def /zW {(W) :TERM} def /zX {(X) :TERM} def /zY {(Y) :TERM} def /zZ {(Z) :TERM} def /za {(a) :TERM} def /zb {(b) :TERM} def /zc {(c) :TERM} def /zd {(d) :TERM} def /ze {(e) :TERM} def /zf {(f) :TERM} def /zg {(g) :TERM} def /zh {(h) :TERM} def /zi {(i) :TERM} def /zj {(j) :TERM} def /zk {(k) :TERM} def /zl {(l) :TERM} def /zm {(m) :TERM} def /zn {(n) :TERM} def /zo {(o) :TERM} def /zp {(p) :TERM} def /zq {(q) :TERM} def /zr {(r) :TERM} def /zs {(s) :TERM} def /zt {(t) :TERM} def /zu {(u) :TERM} def /zv {(v) :TERM} def /zw {(w) :TERM} def /zx {(x) :TERM} def /zy {(y) :TERM} def /zz {(z) :TERM} def /z0 {(0) :TERM} def /z1 {(1) :TERM} def /z2 {(2) :TERM} def /z3 {(3) :TERM} def /z4 {(4) :TERM} def /z5 {(5) :TERM} def /z6 {(6) :TERM} def /z7 {(7) :TERM} def /z8 {(8) :TERM} def /z9 {(9) :TERM} def /SEMI { (;) :TERM } def /DOT { (.) :TERM } def /EQ { (=) :TERM } def /COLON { (:) :TERM } def /NE { (#) :TERM } def /LPAREN { (\() :TERM } def /RPAREN { (\)) :TERM } def /BAR { (|) :TERM } def /ARROW { (^) :TERM } def /STAR { (*) :TERM } def /PLUS { (+) :TERM } def /COMMA { (,) :TERM } def /MINUS { (-) :TERM } def /SLASH { (/) :TERM } def /LT { (<) :TERM } def /LBRACK { ([) :TERM } def /RBRACK { (]) :TERM } def /LBRACE { ({) :TERM } def /RBRACE { (}) :TERM } def /GT { (>) :TERM } def /CONCAT { (&) :TERM } def /SQUOTE { (') :TERM } def /DQUOTE { (") :TERM } def /BSLASH { (\\) :TERM } def /SHRIEK { (!) :TERM } def /DOLLARS { ($) :TERM } def /PERCENT { (\045) :TERM } def /QUESTION { (?) :TERM } def /ATT { (@) :TERM } def /UNDERBAR { (_) :TERM } def /BQUOTE { (`) :TERM } def /TILDE { (~) :TERM } def /SPACE { (' ') :TERM } def /HTAB { ('\\t') :TERM } def /LFEED { ('\\n') :TERM } def /CRETURN { ('\\r') :TERM } def /FFEED { ('\\f') :TERM } def /BSPACE { ('\\b') :TERM } def /ISOChar { (any char with ISO-Latin-1 code in [160..255]) {} :NONTERM } def /Extended { (extended character) { ISOChar } :NONTERM } def /Special { (special) { CHOICE: HCHOICE: SPACE SHRIEK NE DOLLARS PERCENT CONCAT LPAREN RPAREN STAR :HCHOICE HCHOICE: PLUS COMMA MINUS DOT SLASH COLON SEMI LT EQ :HCHOICE HCHOICE: GT QUESTION ATT LBRACK RBRACK ARROW UNDERBAR BQUOTE :HCHOICE HCHOICE: LBRACE BAR RBRACE TILDE Extended :HCHOICE :CHOICE } :NONTERM } def /Space { (white space) { HCHOICE: SPACE HTAB LFEED CRETURN FFEED :HCHOICE } :NONTERM } def /OctalDigit { (octal digit) { HCHOICE: z0 z1 z2 z3 z4 z5 z6 z7 :HCHOICE } :NONTERM } def /Digit { (digit) { HCHOICE: z0 z1 z2 z3 z4 z5 z6 z7 z8 z9 :HCHOICE } :NONTERM } def /HexDigit { (hex digit) { CHOICE: Digit HCHOICE: zA zB zC zD zE zF :HCHOICE HCHOICE: za zb zc zd ze zf :HCHOICE :CHOICE } :NONTERM } def /Letter { (letter) { CHOICE: HCHOICE: zA zB zC zD zE zF zG zH zI :HCHOICE HCHOICE: zJ zK zL zM zN zO zP zQ zR :HCHOICE HCHOICE: zS zT zU zV zW zX zY zZ :HCHOICE HCHOICE: za zb zc zd ze zf zg zh zi :HCHOICE HCHOICE: zj zk zl zm zn zo zp zq zr :HCHOICE HCHOICE: zs zt zu zv zw zx zy zz :HCHOICE :CHOICE } :NONTERM } def /Character { (character) { HCHOICE: Letter Digit Special :HCHOICE } :NONTERM } def /AnyCharacter { (any character) { HCHOICE: Character Space BSLASH SQUOTE DQUOTE :HCHOICE } :NONTERM } def /Exponent { (exponent) { HCHOICE: ze zE zd zD zx zX :HCHOICE CHOICE: :EPSILON: PLUS MINUS :CHOICE LOOP: Digit :LOOP } :NONTERM } def /Number { (number) { CHOICE: SEQ: LOOP: Digit :LOOP :SEQ SEQ: LOOP: Digit :LOOP UNDERBAR LOOP: HexDigit :LOOP :SEQ SEQ: LOOP: Digit :LOOP DOT LOOP: Digit :LOOP OPT: Exponent :OPT :SEQ :CHOICE } :NONTERM } def /Escape { (escape sequence) { CHOICE: HCHOICE: SEQ: BSLASH zn :SEQ SEQ: BSLASH zt :SEQ SEQ: BSLASH zr :SEQ SEQ: BSLASH zf :SEQ :HCHOICE HCHOICE: %% SEQ: BSLASH zb :SEQ SEQ: BSLASH BSLASH :SEQ SEQ: BSLASH SQUOTE :SEQ SEQ: BSLASH DQUOTE :SEQ :HCHOICE SEQ: BSLASH OctalDigit OctalDigit OctalDigit :SEQ :CHOICE } :NONTERM } def /CharLiteral { (character literal) { SQUOTE CHOICE: Character Escape DQUOTE :CHOICE SQUOTE} :NONTERM } def /TextLiteral { (text literal) { DQUOTE OLOOP: CHOICE: Character Escape SQUOTE :CHOICE :OLOOP DQUOTE } :NONTERM } def /Operator { (operator) { CHOICE: HCHOICE: PLUS MINUS STAR SLASH DOT ARROW SEQ: COLON EQ :SEQ :HCHOICE HCHOICE: EQ NE LT SEQ: LT EQ :SEQ SEQ: GT EQ :SEQ GT :HCHOICE HCHOICE: CONCAT SEQ: LT COLON :SEQ SEQ: EQ GT :SEQ COMMA SEMI BAR :HCHOICE HCHOICE: COLON SEQ: DOT DOT :SEQ LPAREN RPAREN LBRACE RBRACE LBRACK RBRACK :HCHOICE :CHOICE } :NONTERM } def /Identifier { (identifier) { Letter OLOOP: CHOICE: Letter Digit UNDERBAR :CHOICE :OLOOP } :NONTERM } def /Comment { (comment) { } :NONTERM } def /Comment { (comment) { LPAREN STAR OLOOP: CHOICE: Comment AnyCharacter :CHOICE :OLOOP STAR RPAREN } :NONTERM } def /Pragma { (comment) { } :NONTERM } def /Pragma { (pragma) { LT STAR OLOOP: CHOICE: Pragma AnyCharacter :CHOICE :OLOOP STAR GT } :NONTERM } def /Token { (Token) { CHOICE: Identifier Operator CharLiteral TextLiteral Number Pragma Comment :CHOICE } :NONTERM } def /MaxY 7.8 inches def /MinY 0.3 inches def /MaxX 11 inches def /StartColumn { /LastY MaxY def } def /ColumnOne { /BaseX 0 def StartColumn } def /ColumnTwo { /BaseX MaxX 2 div def StartColumn } def /Landscape { 270 rotate 11 neg inches 0 translate } def /ResetGraphics { Landscape SCALE 10 div setlinewidth } def /ShowPage { showpage ResetGraphics } def /FlushPage { ShowPage ColumnOne } def /CheckBottom { LastY MinY lt { FlushPage } if } def /DoIt { % rule indent CheckBottom % rule indent 5 SCALE mul mul % rule 5*S*indent BaseX add % rule 5*S*indent+Col LastY % rule 5*S*indent+Col LastY 3 -1 roll % 5*S*indent+Col LastY rule DrawProduction % height LastY sub neg % LastY-height BOXHgt sub % LastY-height-BOXHgt /LastY exch def % } def % DoIt ResetGraphics ColumnOne LastY Identifier 6 DoIt /LastY exch def Token 1 DoIt Operator 1 DoIt LastY CharLiteral 6 DoIt /LastY exch def TextLiteral 1 DoIt Escape 1 DoIt LastY Comment 1 DoIt /LastY exch def Pragma 6 DoIt AnyCharacter 1 DoIt Character 1 DoIt Extended 1 DoIt ColumnTwo Number 1 DoIt Exponent 1 DoIt Letter 1 DoIt HexDigit 1 DoIt Digit 1 DoIt OctalDigit 1 DoIt Space 1 DoIt Special 1 DoIt FlushPage end % Modula-3 dictionary