summaryrefslogtreecommitdiff
path: root/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c33
1 files changed, 33 insertions, 0 deletions
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);