summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2016-08-20 13:34:15 +0200
committertomsmeding <tom.smeding@gmail.com>2016-08-20 13:34:15 +0200
commiteade4187ba0ae04fe8e6eed9a1e33bfd44b73c06 (patch)
tree0db3dbc7efe1197523f4b7c09f43a4e12b13e9cc
parentb477ac27210399b976e70195e92fb13315d39769 (diff)
Parse comments
-rw-r--r--code.lysp8
-rw-r--r--parser.c33
2 files changed, 40 insertions, 1 deletions
diff --git a/code.lysp b/code.lysp
index 1e82fa1..47a0268 100644
--- a/code.lysp
+++ b/code.lysp
@@ -1 +1,7 @@
-(print (+ 1 (% 10 3)) () '(()) (('())) 'kaas "kazen enzo")
+(print
+ (+ 1 (% 10 3))
+ ()
+ '( #| dit is commentaar|# ())
+ (('()))
+ 'kaas ;meer commentaar
+ "kazen enzo")
diff --git a/parser.c b/parser.c
index bab19a7..910f3da 100644
--- a/parser.c
+++ b/parser.c
@@ -59,6 +59,39 @@ static Token nexttoken(Cursor *cursor){
while(cursor->l>=1&&isspace(*cursor->s))advance(cursor,1);
if(cursor->l==0)return tt_eof();
+ bool acted;
+ do {
+ acted=false;
+ if(*cursor->s==';'){
+ acted=true;
+ int i;
+ for(i=1;i<cursor->l;i++){
+ if(cursor->s[i]=='\n')break;
+ }
+ if(i>=cursor->l-1){
+ advance(cursor,cursor->l);
+ return tt_eof();
+ }
+ advance(cursor,i+1);
+ }
+
+ if(cursor->l>=4&&cursor->s[0]=='#'&&cursor->s[1]=='|'){
+ acted=true;
+ int i;
+ for(i=3;i<cursor->l;i++){
+ if(cursor->s[i-1]=='|'&&cursor->s[i]=='#')break;
+ }
+ if(i>=cursor->l-1){
+ advance(cursor,cursor->l);
+ return tt_eof();
+ }
+ advance(cursor,i+1);
+ }
+ } while(acted);
+
+ while(cursor->l>=1&&isspace(*cursor->s))advance(cursor,1);
+ if(cursor->l==0)return tt_eof();
+
if(strchr(SYMBOLCHARS,*cursor->s)!=NULL||
(cursor->l>=2&&cursor->s[0]=='\''&&strchr(SYMBOLCHARS,cursor->s[1]))){
advance(cursor,1);