(@ import java.io.*; import laforge.persistent.*; import laforge.lang.*; import laforge.util.*; import java.lang.*; @) LibrarySystem = List(User) List(Staff) List(Book). User = "USER" ":" Ident "QUOTA" ":" Integer [ "BOOKS" "(" List(CheckedOut) ")" ] Integer . Staff = "STAFF" ":" Ident "PASSWORD" ":" Ident. Book = BookEntry "(" List(Copy) ")" . BookEntry = "BOOK" ":" "TITLE" ":" Ident "AUTHOR" ":" <author> Ident "SUBJECT" ":" <subject> Ident "ISBN" ":" <isbn> Ident. Copy = <number> Integer ":" <borrower> User <status> Boolean. CheckedOut = <entry> BookEntry <copy> Copy. //------------------------- ListOfCommands = <contents> List(Command). Command : StaffCommand | UserCommand | GeneralCommand. UserCommand : ListBooks | AuthorSearch | SubjectSearch | UserStatus . GeneralCommand: UserMode | StaffMode | Logout. StaffCommand: CreateAccount | ListUsers | AddBook | AddCopy | CheckOut | Return | ShowStatus | LastUser | StartC . CreateAccount = "CREATE" "ACCOUNT" <person> Type. Type : UserType | StaffType. UserType = "USER" ":" <name> Ident "QUOTA" ":" <quota> Integer. StaffType = "STAFF" ":" <name> Ident "PASSWORD" ":" <password> Ident. ListUsers = "LIST" "USERS". AddBook = "ADD" <entry> BookEntry "COPIES" ":" <number> Integer . AddCopy = "ADD" "COPY" "ISBN" ":" <isbn> Ident. ListBooks = "LIST" "BOOKS" . AuthorSearch = "FIND" "BOOK" "BY" <author> Ident. SubjectSearch = "FIND" "BOOK" "ABOUT" <subject> Ident. CheckOut = "CHECK" "OUT" "ISBN" ":" <isbn> Ident "COPY" "#" <number> Integer "FOR" "USER" <name> Ident. Return = "RETURN" "ISBN" ":" <isbn> Ident "COPY" "#" <number> Integer. ShowStatus = "SHOW" "STATUS" "OF" <name> Ident. UserStatus = "STATUS". LastUser = "LAST" "USER" "BOOK" "ISBN" ":" <isbn> Ident "COPY" "#" <number> Integer. StartC = "START" <file> Ident. UserMode = "USER" <name> Ident. StaffMode = "STAFF" <name> Ident "PASSWORD" ":" <password> Ident. Logout = "LOGOUT". //-------------------------- List(S) ~ {S}. Main = . ActionVisitor = <lsystem> LibrarySystem <mode> Integer <user> Ident <store> LibrarySystem. GuardingVisitor = <av> ActionVisitor. PrintingVisitor =. SearchingVisitorB = <author> Ident <subject> Ident <books> Book_List. SearchingVisitorU = <user> User. SearchingVisitorS = <staff> Staff. SearchingVisitorISBN = <isbn> Ident <book> Book. AddingVisitor = <isbn> Ident.