· # r z n m] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class meta_key export repeat meta_notion,...

41
A U N V E R I T S I S P R E E S M I A T S N LANGUAGE IMPLEMENTATION MODEL IN TaLE Esa Järnvall and Kai Koskimies DEPARTMENT OF COMPUTER SCIENCE UNIVERSITY OF TAMPERE REPORT A-1993-1

Upload: others

Post on 24-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

A

UNV

E�

RIT

SI�

S�

PR

EE

S

MI

AT

SN

LANGUAGE IMPLEMENTATIONMODEL IN TaLE

Esa Järnvall and Kai Koskimies

DEPARTMENT OF COMPUTER SCIENCEUNIVERSITY OF TAMPERE

REPORT A-1993-1

Page 2:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

UNIVERSITY OF TAMPEREDEPARTMENT OF COMPUTER SCIENCESERIES OF PUBLICATIONS AA-1993-1, FEBRUARY1993

LANGUAGE IMPLEMENTATION MODEL IN TaLE

Esa Järnvall and Kai Koskimies

University of TampereDepartment of Computer ScienceP.O. Box 607SF-33101 Tampere, Finland

ISBN 951-44-3324-6ISSN 0783-6910

Page 3:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

� ! " # $ � % % � # � � � � � � � � & � � � � � � � � ' � � � � � � � � ( � � ) � � � ) � �

* + , - . / 0 -

� � 1 � 2 � � � � � � 1 � 3 � � 3 � � � � � 4 � � � � � � � � � � � 5 � � � 3 � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � �� � ! � � � � � � 3 � � 3 � � ) � 6 � � � � � � � � � � � � � � � � 7 8 � � � 9 � � � � � � � 3 � � � � 3 � � 3 � � 3 � 2 � � � � � � � � � � � � 4 �� � � � � � � � � 6 � � � � � � � � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � � � � � : � 3 � � � � � � � � � � � � � ) � 6 � 7 � � � �� 7 8 � � � 9 � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � � � � � � � � � 3 � � � 3 � � � � � � 6 � � � � � � ! � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � 2 � 7 8 � � � 4 � � � � � � � � � � � � � � � � � � � ) ; � � � � � � < � � � � � � � � � � � � 7 � � 6 � � � � � � � � � � 6 � � � � � � � � 6 �� � � � � � � � � 6 � � � 6 � � � � � � � � � � � � � � 3 � 6 � � � 3 � � 3 � � � � � � � 7 � � � � � � 3 � 6 � � � � � � � � � � � � � � � 3� � � � � � � � � � � � � � � 6 � � � 3 � � 3 � 2 � � � � � � � � � � � � 4 � � � � 6 � � � 6 � 3 � � � � 6 � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � 3 � � 6 � � � � � ) ; 3 � � � � � � � 6 � � � � � � � � 3 1 1 2 � 4� � � � 3 � � � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � )

= > ? @ A B C D E @ F B ?

� � 1 � 2 � � � � � � 1 � 3 � � 3 � � � � � 4 � � � � : � � � � � � � � � � � � � 3 � 6 � � � � � 3 � � � � � � � � � � 6 � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � ! � � � � � � 3 � � 3 � ) � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1 � � � � 6 �� � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � � 9 � � � � � � � � 3 � � 3 � � G 6 � � � � � 1 � � � � 6 � � � 5 � � � � � 9� � � � � � � � � � � � : � � � 3 � � � � 3 � � � � � � � � � � 6 � � 6 � � 6 � � � � � � � � � � � � � � � � � � � � � � � 3 � � 3 � 9 � � � � � � � 6 � � � � � � � � � � � 3 � � 3 � � � 6 � � � � � � � � � � � � � ) H � � � � � � � � 1 � � � � � � 3 � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 3 � � 6 � � � � � � � � � � � � � � � ) ; � � � � � � : � � � � 1 �� � 7 � � � � � I � � � J % K )

� � 1 � � � � � � � � � 6 � � � � 7 � � � � � � 3 � 3 � � 6 � � � � � � � � � � � � � 5 � � � � : � � � 6 � � � � � � � � � � � � � � � � � � � � 3 � � �� � 6 � � � � � � � � � � � � � ) � 6 � � � � � � � � 7 8 � � � 9 � � � � � � � 3 � � 3 � � � � � � � � � � � � � 7 � � � � � � � � 7 � � � 6 � � � 9� � 9 � � � � � � � � � � � 7 � � : � � � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � 3 � � 3 � � � 6 � � � � � : � � � � � � G� 6 � � � � � � � � � < � � � � � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � � � � � 7 � � � � � 6 � � � � � 3 � � � � 3 � ) � 6 � � � � � � � � 7 � � : � � � � 1 � � � 3 � � � � � 7 8 � � � 9 � � � � � � � 3 � � � � 3 � � � � � � � 2 � � � � � � � � � � � � � 4 � �� 6 � � � � 1 � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � 3 � � � � � � � 6 � � � � � : � � � � � � � 3 � � � � � � � � � � � � � � � � � � � 6 � < � � � � � 6 � � � � 6 � � � � � � 6 � � � � ) � 6 � � � � � � � � � � � � � � � � � 7 � � � � � 6 � � � � � � � � � � � � 6 � � 3 6 � � � � � � 6 � 3 6 9 � � � � � � � � � � � � 3 � � 6 � � � � � � � : � ) � 6 � 6 � � 3 � � � 6 � � � � � � � � � 3� � � � � � � � � � � � 6 � � � 6 � � 9 � � � � 7 � � � � � � � � � � � � � � � : � � 6 � � � � � � � � � � � 3 � � 3 � � � � � � � � � �� � � � : � � � � � � � � � � � 6 � � � � � � � � � � � � � � G � 6 � � � � � � � � � � � � 7 � � � � � � � � 6 � : � � � � 6 � � � � � � � � 6 � � � � 3 � � � � � 2 � � � � � � � � � 4 � 6 � � 9 � � � � 7 � � � � � � � � � � 6 � � � � � � � � � � � � � 6 � � � � 6 � � � � � � � � � �� � � � � )

L � 6 � � � � � � : � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 7 � � 6 � � � � < � � � � � � � � � � 1 � ) L �� 6 � � � 7 � � � � 6 � � � 5 � � 6 � � � 6 � � � � � � � � � � � 6 � � � � � � � � 6 � M N O P Q N P R � � � � � � � � 1 � � � � � � � 7 � � 6 �� � � � � � 6 � � � � � � � � 2 � � � � � � � � ) 3 ) � I � � � J % K 4 G � � 6 � � : � � � � � � � 6 � � 6 � : � 6 � � � 3 � � 3 � � � � � � � 7 �� � � � � � � � � � � � � � � � ) S � � � � � � 6 � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � 7 � � � � � 6 � � � � � � � � 1 � �� � � 7 � 7 � � � � � � � � � � � 3 � � 6 � ) ; � 6 � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � 6 � �� � � � 6 � � � � � � � � � � � � � � 3 � 6 � � � � � � � � 3 � � 3 � � � � � � � 7 � � � � � � 3 � � � � � � � � � � � � � � 3� � � � � � � � � � 3 � � 3 � � � � � � � � � ' � � � � � � � � � � 6 � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � ! � � � � � � 6 � � � � � � � � � � � � � � � � � � : � � 6 � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � )� � � � � 6 � � � � � � � 6 � � � 3 � � 3 � 9 � � � � � � � � � � � � � � � � � � � � � 6 � � � � � 6 � � � � � � � � � � � �

Page 4:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T � < � � � � � � � � � � � � � � � � ' � 6 � 3 � 3 � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � 3 � � � � � � � �� 6 � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � 7 � � � � � 6 � � � � � � � � U )

� 6 � � � 1 � � � � � � � � � � � � � � � � � � � 7 � � � � � 6 � � � � � � 7 8 � � � 9 � � � � � 1 1 2 � 4 � � � � 3 � � � 6 � < � �� � � � � � � I � � V J T 7 K ) � 6 � � � � � 6 � < � � � � 3 � � � � � 5 � � � � � � � � � � � 1 � � � � � � � � : � � � '

� 4 � � � : � � � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � : � 3� ) 3 ) � � � 9 � � � � � � � � � � � � 3 � � � � G

T 4 1 1 2 � 4 � � � � 3 � � 3 � � � � � 5 � � � � � : � 3 � � � � � � � � � � 7 � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � 3 � � � � 9 � 6 � � � � � � � � � � G

% 4 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � : � � � 6 � � � � � ! G

W 4 � � � � � 9 � 6 � � � � 7 � � � � � � � � � 7 � � 6 � � � 3 � � � � � � 6 � < � � � � � � � � � � � 3 � � � � : � � G

X 4 � 3 � � � � � � � 6 � < � � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � 6 � � � � � G

" 4 � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � 6 � < � � � � � � � � � � � )

H � � � � � � � � � 6 � � � � 6 � � � � � � � � � � � � � 2 � � � � � � � � � � � � � � � � � � � � � � � 6 � 7 � � � � � � � � � �� � � � � 7 8 � � � 9 � � � � � � � � � 3 � � � � I � � V J T 7 K 4 )

Y R M N Z R [ \ ] ^ _

� � � � � I � � V J T 7 K � � 7 8 � � � 9 � � � � � � � 3 � � 3 � � � � � � � � 3 6 � � 7 � � � � � � � � � � � � � � � � � � � � � � � � � � �2 � ) 3 ) I � ` � a $ K � I b � J # K � I � � � J � K � I c � J T K � I b � J T K � I ; � d J T K � 8 � � � � � � � � � � � � : 4 ) e � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � 6 � � : � � � � � � � � � � � � � � � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � � 6 � < � � � � � � � � � : � � � � � � � 7 � � 3 � � � � � � � � � � � � � � � � � � � � 7 8 � � � 9 � � � � � � � 3 � � � � 3� � 3 � � 3 � 9 � 6 � � � � � � � � � < � � � � � � � 6 � � � 1 � � � � � � � 6 � : 6 � � 6 � 6 � � � � � � � � � � � � � � � 6 � � � � � � �� � � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � � � 3 � � � � � � 3 � � 3 � ) c � � � � � � � 6 � � 3 6 � 6 � � � 1 � � � � � � � � � � � � � � � � � � � � � � � � � � � f � � � � f � � � � � � � 6 � � � � � � � � � � � � � � � � � � 6 � < � � � � � � � � � 7 � � � 6 � 9 : � � � � � � 3 � � 3 � � � � � � � � � � � � � � � � : � � � � � � � � � � � � � � � � 3 � � 3 � � � � � � � � � � � � � ' � 6 �� � � � � � � � � � � � � � � � � 7 � � � � � 3 6 � � 7 � : � � � � 7 � � 6 � � � ) H � � � � � � � � � 3 � � 7 � � �� � � � � � � � � � � � 2 � � � � � � � � 3 � � � � � 3 � � 7 � � � 4 � 7 � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � 3� 6 � � � 3 � � 3 � � � � � � � 7 � � � � � � 3 � 6 � � � � � � � � � � � � � � � 3 � � � � � � � � � 3 � � 3 � � � � � � � � �2 � � � � � � � � � � � � � � 4 )

; � � � � � � � � � < � � � � � � � � � � � � � � � � � � � � � � � � � � ' � � � 6 � � � � � � � : � 2 � � � � � � � � � � 4 � � � � 6 �� � � � � � � � � � � � � � � � � � � � � � � : � � 6 � 6 � � � 3 � � 3 � � � � � � � � � < � � � � � � ) � 6 � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � 3 � � 3 � � � � � � : � � � � � � � � � � � � � � � � � � � ) L � � � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � � 6 � < � � � 6 � � � 7 � � � � � � � � 3 � � � 2 � � 9 � 7 8 � � � 9 � � � � � � � � � � � � � 4 7 � � � � � � � � � 6 � � � � 6 � � �� � � ) L � � � � � � � � � � � � � � � � � 1 d � 1 1 � � � � � � � � � � � � � � � � 6 � � 6 � � � 7 � � � � � � � � � � I c � d a J K �

I c � J # K � � I b � � a a K ) ; � � � 6 � � � : � � � � � � � � � � � � � � � � � � � � � 6 � � � � � ! � � � � � � � � � � 3 � � 3 � 97 � � � � � � � � � � : � � � 3 � � � � � � : � � 6 � � 7 � � 9 � � � � � � � � � : 6 � � � � : � � � � � � � � � � � � 7 8 � � � 9 � � � � � � � 3 � � � � 3 � � 3 � � 3 � � � � � 6 � < � � � � : 6 � � 6 � 6 � � � � � 3 � � � � � � � � � 7 � � � � � � 3 � 6 � � � � � � � � 9 � � � � � � � � � � � � � � � ) ; � � 3 � � 9 � � � � � � � � � � � � 1 1 2 � 4 � � � � � � � � � � � � � � � � 6 � < � � � �� � � � � � � I � � � J # K G � 6 � � � � � 6 � < � � 6 � � 7 � � � � � � � � 3 � � � � � I � � V J T 7 K � � � � 6 � � � � � � 7 � � � � � �� � : � � � � � � )

L � � 6 � � � 7 � � � � 6 � � � 5 � � 6 � � : � � � � � � � � � � � f � � � � 9 � � � � f � � � � � � � � � � � � � 6 � � 6 � � f � � � � � � � 9 � � � � f � � � � � � � � � � � G � ) � ) : � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 6 � � � 3 � � 3 �� � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 6 � � � 3 � � � � � � � � � � � 6 � � 3 6 � 6 � � � � � � � � � )H � � 6 � � � � � ! � � � � � � � 2 � ) 3 ) e � I S � 3 J # K 4 � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � )

U g h i j k l m n h o p h o h j k q r s p h l s t k n t o n l r k s t i s m i t k n l h u t k s m i t k t q r l m l v w x s p h y l h o m k s o j n y i h l t n n m s m j k t ql h u t k s m i t s s o m z y s h l x j o t k j k s h o u m k t q { s p h i q t l l h l u t r z h i j u h m k s h o n h | h k n h k s m k t } t r s p t s m l t l l y u h n s j z hi j k s o j q q h n z r s p h y l h o v

Page 5:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

%� 6 � � � � � � � � 3 � � 5 � � � � � � � � : � ) L � 6 � � � � � � : � 3 � � � � � � : � � � � � � � 6 � 7 � � � � � � � � � � �� � � � � � � � � � � � � � 3 � � � � � 5 � � � � � � � 6 � � � � � � I � � V J T 7 K ) 1 � � � � � � � � � � � � � � � � � � � � � �� ! � � � � � � � � � 6 � � � � � � � � � ' L � � � � � � % : � � � � � � � � � � � � � 9 � � � � � � � � � � � � � � � � � � 3 � � � � � � � 6 �� ! � � � � � � 3 6 � � � � � ! � G � 6 � � � � � � � � � � � � � � � � � � 3 3 � � � � � � � � � 7 � � � � � � � 3 � � � � � � � � � f � 9� � < � � � � � f � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � 3 � � � � � � � 6 � � � � � 7 � � � � 6 � � � � � � � � 6 � � � � � '� 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � 9 � 6 � � � � � 7 � � � � � � � � : � 3 � � � � ) L � � � � � � W : � � 6 � : 6 � : � 6 � � � � � � � 7 � � ! � � � : � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � : � � � � � � � � � � � � � � � � � ) L � � � � � � X : � � � � � � � � � ! � � � � � � � � � � � 3 � � � � � � � � � � � 3 � � � 7 8 � � � � � � � 7 8 � � � 7 � � � � � � � � � � 3 � 6 � � � � � � � � � � � 6 � � � � 7 8 � � � � � � � � � � � � � 3 � � � � � �� � 1 1 2 � 4 � � � � 3 � � � � � � � � ) � 6 � � � � � 6 � < � � � � � � � � � � � � � � 7 � � � � � � � � 3 : 6 � � 6 � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) ; � � � � � � � � � � � � � � � � � � � � � � � � � 6 � < � � � � � � � � � � � � � 3 � � � : � � 6� 6 � � � � � � � � � � � � " ) H � � � � � � � : � � 6 � � � � � � � � � � � � � � 3 � � � � � : � � )

H � � � � � � � � 6 � � � 6 � � � � � � � � � � � � � : � � 6 � 7 8 � � � 9 � � � � � � � 3 � � � � 3 ) H � � � � � � � � � � I S � � a a K �7 � � � 6 � � � � 6 � < � � � � � � � : � � � � � � � � 6 � � � � � � � � � � � � 3 � � 3 � ) � ! � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � " � � 6 � � � � � � � � � � � � � � � 6 � � � 7 � � � � � � � � � � � � 3 6 � � � � � � � � � � � � � � � � � � )

~ � � � � � � F E � B C � �

� � � R � Z � ] ^ � R O Z R [ � ] O Z R � Z � � ^ R R P ^ N � � N ^ �

� � � � : � � � � � � � � 7 8 � � � 9 � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � 2 � � 6 � � � � � �� � � � � � � 3 � � 3 � � 4 � � � � 7 � � � � : � � � � � � � � � � � � � � � ) � 6 � � � � � � 7 � � � � � � � � 3 � � � 6 � � � � � � �� � � � � � � � � � 7 � � 3 � � 3 � � � � � � � � � � � � � � � � � � � 6 � 7 � � � � � � � � 7 � � � � � 6 � � � � 6 � � � 2 � ) � ) � � � 6� � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � 7 � � � � � � � � 6 � � � � � � � � � 4 ) � � � � < � � � � � � � � � � � � � � 6 � � � � � 7 � � � � � � � � � : � � � � � 3 � � � � ' � 6 � � � � 6 � � 6 � � � � � � � � � � � 7 � � � � � � � 2 � �� � 6 � � � � � � � � � � � � � � � � � � � � � 4 � � � 6 � � � � 6 � � 6 � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � 2 � �� � 7 � � � � � � � 4 ) & � � � � : � 3 � 6 � � � � � � � � 3 � � � � � 1 � � : � � � � � � 6 � � � � � � ] O � R � Z Q N M � � � � � � � � � � 6 �� � � � � � Z ^ Q � Z Q ^ N M � � � � � � � � ) � 6 � � � � � � � � 7 8 � � � 9 � � � � � � � � � � � � � � � � ! � 9 � � � 3 � � � � � 6 � �7 � � � � � 7 � � � � � � � 6 � � � � � � � � � � � � � � � : � � 6 � � � � ! � � � � � � � 7 8 � � � 9 � � � � � � � � 2 � � � � � � � � � : � � � �

I � � � J � K 4 ) � � � � � � � 6 � � � � � � � � � 7 � � : � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ! � � � � � � � : �3 � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � ; � � � T � ) ) ) � � 2 � ) � ) � � � � � � � � � �� � 7 � � � � � � � � � ; 4 � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � ; 9 � � T ) ) ) � 2 � ) � ) � �� � � � � � � � � � � � � � � � � � ; 4 )

� � N � � M R �

� � � � � � � & b 3 � � � � � � � � � � : � ' ; 9 � � � ; 9 � � � 9 � 7 � � 9 � � ) � 6 � � � � � � � e e 9 � & b � 7 � � � � � � ;6 � � � : � � � � � � � � � � � � � � � � � � � 6 � � � � � � 7 � � � � � � � � � 6 � � � � ; � � � T ) � 6 � 3 � � � � � � 7 � � � � � � � � � � � � � � � � � � e e 9 � & b � � 7 � � � � � � � 3 � � � � � � � � � � � � � � � ' ; � � � � � � 9 �� � � 9 � � � 9 � 7 ) ` � � � � 6 � � � � � � � � � � � � � 6 � � � � ; 9 � � � � � � � � � � � � 3 � � � � � � 7 �� � � � � � � � � : � : � � � : 6 � � � � : � 3 � 6 � 3 � � � � � � � e e 9 � & b 2 � � � � � � 3 � 6 � � ; 6 � � � � � 6 � � � � � � � � � � � 4 ' � � � � � � � � � � � � 7 � � � � � � � � � � � 2 � � ; � � � � 7 � � � � � 4 � � � � � � � � � � � � � � � � � 2 ;� � � � � � � � � � � � 3 � � 4 ) � 6 � � 6 � � � � � � � � � � � � 7 � � � � � 7 � � � � � � � � � � � � 6 � � � 6 � � � � � � � � : � � � � �� ! � � � � � � 2 ; � � ; 9 � 4 ) 2 � � � � ! � � � � � 4

& � � � � � � � : � � � � � � � 7 8 � � � 9 � � � � � � � � � ! � 9 � � � 3 � � � � 2 e e 9 � & b 4 � � � " 9 � � � � � 2 � � � � � � � � c � � 4 �: 6 � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � �� � � � 6 � � � � � � � � � � � � � � � 7 � � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � � � � ` 9 � : 2 `

∈� � :

∈2 �

∪�

∪� 4 � 4 �

c � � � 6 � � � � � � 6 � � � � 6 � � � � � � � � � � � 6 � � � � ; � 2 ;∈

� � ∈

2 �∪

� 4 4 � � �∈

2 � 4 � � � 6 � � � � �� � � 7 � � G � � � 6 � 6 � � '

� 4 2 �∩

� �∅

4 2 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 9 � � � � � � � � 3 4 GT 4 ;

∈� � � � � � � � 2 ; 9 � : 4

∈� � � � � � � : G 2 2 ; 9 � : 4

∈� � 2 ; 9 � : � 4

∈� 4 � � � � � � � : � : �

2 � 6 � � � � � ! � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � 4 G% 4 ; � � ; 6 � � � � � � ;

∈� 2 � � � � � � � 6 � � � � 6 � � � 4 G

W 4 � � � � � 6 ;∈

2 �∪

� 4 ' � � � � � ; � � � � : � : 6 � � � � �∈

2 �∪

�∪

� 4 � � :∈

� � 2 �� � � � � � � � � � � � � � � 4 )

Page 6:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

W

c � � : � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � : � ' � ; � � � � : � � � � � � � 6 � 2 ; 9 � : 4∈

� � 2 : � � 2 ; � 4

∈c 4 � : 6 � � ; �

∈2 �

∪� 4 � � � � � � :

∈2 �

∪�

∪� 4 � ) H � � � � � 6 � � � � � � � � � � � d �

� � � � � � � � � � � � � � � � � d � � � � � � � ! � � � � � � � � � � � � � � � � � � � � � � � � � d ) � 6 � � � 3 � � 3 � 3 � � � � � 7 �� e e 9 � & b b � 2 � � � � � � � � c � � 4 � � 1 2 b 4 � � :

∈� � � � � � � : � ) L � 6 � � � � � � : � 3 � � � � � � � : � � � � � � � � 6 � � �

� � 3 � � 3 � � � 3 � � � � � 7 � � e e 9 � & b ); 7 � � � : � 6 � � � 3 � � � � � 5 � � 6 � � � � � � � � 3 � � � � I � � V J T 7 K 7 � � � � � : � 3 � � � � � � � � � 6 � � � � � � � � ) � ) � � � � � � � � � � 6 � � � � ; � � � � ) ; � � 6 � � 3 6 � 6 � � 7 � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� 6 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � � 3 6 � � � � � � � � � 6 � 2 � � � � � � � � ; � � � � � � � ; � � 4 �� 6 � � � � � � � � � � 7 � � � � � � � � � � 3 � � � � 6 � 7 � � � � � � � � � � 3 � < � � � � � � � 9 � 6 � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � 3 � � � � )

� R Z N ] � � R � Z � [ � ^ R � Z R [ � N ^ � � O P

e � � � � � � � � � � � � � � � e e 9 � & b � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � : � '

� 4 � 6 � � � � � ! � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � 6 � N � Z Q N M � � � � � � � � � � � � G � �; � � 6 � � 6 � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � 6 � � � � � � � � � � � � � � ; G

T 4 � � � � � � � � � 6 � � � � � � � � � � � � � � � 6 � � � ! � � � � � � � � � � � � � � � 7 � 3 � � � � � � � � � � � � � G

% 4 � � � � � � � � � 6 � � � � � � � � 9 � � � � � � � � � � � � � � � � � 6 � � � � � � 3 � � 3 � 9 � � � � � � � � � � � � �� � � � � 3 3 � � � � � � � � � � � � � � � � � � � � � � � )

� 6 � � 7 8 � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � 7 � � � � 7 � � � � � � � � � � 3 � 6 � � � � � � � � � � � � � � � 6 �� � � � � � � 7 � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � ) � 6 � � � � � � � � � � � � � � 7 8 � � � � � � � � � � � � � � � � � � � � � : � ) 1 � � � � 2 � 4 7 � � 6 � � � � � ! � � � � � � � � � � � � � 7 � � 6 � e e 9 � & b ) � 6 � � 7 8 � � � � � � � � � � � � � � � � � � e d 2 � � 2 � 4 4 � : 6 � � e d � � � � � � � � '

e d 2 � 4 � � � 2 � � � � 7 8 � � � 4 � � � � � � 2 � 4∈

� Ge d 2 � 4 � e d 2 � � 4 � � � � � � 2 � 4

∈� � � � � � � 6 � � � 7 � � � � � � G

e d 2 � 4 � � � � 2 � � � � � � 2 � � � 2 � 4 4 � e d 2 � U 4 � ) ) ) � e d 2 �   4 4 � � � � � � 2 � 4∈

� � � U � ) ) ) � �   � � � 6 �� � 7 � � � � � � � )

c � � � � � 2 � 4 3 � � � � � 6 � � � 7 � � � � � � � � � � � : � � 6 � 6 � � � � � � � � � � � � � � � � � � � 2 ; 4 3 � � � � � 6 � � � � � � � � � � � �� � � � � � � 3 � � � � � � � � � ; � � � � � 2 � � � U � ) ) ) � �   4 3 � � � � � � � � � � � � � � � � � � � : � � 6 � � � � 7 � � � � � � � � 3 � � � 7 8 � � � � � U � ) ) ) � �   ) L � � 6 � : � � � � 6 � � 7 8 � � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � � � � 6 �� � � � ! � � � � � ! � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � 2 � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � 4 ¡ )

H � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � 6 � �7 � � � � � 3 � 5 � � � 6 � � � � � � � 3 � � ' � 6 � � � � � � � � � 3 � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� 6 � � � 7 � � � � � � � � � � ) � � � � : � : � � � � � � � � 7 � � � � 6 � � � � � � � � � � � � � � 3 � � � � � � � � � � 6 � � � � � � � � � � � � 7 � � � � � � � � � � � � � 5 � : � � 7 � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) c � � � : � � � � � � � � 6 � � � � � 6 � � � � � � � � � � � 6 � � � � � 7 8 � � � : 6 � � � � � � � � � � � � � � � �� � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) H � � � � � � 6 � � � 7 8 � � � � 6 � � R Z N ] � � R � Z � � � 6 � � � � � � � � � � � � � � : � 3 � 6 � � � � � � � � � � e e � � � � � � � 3 � 2 � � � � ) 3 ) I & � a J K 4 G � 6 � � � � � � � � � 6 �� � � � � 7 8 � � � � � � � � � � � � R Z N � M N � � )

� 6 � � � � � � 7 8 � � � � � � � � � � � � � � � : � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � < � � � � � � � � � � 3 � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 6 � 7 � � � � � � � � � � � � ! � ) L � � � � � � � � � � 6 �� � � � � 7 8 � � � 6 � � � 6 � � 7 � � � � � � � � � � � � �

look_ahead�match

� � make

)look_ahead

� � � � � � � � � � � � � � � � � � 3 � � � � � � � 6 � � � � � � � � 3 � � � � � � � � � � � � � � � 7 � � � � � 3 � ! � � � 6 � � � � � ) � 6 � �� � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 3 � : 6 � � 6 � � � � � � � � � � � � 2 � � � 6 � � 3 6 � � � � � � � X : �

¡ g h } m q q y l h s p h s h o u l ¢ i j k i h | s y t q ¢ t k n ¢ l s o y i s y o t q ¢ x o h h q r x j o i q t l l h l t k n u h s t j z £ h i s l t l } h q q ¤ m x tk j k s h o u m k t q m l i j k i h | s y t q ¥ l s o y i s y o t q ¦ { s p h i j o o h l | j k n m k § t i s y t q i q t l l j o u h s t j z £ h i s m l q m   h } m l h i t q q h ni j k i h | s y t q ¥ l s o y i s y o t q ¦ v

Page 7:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

X: � � � � � � ! � 6 � � � < � � � � � � � 7 � � 4 ) & � � � � �

make� � � 6 � � � � � � � � � � � � � � � � � � � � � � 3 � � :

� � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � 2 � � � � � 3 � 6 � � � � � � � � 3 � � � � � � � � 6 � � � � � : 6 � � � � � 3 � � 4 )

� � � � � � � � 6 � � � � � 3 � � � 6 �match

� � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � e e 9 � & b � � � � G � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � 6 � � � � � � � � � � ) c � � � � : 6 � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ! � � � 6 � � � � � � � ! � � � � � � � � � 6 � � � � � � � � � 6 � � � � � � � � � � 6 � �� 6 � � � 7 � � � � � � � � � � 7 � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � 6 � � � � � � � � � � ) � 6 � � � � � � � � �

match� � � � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � � � � � 6 � 7 � � � �

� � � 6 � � � � � � � � � ) � 6 � � � � � � � � � � � � � � � 7 � � 6 �make

9 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � 6 � � � � � � � � � � � 7 8 � � � )

L � 6 � � � � � � � � � � � � � � � � � � � � � � � � 6 �make

9 � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � 3 � 6 �� � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � ) � 6 � � � � � � � � � : � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � � 6 �� � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � 6 � � : � � � � � � 5 � � 6 � : 6 � � � � � � �� � � � � � � 3 � � � 6 � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 8 � � � � � � � � � � � � � ) L � 6 �� � � � � � � � � � � � � � � � � � � � � � � � 6 �

make9 � � � � � � � � � � � � 6 �

match9 � � � � � � � � � � � � � 6 � � � � �

� � � � � 7 8 � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � 3 � � �make

9 � � � � � � G � 6 � � � � � � � � � � � � 3 � � � � � � � � � � �� � � � � 6 � � � � � � 7 8 � � � � � � � � � � � � � � � � � � � � � ) � 6 � � � � � � � � � � � � � � � � � 7 8 � � � 9 � � � � � � � � � � � �� � � � � � � � � & � 3 ) � )

Cricket Software␣␣

arrows and lines:boxes:

¨ © ª « ¬ ) � � � � � � � � � � � � � � � � � � � 6 � 7 � � � � � � � � � � � � � � � � � � � � ) � � � � � � � � � � � � � � � � � � � � � � � � ; )

Page 8:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

"� 6 � � � � 9 � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 �� � � � � � � � � � � � � � � � � � G � 6 � � � � � � � � � 7 � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) � 6 � � � � � � � � � � � � 3 � 6 � � � � � � � 6 � � � � � � � � � � � � � � � � 6 � � � � 6 � � � � ' � � � � � � � � � � � � � � � � � � ! � � � � � 6 � � � � � 7 � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 6 �� � � � 7 � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � 3 2 � ) � ) � � 3 � � � � ! � � � � � � � 4 � � � 6 � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � : � � 6 � � 6 � � � � � � � � � � � � ) c � � � � � � 6 f � � � � � � � f� � � � � � 7 � � : � � 6 � � 6 � � � � � 3 � � � � � � � � 7 � � � � � � � � � 6 � � � � � � � � � � � � � � � � 6 � � 6 � � � 6 �� � � � � � � � � � � ) L 3 � � � � � 6 � � � � � � � � � � � � 7 8 � � � : � � � � � � � � � 6 � � � � � � 6 � � � � � � � � � � � � � � � � � � � � : � � 6� 6 � � � � � � � � � � � � � � � � � � � � � � � � � : � � � 7 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � 6 � � � � � 3� � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � ) c � � � � � : � � � 7 � � � � � � � � � � � � � � 6 � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � 7 � � � 6 � � : � � � � � � � � 6 � � � � � 9 � � � � � � � � � � � � � � � � � � 3 � � � 6 � � � � � � � � � 7 � � � � � )

� � 7 � � 7 � � � � � � � � � � � � � � � � � � � � � � � � 7 8 � � � � � � � � � � : � 6 � � � � � � 3 � � � 7 � � � � � � 6 � � � � � � � � 3 � � � � � � � ) L � � � � � � � � � � � � : : 6 � � 6 � � � � � � � � � � � � � 7 8 � � � � � � � 7 � � � � � � � � � � � 6 � � � � � � � � � � 6� � � � � � � � 7 � � ) L � � � � � � � 6 � � � � � � 7 8 � � � � � � � � � : : 6 � � 6 � � 6 � � � � � � � � 3 � � � � � � � � � � � � � � � 6 � � � � � � � � � 3 � � � � � � � � 6 � � 3 6 : 6 � � 6 � � � � � � � � � � � � � 7 8 � � � ) ; � � � 6 � � � � � � � � � � � � � �7 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � : � � � 6 � � � � � � � � � � � � )

; � � � � � � � � 7 � � � � 7 � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � 2 � � � : � � � � � � � � � � 3 � � � � � � � � � � 4 � 6 � � � � � � � � � � � � � 6 � � � � � � � � � 3 ) � � � � � � � � � � � � � 7 � � : � � � 7 � � 6 � � � � : 6 � � 6 � �� � 7 8 � � � � � 7 � � � � � � � � 3 � � � � � � � � 3 � 6 � � � � � � � � � � : � � � � � � � � � 7 � � � � � � 6 � � � � � � � � 3 � � � � � � 6 � � 3 � � � � 7 � � � � � � � � 3 � � � � � � 6 � ) H � : � � � � � � � � � � 6 � � � � � � � � � � � � � � � G � � � � � 6 � � � � � � � � � � � � � � 6 � � � � � � � � � � 7 � � � � � � � � : � � � � � � � � � � � 3 � � � � )

� 6 � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � : � � 6 � � � � � � 7 8 � � � � � 7 � � � � � � � � � � � � � � � � �� � � � � 7 8 � � � � � � � G � � � � 6 � � � � � 6 � � � � � � � � � � 7 8 � � � � � � � � � 6 � � � � � � � � � 7 � � � � � 6 � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � � � 2 � � � � � 4 � 6 � � 6 � � � � 7 � � � � � � � � � � � � 6 � � � � � � �� 6 � � � � � � � � � � 7 � � ) H � � � � � 6 � � � � � � � � � � � � 6 � � � � � � � : � � 6

starter�

struct) L

� � � � � � � � � � � � � � � 3eps

� � � � � � � : 6 � � 6 � � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � 3 � � � � � � � � � � � � ! � � � � � � 7 � � �

eps_struct3 � � � � � 6 � � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � � �

� 6 � � 3 6 : 6 � � 6 � 6 � � � � � � � � � � � � � � � � � � � � 7 � � )

� � N � � M R ­

� � � � � � 6 � � � � � � : � 3 e e 9 � & b '

� 9 � � f ) f ; � & � b� 9 � f 7 � 3 � f f � f & 9 � � b � � � � � � � ; b 9 � f � � � � f� 9 � f � � � f � � 9 � ) ) ) � � � � � � � � � � � � � � � � ) ) )� 9 �

� 6 � � � � � � � � � � � � � � � � � � � � � � � ; � ) � 6 � � 3 � � � � : � � � 3 � � � � � � � � � 6 � � � � � � : � 3� � � � � 7 8 � � � � � � � � � � � � � 7 � � � � � � � ) � � � 6 � � � � � � � 7 � � � � � � � � 7 8 � � � )

� � �eps/eps_struct starter/struct starter/struct starter/struct starter/struct

� � ® 9 f 7 � 3 � f ® �� � ® 9 f 7 � 3 � f ® � � � � ® � f 7 � 3 � f ® � f � � � f ® � f � � � � f ® b � ® &� � ® 9 f � � � f ® �� � � � ® �; � ® 9 f � � � � f ® b � ® && � ® 9 � ® &b � ® 9 f � � � � f ® b� � ® 9 � ® � f 7 � 3 � f � ® 9 f 7 � 3 � f ® f 7 � 3 � ff � f � ® 9 f � f ® f � ff � � � f � ® 9 f � � � f ® f � � � ff � � � � f � ® 9 f � � � � f ® f � � � � f

Page 9:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

$f ) f � ® 9 f ) f ® f ) f

2 � � � � ! � � � � � 4

¯ � � M R � R O Z N Z � ] O ] � � R Z N � M N � � R �

; � � � � � 3 � 6 � � � 6 � � � � � � � � � � � 6 � � � 7 � � � � � � � � � � � � 6 �match

� � � � � � � � 7 � � � � � � � � � � � �� � � � � : � ' � � � � � � � � � � � 6 � � � � � � � � � � � 6 � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � : 6 � � �starter

� � � � � 7 8 � � � � � � � � � � : 6 � � � �look_ahead

� � � � � � � � � � � � � ) L � � � � � � � � � � � 6 �� � � � � 7 8 � � � � � � � � � � 6 � � � � � � � � � � � � � ' f ; � � � � � � � � 3 � ! � � � 6 � � � � � ° f L � � � � � � � � � � � � � 7 � �eps

� � � � � � � 6 �eps_struct

� � � � � 7 8 � � � � � � � � � ) L � � � � � � � � � � � � � eps

� � � � � � � � � � � � � � � � 3 � � � 3 � � � ) L � � 6 � � � � � � � � � � � � � 6 � � � � � � � � 3

struct� � � � � 7 8 � � � � � � � � � � � � � � � � )

� 6 � � � � 6 � � � 6 � 3 6 � � � � � � � � � � 6 � : � �look_ahead

� � � � � � � � � � � � � � � � � ' � � � � � � � � � �� � 3 � � 3 � � � � � � � � � � � � � � : 6 � � � � � � � � � � � � � � � � � � � 3 � 6 � � � 6 � � � � � � � � � � � � � � � 3 � ! � � � 6 �� � � � ) L � � � � � � � � � : � : � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � 6 � � � � � � � � 3 � � ) � � � : : �3 � � � � � � � � � � � � � � � � � � � � � � : 6 � � 6 � � � � � � � � � � � � � � � � 5 � � 6 � : 6 � � � � � � � � � � � � � � � 6 � �� � � � � � � � � � � � � � � � � � � � � � � � ) L � � � � � � � � 6 � � � 3 � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � )� 6 � � � � � � � � � � � � � � � � � � � � � � � � � : � � � � � � � � 7 � � � � � � � � � � � � � � � 7 � � � � � � � � 3 � � � � � � � � � �� ! � � � � � � � � � � 2 � � � 7 � � � : 4 )

H � � � � � � � � 6 � � � 6 � � � � � � � � � � � � � � 6 � � � � � : 6 � � 6 3 � � � � � � � 6 � � � 4 � 6 � � � � � � � � � � 7 8 � � � � � � � � � � � � � � : � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 2 : � � 6 � 6 � � ! � � � � � � � � � � � � � � � � � � � � X 4 � T 4 � � � � � � � � � � � 6 � � � � � � � � � � 7 8 � � � � � � � � � � � � � � � � � : 6 � 7 � � 3 � � 7 8 � � � � � � � � � � �look_ahead,

% 4 � � � 6 � � � � � : � � � � : � � � � � � 7 8 � � � � � �starter

� � � � � � � � � � � � � � � � � 6 � 6 � �� � � � � : � � � � � � � � ! � � � 6 � � � 6 � � � 6 � � 6 � � � 3 � � � � ! � � � � � � � � � � W 4 � 6 � � � � � � : � � 6 �� � � : � � � � � � 7 8 � � �

starter� � � ! � � � � 7 � � � � � 6 � � � � � � : � � 6 � � � � � � � � � � 7 8 � � �

starter)

` � � � � 6 � �match

� look_ahead

� 6 � � � � � � � � � � � � � � � � � � � � 7 � � � : � � � � � � � � screen

)

� 6 � � � � � � � � � � � � � � � � � � � � � � � � � � �META_NOTION

� � � 3 � � � � � � � � � � � � � � � � � : � '

deferred class META_NOTION export make, look_ahead, match, eps, eps_struct, starter_list inherit SOURCE; EXCEPTIONS feature starter_list: SLIST[START_ITEM]; eps: BOOLEAN; eps_struct: META_NOTION;

merge(other: META_NOTION) is local sl: SLIST; do sl.Clone(other.starter_list); from sl.start until sl.offright loop starter_list.add(sl.item); sl.forth end; if other.eps then if eps then raise("Grammar error") else set_eps(other.eps_struct) end end end;

Page 10:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

a

augment(other: META_NOTION) is local it: START_ITEM do from other.starter_list.start until other.starter_list.offright loop it.Clone(other.starter_list.item); it.set_struct(Current); starter_list.add(it); other.starter_list.forth end end;

add_starter(sta: META_NOTION) is local it: START_ITEM do it.Create(sta, Current); starter_list.add(si); end;

set_eps(m: META_NOTION) is do eps:= true; eps_struct:= m end;

make: NOTION is deferred end;

screen: META_NOTION is do from starter_list.start until starter_list.offright or else not Result.Void loop if starter_list.item.starter.look_ahead then Result:= starter_list.item.struct end; starter_list.forth end; end;

look_ahead: BOOLEAN is local temp: NOTION; failure: BOOLEAN; do if failure then Result:= false else if eps then raise("Grammar error") else scan.mark; temp:= make; scan.resume; Result:= true end end rescue if is_programmer_exception("Syntax error") then failure:= true; retry end end;

Page 11:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

J

match: META_NOTION is do Result:= screen; if Result.Void and then eps then Result:= eps_struct elsif Result.Void then raise("Syntax error") end; end; end -- META_NOTION

� 6 � � � � � [ R � R ^ ^ R [ � � � � � � � � � � 3 � 6 � � � � � � � � � � � � � � � � � � � � � � 2 � � 6 � � � � � � � � �make

4 � � 7 � � � � � � � � � � � � � � � � � � � � � � ) � 6 � � � � � � � � � � 6 � � � � � � � � �

merge�

augment: � � � 7 �

� ! � � � � � � � � � ) c � �SOURCE

� � � � � � � � � � � � � 3 � 6 � 3 � � 7 � � � � � � � 6 � � � � 7 8 � � � � � � � � scan

G � � � � � � � � 6 � � � � � � 7 � � � 7 � � � � � 3 � � � � � � ] O � R � Q O � Z � ] O �

SOURCE� � � � � � 3 � 6 � 3 � � 7 � � � 7 8 � � � : 6 �

� � � � � � � � 6 � � � � � � � � � � � � � � � 3 � 6 � � � 7 8 � � � : 6 � � � � � � � � � � 6 � � � � � � )scan

� � � � � � � � � � �� � � � � � � � � � 7 � � 6 � � � 7 � � � � � � � � �

META_NOTIONG : � : � � � � � � � � � 6 � � � � � � � )

EXCEPTIONS� � �

� � � � � � � � 7 � � � � � � � � � � � � 3 � ! � � � � � � 6 � � � 3 � � � � � � � 2 � ) 3 )raise

� � � � � � 3 � � ! � � � � � � � is_programmer_exception

� � � 6 � � � � 3 � 6 � � � � � � � 6 � � � � � � ! � � � � � � 4 )NOTION

� � � 6 � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � )

Void� � � 3 � � � � � � � � � � � � � � 3 � � � � � � � 6 � � 7 8 � � �

� � � � � � � � � � � � � � � � � � � � � � )

L look_ahead

� � 6 � 7 � � � � � � � � 3 � � � � � � � � � 7 � � : � � � � � � � � � � �scan

'mark

� � � � � � 6 � � � � �� � � � � � � � � � � � � � � � � �

resume� � � � � 6 � � � � � � � � 6 � 3 � � � 6 � � � � � � � � � 6 � � � � � � � � � �

� � � � � 3 � � � 6 � � � � � � � � � � ) H � � � � � � � � 6 � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � 6 �� � � � � � � 3 7 � 3 � � � � � � � : � 3 � � � � � � � 3 � � � 6 � � � � � � � � � � ) ; � � � � 6 � � � � � � � � � � � � 6 � � 7 � � � � � � � � 6 �

make� � � � � � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � � � � 6 � � � � � � � � 3 � � � � � � � ) L � � 6 � �

� � � � � � � � � � � � � � � ! � � � � � � : � � � 7 � � � � � 2 : � � 6 � make

4 � � � � � � � � � � � � � � � � � 6 � � � � � � � � �: 6 � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � ) c � � �look_ahead

� � � � � � � � � � � � � � � � � � � )

� � � � � � � � � � � � � � � � � � � � 7 � � � � � �SLIST.

� 6 � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � 3 � � � 7 � �� � � � �

LINKED_LIST[START_ITEM]� : � � 6 � 6 � � � � � � � � � � � �

start2 � � � � � � � � � � 6 � 7 � 3 � � 3 � �

� 6 � � � � � 4 �i tem

2 � 6 � � � � � � � � � � � � 6 � � � � � � � � � � � � 4 �forth

2 � � � � � 6 � � � � � � � : � 4 � � offright

2 � � � 6 � � � � � � � � � 6 � � 3 6 � � ° 4 ) L � � � � � �SLIST

6 � � � � � � � � � add

� 6 � � � � � � � � � : � � � � � � � � � � � 3 6 � � � � � � � � 6 � � � � � G � 6 � � � � � � � � � � � � � � � � � � � � 6 � � < � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � )

LINKED_LIST� � � 3 � � � � � � � � � � � � � � � � � 5 � : � � 6 � 6 � � � � � � � � � � G � � 6 � �

� � � �START_ITEM

� � 3 � � � � � � � � � '

class START_ITEM export starter, struct, set_struct feature starter: META_NOTION; struct: META_NOTION; set_struct(str: META_NOTION) is do struct:= str end; Create(sta,str: META_NOTION) is do starter:= sta; struct:= stu; end end -- START_ITEM

� 6 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 2 � ) � ) � � � 7 � � � � � � �META_NOTION

4 � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � �

make� � � � � � 2 � � � � 6 � � � � � � � � � � � � � � 6 � � � � � � � � � � � 4 � �

� � � � � 9 � � � � � � � � � 9 � 6 � � � � � � � � � � � � � � � � 6 �look_ahead

� � � � � � ) 2 ; � � � � � � � � 6 � � � � � � �� � � � � � � � � � � � � �

look_ahead3 � � � 7 �

META_NOTION: � � � 7 � � � � � � � � � f � � � f � � � � � � � � �

� � � � � � � � : � � � � � � � � � � � 3 � � � � ) 4

Page 12:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� #

� R Z N � M N � � � ] ^ _ R ± \ ] ^ [ �

� � � � � � � : � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � 6 � � � : � � 7 � � � 6 � � � � � � 7 8 � � � � � � � � � : � � � � 7 � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � : � � 9 � � � � 6 � � � 6 � � � � � � � � � � � : � � 6 � � � � � � � � � � � � � � 6 � � � 3 � � � 6 �� � � � � � � � � � � � 6 � � � : ) � 6 � � � � � � � � � � : � � � � 3 � � 3 � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � : � � '

class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING; -- string representation of the keyword length: INTEGER; -- length of the keyword

make: KEYWORD is do scan.keyword(rep) end;

look_ahead: BOOLEAN is do Result:= scan.is_next(rep) end;

Create(r: STRING) is do rep:= r; length:= r.count; end end -- META_KEY

` � 7 � � : � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � : � � � � � � 7 8 � � � G 6 � � � � 6 � � � � � � � � � � 7 � � � � � � � � � � � 5 � 2 � � � 6 � � 3 6 � � � � � � � � : � � � � � � � � � 6 � � � � � � � : 6 � � � 7 � � 6 � � � � � � � � � � � � � � 6 �� � � � � 7 8 � � � � � � � � � � � � � � ! � � � � � T 4 ) � � � � �

KEYWORD� � � � � � � 2 � � � � � � � � 4 � � � � � � � � � � � � �

� � � 6 � � � � � � � � � ) H � � � � 6 � � � : � � � � � � � � � � � � 6 � � � � � 'keyword

� � � � � 6 � 3 � � � � � � 3 � � 6 �� � � � � � � � � � � 6 � � � � � � � � � � � � � � � 3 � � G

is_next � � � � � � � � � � � 6 � � � � � � � � � � � � � 6 � �

: � � 6 � 6 � � 3 � � � � � � � 3 2 : � � 6 � � � � � � � 3 � 6 � � � � � � � � � � 4 ) L � � 6 � � � � � � � � � � � � � � � � � � 6: � � 6 � 6 � � 3 � � � � �

keyword� � � � � � � � � � � � � 3 � ) & � � 6 � � � 6 � � � � � � : � 3 6 � � � � � � � � � � � �

� � � � � � � keyword

' � � � 6 � � 3 � � � � � � � 3 7 � 3 � � : � � 6 � � � � � � � � 6 � � � � 3 � � � � 7 � � � � � � : � � � 6 �� � � � 7 � � � 9 � � � � � � � 9 � 3 � � � 6 � � � � � 2 � 6 � � � � � � � � � 6 � � � � � 5 � � � � � � � � � 3 � � � � � � � ! � � �: � � � � � � � � � � � � � � : � 4 )

` � � � � 6 � � � 6 � � � � � � � � � � � � � � � ² � 6 � � � S � � ; ² � � ³ : � � � � ! � � � � � � � � 6 � � � � � � �� � � � � � � � � � � � ' � 6 � : 6 � � � � � � � � � � 2 � � 6 � � � � � � � 6 � � � � : � � � � 3 4 � � � � � � 5 � : � � 6 � � � � � � � 3� 6 � � � � � � � � � � ) c � � � � 6 � � � � � � � � � � � � � � � � � � � : � � � � � � � : � � � 7 � � � 6 � � � � � 7 � � � � � � � � )

� R Z N � M N � � R � � ] ^ Z ] _ R O � N Z R P ] ^ � R �

� 6 � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 3 � � � < � � � � � � ) ; � � � ! � � � � � � � � � � � � � � � � � � � � � � : � � � � � 3 � � � � 6 � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � : � '

Page 13:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� �

class META_ID export repeat META_NOTION inherit META_NOTION redefine make, redefine look_ahead feature make: ID is do Result.Create end;

look_ahead: BOOLEAN is do Result:= scan.next_is_letter end;

Create is do starter_list.Create;

add_starter(Current); eps:= false end end -- META_ID

H � � � � 6 � � � � � � � � � � � � � � � � � � � � � � �scan

'next_is_letter

� � � � � � � � � � � 6 � � � � �� � � � � 6 � � � � � � � � � � � � � ) ` � � � � 6 � � � � � 6 � � � � � 9 � 6 � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � 9� 6 � � � � 3 � � � � � � � � � � � � � : � � � 7 � � � � ) � 6 � � � � � � � � � � � � 6 � � � � � � : � 6 � � � � � � � � � � � � � 3 � 6 � � � � � 9 � 6 � � � � � � � � � ) d � � � � � � 6 � � � 6 � � � � � � � � � � 7 8 � � � � � � � � � � � � � � � � � � 6 �� � � : � � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � �

match9 6 � � � � � � � � � � 9 � � � � � � � : � � � � � � � � � � �

� � � 3 � 5 � )

` � � � � 6 � � : 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � : � � � � � � : � � 6 � � � 6 � � � � � � � � � �� � � � � � � : � � � 6 � � � � � � � � � � � � � � � � � � � � � � f � � � � � � f G 6 � � � � 6 � � � � � � � � � � � � � �7 � 7 � � � � ) L � � � � � � � � 6 � � � � � � � 6 � � � � � � � � � 3 � � � � � � � � ! � � � � � � 6 � � � � � � � � � � � � � � � � � � � �� � 6 � � � � � � � � � � � � � � 3 � � � � � � 7 � � � � � � � � 6 � � � � � : � � � � � � � � � � � � 7 � � 6 � � � � � � � � � � � � � � � � � � � 3 � � ) & � � 6 � � � � � � � 6 � � � � � � � � � � � � � 6 � � � � � � � � � 3 � � � � � � 7 � � � � � � � � � �� � � 6 � � 3 6 � � � � � � � � � 7 � � 6 � � � � � 9 � 6 � � 9 � � � � 7 � � � � 7 � � 6 � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � ) � � � � 6 � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � 7 8 � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � : 6 � � 6 7 � � 6 � 6 �

starter� � 6 �

struct� � � � � � � � � � � � �

� 6 � � � � � � 7 8 � � � � � � � � � )

� � � � � � � � � � � � � � � � � � � � � � � � � 7 � 3 � � � � � � � 6 � � � � � � � � � 3 � � � � : 6 � � � � � � � � � � � � � � � 9 � 6 � � � � � � � � 7 � � � � � � � � � � � ) L � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � 6 � � � � � 9 � 6 � � � � � � �� � � � � � � : � � G � � � � � � � � � � � � � � � 3 � � � 6 � � � 3 � � � � � � � � � � � � � � 6 � � � � � 9 � 6 � � � � 6 � � � � � 9� 6 � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � 7 � � � � � � � � � � � � � � ) H � � � � � � � � � � � � � �� � � � � � � � � � 6 � � � 6 � � � � � � � � : � � � � � � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � 6 � � � 6 � � � � � � 9� 6 � � � 7 � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � 9 � � � � � 6 � � � 3 � � 3 � � � � � � � � � � � � � � � � � � � � �� � � � 6 � � � 6 � � 6 � � � ) � � 7 � � � 6 � � � � � � � � � � 6 � � � � � 9 � 6 � � � � � � � � � � � � � � 6 � � � 7 � � � < � � � � � � �� � � � )

L � � � � � � � � 6 � � � � � � 7 8 � � � � � � � � � � � � � � � � 3 � � � � � � � � � � : 6 � � 6 � � � � � � 6 � � 7 8 � � � � : 6 � � � � � � � � � 6 � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � 6 � � � � � � � � � � 6 � � ! � � � � 3 � 7 8 � � � ) � 6 � � � � � 6 � < � � � < � � � � � � � � � � � � � � � � � : 6 � � 6 � � � � 7 � � 6 � � � � 7 � � � � � � � � � � � � � 3 � � � � � � � � � 6 � � � � � � 7 8 � � � )c � � � � � � � � � 6 � � � � � � � � � � � � ; : � � � � � � � � � �

ACCESS_A� � � � � � � : � '

Page 14:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� T

class ACCESS_A export metaobj_a feature metaobj_a: META_A is once Result.Create end end -- ACCESS_A

� R Z N � M N � � R � � ] ^ O ] O Z R ^ � � O N M �

� 6 � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � 6 � � � � � � � � ) ; � � � ! � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � ! � � � � � T '

class META_B export repeat META_NOTION inherit META_NOTION; ACCESS_S; ACCESS_D; ACCESS_E; ACCESS_A feature make: B is do Result?= match.make end; Create is do starter_list.Create; merge(metaobj_s); merge(metaobj_d); merge(metaobj_e); merge(metaobj_a); end

end -- META_B

c � � : � � � � � 6 �merge

� � � � � � � ' � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 6 � � 3 � � � �� � � � � 7 8 � � � � � � � 6 � � � � � � � � � � � � � 6 � � � � � � � � � � 7 8 � � � � � � � � 3 � � � � � � � � � � 6 � � < � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � ) & � � 6 � � � � � � � � � � � 6 �

eps9 � � � � 7 � � � � � � � � � � 6 � � � � � � � � � �

� 3 � � � � � � � � � 7 8 � � � � � � � � � � 6 � � � � � � � � � 3 ) � � � � 6 � � � � � META_NOTION

) � 6 � � � � � �� � � � 3 � � � � � � � � � � � � � � � f ° � f � � � � � � � � 9 � � � � : � � � � � � � � 3 � � 7 8 � � � � � � � � � � 7 � � : 6 � � 6 � � � � � � �� � � � � � � � 6 � � � � � 9 6 � � � � 2 6 � �

B4 � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � 6 � � 3 6 � 9 6 � � � � 2 6 � �

NOTION4 ' � � � � � � � 6 � � � 3 � � � � � � � � 6 � � � 6 � � � � � 3 � � � � � � � � � � 7 � � 2 6 � � � � � � : � � � � � 4 ) ` � � � � 6 � �

� 6 � 7 � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �merge

� � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � � 6 �� � 7 � � � � � � � � �

B) � � � �

B2 �

META_B4 � � � � � � : 6 � � � � � � � 7 � � � � � � � � � � � � � � � � � 7 � � � � � � 6 �

� � � � � � 3 � � � � : � � 7 � � � � � � �B

2 � � � � � � 3 � � ! � � � � 3 � � 4 � � � � � � � � � � � � 6 � � 3 � � � � � � � �META_B

� � : � � � 9 � � � � � � 6 � � � � � � < � � � � � � � � : � � 6 � � � � � � � � � � � � � � < � � � � � � � 7 � � � 6 � � � � � �7 � � � � � � � � � � � � � 2 � � � I � � V J T � K 4 ) ` � � � � 6 � � � � � � � ´ N O P � O P � 6 � � � � � � � � � � � � � � � � � 6 � � � 7 � � � � � � � � � � � � � � � � � � 3 � � � � � � � �

META_B)

& � � � � � � � � � � � � � � � � � � � 6 �make

� � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � 6 � � � � � � � � � � 6 � � � � � � � � � � � � � � � � ) & � � � � � � � � � 6 � � � � � � � � � � � � � � � ! � � � � � T : � � � � � � � � � � � '

class META_Z export repeat META_NOTION inherit META_NOTION; ACCESS_S feature

Page 15:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� %

make: Z is do Result.Create end; Create is local kw: META_KEY; do starter_list.Create; augment(metaobj_s); if metaobj_s.eps then kw.Create("."); add_starter(kw) end end end

L � � � � � � � � 6 � � � � � � � � � � � � � � f � � 3 � � � � f � 6 � � � � � � � � � � : � � 6 � 6 � � � � � � � � � � � � � � 6 �� � � � � 7 8 � � � � � � � 6 � � � � � � � � 6 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � 3 6 � � � � � � � � � � �� 6 � � � � � � � � � � � � � 6 � � � � � � � � � 3 � � � � � � ) � 6 �

augment� � � � � � � : � � � � � 6 � : � � � � � � �

merge� 7 � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 6 � � 3 � � � � � � � � � 7 8 � � � � � 6 � � � � � � � � � � � �

2struct

4 � � � 6 � 3 � � � � � � � � � 6 � � � � � � 7 8 � � � 3 � � � � � � 6 � � � � � � � � � � � � 2 � � � � 6 � � � � � META_NOTION

4 ) L � � � � � : � � � � � � � � � � � � � � � � � � � 7 8 � � � 6 � � � � 7 � � � � � � � � � 6 � � � � � � � � 6 �� � � � � � � � � G � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � 6 � � � � � � � � � � 7 � � � � � � � � � � : � � � � �� � � � � � 6 � � � � � � � � � 3 ) L � � 6 � � � � � � � � � � 6 � � : � � � � � � � � � � � 6 � � � � � � � � � 3 � � 6 � � � � � � 7 8 � � �� � � � � � � � � � � � � � 6 � � � � � � � � � � � � � 6 � � � � � � � � � 3 � � � � � �

eps� � � 3

set_eps)

µ � Z Q N M O ] O Z R ^ � � O N M � M N � � R �

H 6 � � � � � � � � � � � � 6 � : 6 � : � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) L � 6 � � � � � � � �� � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � ' � � � � � � � � � � 6 � 3 � 6 � � � � � � � � � � � � � : � � 6� � � � � � � � � � � � � � � ) L � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 2 � � 4 � � � � � G � � � 6 � � � � � � � � � � �� � � � � � � � � � � � � 6 � � � �

NOTION)

& � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � 3 ) L � � � � � � � � 6 � � � � � � � � � � � � � 7 � � � �3 � � � 3 � 6 � � � � � � � � � 7 8 � � � � � � � 6 � � � � � 3 � � � � � � � � 3 � 6 � � � � � � � � � � 6 � � � � � � � 7 � � � � ) & � � ! � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � ! � � � � � T '

class S export repeat NOTION inherit NOTION; SOURCE; ACCESS_B feature b_component: B; Create is do scan.keyword("begin"); b_component:= metaobj_b.make; scan.keyword("end"); end end

` � � � � 6 � � � ) 3 ) fscan.keyword("begin")

f 6 � � � ! � � � � � � 6 � � � � � � � � � � � � � � � � � � 3 � 6 �make� � � � � � � � � 6 � � � � � � 7 8 � � � � � f 7 � 3 � f 9 6 � � � � : � � � � � � 7 � � � � � � � � � � � � � � � � � � 6 � � � � � � � 7 8 � � � ) H �

� � � � � � � 6 � � � 6 � � � � � � � � � � � � � 7 � � � � � � � � � � � 7 � � � � � � � � � � 3 � � � � � � � � � � � � � � 7 � � � � � � � � � 6 � � )

Page 16:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� Wµ � Z Q N M Z ] _ R O � M N � � R �

� 6 � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � : � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 2 � ) � )� 6 � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � 4 � 7 � � � � 6 � � � � � � � � � � � �� 6 � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � � 3 � � � � � � � � � � � 6 � � � � � � � � � �� � � � � � � 2 � ) � ) � � � � � � � � � � � � � 7 � � � � 4 ) & � � � � � � � � � � � � � � � � � � � � � � � � 7 � 3 � � � � � � � � ! � � � � � T� � � � � � � : � '

class ID export repeat NOTION inherit NOTION; SOURCE; EXCEPTIONS feature is_id_char(c: CHARACTER): BOOLEAN is ... end; Create is do from if not scan.next_is_letter then raise("Syntax error") else scan.advance end until not is_id_char(scan.nextchar) loop scan.advance end end end -- ID

c � � : � 6 � � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � � � 'nextchar

� � � � � 6 � � 6 � � � � � � � � 6 �� � � � � � � � � � � � � � � � �

advance� � � � � � 6 � � � � � � � � � � � � : � : � � 6 � � � 6 � � � � � ) ;

� � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � 'is_id_char

� � � � � � � � � � � 6 � � 3 � � � � � � � �� � � 6 � � 6 � � � � � � � � � � : � : � � 6 � � 6 � � � � � � � � � � � � � � � � � � � � � 2 � � � � � � � � � � � � 7 � � � � � � � � 4 )

� 6 � � � � � � � � 3 � � � � � � � � � 3 � � � � � � � � � 7 � � � � � � 3metaobj_z.make

� : 6 � � � � � � 6 � � � � �� � � 7 � � � � � 6 � 3 � � � � G � 6 � � � � � � � � � � � 6 � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � � � � � � 6 � : 6 � � �� � � � � � 3 � � )

` � � � � 6 � � � 6 � � � � 6 � � � � � 5 � � � 6 � � � � � � 6 � � � � � � � 7 8 � � � � � � � � � � � � � � : 6 � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � ) & � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � 3 � � 3 �� � � � � � � � � � � 6 � � : � � � � � � � � � � � 7 8 � � � � � � � 6 � � � 7 � � � : � � � 7 � � � � � � ) L � � � � � � � � � � � � � � 6 � �: � � � � � � � � � � � � � � � 6 � � : 6 � � 6 � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � < � � � 7 � � 6 � � � � � � � 3 � � ) � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � : 6 � � � � � 5 � 3 � � � � � � � � � � � 3 � � � � � � � � 3 � � � 3 � � 3 � ' � � 9 � � 5 � 7 � � � � � � � � � � � � 7 8 � � � � � � � � � � � � : � � � � � � � � 6 � � � � � � � � � � � � � 6 � � � � � � 3 � � � � � � : )

¶ ] _ R O � · R [ O ] O Z R ^ � � O N M �

; 7 � � � : � 6 � � � � ! � � � � � � � � � � � � 3 � � � � : 6 � � � � � � � � � � � � � � � 9 � 6 � � � � � � � � � � � � � � � 7 �3 � � � � � � � � � 9 � � � � � � � � : � � ) L � � � � 3 � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � 5 � � 6 � �� � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � : � � � � � 6 � 3 � 7 � � � � 6 � � � � � � � � 6 � � � � � � � � � 3 � � � < � � � � � � � � � � � � : � � � � 3 � � � � � � � � � � � � � � � � � � � 6 � � � 7 � � � � 7 � � 6 � � � 3 � � 3 � � � � � � � � � � � � � ! � � � � � 3 � 6 � � � � ) H � � � � : � � � � � � � � � � � � � � � � � � � � ! � � � � � � � � � � � � � � � � � � � 6 � � � � 6 � � � � � � 7 � � � 6 � � � � � � � � � � � � 6 ) � 6 � � � � � � � � � � � 6 � � � � � � � � � 7 � � � � � � � � f � � � � f� � � � � � � � 3 � � � � � � � � � � � � 7 � � � � � 6 � � � � � � � 7 � � � � � � 7 � � � � � � � � 7 � � � � � � � � � � � � 3 � � � � � 6 � �� � � � � � � � � � � 9 � 6 � � � � � 7 � � � � ! � � � � � � � � � � : � � � � � ! � � � � � � � � � 3 � � � � )

Page 17:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� X� 6 � � 7 � � � � � � 6 � � � � � � � � � � � � : � 6 � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � 3 � � � � 6 � � � � � : � � � �� 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 9 � 6 � � � � � � � � � � � � � ) � 6 �� � � � � � � � � � � � 6 � � � � � � 6 � 7 � � � � � � � � � 3 6 � � � � � � : � 2 � � � � � 6 � � � � � � � � � � 6 � � 6 � f � � � � f 4 �7 � � � � � � � � 3 � 6 � � � � � 6 � � � � � � � � 3 � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � : 7 � � � ) � 6 � � � � � � � � �: � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � 9 � � � � � � � � � � � 9 � � � � � � � � � � : � � 6 � � � � � � � � 3 � � � � )

� � � � � � : � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � : � � � � � � � � � � � � � � � : � � 6 � 3 � ' � � � � � � 6 �� � � � � � � � � � � � 6 � � � � � � � � 3 � � � � � 7 8 � � � � � � � 7 � � � � � � � � � � � : � � � 6 � � � � � � � � 6 � � � � � � 7 8 � � �f � � � � � � f G � � � � � � 6 � � � � � � � � � � � 6 � � � � � 7 � � � 3 � 3 � � � 6 � � � � � � � � � 7 � � � � � � � � � � � � � � �� 6 � � � � 6 � 7 � � � � 6 � � � � � 3 � � � � � � � � � � 3 � � � � � � ) � 6 � � � � � � � < � � � � � � � � � � � � ' : � � � � � � � � �� � � � � � � � � � � � � � � � �

scan� � � �

token_mode�

parse_mode� : 6 � � 6 � : � � � 6 � 6 � � � � � � � 6 �

� � � � ) � � � � � � � � � � 6 � � � � � � < � � � � � � � � 6 � � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � 6 � � � � � � � � � � � 3 � �� � � � � : 6 � � 6 7 � � 6 � � � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � � � � � � � � � � � � � 7 � � � � � � ) � 6 � � � � � � �� � � � � � � � � � � � � �

look_ahead� � � � � � � � � � � 6 � � � � � 7 8 � � � � ' � 6 � � � � � � � 6 � � � � 3 � 6 � � � � � 9

� 6 � � � 6 � : 6 � � � � � � � � � � � � � 5 � 2 � � � � � � � � � � ) 3 )META_ID

4 ) ` � � � � 6 � � � 6 � � � � 3 � � � � � 7 8 � � � �� � � � � � � � : � � � � � : 2 � � � � � � � � � � 4 � � � � � � � � � � � � � � � � 7 8 � � � � � � � � � � � � � � � � � � � 3 � � � � � )

; � � � ! � � � � � � � � � � � � � � 6 � � : � f � � � � � 5 � f � 6 � � � � � � � � � � � � � � � � � : 6 � � � � � � � � � � � � : � � 3 � � � � � � � � � � � � ) � 6 � f � � � � � 5 � f � � � � � � � � � � � � � � � � � � � � � � � : � '

class META_Z_tokenized export repeat META_NOTION inherit META_NOTION; ACCESS_S feature make: Z is do scan.token_mode; Result.Create; scan.parse_mode; end; Create is do starter_list.Create; add_starter(Current); end end -- META_Z_tokenized

L � � � � � � 5 � � � � � � � � � � � � � � � � � � � 7 � � � � � � � 6 � � � � � : � � � 6 � 3 � � � � � � � � � � � � 7 �� � � � � � � � � � � � 3 � � � � 3 � � � � � � ' � � � 6 � � � � ² � � � � � � � � � � � 6 � � � � � � � � � � 6 � � � � ² � � � � � � � � � � � 6 � � � � � � G � 6 � � � � � � � � � � ² � � � � � � � 3 � � � 6 � � � � � � � � � � � � � � � � ) ` � � � � 6 � � � 6 �� � � � � 7 � � � � � � 9 � � � � � � � � � � � � � � � � � : � � � 7 � � ! � � � � � � � � � � � 6 � � � � � 9 � 6 � � � � � � � � � � 5 � � � � � � � � � � � � � G 6 � � � � 6 � � � 3 � � 3 � � � � � � � � � � � 6 � � � � � � � � � � � 6 � � � � � 6 � � � � � � 6 � � � �3 � � 7 � � � � � � � � � )

� � Z � � � · N Z � ] O �

� 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � 7 � � � ) & � � � � � � � � � � 6 � 6 �� � � � � � � � : � � : � � 6 � 6 � � � � � � � � � � � 6 � � � � � � 7 8 � � � � 6 � � � � � � � ! � � � � � � � � � � : � 6 � � � � 3 � � � � � � � � � � � � � � 6 � � � � � � � � � : � � � � � � � � � � � � � � � � � � � � � � � 3 � 6 � � � � : � � � � � � � � � � � �: � � 6 � � � � ) � 6 � � � � 7 � � � 3 � � ) 3 ) 7 � � � � � � � � 3 � 6 � � � � : � � � � � � � � � � � � � � � � 6 � � 6 � � � � � � 3 � � � 6 � � � � � � 6 � � � � � ) L � 6 � � : � � � � � � � � � � � � � � � � � � ! � � � � � � � � 6 � � � � � � : � � � 6 � �6 � � � � 6 � � � � � 6 � � 6 � � � � � � � 6 � � ! � � � � � � 6 � � � � � 9 � � � � � � � � 6 � � � � � � � � � � : � � � � � � � � � � �� � � � � � � � � � � � � � � 6 � � � � : � � 6 � � � � � � � � � � � 3 � ! � )

� � � � � � 6 � � � � 6 � � � � � � � � � � � � � � � � � � 3 ) � 6 � � � � � � 7 � � � � � � � � 6 � � � � � � � � � � � � � � � � � � : � � ' � 6 � � � � � 9 � 6 � � � � � � � � � � � � � � � : � � � � � � � � � � � � � � 6 � � � � : � 2 : 6 � � � � � � � � �� � � � � 7 8 � � � � � � � � � � � � 3 � � � � � � � � � � � � 4 � � � � 6 � � 3 6 � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 �

Page 18:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� "� � � � � � � � � ) � � � : � 2 � 4 � � � � � 6 � � � � : � � � � � � � � 6 � � � � � � ) � 6 � � � � 7 � � � � � � 7 � � � � 3� 6 � � : 6 � � � � � 6 � � � � � 9 � 6 � � � � � � � � � � � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � 3 � � � � � � � � � � � � �� 6 � � � � � � : � � � � � � 7 � � � � � 5 � � ! � � 7 � � � � � � � : � � � � � � � ) c � � � � � � � � � � : � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � 9 � 6 � � � � 6 � � � � � � 6 � � � 7 � � � � � � � 6 � � � � � 6 � � ! � � � � � � � � � � � �� 6 �

scan.keyword� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � : � 7 � � 6 � � � 3 � 6 � �

� 6 � � 3 � � � � � � � : � � : � � 6 � � � � � � � � � � � � � � � 5 � 3 � 6 � � � � � )

� 6 � � � � � 6 � � � � � � � � � � � � 3 � � � � � : 6 � � : � � � � � � � � � � 7 8 � � � � � � � � � � � � � � � � � � � � � � �� ! � � � � � 6 � � � � � � � � � � � � 7 � � � � � � � � 3 � 6 � � � � � � � � � � � � � � � � � � � � � � � 7 8 � � � ) � � � � � �3 � � � � ; 9 � ) ) ) � � � � ) ) ) � � 9 � � ) ) ) � � � � � ) ) ) � � 9 � f � f ) ; � � � � � � 6 � � � 6 � � � � � � � f � f ) � 6 � � � � � � �metaobj_a.make

� � � � � � � 6 � � � � � � �metaobj_b.make

� : 6 � � 6 � � � � � � � � 6 � � � � � 6 � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 7 8 � � � ) � 6 � � � � � � 7 � � � � � � � 3 � � � � � � � � : � � 6 � � � � � � � � � � : � � f � f � � � � ) � � � � f � f � � � � 6 � � � � 6 � � � � � � 7 8 � � � � � � 3 � � � � � � � � � � � � �

make� � � � � � � � �

� � � � � � � � ) � 6 � � : � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � : 6 � �metaobj_d.make

� � � � � � � � � � ) � � � � � � � � 7 8 � � � � � � � � � �

match� � � � � � � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � � ) ; 3 � � �

f � f � � � � 6 � � � � � � � � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � ) & � � � � � � � 6 � � � � � � � 7 8 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � : 6 � � f � f � � � � � � � � � � 7 � � � � �

scan.keyword("e")) c � � � � � 6 � �

� � � � f � f : � � � 7 � � ! � � � � � : � � � � � � � � � � � � 6 � � � � � � � 5 � � � � � � � � � � � � 7 � � � � � � � � � � � � � � )� 6 � � � � � � � � � � � � � � 7 � 7 � � � � � � � � < � � � � 7 � � � � � � � � � � � � � � � � � 3 6 � 7 � � � 6 � � � � 7 � � � � � � � � � 3� 6 � � � � � � 3 6 � � � � � � ) � 6 � � � � � � 7 � � � 7 � � � � � 3 � � � � � � � � � � � : � � 6 � 6 � � � � � � � � � � � ) L � 6 � � � ! � � � � � � 6 � � � � � � � � � � f � f � � � � � � � � � : � � 6 � 6 � � � � � � 7 8 � � � � � � � 6 � � � � � � � � � : 6 � � 6 � � � 6 � � � � � � � � 2 � � � � � 7 8 � � � 4 � 6 � � � � � � � � 6 � � � � � � � G � ) � ) � � � 6 � � � 6 � � � � � � � � � � � � � � � � � � � 6 �� � � � � 7 8 � � � � � � ) � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � 6 � � � � � � � � � � : � � � 7 � � � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � : 6 � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � 7 �� � � � � � � � � ) H 6 � � � 3 � 6 � � � � � � � � � � 6 � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � � 6 � � � 6 � � ! � � � � � � �3 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � � � � � � � : � � 6 f � f 2 � ) � ) � 4 � : � � 6 � � �� ! � � � � 3 � 6 � � � � � ) � � � � � 6 � � � � � 6 � < � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � : 6 � � : � � � 7 � � 6 �� � � � � � � � � � � 3 � G � 6 � � � 6 � � � 7 � � � � � � � 3 � � � � � � � � � � � � � ! � � � � � � � )

¸ R Z R ^ � � O � � Z � � ¹ � º � N � _ Z ^ N � _ � O P N O N M ± � � �

� � � � � � � � : � : � � � � � � � � � � � � � � � � � � � � � � � � � ' � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � : � 3� � � � 7 � � � � � � 9 � � � � � � � � � � � � � � � � � ) c � : � � � � : � � � � � : � � � � � � � � � � � � : � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � : � � � � � � � � � � � 3 � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � ) ; 7 � � � : � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � 3 � 7 � � � � � � � 9 � � � � � � � � � � � � 3 � � � � � � � � 3 � � � � � � 9 � 6 � � � � � 7 � � � G � � � � � � � X : � � � � � 6 � � � � � � � 9 � � � � � � �7 � � � � � � � 9 � 6 � � ) c � � : � 7 � � � � � � � � � � � � 6 � � � � � � � � � � � � � 6 � < � � � 6 � � � : � � 6 3 � � � �7 � � � � � � � � 3 � � � � 3 )

; � � � � � � � � � � 7 � � � � � 6 � � � � � � � f � � � � � 5 � f � � � � � � � � � � 6 � � � � 6 � < � � � � � � : � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � 7 � � � � � � � 3 � � � 6 � � � � � � � � � � � � � � � � � � � 6 � � � � � �� � � 3 ) � 6 � � � � � � 7 � 3 � � � � � 5 � 2 � � � � � � 3 � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � 3 4 ' : � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � 7 8 � � � � � : � � � � � � � � 3 � � � � � � � : 6 � � 6 7 � � 6 � 6 �star ter

� � 6 �st ruc t

� � � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � � � � ) � � � 3 � 6 � � � � � � �� � � � � � � � � � � � � �

look_ahead� � 6 � � � � � � 7 8 � � � � � � � � � � � � � � � � � � � � � � : � � � � 6 � � � � �

� � � � 5 � � 6 � � � � � 3 � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � : 6 � � � � � � � � � � � � � � � � � ) � 6 �� � � � � � � � � � � � � 7 8 � � � � � � � � � 7 � � � � � 6 � � � � � � � � � � � : � � � � 6 � 3 � � � � � � � � � � � � � � 3 � 6 � � � � � � �� � � � 3 )

� 6 � � � � � 6 � < � � � � � � � � � 7 � � � � � � � � 3 � � � � 6 � � 3 6 � � < � � � � � � 6 � � � � � � � � � � � � � 6 � � � � � � � � � 9 � : 7 � � � � � � � � 3 � � � � ) c � � � � 6 � � � � � 6 � < � � � � � � � � � � � � � 7 � � � � � � � � � � � ! � 9 � � � 3 � � � � � 9 � � 3 � � � �7 � � � � � � � � 3 � � � � � 9 7 � � � � f 3 � � � � � 5 � f 1 1 2 � 4 3 � � � � � � : 6 � � 6 � � � � � < � � � � 6 � � 2 � 6 �3 � � � � � � 3 � � � � � 6 � e e 9 � & b � � � � 4 � � � � � 6 � � � � � � � � � 6 � � � � � � � � � � � � � � � � 6 � � � � �� � � � � � � � � � � � � � � 6 � � 6 � � � � : 6 � � 6 � � � � � � � � � � � � � � � � : 6 � � 6 � � � � � � � � � < � � � � � � � �� � � 3 : � � 6 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � 6 � � 6 � � � � � ) H � � � � � � � 6 � < � � � � � � � 7 � � � � 6 � 3 � � � �� � � � � � � � � 2 � � 7 � � � � 6 � � � � � � � � 6 � � � � � � 5 � � � � 4 � � � 6 � � � : 3 � � � � � � � � � � � � � 7 � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � 6 � � : � � � � ! � 6 � � � � � � � � � � � � � 1 1 2 � 4 � � � � 3 � � 6 � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � )

Page 19:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� $� � N � � M R »

; � � � � � � � � � ! � � � � � � � � � � � � � 7 � � : � � � � � � � � � � � � � � � � � � 7 � � � � � � � � 3 � � � � � � � 6 � 3 � � � �

� � ¼ � ³¼ 9 � ; f � f³ 9 � f 7 f; 9 � � f � f 9 � � f 7 f� 9 � f f

� 6 � 3 � � � � � � � � � � � � : � � � � � � � � � f � � f � f 7 7 f ) ; � � � � � � � � � 1 1 2 � 4 � � � � � � � � 6 � � �� 6 � � � 7 � � � � � � 7 � � 6 � 6 � � � � � 7 � 3 � : � � 6 f f ) c � : � � � � � � ; � � � � � � � � � � 6 � : � � � � � � 7 � � 7 � � � � � 6 � � � � � � � � : � � � 7 � � � � � � � ' � � 6 � � � � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � ; � � � 6 � � � � � � � � � � � � � � � � � � 3 ¼ � � � � � 6 � � � � � � � � � � � � � � � � � � 3 ³ ) H 6 � � 6 � � � � � 9 � 6 � � � � � � � � � � �� ! � � � � � � � 6 � � � � � � 7 8 � � � � � ; � ; : � � � � � � � � � � � 7 � � � � � 2 � � � � � � 3 � 6 � � � 6 � � � � � 9 � 6 � � � �� � � � � � � � � � � � 7 � � � 4 � � � � � � 3 � 6 � � � � � � � � � � � � 7 � � ) L � � 6 � � � � � 7 � � � � f � f � � 6 � � � � � � � � � � � � �� � 6 � � � � � � � � � � � 5 � � � ¼ ) L � � 6 � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � 6 �� � � � � � � � � � : 6 � � 6 : � � � � � � � � � 2 � � � 6 � � � � � � � � � � � � 4 G 6 � � � � 6 � � � � � � � � � � � � � ³ )

½ ¾ B � ¿ F ? À � � B B Á Â � � � � C Ã A B � � � � Ä F @ � Ä B A Á � F � @

¶ ´ R � ^ ] � M R �

; � � � � � � � � � � � � � � 6 � � � � 6 � � � � � � � � 7 � � � � � � � � � � � 5 � � � � � 3 ' � 6 � � � � � 3 � � 7 � � � � � � � � 6 � � � � � � � � � � � � � 7 � � � � � � � � � � � 7 � � � � � ! � � � � � � � � � � � � � � � 7 � � � ' � � � 6 � � � � � � �2 � � � � � 7 8 � � � 4 � � : � � 6 � � � ! � � � � � � � � � � 6 � � � � � � � � � 6 � � � � � � � � G � 6 � � � � � ! � � � � � � � � � : 6 � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � �

scan.keyword) � 6 � � � � � �

� � � � 7 � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � )

& � � � � � � � 6 � � � � � � � � � � 7 8 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 7 � � � � � � � 6 � � : � � 6 � 6 � � � � �� � � � � � 6 � � � � � � 6 � � � � � � � � � � � : � � � � 6 � � � � � � � � � 6 � � � 3 � � 3 � � � � � � � � � � � 9 � 6 � � � � � � � � �� � � � � � � : � � ) L � � � � � � � � � � � � � � � � � � � � � � � � 6 � : � � � � � 6 � � � � � � � � � � � � � � � � � � � � ! ) L � 6 �� 7 � � � � � � 3 � � 7 � � � � � � � � � � � 7 � � � � � � � 6 � � � � � � � � � 6 � � � 3 � � 3 � � � 6 � � � � � � � � � � 3 � � � � � � � � 7 �� � � � � � � � � � � 6 � � � ! � � � � � � � � � � � � � < � � � � 6 � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � � � 3 � � 3 �� � � � 6 � � : � � 6 � � 3 � � � � � � � � � � � � � � � Š)

� � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � 3 � � ) L � � � � � � � � � � 6 � � � � � 6 � �� � � � � � � � � � � � � : 6 � � 6 � � � � � � � 7 � � � � � � 6 � � � � � � � � ' � 4 � � � � � : � � � � 7 � � � � � � ! � � � � � 6 � �T 4 � � � � � � � � � � � � � � � � � � 3 � � 2 � ) 3 ) � � � 3 � � � � � � � 4 � � � 7 � � � � � � ! � � � � � � � � � � � � � � 6 � � � � � � � � � 3 � � 2 � ) 3 ) � � � � � � � � � 4 � � % 4 � � � � � � � � � � � � : � � � � � 6 � � � � 6 � � � � � � � � � � � � ) L � � � � � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 3 � : � 7 � � � � � � � � ' � � � � : � � �� � : � � � � � � � � � � � � � � � � � � � � 3 � � � � � 6 � � � � � � � � � � � 6 � � � � � )

e � � < � � � � � � � � � 6 � � � 6 � � � � � 5 � � � � � 6 � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � 8 � � � � � �� � � � � � � � � � � � 3 � � � ) H � � 6 � � � � � � � � � 6 � � � < � � � � � � � � � � � � � 7 8 � � � � � � � � � � � � � � � � � : 6 � � � � 3 � � � � � 6 � � � � � � � � � � � � � � � � � 4 � � � � � � � � � � � � � � � � � : 6 � � 6 � � � � � � � � 6 � � � � � �� � � 3 � � 7 4 � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � : � � 6 � 6 � � � 3 � � � � � � � : � � � � � 6 � � � � � � � � � � �� � � 6 � � 6 � � : � � � � � � � � � 7 � � � ) L � � � � � 6 � � � � � � 7 8 � � � � � � � � � � 6 � � � � � � � � � � � � � � � 9 � � 6 � � � � � � �� � � � � � � � � 9 � 6 � � � 6 � � � � � � 9 � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � 3 � � ) � � � �� � � � � � 6 � � : � � � � � � � � � � � � � � � � 6 � � � � � 5 � : � � � � � � � � � � � � � 5 � � 6 � � � � � � � � � � � � ) ` � � � � 6 � �� � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � : � � � � 6 � � � � � � � � � � � � � � � � � ) L � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � 6 � : � � � � 6 � � � � 6 � � � � � � �� � � � � � � 3 � � � � � � � 3 � )

Å m k x t i s { t l q m § p s q r } h t   h o i j k n m s m j k } j y q n § y t o t k s h h s p h i j o o h i s k h l l { z y s } h } m q q k j s n m l i y l l s p m l m k n h s t m q v

Page 20:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� a

� � N � � M R Æ

� � � � � � 6 � 3 � � � � '

� 9 � f Ç f � f ' � f� � � � 9 � f ' f� 9 �

� � � � � � � � 6 � � � � � � � f Ç ' � f 2 � 6 � � � � � � � � � � � � � � � � � 6 � � 4 ) � 6 � � � 7 � � � � � � 6 � � � 6 � � � � � � 7 8 � � � � � �6 � � � � � : � � 3 � � � � 6 � � � � : � f ' � f G 6 � � � : 6 � � � � � � � � 6 � � � 6 � � ! � � � � � � 6 � � � � � � � f ' f � �� � � � � � � � 6 � � � � 6 � � � � � � � � � � 6 � � � � � � � � � � � � � � � 3 � � � � � � � � � � � ) � � � � � 6 � � � � � � 3 � � � �� � f � f � � � � � � � � � � � � � � � � 5 � � 6 � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � 2 � � � � � 6 � 3 � � � �f ' � � ! � � � � � f 4 )

� � N � � M R È

� � � � � � 6 � 3 � � � �

� 9 � f 7 f � f � f� � � � 9 � � 2 � � � � � � � � � � � � � � � � 4� 9 �

� � � � � � � � 6 � � � � � � � f 7 � f 2 � 3 � � � 7 � � � � � � � � � � � 4 ) � 6 � � � � � � 7 8 � � � � � � � � � 3 � 5 � � � � � � � � � � � �� � � � � � � � 7 � � � 7 � � 6 � � � � � : � � 3 � � � � 6 � � � � : � f � f ) c � � � � : 6 � � � � � 3 f � f � � 6 � � � � � � �� � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � 6 � � � � 9 � � � � � � 6 � � 7 � � � � � 9 � � � � � � � � � � � � � )

2 � � � � ! � � � � � � 4

É ^ R � R O Z N Z � ] O ] � ^ � P ´ Z � ] O Z R � Z Ê \ ] ^ _ M � � Z

� 6 � 3 � � � � � � � � � � � � � � � 6 � � � � 7 � � � � � � � � � � � � � � � � � � � � � � 7 � � � � 6 � � 3 6 � � � � � ! � � � � � � � � � � � � � � � � � � � 6 � � � � � � � \ ] ^ _ M � � Z ) � 6 � � � � � � � � � � � � � � � � 7 8 � � � � � � � � � � � 3 � � � � � � � � � 6 � � : � � � 7 � � � � � � � � � � � � 6 � � � � � � � 7 � � � 6 � � � � � � 6 � � � � � 7 � � � � � ) L � � � 9 � : � � � � � � � � � � � � � � 3 � 6 � � � � � � � � � � � � � � : � � � � � : � � � � 6 � � 3 6 � � � � � � � � � � � � � 6 � < � � � � � � � � � � ! � � � � � � � � � � � � � � � � )

� 6 � : � � � � � � � � � � � � � � � � � � � � � � � 9 � � � � � � � 6 � � � � � � � � � : � ' L � � � � � � � � 6 � � � � � � 7 8 � � � � � � 6 � � � � �� � � 7 � � � � � � � 6 � � � � � 6 � � � � � ) � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � �� � � � � � � � � � � � � � 7 � � 6 � � � � � � 7 8 � � � � � � � 6 � � 3 6 � 9 6 � � � � � � � 6 � � � � � � � � � � � � 6 � � � 6 � � � � � � � � ) c � � � � 6 � � � � � � � � � � � � � 6 � � � � � � � � � � � � : 6 � � � � � � 7 � � ! � � � � � � ! � � � 6 � � � � � )� 6 � � � � � 9 � 6 � � � � 7 � � � � � 7 � � � � � � � � � 3 � 6 � : � � � � � � � � � � � � � : � ' � � � � � � � � 7 8 � � � � � � � � � 6 � � � � 9 � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � 6 � : � �� � � � 7 � � � � � � � � � � � 3 � 6 � � � � � � � � ) � 6 � � � � � � � � � � � � 7 � � � � � � � 3 � 6 � � � � � 9 � 6 � � � � � � � � � � �� � � 6 � � � � � � � � � 6 � : � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � 7 8 � � � � 6 � � � � � � � � � � � : � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 8 � � � : 6 � � � � � � � 9 � 6 � � � � � � � � � 6 � � � 3 � � � � � � � � � � �� � � � � � � ) L � � � � � � 6 � � � � � 9 � 6 � � � � � � � � � � � � 6 � � � 3 � � � � � � � � � 6 � � � ) L � � � � � � 9 � 6 � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � : � � 6 � 6 � � � 3 � � � � � � � � � � � � 3 � 6 � � � � � � : � 3 � � � � '

� 4 � � � � : � � � : � � � : � � � � � � � GT 4 � � � 3 � � � � : � : � � � � 6 � � � � � � : � )

� � � � � � � � � � T 4 � � 6 � � � � � 5 � � � � � � � : � 6 � � � 3 � 6 � � � � 6 � � � � : � � � � � � � � 6 � � � � 6 �� � � � � � � 3 � � � � � 7 8 � � � � ) H � : � � � � 3 � � � 6 � � � � � � : 6 � � 6 � � � � � � � � � � � � � : � � 6 � � � 6 � � � � � 7 � � � � � � � � : � � � � � � � � � 6 � � � � � � � � � � � 3 � � � 6 � � � � � � 2 � � � � � � � � 6 � � � � 3 � 6 � 4 9 � � � 6 � � 3 6 � 6 � �: � � � 7 � � � � � � 7 � � � : � � � � � � � 6 � � � � � � � � � � � � � � � � � � 6 � � � � � � : � � 6 � 6 � � � � 7 � � ) c � � � : � � � � � � 6 � � � 3 � � 3 � � � � � � � � � � � � 6 � � � 6 � � � � � 9 � 6 � � � � � � � � � � � � � � � � � � � � � � � � � < � � � � � � � � � � � � � � � � � � 3 � � � � )

Page 21:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

� J

` � � � � 6 � � � 6 � � � � � 6 � < � � � � � � � � � � � � � 6 � � � 5 � � � � � � � 6 � � � � � � � � ' � 6 � � � � � � 7 8 � � � � � 6 � � � �� � � 6 � � � � � 6 � : � � � � � � : � � � 7 � � � � � � � � : � � � � � � 6 � � 3 6 � 7 � � � � � � ) � 6 � � � � � � � � � � � � 7 8 � � �� 6 � � 6 � � � � 7 � � � � � � � � � 6 � : � � � � � � � 7 8 � � � � � � � � � ) ` � � � � 6 � � � � � � � 6 � � � � � � � � � � � 6 � � � � � � � 6 �� � � � � � � 3 � � � 6 � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � 9 � 6 � � � � � � � � � � � � � � � � � � � 6 �� � � � � � � � � � � ) L � � � � � � 3 � � 3 � � : � � ! � � � � � 6 � � � � � 6 � � � � 7 � � � � � � � � � � � � � � � � 7 � � � � � �� � � � � � � 3 � � � � � � 9 � � � � � � � � � � � � 6 � � 6 � � � � � 6 � � � � � � � � � � � � 9 � 6 � � � � � < � � � � � � � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � � 3 � � � � 9 � � � � � � � � � � � � � � � � � � � � � � � � � � � < � � � � � � � � 6 � : � � � � � � )

¯ � � M R � R O Z N Z � ] O ] � \ ] ^ _ M � � Z

� 6 � � � � � � � � � 6 � : � � � � � � � � � � � � � � � � � 7 � � � � � � � � 3 � � � � � � � � � � � � � � � : � '

class WORK_LIST export repeat LINKED_LIST, check_followers inherit LINKED_LIST[META_NOTION] feature wins(m1, m2: META_NOTION): BOOLEAN is local k1, k2: META_KEY do k1?= m1; k2?= m2; if not k1.Void then if not k2.Void then Result:= k1.length > k2.length else Result:= true end else Result:= false end end; -- wins

check_followers(orig: META_NOTION): BOOLEAN is -- Walk through the work list until a winner or metaobject with -- eps = false is encountered. A token or keyword metaobject t

-- is a winner if wins(t,orig); a nonterminal metaobject n is a-- winner if wins(s,orig) for some starter metaobject in n's -- starter list. If a winner is found from the worklist, return-- true, otherwise false.

end; -- check_followers end -- WORK_LIST

; � � � � � � � � � � � � � � � 6 � 3 � � 7 � � : � � � � � � � 7 8 � � � � � � � � � � � � � � � 3 � � � � � � � � � � 3 � � � 7 � � � � � � � � �� � � � � '

class RIGHT_CONTEXT export worklist feature worklist: WORK_LIST is once Result.Create end end -- RIGHT_CONTEXT

� 6 � � � � � � � � � � � � � � � � � 6 � � � � 7 � � � � � � � � � � � 3 � � '

deferred class META_NOTION export make, look_ahead, match, eps, eps_struct, starter_list

Page 22:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T #

inherit SOURCE; EXCEPTIONS; RIGHT_CONTEXT feature ... screen: META_NOTION is do from starter_list.start until starter_list.offright or else not Result.Void loop if starter_list.item.starter.look_ahead and then (not eps or else not worklist.check_followers(starter_list.item.starter))

then Result:= starter_list.item.starter.struct end; starter_list.forth end; end; -- screen ... end -- META_NOTION

� 6 � � � � � � � � 9 � � � � � � � � � � � � � � � 6 � � � � � 7 � � � � � � � � : � � � ) � 6 � � � � � � � � � � � � 3 � 6 � : � � � � � � � �3 � � � � � � 6 � � � � � � 7 8 � � � � � � � � � � � � � � � � � � � � � � ) & � � � � � � � � � 6 � � � � � � � � � � � � � � � ! � � � � � T7 � � � � � � '

class META_Z export repeat META_NOTION inherit META_NOTION; ACCESS_S feature meta1: META_KEY is once Result.Create(".") end; make: Z is do worklist.remove; worklist.put(meta1); worklist.put(metaobj_s); Result.Create end; Create is local si: START_ITEM; do starter_list.Create; augment(metaobj_s); if metaobj_s.eps then si.Create(meta1, Current); starter_list.add(si); end end end

� 6 � � � � � 7 � � � � 3 � � � 3 � � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � 6 �make� � � � � � � � � � � � � � 6 � � � � � � � � � � 2 � � � � � � � 3 � � � 4 � � � � � � � 6 � � � � � � 7 8 � � � � � � � 6 �

� � � � � � � � � � � � � � 6 � � � � � � � � ) ` � � � � 6 � � � 6 � � � � � � 7 8 � � � � � � � � : � f ) f � � � � 7 � � � � � � � 6 �� � � � � 7 8 � � � � � � � � � � � � � � � � 7 � � � � � � � � 6 � : � � � � � � � � � � � � � � � � � � � � � G � � � � � � � � � � 6 � � : � � � � � � � � � � � 7 � � � � � � � � � 6 � � � � � 7 8 � � � � : � � � � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � � � ) � 6 � � � � � � 7 8 � � �� � � � � � � � � � � � � � � � 7 � � � � � 9 � � � � � � : 6 � � � � � � � � � � � 6 � � � � � � � � � )

Page 23:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T �

c � � : � 6 � � � � � � � : � � � � � � � � � � � � � � � � � � � � � � 'remove

� � � � � � � 6 � � � � � � � � � � � � 6 � � � � � � � � � � � � � �

put� � � � � � � : � � � � � � � 6 � � � � � � � � � � � � ) � � � � � 6 � � � � � � � � � � � � � � � � � � � � � 6 �

� � � � 2 � ! � � � � � � � 6 � � ! � � � � � � � �check_followers

4 � � � 6 � � � � � � � � � 6 � � � � � � � 6 � � � � � 7 � 6 � � � � � � � � � � � � � � � � � � � � � � � )

L � 6 � � � � � � � � � � � : � � � 6 �make

� � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � 6 � : � � � � � � 2 � ) � )� 6 � � � � : � 4 � : � � 6 � � � � � 3 � � � 6 � 3 '

class META_KEY ... make: KEYWORD is do worklist.remove; scan.keyword(rep) end; ... end -- META_KEY

� � � � � � � � � � 6 �make

� � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � 6 � � � � � � � � � �: � � 6 � � � � � 3 � � � 6 � 3 2 � ) 3 )

META_ID� 7 � � � 4 )

� 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � 7 � � � � � � � � � � ) � � � � � 6 � � � � � � 7 8 � � � � � � � 6 �� � � � � � � � � � � � � � � � � 7 � � � � � � � 6 � � � � � � � 6 � : � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � 6 �� � � � � � � � � � � 6 � � � � � � � � 7 8 � � � � � � � � 6 � � � � � � � � � � � � � � 9 � � 6 � � : � � � 6 � � � � � � � � � � � � � � 7 � � � � � � � �� � � � � � � � � 6 � � � � � � � � � � � � ) c � : � � � � � � � � � 6 � � � � � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � 6 � : � �� � � � � � � � � � : � : � � � � � � � � � 6 � � � � � � � � � � 3 � � � � � � � � � 2 f ° � f 4 � � � � � � � � � � � � � � � � 3 � � � 97 � � � � � � 6 � � � 6 � � � � � � � 3 � � � � � � � � 6 � � � 6 � � � � � � � 6 � � � � � � � � � � � ) � 6 � � � � � � � � � � � � � � � � � ! � � � � � T 7 � � � � � � 2 : � � � � � � �

NOTION� 6 � � � �

RIGHT_CONTEXT4 '

class S export repeat NOTION inherit NOTION; SOURCE feature b_component: B; Create is local dummy: NOTION; do dummy:= worklist.item.make; -- "begin" b_component?= worklist.item.make; -- B dummy:= worklist.item.make; -- "end" end end

� � � � � 6 � � � � : � � 7 8 � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � 7 �� 6 � � � � � � � 7 8 � � � � � � � � � � � � � � � � � � � � 7 � � )

� 6 � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � 3 � )

Ë > @ � A � @ F B ? Ì � � @ Ì � ? C B Ã @ F B ? � � � @ A D E @ D A � �

L � � � � � � � � � � � � � 6 � � � � 7 � � � � � � � 3 � � � � 6 � � � � � ! � � � � � 3 � � 3 � � � � 3 � � � � � � � � < � � � � � � � � � � � � � � � � � � � : � � � � � � � � � � � � � � � � � � � � � � � � � ) L � � � � � � � � � 3 � � 3 � � � � � � � � � � 3 � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) ; � � 6 � � 3 6 � � � � �� � � � � � � � � 7 � � � � � 7 � � � � 3 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � 7 � � � � � � � � � � � � � � � �

Page 24:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T T� � � � � � � � � � ) & � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) L � � � � � � � � � � � � � 1 � � � � � � � � � � � � � � � � � 7 � � 3 � � � � � � � � � � � � � � � � � � � � � � )

e � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) H � : � � � 6 � � � 6 � : 6 � : � 6 � � � � 6 � � � 7 �� � � � � � � ! � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) ; � � � � � � � � � � � � � � � � � � : 6 � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) ; � � � � � � � � � �� � � � � � � � � � � � � � � � � � : 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � : � � ) 1 � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � 6 � � � � � � � � � � � � � � 7 � � � � � � � � � 6 � � � � � � � �� � � � 6 � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � 3 � 6 � � ) � 6 � � 3 � � � � � 6 � � � � � � � � � � � � � 6 � � ' : �� � � � � � � � � � � � � � � � 7 8 � � � � 6 � � � � � � � � � � 6 � � � � � � � 7 � � � � � � � ) L � � � � � � � � � � � � � � � � 6 � �� � � � � 7 8 � � � : 6 � � � � � � 3 � 6 � 6 � � � � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 6 �� � � � � 7 8 � � � � � � � � � 7 � � � � � � 6 � 6 � � � � � � � � 7 8 � � � ) � 6 � � 6 � � � � � � � 7 � � � � � � � � � 7 � � � � � � � � ! � � � � � � 6 � � � � � : � � � � f � � � � f � � � � � � � � � � � ) � 6 � � � � � � � � � � � � 6 � � � 6 � � � � � � 7 8 � � � 9 � � � � � � � � � � � � � � � � 6 � � � � ! � 7 � � � 7 � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � : � � 6 � � � � � � � � � � 3 � 6 � 7 � � � � � � � � � � � � � � � � � � � )

Í � � Z � Z ^ Q � Z Q ^ R �

L � 6 � � � 1 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � 3 � � 6 � � � � � � � � � � � � � 3 � � � � � � � � � � �� � � � � � � � 7 � � 6 � � : � � � � � � � � � � � � � ! � � � � � � � � � � ' 1 � � � 2 ; � � 4 � � � � � � � � � � � � ; � � � � � � � � � � 7 � � � �2 � ) � ) ; � ; � ; � ; � ; � ; � ) ) ) 4 � : 6 � � ; � � � � 7 � � � � � � � � � � � � � � � � � � � � � : � � )e � � 2 1 � � � 2 ; � � 4 4 � � � � � � � � � � � 7 � � � � � � � � � � � )

� � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � � � � � ! � � � � � � 6 � � � � � � � � � � � � � � � : � � � 7 � � � � � � � � � � : � � 6 � � G � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) � 6 � � � � � � � � � � 6 � � � � 7 � � � � � � � � �� � � 6 � � � � � � � � � � � � � � � � 7 � � � � � � 7 � � � � 9 � � � � � � � � � � � � � 2 � � � � � � � � � � � � � � � ! � � � � � � � � � 6 �� � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � 4 ) L � � 1 � � � 6 � � � � � � � � � � � � � � � � � � � � � � �

LIST: 6 � � 6 � 6 � � � � � 7 � � � � � � � : � � 6 � 6 � � � � � � � � � � � 9 � 6 � � � � � � � � � � � 2 � � � 4

� � 7 � � � � � � � � � LIST

7 � 3 � � � 3 � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � 3 � 6 � � � � � � � � 3 � 6 � � � � � �� 7 � � � � � � � � � 3 � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � : � � � 7 � � � � � � � � � � � 5 � � � � � � � � � � � � ); � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 5 � � � 7 � � � � � 7 � � � � � � � � � � � � � � � �f � � � � � � � � 5 � f : � � 6 � 6 � � � � � � � � � � � � � � � � � � � � � � ) � 6 � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � ' �� � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � G � 6 � � � � � � � � � � � � � � � �� 6 � � � � � � � � � � 6 � � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � � � � � 7 8 � � � � � 6 � � � � � � � � � � � � � 7 8 � � � � � � � � � � � � � � 3 � � � � � � 3 : 6 � � 6 � � 6 � � � � � � � 7 � � � � � � � � � )

� 6 � � � � � � � � � � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � : � '

class META_ITERATION[T->NOTION] export repeat META_NOTION inherit META_NOTION; EXCEPTIONS feature -- iterated structure: body_meta: META_NOTION; -- separator structure: sep_meta: META_NOTION;

make: ITERATION[T] is local elem: T; sep: NOTION; do worklist.remove; Result.Create; if look_ahead then from worklist.put(body_meta); elem?= body_meta.make;

Page 25:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T %

Result.add_left(elem); until not sep_meta.look_ahead loop worklist.put(sep_meta); sep:= sep_meta.make; worklist.put(body_meta); elem?= body_meta.make; Result.add_left(elem); end elsif not eps then raise("Syntax_error") end; end;

Create(opt: BOOLEAN; body: META_NOTION; sep: META_NOTION) is do body_meta:= body; sep_meta:= sep; eps:= opt; starter_list.Create; augment(body); if body.eps then augment(sep); end; if sep.eps then raise("Grammar_error") end; if (opt and then body.eps) then raise("Grammar_error") elsif opt or else body.eps then set_eps(Current) end; end; end -- META_ITERATION

� � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � ! � � � � � � � � � � � � � � � 6 � : � � � � � � ' 7 � � � � � � � � � 3 � 6 � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � 6 �� � � � � � � � � � 6 � : � � � � � � ) ; � � � � 6 � � � 6 � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � : 6 � � 6 � � � � � � � � � � � 6 � � � � � � � 7 8 � � � 7 � � 6 � � � � � � 7 8 � � � � � � � � � � � � � � � � � � � � � � � � ) L � � 6 � � � � � � � � � � � � � � �� � � � � � � ! � � � 6 � � � � � � � � � � � � � � 7 8 � � � � � � � � � � � � 6 � : � � � � � � � � � � � � � � 3 � � � � � � � � � � � �� � � � � � � � � � � � : 6 � � 6 � 6 � � � � � � � � � � � � 6 � � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � )

� 6 � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � 6 � � � � � � : � � ) L � � 6 � � � � � � � � � � � � � � � � �� � � � � � � � � � � � 6 � � � � � � � � � 7 � � � � � � � � � � � � � 6 � � � � � � � � � � 6 � � � � � � � � � � � � � � � ) & � � � � � � � � � � � : � � � � � � 6 � � � � � � � � � � � 6 � � � 6 � � � � � � � � � � � � � � � � � � � 7 � � � � � � 2 � � 6 � : � � � : �� � � � � � � � � � � � 6 � � � � � � � � 3 � 6 � � � � � 9 � 6 � � � � � 6 � � � � � � � � 4 )

� 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � '

class ITERATION[T->NOTION] export repeat NOTION, repeat LINKED_LIST inherit NOTION; LINKED_LIST[T] feature ... some standard list operations ... end -- ITERATION

L � � � � � � � � 3 � � � � � � � � � � � � 2 � � � � � 7 � � � � � � � 4 � � 6 � � 7 8 � � � � � � � 7 � � 6 � � � � � � � � � � � � � �META_ITERATION

� � 7 � � � � � � � � � � � � 7 � � � � � Void

)

Page 26:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T W� 6 � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � : � � G : � � � � 3 � � � � �6 � � )

; � � � � � � � � � 7 8 � � � � � � � � � � 7 � 2 � 6 � � � � � � 7 8 � � � � � 4 � � � � � � � � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) & � � � � � � � � � � � � � � � : � 6 � � � ; 9 � e � � 2 1 � � � 2 � � � 4 41 � � � 2 � � f � f 4 f ) f ) � 6 � � � � � � � � � � � � ; � � 3 � � � � � � � � � � : � '

class META_A -- A = B Opt(List(C,D)) List(E,",") "." export repeat META_NOTION inherit META_NOTION redefine make; ACCESS_B; ACCESS_C; ACCESS_D feature -- local metaobjects: meta1: META_ITERATION[C] is -- Opt(List(C,D) once Result.Create(true,metaobj_c,metaobj_d) end; meta2: META_KEY is -- "," once Result.Create(",") end; meta3: META_ITERATION[E] is -- List(E,",") once Result.Create(false,metaobj_e,meta2) end: meta4: META_KEY is -- "." once Result.Create(".") end; make: A is do worklist.remove; worklist.put(meta4); worklist.put(meta3); worklist.put(meta1); worklist.put(metaobj_b); Result.Create; end; Create is do starters.Create(my_class); augment(metaobj_b); if metaobj_b.eps then augment(meta1); augment(meta3); if meta3.eps then add_starter(meta4) end; end; end; end -- META_A

� 6 � � � � � � � � � � � � � � ; � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � � � 7 � � � � � � � ' � � � � � � � � 6 � � � � � � 7 8 � � � � � �� 6 � � � 7 � � � � � � � � � � � � � � � � � � 6 � : � � � � � � � � � � � � � � � � � � � : 6 � � 6 � � 6 � � � � � � � � � � ) � 6 �� � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � '

Page 27:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T X

Create is local dummy: NOTION do b_component?= worklist.item.make; c_list?= worklist.item.make; e_list?= worklist.item.make; dummy:= worklist.item.make end

: 6 � �c_list

� e_list

� � � � � � � � � � � � � � 7 � � � � � � � � 7 � � � � � �A

) � 6 � � � � � � � � 6 � � �� � � � 7 � � � � � � � 6 � � � � � 7 � � � � � � < � � � ) 3 ) 7 � � � � � � 7 � � � � 7 � � 3 G : � � � � � � � � � � � 6 � � � � 7 � � �6 � � )

Î R Z � Z ^ Q � Z Q ^ R �

; � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � 6 � � � � � � � � � � � � � : � � G : � � � � 6 � � � 6 � � � ! � � � � � � � � � � f � ) ) ) � � � � � � � � � � � � : � � ) ) ) � f � � ) 3 ) 3 � � � � 9 � ; � f � f � f G f � � � � � 7 � � � � 6 � � � � ; f � f � ;f G f ) ; � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � 3 � � � � � � � � � 2 � � � � � � � � � � � � � � 4 � �: � � � � � 7 � � � � � � � 6 � � � � � � � � � � � � � � � � � � � 6 � � � 3 � � ) ; � � � � � � � � � � � � 1 � � 6 � � � � �� � � � � � � � � � � � � � � � � � � � � � � � 2

SET4 � 6 � � � 6 � � � � � 7 � � � � � � � : � � 6 � � � � � � � � G � � �

� � � � � � � � 5 � � � � � � � � � � � � � 7 � � 6 � � � � � � � � � � � 7 � � � � � � � � � � 6 � � � � � � � ) � � � 6 � � � 6 � � 7 � � � � � 6 � � � � � � : � � � � � � � � � � � 6 � � � � � � : � � � : 6 � � � � � 6 � � � � � � � � � � � � � � � 6 � � � � 6 � � � � � � : � 3 � � � � � � � � � � � � � � '

class META_SET export repeat META_NOTION inherit META_NOTION feature make: KEYWORD is do worklist.remove; from starter_list.start until not Result.Void or else offright loop if starter_list.item.starter.look_ahead then worklist.put(starter_list.item.starter); Result:= starter_list.item.starter.make end; starter_list.forth end end; Create is do starter_list.Create end end

� 6 � � � � � � � � � � � � � � 3 � � 6 � � 3 6 � 6 � � � � � � � � � � � � � � � � 3 � � � � 6 � � � � � � � � � � � 6 � � � � � G � � � 6 � � � � � 9� 6 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � 3 � � � : � � � � � � 7 8 � � � � � � � � 6 � � � �: � � � � � � � � � � �

make� � � � � � � � � � � � � � ) d � � � � � � 6 � �

KEYWORD� � � � � � � � � 6 � � � � � � � � � � � � � ) ` �

� � � � � � � � � � � � � � � � � � � � � � ) L � � � � � � � � � 6 � � � � � � � � � � � � 6 � � � � � � � � � � � � � � 7 � � � � � � � � � � � �� � � � � � � � � � 6 � � � � � � � � � � � � � 6 � � � � � � � � � � � � 3 � � � � � � 6 � � � � � � � � � � 2 7 � � � � � � � 6 � � � � � � � �� � � � : � 6 � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � 4 ) & � � � � � � � � � � � � � � � � � � � � ; : � � 6 � � � � � � � � � � � � ; 9 � � f G f � f ' f � ) � 6 � � � � � � � � � � � � ; � � 3 � � � '

class META_A export repeat META_NOTION inherit

Page 28:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T "

META_NOTION redefine make; ACCESS_B feature meta1: META_SET is once Result.Create end; make: A is do worklist.remove; worklist.put(meta1); worklist.put(metaobj_b); Result.Create; end; Create is local kw: META_KEY do starter_list.Create; kw.Create(";"); meta1.add_starter(kw); kw.Create(":"); meta1.add_starter(kw); augment(metaobj_b); if metaobj_b.eps then augment(meta1) end end end

L � 6 � � � � � � � � � � � � � � ; � 6 � � � � � � � � � � � � � � � � � � � � � � � 6 � � � 7 � � � � � � � G � ) � ) � � � � � � � � 7 8 � � � � �� 7 � � � � � � � � 6 � : � � � � � � � � � � � � � � � � � � 5 � � 6 � � � � � � � � � � ) � 6 � � � � � � � 3 � � � � � � � 7 8 � � � � � � � � � � � � � 6 � � � � � � 7 � � � � � � � � � � � � � )

� � Z � ] O N M � Z ^ Q � Z Q ^ R �

; � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � ) ; � � � � � � � � � � � � � � � � 1 � � � � � � � � � � � � � � � 3 � � 6 � � � �� � � 7 � � � � � � � � � � � � � � � � � � � G 6 � � : � � � � � � � � � � � � � � � 7 � e � � 2 ; 4 � : 6 � � ; � � � � � � � � 6 � � � 3 � � � � � � � � � � � � � � � � � ' e � � 2 ; 4 � � � � � � � � � � � � � � 6 � � � � � � � 6 � � � � � � � � < � � � � � ; ) ; � � � �� � � � : � � � � � � � � � � � � � � � � � � � 2 7 � � � � � � � 6 � � 6 � � : � � � 7 � � : � : � � � � � � � � � � � 6 � � � � � � � � � 3 �: 6 � � 6 : � � � � � � � � 6 � � � � � � � � � � � � � � � 7 � 3 � � � � 4 )

H � � � � � 6 � � � � � � � � � � 3 � � � 7 � � � � ' � � � � � 6 � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � �� � � � � � � � � � � � � � � � � � � � 7 8 � � � � � � � � � � 7 � � 6 � � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � � � � � � 3 � 6 � �� � � � � � � � ) � 6 � � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � : � '

class META_OPT[T->NOTION] export repeat META_NOTION inherit META_NOTION redefine make feature body: META_NOTION; make: T is do if look_ahead then Result?= body.make else worklist.remove

Page 29:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T $

end end; Create(b: META_NOTION) is do body:= b; starter_list.Create; augment(body); set_eps(Current) end end

L � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � �make

� � � � V � � ) � 6 � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � 7 � � � � � � � 6 � � � � � � � � � � � � �

make� � � 6 � � � � � � � � � 6 � � � � � � � � 6 � � � � ) ; 3 � � � � � � � � � �

� � 7 � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � : � � � � � � 6 � � � 7 � � � � � � � � ' � 6 � � � � � � � � � � 7 � � 6 �

make� � � � � � � � � � � � � � � � � � � 7 � � � : 6 � � � � � � � � � � 6 �

� � � � � � 6 � � � � � � � � 6 � � � � )

Ï Ð � � � � ? � � Ñ � F � C F A � E @ � C Ã � A � F ? À

É ^ � O � � � M R �

; � � � � � � � � � � � � � � � 3 � � 3 � � � � � � � � 3 � � � 6 � � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � 3 � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � ) � � � � � � � � 6 � � � � �� � � � � � � � � � � � � � � � � � � � � � � 3 � � � 7 � � � � 7 � � � � � � � � � 3 � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 �� � � � � � 3 � � ) � � � � � � � � � � � � � 7 � � � � 7 � � � � � � � � � � � � � � � � � � � � � � � 3 ' � � � � � 3 � � � � � � � � � 7 �� � � � � � � � 3 � � � � � � � � � � � � � � � 6 � � � � � � � � � � � 6 � � � � 7 � � � � 7 � � ) � 6 � � � � � � � 6 � � � � � � � �� � � � � � � � � � � � � � � � � � � 6 � � � � � 3 � � � 6 � � � � � � � : 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � �� � � 6 � )

� � 6 � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � : 6 � � 6 � 6 � � � � � 6 � � � � � � � � � � 6 � � � � 7 � � : � � � : �� � � � � � � � � � � � � � � � � 7 � � 6 7 � 3 � � 3 : � � 6 � � � � � � � � ) � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � � 6 �� � � 7 � � � � 7 � � � � � � � � � � 6 � � � � � � 6 � � � � � � � � � � � � � � � : � � 6 � 6 � � � � � � � � � � � � � � 3 � � 6 � � � � � )� � � � � � � � 6 � � � � � � � � � � � � � � � 3 6 � � � � � � � 6 � � � � � � � ) ; � � � � � � � ! � � � � � � � � ) 3 ) � 6 � � � � � � � � � �� � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � ' � � � � 7 � � 6 � � � � � � � � � � � 7 � 3 � � 3 : � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) � 6 � � � � � � � � � � 7 � � � � � � � � � 3 � 6 � � � � 7 � � � � 7 � � � 7 � � � � � �� � � � � 3 � � � 7 � 3 � � : � � 6 � � � � � 7 � � � � � � � � � : 6 � � � � � � � � � � � � � � 7 � 3 � � : � � 6 � � � � � � �� � � � � � � )

e � � 7 8 � � � 9 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � 7 � � � � � � � � � � � � � 3 �3 � � � � � � � 6 � < � � 7 � � 6 � � � � � � � � � 3 f � � � � � � � � f � � � � � � � � � � � � 2 � ) � ) � � � � 7 � � � � 7 � � 4 � � � � � � 3 � 6 � � � � � � � � � � � � � � � � � � � � � � 3 ) � 6 � � � � � � � � � 6 � � � � � � 6 � � 7 8 � � � � � � � � � � 6 � � �� ! � � � � � � � � � � � � � � � � � � ! � � � 9 : � � � � � � � � � � 3 � � 5 � � 6 � � � 7 � � ) & � � 6 � � � 6 � � � � � � � � � � � � 7 � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � 7 8 � � � � ' � � � � � 6 � � � � � � � � � � � � � � 6 � � 7 8 � � � � )H � � � � � � 6 � � � � � � : � 3 7 � � � � � � � � � � � '

� 4 � 6 � � � � � 7 8 � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � 3 � 3� � � 6 � � � � � � � 7 8 � � � � � � � � � � � � � � � � 6 � � � 3 � � ) H � � � � � � � � � � � 6 � � � 6 � � � � 7 8 � � � � � �� ! � � � � � � 6 � � � � 7 8 � � � � : 6 � � 6 � 6 � � � � � � � � � � � � � � �

NAMED) ; � � � 3 9 � � � � � � � � � 7 � � �

key� �

NAMED3 � � � � � 6 � � � � � � � 6 � � 7 8 � � � ) � 6 � � � � � � � � � � � � � � � � 7 8 � � � � � � � � � � � � 6 �

] � � R � Z � N � R )

T 4 � 6 � � � � � 7 8 � � � � � � � � � � � � � � � � � � � 8 � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � : � � 6 � 6 � � � � � � � � � � � 6 � � � � 3 � � � � � � � � � � � �SCOPE

) ; � � � � 7 8 � � � 7 � � � � � � � � � � 7 � � � 6 � � � � � � � � � � � � � : � � 6 � 6 � � � � � � � � � � � � SCOPE

� 7 8 � � � 2 : � � 6 � � � � � � � � � 6 � � � � � � � � � � � � � � 6 � � � � � � � � 3 � � � � � � � � � � � � 4 )

Page 30:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T a% 4 � 6 � � � � � 5 � � � � � � � 6 � 2 � � � � � 4 � � � � � � � � � � 6 � � � � � 7 8 � � � � � � � � � � � � � � � � � � � � �

� � � � � � � � � 6 � � � � � � 3 � � � � � � 3 � � � � � � � � ) e � � � 6 � � � � � � � 7 8 � � � � � 6 � � � � � � � � � �� � � � � � � � � � � � � 3 � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � )

W 4 ; � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � �� � 7 � � � � � � � � � � : � � 6 � Ò Q N M � � � R ^ � � 6 � � � � � � � � 3 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � 3 � � � � � � � � � � [ R O ] Z R ^ ] � � R � Z ) ; < � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � �

NAMED) L � � � � � � � � � � � � � � � � � � 3 � � � � � 7 � � 6 � � � < � � � � � � � � � �

� � � � 6 � � : � � 6 � 6 � � � � � � � ! � � � � � � � � � � � � 6 � � � � � � � � � � � � � � N O [ � 6 � � � � � � � � � 7 8 � � � 2 N^ R � ] M ¹ � O P ] � � R � Z 4 � � 6 � � 7 8 � � � 7 � � � : 6 � � � � � � � � � 6 � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � 7 � � � 2

denoted_name4 � � � 6 � � � � � � 7 8 � � � � � : 6 � � � � � � � � � � � � � � � � � � � � � �

� � � 6 � < � � � � � � � )

� 6 � � � � � � � � � � � � � � � � � 6 � � < � � � � � � � � � � 7 � � � � � � � � � � 3 � � � 6 7 � � : � � � : � � � � � � � � � � � � � � � � � � �7 � 3 � � 3 � � 6 � � � � � : � � � � � � � 3 � � � 6 � � � � � � � � � 7 8 � � � � � 6 � � 7 8 � � � 7 � � � � � � 6 � 6 � � � 4 � � � � � �� � � � : � � � 6 � � � � � � 7 8 � � � � � T 4 � � � 2 � � � � � 4 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 �� � � � � � � ) � 6 � � � � � 3 � � � � � 5 � � � � � � � 6 � � � � � � � � � � � : 6 � � 6 � : � � � � � � � � � � � � � � � � � � 7 � � 6 7 � 3 � : � � 6 � � � � � � � � � � � � 3 � � � � � � � 6 � 3 � ' : � � � � � � � � 6 � � � 6 � < � � � � � � � � � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � 7 � � � � � � 7 � � � � � � � � � � : � � 6 � � � � � � � � � 9 � � � : � � 6 � � � � � � � � 9 � � : � � � � � � � � � � � 6 � � � 6 � � � � � � � 6 � � � � � � � 3 � 7 8 � � � � � � � � � � � 3 � � � 7 � � 6 � � � � � � � � ! � � 7 � � � � � � 7 � � � � � � � � � � 7 � � 6 � � � � � � 7 8 � � � ) � 6 � � � � � 3 � � � � � 5 � � � � � � � � � � � � � � � < � � � � � � � 6 �� � � � � � � � � � � � < � � � � � � � � � � 1 � ' � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � 7 � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � 6 � � � � � � � � 6 � � � 7 � � � � � � � 2 � ) 3 ) � 6 � � � � � � � � � � � � � � � � � 4 G � 6 � � � � � � � � � � 7 � � � � � � � � � � � 6 � � � � � � � � � � � 6 � � � 7 � � � � � � � � � � � � � � � � � � �� 6 � 3 � ) � 6 � � � � � � 3 � � � � � 5 � � � � � � � � � � � � � � < � � � � � � � 6 � � � � � � � ' � � 6 � � � � � � � � < � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � 6 � � � � � � � 6 � � � � � � � � � � � 7 8 � � � : � � � 7 � � 6 � : 6 � � � � � ! � 3 � � � � � 7 � � 6 � � � � � � � � � 7 � � � 6 � � � � � � 7 � � � � � � � � � � 7 � � � � : � � )

H � � � � 6 � � � 6 � � � � � � : � 3 � � ! � � � � � � � � � � � � < � � � � � � � � � � � ' I Ó K ; � � � � � ; < � � � � � � � : � � 6 Ó ) � 6 �� � � � � 6 � � � 6 � � � � ` � � � 6 � : 7 � � � � � � � ` G : � � � � � 6 � � � � � � � � � � 3 � 6 � � 6 � � � � 3 � �

NAMED� SCOPE

)

� � N � � M R Ô

; � � � � � � � � � ! � � � � � � � � 6 � � � � � � < � � � � � � � � � � � � � � � � � � 6 � 3 � � � � '

� 9 � � � f ) f� � ; � ; 9 � f � f � 9 � f 7 f � � � V � HV 9 � � f � fH 9 � � f 7 f

H � � < � � � � 6 � � � V � 6 � � � � � � � � � � � � 6 � � � � � � � � � � ; � � � H � 6 � � � � � � � � � � � � 6 � � �� � � � � � � G � ) � ) � 6 � � � � � � : � 3 � � � � � � � � � � � 3 � � ' f � ! ! � f � f 7 ! ! 7 f G 7 � � � 6 � � � � � � : � 3 � � � � ' f �! ! 7 f � f � ! � � f ) � 6 � � � � � � � � � � � 7 � � � � � � � � 7 � � � � 6 � � 3 � � � � � � � ! � 9 � � � � � � � 3 � 7 � � � � � � 7 �� � � � � � � � � � � : � � 6 < � � � � � � � � � � � '

�SCOPE

9 � � � f ) f�

NAMED� ; �

; 9 � f � f � 2key

' � ) ) ) � � � 3 � � � ) ) ) 4 9 � f 7 f � 2

key' � ) ) ) � � � 3 � � � ) ) ) 4

� � V � HV 9 � I ; K � f � f 2

denoted_name' � ) ) ) � � � 3 � � � ) ) ) 4

H 9 � I K � f 7 f 2denoted_name

' � ) ) ) � � � 3 � � � ) ) ) 4

� 6 � � � � � � � � � � � � 7 � � � � � � � 3 � � � � � � � 6 � � � � � 7 8 � � � � 2 � 7 � � � 4 � � � � 6 � � � � � � 7 8 � � � � 2 7 � � � : 4� � � 6 � : � � 6 � � 3 6 � ) � 6 � � � ! � � � � � � � � � � 3 6 � 7 � � � � � � � � � � 6 � � � � � � � � � � 3 � � � � � � � � � � � 3 � � �� : � � � � � � � � � � � � � � � 7 � � 6 7 � 3 � � 3 : � � 6 � � � � � � � � )

Page 31:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

T J

2 � � � � ! � � � � � 4

; � � 6 � � 3 6 � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � 6 � 3 � � � � � 5 � � � � � � � � � � � � � 7 � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � � 3 � � � � 3 � � 3 � � 3 � � ) ; � ! � � � � � � � � 6 � � � � � � � � � � � � � � � � � � : 6 � � 6 � � � � � � � 6 � � � � � � � � � � � � � � � 7 � � � � 6 � � � � 6 � � � 6 � � � � � � � � � � � � � 9 � 6 � � )& � � � � � � � � � � � � � � � 6 � � 7 � � 6 � � � � � 3 � � � � � � � � � � � � � � � � � 7 � 3 � : � � 6 f ! ) � ) 5 ) ) ) f ) c � � � � �� � � � � 6 � � � � � 3 � � � � � � � � 6 � � � � � � � � � � 6 � � � � � � 6 � � � � � � � � � � 7 � � � 6 � � � � � � � 2 � � � � 7 � � � � � � � � � 4 : 6 � � 6 � � � � � � � � 7 � � � � � � � � � � 6 � � � � � � � ! � ) L � � � � � 6 � � 6 � : 6 � � � � � � � � � � � � < � � � � � � 7 � < � � � � � � � � � � � � � � 3 � 6 � � � 6 � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � 6 �

denoted� � � � 7 � � � � � � 6 � � � 6 � � � � � � � 7 8 � � � � � 7 � � � � � � � � 6 � � 7 8 � � � 7 � � � ) � 6 � � � � � � : � 3 � ! � � � � �� � � � � � � � � � � 6 � � )

� � N � � M R Õ

V � � � 7 � �NAMED

9 � L � � � � � � f ' f � � � �� � � � � �

NAMED9 � f � d e � f L � � � � � � ) ) )

) ) ); � � � 3 � � � 9 � I V � � � 7 � � K � � � � � f ' � f � ! � � � � � � � � � � 9 � I � � � � � � K � � � � � ; � � � � � � � � � � � �� � � � � 9 � 1 � � � 2 L � � � � � � � f ) f 4

2 � � � � ! � � � � � 4

Y R ¹ � � � ] O � ] � M N O P Q N P R � � O [ R � R O [ R O Z � M N � � R �

1 � � � � � : � � � � � � 6 � � < � � � � : � � � � � � � � � � � � � � � � � � 6 � � ! � � � � 3 � � � ) � � � � � � � � � � � � � 7 �< � � � � � � � � � 6 � � � � � � � 6 � � � � � � � 3 � 7 8 � � � � � � � 7 � 3 � � � � � � � � � � 7 � � � � �

NOTIONG : � � � � � � � �

� � � � 7 � � � � � � � � � � 3 � 6 � � � � � � � 3 � 7 8 � � � � � � � � � 2denoted_obj

4 � � � � � � � � � � � � � � 3 � 6 � �� � � � 7 � � � 2

set_denoted4 � � � � � � � � � � � � 3 � 6 � � � � � � � � � 6 � � � � � � � � ! � � � � � � � � 3 � � � 6 � �

� 7 8 � � � 2source_text

4 � � � � � � � � � � � � � � � � � � 3 � 6 � � � � � � 7 8 � � � : � � 6 � � � � � 7 8 � � � � � � � � 6 �� 7 8 � � � 7 � � � : � � 6 � 6 � � � � � � � � � 3 � � � � < � � � � � � � 2

attach4 G � 6 � � � � � � � � � � � � � � � � � � � � � � � � 2 : � � 6

� 6 � � � � � � � � � � � � 4 � � � � � 7 � � 6 � � 7 8 � � � 7 � � � )

class NOTION export ... inherit NAMED_OBJECTS feature denoted_name: STRING; denoted_obj: NAMED; set_denoted(d: NAMED) is do denoted_obj:= d end; source_text: STRING is do Result:= ... the source text corresponding to this instance ... end; attach(qua: META_NOTION): BOOLEAN is do Result:= objectbase.attach(Current,qua) end; ...

� 6 � � � � � � � � � � � � � � � � 7 8 � � � � � � � 3 � � 5 � � � � � � � � �SCOPE

� 7 8 � � � � � � � � 6 � � � � � � � � � : � � 6 � � � � � �NAMED

� 7 8 � � � � ) L � � 6 � � � 7 � � � � 6 � � � 5 � � 6 � � � 6 �NAMED

� SCOPE

� 7 8 � � � � � � � 6 � � � � � � 7 8 � � � �� � � � � � 3 � � 6 � � � � � � � � � � � � � � � � � � � 6 � � � � � � � 3 � � 9 � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � 7 8 � � � � ) H � � � � � � � � 6 � � � � � � � 6 �

SCOPE� 7 8 � � � � � � 6 � � � � � � � Q ^ ^ R O Z � � � � � �

� � � � ) � 6 � � 3 � � 7 � � � � � � � � � � � � � � 7 � � � � 6 � � � � � � : � � � 6 � � 3 6 � � � � � � � � � � '

Page 32:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

% #

class NAMED_OBJECTS export objectbase feature objectbase: OBJECT_BASE is once Result.Create end end

� � � � �OBJECT_BASE

� � 3 � � � 7 � � � : ) � � � � � 6 � � ! � � � � � � � � � � � � � � � � � � 6 � � � � � � � � �look_up

� insert

� � 6 � � � � � � � � � � � � � 2 � � 6 � � � � � : � � � 7 � � � � � � 4 � � 6 � � � 3 � � 3 � � � 7 �� � � � � � � � � � : � : � � � � ! � � � � � 6 � � � � � � � � � � � � � Ö )

class OBJECT_BASE export look_up, insert, attach, enter_scope, exit_scope inherit COMPACT_TREE[SCOPE]; EXCEPTIONS feature look_up(obj_name: STRING): NAMED is -- return the named object whose key attribute equals to -- obj_name; if none exists, return Void end;

attach(arg_obj: NOTION; qualifier: META_NOTION): BOOLEAN is local n: NAMED do n:= look_up(arg_obj.denoted_name); if not n.Void then if not n.creator.compatible(qualifier) then Result:= false else arg_obj.set_denoted(n); Result:= true; end; end; end; -- attach

insert(x: NAMED): BOOLEAN is -- insert x into the current scope of the object base; -- if an object with the same name already exists in the -- scope, return false, otherwise true end;

enter_scope(s: SCOPE) is do -- insert a new scope node s into the object base as the -- son of the current scope, and let the new scope -- be the current scope end;

exit_scope is do -- let the parent node of the current scope be the new -- current scope end;

Ö w k x t i s { m s } j y q n z h q m   h q r l h k l m z q h s j n h x m k h t l j u h } p t s o m i p h o i j q q h i s m j k j x j | h o t s m j k l x j oOBJECT_BASE

{t q q j } m k § s p h m u | q h u h k s t s m j k j x × t o m j y l k j k Ø s o m × m t q l i j | h o y q h l Ù } h t o h p h o h i j k s h k s h n } m s p l m u | q h q j j   y | t k nm k l h o s o j y s m k h l { t k n l i j | h h k s o t k i h t k n h Ú m s o j y s m k h l v Û p h m u | q h u h k s t s m j k j x k j k Ø s o m × m t q l i j | h o y q h l x t q q l

z h r j k n s p h l y z £ h i s j x s p m l | t | h o v

Page 33:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

% �

end -- OBJECT_BASE

& � � � � � attach

� � � � � � 6 � � � � � � � � � � � : � � 6 � 6 � � � � � � 7 8 � � � � � 6 � � � � � � � � 3 � � � � 7 8 � � � �� � � 3 � � � � � �

look_up� � � � � � � � � 6 � � � � � 7 8 � � � � � 6 � � 7 8 � � � 7 � � � ) L � � 6 � � � � � � � � � � � � � � � � � � � � � � � �

� 6 � � � � � � � � � � � � � � � � � 6 � : � � � � � � � � ) � 6 � � � � � � � � � � � � � � � � � � � : � � � � � � compatible � � � � � � � � � � � � � � 7 8 � � � � G � 6 � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � 6 � � � � � � � �

� � � � � � � 7 � � 6 � � � � � � � � � � 7 8 � � � 2 � ! � � � � � 3 � 6 � � � � � � � 4 � � � � � � � � � � � � 6 � � � � � � � � � � � � � �� 6 � � � � � � � � � � � � � � � 7 � � 6 � � � � � � 7 8 � � � 3 � � � � � � � � � � � � )

� � � � �NAMED

� � � � � � 6 � � � � 3 9 � � � � � key

� � � � 7 � � � ) & � � 6 � � � � � � � � : � 6 � � 6 � � � � 3 � � � � � � �� � � � � � � 7 � � � � � � � � � � � 7 8 � � � � � � � � � : � 6 � � � � � � 7 8 � � � � 6 � � � � � � � � � ' � 6 � � � � � � � 7 8 � � � � � � � � � �� 6 � � � � � � � � � � � � � � 6 � � � � � 7 8 � � � ) � 6 � � � � � � 3 � � � � � 7 8 � � � � � 3 � � � 7 � � � � � 7 � � �

creator)

e � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � 3 � 6 � � 7 8 � � � � � � � 7 8 � � � 7 � � � '

class NAMED export key, creator, set_creator inherit NAMED_OBJECTS; ERROR_MSG feature key: STRING; creator: META_NOTION; set_creator(m: META_NOTION) is do creator:= m end; insert is do if key.Void then error("Naming error") elsif not objectbase.insert(Current) then error("Naming error") end end; end -- NAMED

� � � � �SCOPE

� � � � � � � � � � 7 � � � 2obj_set

4 � 6 � � 3 � � � � � 6 � � � � � � � � � � � � � � � � � � � 7 8 � � � � ) & � � 6 � �� 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � 3 � � ! � � � 3 � � � � � � G � 6 � � � � �� � � � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � 3 � � � � � � � � � �

OBJECT_BASE)

class SCOPE export obj_set, enter_scope, exit_scope inherit NAMED_OBJECTS feature obj_set: OBJECT_SET; enter_scope is do object_base.enter_scope(Current); end; exit_scope is do object_base.exit_scope; end; end -- SCOPE

� � � � �OBJECT_SET

� � � � 7 � � � � � � � � � � � � 7 8 � � � � � � � � � � � � � : � � 6 � 6 � � � � � � ) L � � � � � � � � � � � � � �� � � � � � � 3 � � : � 7 8 � � � � � � � 6 � � � � � � � � � � � 3 � � 7 8 � � � : � � 6 � 3 � � � � � � � � 6 � � � � G � 6 � � �� � � � � � � � � � � � � � � � � 7 � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � �

OBJECT_BASE) � 6 � � � � � � � �

� � � � � � � � � � � � 6 � � 6 � � � � � � � � G : � : � � � � � � � � � � � 6 � � � � � � � 6 � � � � � � � � )

Page 34:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

% TH � � � � � 6 � � � � � � � � � � � 6 � � � � � � � � � � � 6 � � � � � � � � � � � 7 � � � � � � � 3 � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � G � 6 � � � � � � � � � 3 � � � � � 6 � < � � � � � � � 2 � � � � � 7 8 � � � 4 � � � 6 � � � � � � � � � � � � � � � � � � 7 � � �� � � � ) c � � � � : � 6 � � � '

class START_ITEM export starter, struct, set_struct, qualifier feature starter: META_NOTION; struct: META_NOTION; qualifier: META_NOTION; -- <--- set_struct(str: META_NOTION) is do struct:= str end; Create(sta,str,qua: META_NOTION) is do starter:= sta; struct:= stu; qualifier:= qua -- <--- end end -- START_ITEM

� � � � �META_NOTION

� � � � � � � � � � � � � � � � � � ) & � � � � � compatible

6 � � � � 7 � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � 7 � � � � 6 � � � � � � � � � � � � � � � 2 � � � 7 � � � : 4 ) � 6 �

make� � � � � � � 6 � � � �

7 � � � 3 � � � � : � � 6 � � � � � � � � 3 � � � 3 � 6 � � � � � � 7 � � < � � � � � � � 2 � � � � � � � � 7 8 � � � 4 ' � � � � 6 � � � � � � � � � � � � � ! � � � 6 � � � � � � � � � � � � � � � 7 � � � � � 7 � � � � � � � � � � : � � 6 � � � � � � < � � � � � � � � � : � � 6 �< � � � � � � � � � � � � ) & � � � � � � � 6 � � � � � � � � � � � � � � � � 6 �

screen� � � � � � � 6 � � � � � 6 � 3 � G � 6 � � � �

� � � � � � � � � 6 � � � � � � � 6 � � � � 6 � < � � '

deferred class META_NOTION export make, look_ahead, match, eps, eps_struct, starter_list, compatible ... feature ... compatible(other: META_NOTION): BOOLEAN is deferred end; ... make(qua: META_NOTION): NOTION is deferred end; ... screen: META_NOTION is local candidate: START_ITEM do from if not failure then starter_list.start else starter_list.forth end until starter_list.offright or else not Result.Void loop candidate:= starter_list.item; if candidate.starter.look_ahead then if candidate.qualifier.Void then Result:= candidate.struct else scan.mark; temp:= candidate.starter.make(candidate.qualifier); scan.resume; if not temp.Void then Result:= candidate.struct; end end end;

Page 35:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

% %

starter_list.forth end; rescue failure:= true; scan.resume; retry end; -- screen

add_starter(sta, qua: META_NOTION) is local it: START_ITEM do it.Create(sta,Current,qua); starter_list.add(it) end; -- add_starter ... end -- META_NOTION

� 6 � � : � � � � � � � � � � � � � �screen

� � � � � � � � � � � � � � � ! � � � � � � � � ) L � � 6 � � � � � < � � � � � � � � � � � � � � 6 � � � � � � � � � � � � 6 � � � � � � � � : � � � � ! � � � � � � � 7 � � � � ) c � : � � � � � � � � � � � � � � � � � �< � � � � � � � � � � � � � � � 9 � 6 � � � � � � � � � � � 6 � � � � � � � � � � 6 � � � � 7 � � � � � � � � � � � � � � � � 6 � � � 6 � � � �� � � � � � � � � 7 � � � � ) c � � � � � 6 � � � � � � : � � � � � � 6 � � � � � � � � � � � � � � � 6 � � � � � � � � � � � 7 8 � � � 2 � � 6 � � � � � � � � � � � � � � � � � � � � � : 6 � � 6 � � � � � � � � 7 � � � 6 � � � � � � � � � � � � 6 � � � � � � � 6 � � � 6 � � � � � � � � � � � � � � 4 ) L � � 6 � � � � � : � � � � � � � � � � � � � � 6 � � � � � � � � 3 � 7 8 � � � : � � � � � � � 6 � � 7 8 � � � 7 � � � � � 6 � � � � � � � 3 � � � � � � � � � � � � �

temp) L � � 6 � � � � � � � � � � � � 7 � � � 6 � � � � � � � � � � � � 3 � � � � � 7 8 � � � �

temp7 � � � � � � V � � � � 6 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � 3 � � � 6 � � � � � � � � � �

� � � � � � � ) L � � 6 � � � � � � � � � � � � � ! � � � � � � � � � � � � : � � 6 � make

� � � 6 � � ! � � � � � � � � � � � 3 6 � 7 � � 6 � � � � � � � � � � � � : 6 � � � 6 � � � � � � � � � � � � � 3 � � � � � � � � � � 6 � � � 6 � � � � � � � � 3 � � � 6 � � � � � � � � � � � � �� � � � � � ) ` � � � � 6 � � � � � � � � � � � � 6 �

screen� � � � � � � � � � � � � 6 � 3 � � 6 � � � � � � � � � 6 � � � � � � � � � � )

; � � � � � � � 6 � � � 6 � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � : � � � � � � � � � � � : � � � � 3 � � � � � � � 3 � 6 � � � 6 � � � � � � � � � � � � � 6 � � � � � � � � � � � �� 7 � � � � )

Y R ¹ � � � ] O ] � M N O P Q N P R � [ R � R O [ R O Z � M N � � R �

� 6 � 7 � � � � � � � 6 � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � 9 � � � � � � � � � � � � � � � � � � � � � � � :� � � � � � � � G � 6 � � � � � � 3 � � � � � � � � � � � � � � 6 � � � 3 � � 3 � 9 � � � � � � � � � � � � � � � � � � 6 � � � 6 � � � � � � � � � � �� 6 � � � � � 6 � � � ) H � � � � � � 6 � � � � � � � � � 6 � � � 6 � � � � � � � � � � � � 7 8 � � � � � � � � � � � � � � � � � � � � 6 �� � � � � � � � � � � � � � � � � � � � � � � : � � 6 � 6 � � � � � � � � � � � � � � � � 7 � � � 3 � 3 � � � 6 � � � � � � � � � � � � � � � � � � � 6 � � � � � � � 3 � � ) � 6 � � � � � � � � � � � � � � � 6 � � � � � � � � 3 � � � 6 � � 7 8 � � � 7 � � � G 6 � � �� 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � �

L � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � 7 � � < � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � � 7 � � � ' � 6 � � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � : � � ) & � � � � � � � � � � � � : � � � � � � � 6 � � � 6 � � < � � � � � � � � � � � � � � � � � � � 7 � � � � � � G 6 � � � � 6 � � � � � 6 � � � � � � � 7 � �� � � � � � � � 7 � � � � � � � � � � � � 7 � 6 � � < � � � � � � � � � � 7 � � ) ; � � � � � � � : � � � � � � � � � � � � � � ! � 6 � � � < � � � � � � � 7 � � � � � � � � � � � � � � 6 � � < � � � � � � � � � � � � � � � � � � � � 3 � � � � � � � � ! � � � � � � � � � � � � � � � � � : � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � )

� 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � G � � � � � � 6 � � � 6 � � � � � � � � � � � � � � � �� � � � � 7 8 � � � � � � � � � � � � � � � � � � 6 � 6 � � � � � � � �

make� � � � � � � � � � 6 � � � � � � � � � � � � � � � � � �

� � � � � 7 8 � � � ) � 6 � < � � � � � � � � � � � � � � � � � � 7 � � � '

make(qua: META_NOTION): A is do Result?= match.make(qua) end;

� � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � compatible

) & � � � � � � � � ; � � 6 �� � � � � � � � �

META_A� � 3 � � � � � � � � � � : � '

Page 36:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

% W

compatible(other: META_NOTION): BOOLEAN is do Result:= other = Current or else metaobj_a1.compatible(other) or else ... metaobj_ak.compatible(other) end

: 6 � � ; � � ) ) ) � ; � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � ; � 6 � � � � � � � � � � � � �NAMED

)

; � � � � � � � � � � � � � � � � � � � � � � : 6 � � 6 � � 6 � � � � � � � � � � � � � � � � � � � � 6 � � � �NAMED

� SCOPE

) L �� � � 6 � � � � � � � 6 � � � � 6 � � � � 6 �

make� � � � � � � � � � � � � � � � � � � � 3 6 � � � � � � � � ) & � � � ! � � � � � � �

� 6 � � � � � � � � � < � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � ; 9 � I � K � '

class META_A export repeat META_NOTION inherit META_NOTION; ACCESS_B; ACCESS_C; ACCESS_D feature make(qua: META_NOTION): A is do worklist.remove; worklist.put(metaobj_d); worklist.put(metaobj_b); Result.Create; if not qua.Void then if not Result.attach(qua) then error("Naming error"); Result.Forget end end end; Create is local si: START_ITEM do starter_list.Create; add_starter(metaobj_b,metaobj_c); end end

` � � � � 6 � � � � � � � � � � � � � � � � � � � 3 � : � � � � � � � � 6 � < � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � �: � � � � � � : � ) � 6 � � � � � � � � � � � � � � ; : � � � 7 � � � � � � � � : � '

class A export repeat ... inherit ... feature b_component: B; d_component: D; Create is do b_component?= worklist.item.make(metaobj_c); d_component?= worklist.item.make(nil); end end -- A

c � �nil

� � � � � � � � � � � � � � � 6 � � � � � � � � � � 2 � � � � � � 3 � � � � � � � � � � T ) % � 6 � � � � � � � � 6 � ! � � � � � �� � � � � � 7 � �

nil� � 7 � � � � � 5 � � ) 3 ) � � � � � � � � � � � 5 � � � � � 7 � � � 4 )

Page 37:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

% X

& � � � � � � � � � � � � � � � � � � � � � � �NAMED

� � 6 � � � � � � 7 8 � � � � � � � � � � � � 6 � � 7 8 � � � � � � � 6 � � 7 8 � � � 7 � � � �� � � � � 6 � � � � � � � � � � �

creator� � � � 7 � � � G � 6 � � � � 7 � � � � � � � � � � � � � � � � � � � � � � 3 � 6 � � 7 8 � � � )

� 6 � � � � � � � � � 6 �key

� � � � 7 � � � � � � 6 � � � � � 7 8 � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � 3 � 6 �� � � � � � � 3 � � � 6 � � � � � � � � � � � )

make(qua: META_NOTION): N is do ... Result.Create; Result.set_creator(Current); Result.insert; if not qua.Void then if not Result.attach(qua) then error("Naming error"); Result.Forget end end end;

& � � � � � � � � � � � � � � � � � � � � � � �SCOPE

� � 6 � � � � � � 7 8 � � � � � � � � � � � � � � � � � ! � � � 3 � 6 � � � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � � � � � � ) c � : � � � � � 6 � � � � � 3 � � � � � � � � � � � 7 � � ! � � � � � 7 � � 6 � � � � � � 7 8 � � �7 � � � � � � � 6 � � � � � � � � � 6 � � � 7 � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � � � � 6 � � � � � � � 7 8 � � � � � � � �� ! � � � 7 � � � � � � � � � 3 � 6 � � � � � � � � � � � � � ) c � � � � 6 � � � � � � � � � � � � � 7 � � � � � � � � � 6 � � � � � � � � � � � � �� � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � : 6 � � � 6 � � � � � � � 7 8 � � � � � � � � � � � 7 � � � � � 6 � � � � � � 7 8 � � � )

� � Z � � � · N Z � ] O �

� 6 � � � � � � � � � � � � � � 6 � < � � � � � � � � � 7 � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � ' � � � 6 � 7 8 � � �7 � � � � � � � 9 � � � 6 � � � � 3 � � � � � � � � � < � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � 7 � � � � � � � � � � � �� � � � � � : � � � � � � � � � � � � � 9 � 6 � � � � � � � � � � � � � � � � � � 3 ) L � � � � � � � � � � 6 � � 7 8 � � � 7 � � � � � � � 9 � �� � � 6 � � � � � 7 � � � � � � � � � � � � � � 6 � � � � ) & � � � � � � � � � � � � � � 6 � � � � � � � � � ; � � � � 9 �� ) ) ) � � � � � & � � 9 � I & K b ) ) ) ) L � 6 � � � � � � � � � � � � ; � I & K b � � � � � � � � � � � � � � � 3 � � � 6 7 � � : � � � � �� � � � � � � 3 � 6 � � 7 8 � � � 7 � � � ) L � � � � � � � � � � � � � � � � � � 3 � � � � � � 6 � � � � � � 7 8 � � � � � � : 6 � � 6 � 3 � � � � � � � � �� 6 � � 7 8 � � � 7 � � � ) & � � � � � � � � 3 � 6 � � � � � 3 � � � � I & K b � � � � � � � � � � � � � � � 5 � � � � 6 � � 7 8 � � � 7 � � � � �� � � � � � � � � � 6 � � 6 � � � � � ) ; � � 6 � � 3 6 � 6 � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � 3 � � � � 6 �7 � � � � � � � � 3 � � � � � � � 6 � � � � � � � 6 � � 7 8 � � � 7 � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � � � � 6 � � )

� � � 3 � 6 � � � � � � � 5 � � � � � � � 6 � < � � � � � � � � � � � � � � � � T � � 6 � � � � � � � 3 � � � 6 � � 7 8 � � � 7 � � � � � � � 9 � � � � 7 � � � � � � � � � 2 � ) � ) � � � � � � � � � � � � � � � 9 � 6 � � � � � � � � 9 � ! � � � � � 6 � � � � � � � � � � 4 ) � 6 � � � � � � 3� � 7 � � � � � 6 � : � � � � � � � � � � � 6 � � � � � � 3 2 � � � � � 3 � 6 � � 7 8 � � � 7 � � � � � � � 9 � � 4 � � 3 � � � � � � � � � � 3� 6 � � � � : 6 � � 6 � � � � � � � � � 6 � � � � � � � 7 � � � � � � � � � � � 3 � 6 � � � � � 9 � 6 � � � 6 � � � ) H � � � �� 6 � � � ) 3 ) � � � � � � � : � ' � � � 6 � � � � � 7 8 � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � 6 � �� � � � � � � � � ) H 6 � � � � � < � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � 9 � 6 � � � � 6 �� � � � � � � 3 � � � � � 7 8 � � � � � f � � � � � � � � � f 7 � � � � � � 3 � � � � 3 � � � � 7 � � � ) L � � � � � � � 7 8 � � � � � � � � � � � � < � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � 3 6

make� � 6 � � � � � � � � � � � � � � � � 2 � � � � � � 6 � � � � 3

� 4 � � � � � 6 � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � � 3 � � � � � 6 � � � � � � � � )

� 6 � � � � � � � � f 6 � � 5 � � � � f � � � � � � � � 3 � � � � � � � � 6 � � � � 6 � ' � � � � � � � � � � � � � � � � � � � � � � � � � �� � � 6 � � � � � � � � � � � � � � 7 � � : � � 6 � � � � � � < � � � � � � � � 2 � � � � � � � � � 7 � � � � � � � � � � � � � � � � �� � � � � � � 4 � � 6 � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � 7 � � � � � � � � � � � � � 7 8 � � � 7 � � � � � � � 9 � � � � � � � � 3 � � 6 � � � � : 6 � � 6 � 6 � � � � � � � � � � � � � � � � � � � ) ` � � � � 6 � �� 7 � � � : � � � � � � � � 6 � : � � Q � � R � � � Q M � 7 8 � � � 7 � � � � � � � 9 � � � � � � 7 � � � � � � � � 7 � � 6 � � � 6 � � � 7 � � � � �� 6 � � � � � � 6 � � 3 6 � � � � � � � � � � � 6 � � � � � � � � � � < � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � 7 � � � � � � � � � � 5 � � � � 6 � � � � � � � � 3 � 7 8 � � � 7 � � � � � � � � � � � � 6 � � � 7 � � � � � 2 � � 7 � � � : � � 6 � : � 3 < � � � � � � � 4 ) � 6 � � � � � � � � � � � � � � � � � � � 6 � � � 6 � � � 7 � � � � � � � � � � � � � 7 � � ) H �: � � � � � � � � � � � � 6 � � � � � � � � � � � 6 � < � � � 6 � � � � � � � � � � � )

Page 38:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

% "Ü Ý A A B A A � E B ¿ � A Ñ

� � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � 3 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 � � � � 3� � 3 � � 3 � � � � � 3 � � � � 3 � � � 6 � < � � � ) � 6 � � � � � � � � � � � � � � 6 � � � � � � 6 � � � � � � � � � � � 3 � � � � � �2 � � � � � � � � � � � � � � 4 6 � � � 7 � � � � � � � � � � � � � � � � � � G � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � 6 � � 6 � � � � � � � � � � � ) � 6 � � � � � � � � � : � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 3 �: 6 � � � 3 � � � � � � � � � � � 6 � � � � � � � � � � � : � � � � � � � � � � � � � 3 � � 7 � � � 6 ' � 6 � � � � � � � � � : � �� � 7 � � � � � � � � � � � � � � � � � � � � 3 � 6 � � � 7 � � � � � � � � � � � � � � � � � � � )

� � � � � 6 � � � � � � � � 6 � � � 3 � � 3 � � � � � � � � � � � � 6 � � 3 6 � � 1 � � � � � � � : � : � : � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � 6 � < � � � � 6 � � � � � � � � 3 � � 3 � � � � � � � � � ) � 6 � � � � � � � � � � � 7 � � �� � � � � � � � � � 6 � � � � � � � � � 7 � � � � � � � � 4 � 6 � � � � � � : � � � � 7 � � � � � � � � ! � � � � � � � � � � : � � 7 4� 6 � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � ! � � � � � � � � � � : ) � � � � � 6 � � � � � � � � � � � � � � � 7 � � 6 �� � � � � � � � � � � 6 � � � : � 6 � � � � � � � � 6 � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � 9� � � � � � � � � � � 6 � ) L � � � � � � � � � 6 � � � 3 � � � � � � I � � � J � K � : � 6 � � � � � � � � � � � � � � 6 � � � � � � � � � � � � 6 ' � � � � � � � � 3 � 6 � � � � � � � � � � � � � � � � � � � 9 � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � 9� � � � � � 3 � : � � 6 � � � � � � � � � 6 � � � 3 � � � � � � � � � � � � � � � � � )

H � � � � � � � � � � � � � � 6 � � � � � � � � � � 6 � < � � � 6 � � : � � � � � � � � 7 � � : � � � � � 6 � � � 8 � � � � � � � � � � � � � �� � � � � ) � 6 � 7 � � � � � � � � � � � � � � 6 � � � � � � � � � � 6 � � � � � � � � 3 � � � � � � � � � � � 6 � � ! � � � 8 � � � � � � � � �� � � � 6 � � � � � � 7 � 7 � � � � � � � � � � � 7 � � 6 � � � )

H � � � � � � 6 � � � � � � � � � � � 6 � � � � 8 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) � 6 � � � � � � 6 � � 7 � � � � � G � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � 3 � � 3 � : � � 6 � � � � � � 3 � 6 � � � � � � � � � � � � ) L � � � �� � 3 � � 3 � � � � 3 � � � � � � � � � � � � � � � � � � � � 8 � � � � � � � � � ) � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � 3 � � � � � 3 � � � � � � � � � � 6 � � � � � 2 � � � � � � 4 � � � � � � � � � � � � � � � � � 6 �� � � � � � � � � 6 � 7 � 3 � � 3 � � � 6 � � ! � � � � � � � � � 6 � � � � � � � � � � � � � � � � 2 � � � � � � 6 � � � � � 6 � � � � � �� � � 6 � � � � � � ! � � � � � � � 4 ) L � � 6 � � � � � � � � � � � � � � � 5 � 7 � � � � � � � � � � � � � � � � � � � � � � � � � � � � �7 � � � 6 � � � � � � : � � 6 � � � � � � � � � � � 6 � � )

� 6 � � � � � � 3 � � 7 � � � � � 6 � : � � � � � 6 � � ! � � � � � � � � � 6 � � � � � ) � � � � � � � � � � 5 � 6 � � �� � : � � 3 � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � : � � � � � � � � � � � � � � � � � � � � � � � 7 � � ' � 6 � � : � � � � � 7 � 7 � � 7 � � � � � � � 7 � � � � 7 � � : � � � 6 � � � �� � � � � � � � � � � � � : � � � � � � 6 � � � � � � 7 8 � � � � � � 6 � : � � � � � � ) & � � � � � � � � � � � � � � � � � � � � � � � � � �: � � 6 � � � � � � � � � � 6 � � � � � 5 � � � � � � � � � � � � � � � � � : � � 6 � � � � : � � � � � � � : � � � � � � � )c � : � � � � � � � � � � 7 � � � � � � � � � � � � � � 7 � � 6 � � � � � � � � � � � � � � � ' � � � � � � � � � � � � � � � � � � � � � 3 � � �� � < � � � � � � � � � � � � 7 � � 2 � � � � � � � � � � � � � 4 � 6 � � � � � � � � � � � � � 3 � 5 � � � 6 � � � � � ) � � � � � � 6 � � � � � � � � � � � � � � � � � � � : � � � � � � � � � � : � � 2 � ) 3 ) � � � � � � � � � � � 4 � � 6 � � � � 3 � � � � � � � � � � � � � � � � � � � ) e � � � �� 6 � � � � � � � � � � � � � � � � � 7 � 3 � : � � 6 � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � 6 �� � � 3 � � � 6 � � ! � � � � � � � � � � � 7 � � � � � � � � 7 � � � � � � � ) d � � 6 � � 6 � � � � 3 � � � � � � � � � � � 6 � � � � � � � � � � � 6 � < � � � 6 � � � 3 � 6 � � � � � � � � � � : � � � � : � � � � � � � � : � � � � � � � � � � � 7 � � � � � � � 6 � � � � 6 � � � � � � � � 3 � 5 � � � � � � � 7 � � � � � � � � � � � � � � � � � 2 6 � � � � � � � � � � 4 � � � � � )

� � � � � � � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � � � � 6 � � � � � � � � � 6 � � < � � � � � � � � � � � � � : � � � 7 � � � 6 � � � � � � � 7 � � � � � � � � 6 � � � � � � 7 8 � � � � � � � � � � � � � ) H � � � � � � � � � � �

META_ITERATION� � � � � � � : � '

class META_ITERATION[T->NOTION] ... feature -- iterated structure: body_meta: META_NOTION; -- separator structure: sep_meta: META_NOTION;

make: ITERATION[T] is local elem: T; sep: NOTION; failure: BOOLEAN; wl_mark: INTEGER; do

Page 39:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

% $

if not finish then if not failure then worklist.remove; wl_mark:= worklist.mark; Result.Create; end; if look_ahead then from worklist.put(body_meta); elem?= body_meta.make; Result.add_left(elem); until not sep_meta.look_ahead loop worklist.put(sep_meta); sep:= sep_meta.make; worklist.put(body_meta); elem?= body_meta.make; Result.add_left(elem); end elsif not eps then raise("Syntax_error") end end rescue if is_programmer_exception("Syntax error") then failure:= true; finish:= scan.skip(sep_meta); worklist.resume(wl_mark); retry end end; ... end -- META_ITERATION

c � � : � � � � � : � � � � � � � � � � � � � � � � � � � 6 � : � � � � � � ' : � � � � � � � � 6 � � � 6 � � � � � � � � � � � � � � � 6 �� � � � f � � � f � � � � � � � � � � � � 7 �

mark� � � 6 � �

resume � � � � � � � 6 � � � � � � � � � � � � � � � 3 � � � � �

� � � � � � � 2 � 6 � � 7 � � � � � � 3 � � � � � � � f � 7 � � � f � 6 � 3 � � � � � � � 4 ) � 6 � � :skip

� � � � � � � � � 6 �� � � � � � � � � � 6 � � � � � � � � � � � � : � � � � � � 6 � � � � � 9 � 6 � � � � � � � � � � � � 6 � � � � � � � � � � � � � 7 8 � � � � � � � � � � � � � � � � � � � � � � : � � � � 6 � � � � � � � � � � � � 2 3 � � � 7 � � 6 � : � � � � � � 4 � � � � � � � � � � � 6 �� � � � ) L � 6 � � � � � � � � �

skip � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � 6 � � � � � � � � � � � 7 � � �

� � 6 � � � � � � � � � � � 6 � � ! � � � � � � � � � : � � � 7 � � 6 � � � � � � : � � � � 7 � � � � � � � � � � � � ) L � � � � 6 � �� � � � � � � � � � � � � � : � � � � 7 � � � � � � � � � � � � : � � � � � � 6 � � � � � � � � � � 6 � � � � � � � � � � � � � � � � 6 � � ! � � � � � � 2 f L � � � � � f 4 � � � � � � � � )

Þ ß B ? E � D C F ? À A � � � A Á �

; 7 � � � � � � � � � � � � � � � � 6 � � � � � � � 6 6 � � 7 � � � � � � � � � 6 � � � � � � � � 7 � � � � � � � � 7 8 � � � 9 � � � � � � � � 6 � < � � �� � � 3 � � 3 � � � � � � � � � � � � � ' � � � 6 � � 3 6 � 6 � � � � � � � � 7 8 � � � 9 � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � ! � � � � � � � � 6 � � � � � � � � � 3 � � � � e e � � 3 � � � � 3� � 3 � � 3 � � � � � � � � � : ) � � � � � � � 6 � � � � � � � 7 � � � � 7 � � 6 � 6 � 9 : � � � � � � � � � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � 6 � � � � � � 6 � � � � � � � � � � � 3 � � � � � � � 6 � � � � � � � � � � 3 � � 3 �� � � � � � � � � � � � � � � � � � � )

e � : � � � � � � � � � � � � 6 � � � 7 8 � � � 9 � � � � � � � � 6 � < � � � � � : � � � � � � � � � � � � 3 � � 3 � � � � � � � � � � � � � )L � � � � � � � � � � 6 � � � � � � : � 3 � � � � � 3 � � � � � � � 3 e e � � � 6 � < � � � � � � � 7 � � 7 � � � � '

� 4 e e � � � 6 � < � � � � � � � � � � � � � � 7 � � � � � � � � 7 � � � � 6 � � � : � � 3 � � � � 6 � � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � � � � � � 6 � � � 3 � � 3 � ) L � 6 � � : � � �� � 3 � � 3 � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � : 6 � � 6 � � � � � � � � � � � � 3 �7 � � 6 � 6 � 9 : � � � � � � � � � � � � � � � � � � � � � � � � � )

Page 40:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

% aT 4 e e � � � 6 � < � � � � � � � : � � � � � � � � � � � � � � � � � � � � � 3 � � 3 � � � � � � � � 3 ) � 6 � � � � � � � � � 6 �

� � � � � 6 � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � 6 � � � � � : � � � � � 7 8 � � � � ) � 6 � � � � � � �� � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � 3 � � � 6 � 6 � 3 6 9 � � � � � � � � � � � � � � � 6 � � � � � �� � 3 � � 3 � � � 6 � � 6 � � � � � � 3 � � � � � � � � � � � � � � � � � � � 9 � � � � � � � � � � � � � �� � � � 3 � � � � � 3 � � � � � � � � � � � � � � � � � � )

% 4 ; � � � � � � � � � 6 � � � � � � � � � � 9 � � � � � � � � � � � � � � � � � � � � � � � � � � 7 8 � � � ) L � 6 � �: � � � � � � � � � � � : � � 6 � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � 7 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 9� 6 � � � � � � � � � � ) � 6 � � � � � � � � � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � � � )

W 4 H � 6 � � � � � � � ! � � � � � � � � � � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � ) � 6 � � � � � � � � 6 � �� � � � � � � � 7 � � � � � � � 3 � � � � � � � � � � � ! � � � � � 3 � � 5 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � � � � 6 � � � � � � 7 � � � � � � � � � � � � � � � � � � � � )

X 4 � � � � � � 7 � � 3 � � � � � � � � � � � � 7 � � � � � � � � � � � � 5 � � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � �� � � � � � � � ! � 7 � � : � � � : � � 6 � � � � � � � � � � � 3 � 6 � � � � � � � 3 � � � � � � � � ) � 6 � 7 � � � � � � � � � �� � � � � � � � � � � � � � � � � � � : � � � � � � � � � � � � � � � � � � 9 � 6 � � � � � � � � � � � � � � � � � 6 � 7 � � � � � � � � � � 6 � 3 6 � � � � � � � � � � � � � � 6 � : � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ) � 6 � � � � � � � � : � � � � � � � � � � � � � � � � � � � � � 7 � � � � 3 � � � � � � � 7 � � � � � � � � 3 : 6 � � 6 : � � � � � � � � � � � � � 3 � � � � � � � 6 � < � � � � � � � 3 � � � 3 � � � � � � � � � �� � � � � 3 )

" 4 � 6 � � � � � � 2 � 7 8 � � � 4 � � � � � � � � � � � � � 6 � � � � � � � � 3 � � � � � � � � � � � � � � � � 7 � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � 7 � 9 � � � � � � � � � � � � � � ) � 6 � � � � � � � � � � � � � � � � �� 7 � � � � � � 6 � � � � � � � � � � � � � � � � � � 7 � � � � � � � 6 � � 6 � � � � � � � � � � � � 3 � � � � 3 � � �� � � � � � � � � � � � � � � � � � � � � � � � � ) � 6 � � 7 8 � � � � � � 6 � � � � � � � � � � � � � � � � � �6 � � � � 6 � � � � � � � � � � � � � � � � � � 6 � � � � 7 � � � � � � � � � � � � � � � � � : � � 6 � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � 3 2 � � � � � � � � � � � � � � � � � � � � � � � 4 )

; � 7 � � � � � � � � � � � � � � � � � � � � � � 6 � � � 6 � � � � � � � 5 � � � � � � � 6 � � � � 6 � < � � � � � � � � � 6 � � ) L � � � � � � � � � � 6 � � � � � � 7 8 � � � 9 � � � � � � � � � 3 � � � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 7 � � � �� � � ) � � � � � 6 � � � � � � � � 7 8 � � � 9 � � � � � � � 3 � � 3 � � � � � � � � � � � � � � � � � � � � � 9 � � � � � � � 9 6 � � � � � � � � � � � � � � � � � � � � � � � � � 6 � : � � � � � 6 � � � � � � � � � � � � � � � � � � � : � � � 3 � � ) ` � � � � 6 � � � � � � � � � � � � � � 6 � �� � � � � � � � � � : � � � � � � � � � 7 � � 6 � � � � 2 � � 7 � � � � � � � � � � � � � � � � � � � � � � � 4 � : 7 � � � � � � � � 3 � � 7 8 � � � 9 � � � � � � � � � � � � 3 � � 3 � � � � � � � � � � � � � ) � � � � : � � � � � � � � � � � � � ! � � � � � � � � � � � � � � � 3 � 6 � � � � � � � � � � � � � � � � � 6 � � � � � � � � � 3 � � 3 � � � � � � � � � � � 6 � < � � � � � � � � � � � � � � 3� � � � � � � � � � � � 5 � � � � � � � � 6 � 7 � � � � � � � 6 � )

* 0 à á â ã ä å æ ª å ç å á - ,

� 6 � � : � � � � � � � � � � � 7 � � 6 � ; � � � � � � � & � � � � 6 � � 3 6 3 � � � # " � � T # )

è � é � A � ? E � �

I ; � d J T K ; � � � � � ) d ) � d � � � � S ) ) ' � � � � ' ; e 7 8 � � � 9 e � � � � ; � � � � � 6 � � � � � � ! � 9 & � � � � � � 3 )� � � � � � ) � � � � ) � � � ) � 3 ) $ � T 2 ; � � � � J J T 4 � � % " 9 � W W )

I � ` � a $ K � 6 � � � 9 ` � � � � S ) 9 1 ) � � � 6 � � � c ) 9 H ) ' ; � � 1 9 ; e 7 8 � � � 9 e � � � � � � � � � � � � � � � � 1 � 3 � � 3 � � � � � � � ! 9 � � � � � � � � � � � � � � ) L ' � � � ) � � � � � � � a $ � 1 ` � � T a J � � � � 3 � 9V � � � 3 � J a $ � $ � 9 $ J )

I & � a J K & � 7 � � ) ' � � � � � � � � � � � � d � � � � � � � � � � � � � � 7 � � � e 7 8 � � � 9 e � � � � 1 � 3 � � 3 � � ) L ' � � � )� � e e � � 1 ; ê a J � � � 3 � � � ` � � � � � � T W � � # 2 e � � ) � J a J 4 � % � $ 9 % T " )

I b � J T K b � � � � ) e ) ' � 6 � � � � � � � � � � � � e 7 8 � � � 9 e � � � � � � � � � � � & � � � : � � ) � � � � : � �� � � � � � � ë � ! � � � � � � T T � $ 2 � � � � � J J T 4 � X � J 9 X % X )

I b � J # K b � � � 6 � ) ' e 7 8 � � � 9 e � � � � ; � � � 7 � � � b � � � � � ) L ' � � � ) X � 6 L � � � � � � � � � � � � � � � � �� � � � � � � � � L � � � � � � � � � � � � � � 2 L � � L � V 4 � ; ) � ) c � � � � � � � ) b � � � 7 � 2 � � ) 4 �� � � � � � � � � � ` � � � � 6 � � � � � � � � � J J # � a # $ 9 a � " )

Page 41:  · # R Z N M] _ ± \ [: 6 6: 7 8: 9 6 3 6:) 3 6: ' class META_KEY export repeat META_NOTION, length, rep inherit META_NOTION redefine look_ahead feature rep: STRING

% JI b � � a a K b � � � ì � 6 � � ) � c � � í � 6 � ) � � � � � � � & ) � � � � 5 � � � ) ' L � � � � � � � ; � 3 � � � 6 � � � � d e & 9 1 � ) L '

� � � ) � � H � � � 6 � � � � � � � � � � 9 � � � � � � � � � 1 � � � � � ` � � � � � � � � � � � � � � � � � � % $ � �� � � 3 � 9 V � � � 3 � J a J � J % 9 � # T )

I c � J T K c � � b ) ' L � � � � � � � � � � � � � � ; � � � � � � ) � 6 ) � ) � 6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1 � � � � � � � � � � S � � 6 � J J T )

I c � d a J K c � � � 3 � ) � � � � � � ) � d � � � � � ) b ) ' L � � � � � � � b � � � � � � � � � � � � � ) L ' � � � ) � � ; � S� � 3 � � � � a J � � � � � � � � � � 3 � � � � 3 1 � 3 � � 3 � � � � � 3 � L � � � � � � � � � � � � � � � � � �e � 3 � � � J a J ) ; � S � � 3 � � � ` � � � � � � T W � $ 2 � J a J 4 � � $ J 9 � J � )

I c � J # K c � � � � � � d ) ` ) ' L � � � � � � � b � � � � � � � � 1 d � � � � � ) � � � � � � � � � � � � � � 1 � 3 � � 3 � � �� X � W 2 � J J # 4 � T # X 9 T T % )

I � � � J % K � � � � � � � ) � � � � � � � � � � � ) ' e 7 8 � � � 9 e � � � � 1 � 3 � � 3 � � 3 � � � � 3 ' � 6 � � � 1 � ; � � � � � 6 )� � � 7 � � � 6 � � � � � � � � � � � J J % )

I � � � J � K � � � � � � � � ) � � � � � � � � � � ) � � � � � � � � ) ' � 6 � � � � � 3 � � � � � � � � 1 � 3 � � 3 � � � � � 2 � � 1 � 4 )d � � � � ; 9 � J J � 9 � # � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � & � � � �� J J � )

I � � � J # K � � � � � � � � � � ) ' 1 � 5 � d � � � � � � � � � � � � � � � � � 3 � � S � � � � 1 � 3 � � 3 � L � � � � � � � � � � � )� � � � : � � � � � � � � � ë � ! � � � � � � T # � a 2 ; � 3 � � � � J J # 4 � $ W J 9 $ $ T )

I � � � J � K � � � � � � � � � � ) ' e 7 8 � � � 9 e � � � � � � � � ; � � � 7 � � � b � � � � � ) L ' � � � ) � � � ; b ; � � � � � � � 6 � � � � ; � � � 7 � � � b � � � � � � � 6 � � ; � � � � � � � � � � � � � � � J J � ) 1 � � � � � ` � � � � � � � � � � � � � � � � � � X W X � � � � 3 � 9 V � � � 3 � � J J � � T J $ 9 % T J )

I � � V J T � K � � � � � � � � � � ) � V � 6 � � � � � � ) ' � 6 � � � 7 � � � � � � � ! � � � � � � � 7 � � � � � � � ) � � � � � � � e 7 8 � � � 9e � � � � � � 3 � � � � 3 � e � � � 7 � � J J T � T X 9 % � )

I � � � J T 7 K � � � � � � � � � � ) � V � 6 � � � � � � ) ' L � � � � � � � � � � � � � � � � � � � � � : � � 6 S � � � � 7 8 � � � � )d � � � � ; 9 � J J T 9 X � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ` � � � � 7 � � J J T )

I S � 3 J # K S � 3 � � � � ) � � 3 � � � � S ) � � � 6 � � 1 ) 9 e ) � & � � � b ) � b � � � � � � � � ; ) � c � � b ) � S � î � ) �e � � � � � � � ) � � � � 7 � S ) ' ; e � � � � � : � � � 6 � S 8 ï � � ® e � � � � � � � � ' L � � � � � � �1 � 3 � � 3 � � � � � � : � � � � � � � � � � � � ) d � � � � 1 � 9 � � 9 � d ' J # ' X $ � � � � � � � � � � � � � � � � � � � � � � � � � 1 � � � � � � � � � � � J J # ) ; � � � � � � � ) � � � e e 1 � � J # � � � � � � J J # )

I S � � a a K S � � � ) ' e 7 8 � � � 9 e � � � � � � � � : � � � � � � � � � � � ) � � � � � � 9 c � � � � J a a )