From b0c7bc77dd6bf878fbbdd76c11e3a73cf7049c12 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Sun, 6 Jul 2008 15:09:24 +0200 Subject: Reader: Support comments introduced by semicolons. --- GNUmakefile | 24 ++++++++++++------------ MLKDynamicContext.m | 6 +++++- MLKSemicolonReader.h | 27 +++++++++++++++++++++++++++ MLKSemicolonReader.m | 45 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 MLKSemicolonReader.h create mode 100644 MLKSemicolonReader.m diff --git a/GNUmakefile b/GNUmakefile index a080b3b..20881fd 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -27,18 +27,18 @@ BUNDLE_NAME = Test ADDITIONAL_OBJCFLAGS = -Wall -ToiletKit_OBJC_FILES = MLKCharacter.m MLKCons.m MLKBinding.m \ - MLKDoubleFloat.m MLKDynamicContext.m \ - MLKEndOfFileError.m MLKEnvironment.m MLKFloat.m \ - MLKInteger.m MLKInterpretedClosure.m \ - MLKInterpreter.m MLKLinkedList.m \ - MLKLexicalContext.m MLKLexicalEnvironment.m \ - MLKLispValue.m MLKPackage.m MLKParenReader.m \ - MLKQuoteReader.m MLKRatio.m MLKReader.m \ - MLKReadtable.m MLKReaderError.m MLKRoot.m \ - MLKSingleFloat.m MLKStream.m \ - MLKStringInputStream.m MLKStringReader.m \ - MLKSymbol.m MLKThrowException.m \ +ToiletKit_OBJC_FILES = MLKCharacter.m MLKCons.m MLKBinding.m \ + MLKDoubleFloat.m MLKDynamicContext.m \ + MLKEndOfFileError.m MLKEnvironment.m MLKFloat.m \ + MLKInteger.m MLKInterpretedClosure.m \ + MLKInterpreter.m MLKLinkedList.m \ + MLKLexicalContext.m MLKLexicalEnvironment.m \ + MLKLispValue.m MLKPackage.m MLKParenReader.m \ + MLKQuoteReader.m MLKRatio.m MLKReader.m \ + MLKReadtable.m MLKReaderError.m MLKRoot.m \ + MLKSemicolonReader.m MLKSingleFloat.m MLKStream.m \ + MLKStringInputStream.m MLKStringReader.m \ + MLKSymbol.m MLKThrowException.m \ NSObject-MLKPrinting.m NSString-MLKPrinting.m ToiletKit_LDFLAGS = -lgmp #LIBRARIES_DEPEND_UPON diff --git a/MLKDynamicContext.m b/MLKDynamicContext.m index 2be64e3..a6ffcca 100644 --- a/MLKDynamicContext.m +++ b/MLKDynamicContext.m @@ -33,6 +33,7 @@ #import "MLKQuoteReader.h" #import "MLKReadtable.h" #import "MLKStringReader.h" +#import "MLKSemicolonReader.h" #import "MLKSymbol.h" #import "MLKInteger.h" #import "runtime-compatibility.h" @@ -145,7 +146,6 @@ static MLKDynamicContext *global_context; [readtable setSyntaxType:MULTI_ESCAPE forCharacter:'|']; - // [readtable setSyntaxType:TERMINATING_MACRO forCharacter:';']; // [readtable setSyntaxType:NONTERMINATING_MACRO forCharacter:'#']; // [readtable setSyntaxType:TERMINATING_MACRO forCharacter:'`']; // [readtable setSyntaxType:TERMINATING_MACRO forCharacter:',']; @@ -165,6 +165,10 @@ static MLKDynamicContext *global_context; [readtable setMacroFunction:AUTORELEASE([[MLKQuoteReader alloc] init]) forCharacter:'\'']; + [readtable setSyntaxType:TERMINATING_MACRO forCharacter:';']; + [readtable setMacroFunction:AUTORELEASE([[MLKSemicolonReader alloc] init]) + forCharacter:';']; + for (ch = '0'; ch <= '9'; ch++) { [readtable setSyntaxType:CONSTITUENT forCharacter:ch]; diff --git a/MLKSemicolonReader.h b/MLKSemicolonReader.h new file mode 100644 index 0000000..b1c22de --- /dev/null +++ b/MLKSemicolonReader.h @@ -0,0 +1,27 @@ +/* -*- mode: objc; coding: utf-8 -*- */ +/* Étoilisp/Mulklisp, a Common Lisp subset for the Étoilé runtime. + * Copyright (C) 2008 Matthias Andreas Benkard. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "MLKFuncallable.h" +#import "MLKLispValue.h" + +#import + + +@interface MLKSemicolonReader : MLKLispValue +-(NSArray *) applyToArray:(NSArray *)arguments; +@end diff --git a/MLKSemicolonReader.m b/MLKSemicolonReader.m new file mode 100644 index 0000000..abf921b --- /dev/null +++ b/MLKSemicolonReader.m @@ -0,0 +1,45 @@ +/* -*- mode: objc; coding: utf-8 -*- */ +/* Étoilisp/Mulklisp, a Common Lisp subset for the Étoilé runtime. + * Copyright (C) 2008 Matthias Andreas Benkard. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "MLKSemicolonReader.h" + +#import "MLKCons.h" +#import "MLKStream.h" +#import "runtime-compatibility.h" + + +@implementation MLKSemicolonReader +-(NSArray *) applyToArray:(NSArray *)arguments +{ + MLKStream *stream; + unichar nextChar; + + stream = [arguments objectAtIndex:0]; + + while (![stream isEOF]) + { + if ((nextChar = [stream readChar]) == '\n') + { + [stream unreadChar:nextChar]; + break; + } + } + + return [NSArray array]; +} +@end -- cgit v1.2.3