Home | History | Annotate | Line # | Download | only in sh
syntax.c revision 1.1.22.1
      1 /*	$NetBSD: syntax.c,v 1.1.22.1 2008/01/09 01:20:03 matt Exp $	*/
      2 
      3 #include <sys/cdefs.h>
      4 __RCSID("$NetBSD: syntax.c,v 1.1.22.1 2008/01/09 01:20:03 matt Exp $");
      5 
      6 #include "shell.h"
      7 #include "syntax.h"
      8 #include "parser.h"
      9 
     10 #if CWORD != 0
     11 #error initialisation assumes 'CWORD' is zero
     12 #endif
     13 
     14 #define ndx(ch) (ch + 1 - CHAR_MIN)
     15 #define set(ch, val) [ndx(ch)] = val,
     16 #define set_range(s, e, val) [ndx(s) ... ndx(e)] = val,
     17 
     18 /* syntax table used when not in quotes */
     19 const char basesyntax[257] = { CEOF,
     20     set_range(CTL_FIRST, CTL_LAST, CCTL)
     21     set('\n', CNL)
     22     set('\\', CBACK)
     23     set('\'', CSQUOTE)
     24     set('"', CDQUOTE)
     25     set('`', CBQUOTE)
     26     set('$', CVAR)
     27     set('}', CENDVAR)
     28     set('<', CSPCL)
     29     set('>', CSPCL)
     30     set('(', CSPCL)
     31     set(')', CSPCL)
     32     set(';', CSPCL)
     33     set('&', CSPCL)
     34     set('|', CSPCL)
     35     set(' ', CSPCL)
     36     set('\t', CSPCL)
     37 };
     38 
     39 /* syntax table used when in double quotes */
     40 const char dqsyntax[257] = { CEOF,
     41     set_range(CTL_FIRST, CTL_LAST, CCTL)
     42     set('\n', CNL)
     43     set('\\', CBACK)
     44     set('"', CDQUOTE)
     45     set('`', CBQUOTE)
     46     set('$', CVAR)
     47     set('}', CENDVAR)
     48     /* ':/' for tilde expansion, '-' for [a\-x] pattern ranges */
     49     set('!', CCTL)
     50     set('*', CCTL)
     51     set('?', CCTL)
     52     set('[', CCTL)
     53     set('=', CCTL)
     54     set('~', CCTL)
     55     set(':', CCTL)
     56     set('/', CCTL)
     57     set('-', CCTL)
     58 };
     59 
     60 /* syntax table used when in single quotes */
     61 const char sqsyntax[257] = { CEOF,
     62     set_range(CTL_FIRST, CTL_LAST, CCTL)
     63     set('\n', CNL)
     64     set('\'', CSQUOTE)
     65     /* ':/' for tilde expansion, '-' for [a\-x] pattern ranges */
     66     set('!', CCTL)
     67     set('*', CCTL)
     68     set('?', CCTL)
     69     set('[', CCTL)
     70     set('=', CCTL)
     71     set('~', CCTL)
     72     set(':', CCTL)
     73     set('/', CCTL)
     74     set('-', CCTL)
     75 };
     76 
     77 /* syntax table used when in arithmetic */
     78 const char arisyntax[257] = { CEOF,
     79     set_range(CTL_FIRST, CTL_LAST, CCTL)
     80     set('\n', CNL)
     81     set('\\', CBACK)
     82     set('`', CBQUOTE)
     83     set('\'', CSQUOTE)
     84     set('"', CDQUOTE)
     85     set('$', CVAR)
     86     set('}', CENDVAR)
     87     set('(', CLP)
     88     set(')', CRP)
     89 };
     90 
     91 /* character classification table */
     92 const char is_type[257] = { 0,
     93     set_range('0', '9', ISDIGIT)
     94     set_range('a', 'z', ISLOWER)
     95     set_range('A', 'Z', ISUPPER)
     96     set('_', ISUNDER)
     97     set('#', ISSPECL)
     98     set('?', ISSPECL)
     99     set('$', ISSPECL)
    100     set('!', ISSPECL)
    101     set('-', ISSPECL)
    102     set('*', ISSPECL)
    103     set('@', ISSPECL)
    104 };
    105