|
|
1.1 root 1: Miscellaneous flex stuff. In here you'll find an out-of-date VMS makefile
2: for flex and notes someone sent me regarding converting flex to deal with
3: 8 bit characters. This stuff is provided so that ambitious folks can pick
4: it up and turn it into something viable. I'd appreciate being sent any
5: updates resulting from work on this.
6:
7: The makefile is from Fred Brehm ([email protected]); the 8 bit chars
8: from Earle Horton ([email protected]).
9:
10:
11:
12: ############################ VMS MAKEFILE ##############################
13:
14: # VMS make file for "flex" tool
15:
16: # Redefine the following for your own environment
17: BIN = tools$$exe
18: LIB = tools$$library
19: INC = tools$$include
20: MAN = tools$$manual
21: LINKFLAGS = ,$(LIB):cc/opt
22:
23: SKELETON_FILE = "DEFAULT_SKELETON_FILE=""$(LIB):FLEX.SKEL"""
24: F_SKELETON_FILE = "FAST_SKELETON_FILE=""$(LIB):FLEX.FASTSKEL"""
25:
26: CCFLAGS = VMS
27: FLEX_FLAGS = -is
28:
29: FLEXOBJS = ccl.obj dfa.obj ecs.obj main.obj misc.obj nfa.obj parse.obj \
30: scan.obj sym.obj tblcmp.obj yylex.obj
31:
32: OBJ = ccl.obj,dfa.obj,ecs.obj,main.obj,misc.obj,nfa.obj,parse.obj,\
33: scan.obj,sym.obj,tblcmp.obj,yylex.obj
34:
35: default : flex
36: install : inc lib bin man
37: inc : $(INC):flexskeldef.h $(INC):fastskeldef.h $(INC):flexskelcom.h
38: lib : $(LIB):flex.skel $(LIB):flex.fastskel
39: bin : $(BIN):flex
40: flex :== $$ $(BIN):flex
41: man : $(MAN):flex.doc
42:
43: $(INC):flexskeldef.h : flexskeldef.h
44: copy flexskeldef.h $(INC)
45: $(INC):fastskeldef.h : fastskeldef.h
46: copy fastskeldef.h $(INC)
47: $(INC):flexskelcom.h : flexskelcom.h
48: copy flexskelcom.h $(INC)
49: $(LIB):flex.skel : flex.skel
50: copy flex.skel $(LIB)
51: $(LIB):flex.fastskel : flex.fastskel
52: copy flex.fastskel $(LIB)
53: $(BIN):flex.exe : flex.exe
54: copy flex.exe $(BIN)
55: $(MAN):flex.doc : flex.doc
56: copy flex.doc $(MAN)
57:
58: flex : flex.exe
59: flex :== $$ 'f$$environment("default")'flex
60:
61: flex.exe : $(FLEXOBJS)
62: link /exe=flex $(OBJ) $(LINKFLAGS)
63:
64: parse.h : parse.c
65:
66: parse.c : parse.y
67: yacc :== $$ sys$$sysroot:[shellexe]yacc
68: yacc -d parse.y
69: copy y_tab.c parse.c
70: copy y_tab.h parse.h
71: del y_tab.h;*,y_tab.c;*
72:
73: #scan.c : scan.l
74: # flex $(FLEX_FLAGS) scan.l
75: # copy lex_yy.c scan.c
76: # del lex_yy.c;*
77: scan.c : scan.dist
78: copy scan.dist scan.c
79:
80: ccl.obj : ccl.c flexdef.h
81: cc /define=$(CCFLAGS) ccl.c
82: dfa.obj : dfa.c flexdef.h
83: cc /define=$(CCFLAGS) dfa.c
84: ecs.obj : ecs.c flexdef.h
85: cc /define=$(CCFLAGS) ecs.c
86: main.obj : main.c flexdef.h
87: cc /define=($(CCFLAGS),$(SKELETON_FILE),$(F_SKELETON_FILE)) main.c
88: misc.obj : misc.c flexdef.h
89: cc /define=$(CCFLAGS) misc.c
90: nfa.obj : nfa.c flexdef.h
91: cc /define=$(CCFLAGS) nfa.c
92: parse.obj : parse.c flexdef.h
93: cc /define=$(CCFLAGS) parse.c
94: scan.obj : scan.c parse.h flexdef.h
95: cc /define=$(CCFLAGS) scan.c
96: sym.obj : sym.c flexdef.h
97: cc /define=$(CCFLAGS) sym.c
98: tblcmp.obj : tblcmp.c flexdef.h
99: cc /define=$(CCFLAGS) tblcmp.c
100: yylex.obj : yylex.c parse.h flexdef.h
101: cc /define=$(CCFLAGS) yylex.c
102:
103: clean :
104: del flex.exe;*
105: del scan.c;*
106: del parse.c;*
107: del parse.h;*
108: del lex_yy.c;*
109: del *.obj;*
110: del flex*.tmp;*
111: del *.diff;*
112: del y_tab.*;*
113: del makefile.;*
114: purge/log
115: copy makefile.vms makefile.
116:
117: makefile : makefile.vms
118: copy makefile.vms makefile.
119:
120: test : flex
121: define tools$$lib 'f$$environment("default")'
122: flex $(FLEX_FLAGS) scan.l
123: define tools$$lib tools$$sys:[lib]
124: diff/out=flex.diff scan.dist lex_yy.c
125: type/page flex.diff
126:
127:
128:
129: ######################### Stuff for 8 Bit chars ########################
130:
131:
132: Earle Horton has made a version of flex run on the MacIntosh under MPW. Not
133: being content to scan regular ascii, he deals with all 8 bits. I also have
134: wanted to write VMS filters that recognize <CSI>, etc. so I contacted him
135: about his work. He seems to be unable to reach you directly--the rest of
136: this is his note...
137: ---------------------------Note from Earle------------------
138: >From [email protected] Fri May 27 11:33:09 1988
139: Received: from DARTVAX.DARTMOUTH.EDU by megaron.arizona.edu; Fri, 27 May 88 10:55:39 MST
140: Received: from eleazar.dartmouth.edu by dartvax.dartmouth.edu (5.59/3.4ROOT)
141: id AA17044; Fri, 27 May 88 13:53:18 EDT
142: Received: by eleazar.dartmouth.edu (5.59/3.2LEAF)
143: id AA15906; Fri, 27 May 88 13:53:04 EDT
144: Date: Fri, 27 May 88 13:53:04 EDT
145: From: [email protected] (Earle R. Horton)
146: Message-Id: <[email protected]>
147: To: eleazar!earleh, [email protected], naucse!jdc
148: Subject: Re: Flex and DEC multi-nationals, help!
149: Status: R
150:
151: John,
152:
153: I have posted the diffs to comp.sources.unix, and I think that
154: they could be used to generate a VAX C version which scans DEC
155: multi-nationals with little extra effort. I tried the address which
156: you give for Vern several times, only to have it bounce back to me for
157: some mysterious reason known only to a mail daemon somewhere. I would
158: indeed appreciate it if you could forward this to him.
159:
160: I have found that the full internal representation of all
161: characters as shorts is not necessary. Rather, it is only necessary to
162:
163: a) Prevent conversion of valid characters to negative ints. I
164: do this with a mask, defined for the Mac and UNIX as
165: "#define BYTEMASK 0xFF". Any time a char is converted to an
166: int, AND it with the mask. Then you don't have to declare
167: chars as unsigned chars, which is tiresome.
168:
169: b) The routine mkeccl() uses negation of characters for a flag
170: to determine whether they have been processed. I used a
171: debugger to estimate how many times this routine is actually
172: called when Flex scans scan.l. Based on what this looked
173: like to me, I decided that it would be appropriate to have
174: only the routine mkeccl() use an array of shorts for its
175: internal processing. When mkeccl() is called, it gets a
176: pointer to an array of shorts using alloca(), and then reads
177: the characters which it is to process into this array using
178: the method in (a). When mkeccl() is done, the shorts are put
179: back into chars, and things proceed. The internal processing
180: done by mkeccl() is the same.
181:
182: Flex compiled with these changes correctly scans all characters
183: in the Macintosh character set, to the best of my ability to test it.
184: In addition, it correctly scans chars with values > 127 on a UNIX VAX!
185: Contrary to "common knowledge", text files which exist on a UNIX
186: machine may have valid characters in the range [\0177-\0377]. An
187: example is if I want to write a program to run on a UNIX machine which
188: converts German characters to ASCII. The ess-tset (I believe that is
189: the name) can be converted to "ss" with little loss of sense in most cases.
190:
191: The only question I have about my procedure is that it looks
192: expensive to convert the ccltbl array to shorts and back every time
193: mkeccl() is called. However, the routine is not called an inordinately
194: large number of times, and this conversion is probably not more
195: expensive than a couple of calls to strcpy(), for instance. To
196: determine whether this is the most efficient method, one would have to
197: go through the effort to convert Flex to use shorts for all internal
198: representation, then profile the two methods. Not my idea of a good
199: time.
200:
201: Flex is a real nice program. I couldn't find anything else wrong
202: with it.
203:
204: Earle Horton
205:
206:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.