spec (1701B)
1 rcsh - the "really cool shell" 2 3 BNF: 4 5 prog : imports fns exprs 6 7 imports : import imports 8 | import 9 10 import : "import" NAME 11 12 fns : fn fns 13 | fn 14 15 fn : "func" NAME(args) '{' exprs '}' 16 17 args : arg ',' args 18 | arg 19 20 arg : NAME 21 22 exprs : expr exprs 23 | expr 24 25 expr : fcall 26 | try '{' exprs '}' catch '{' exprs '}' 27 | "throw" except 28 | value '>' '{' exprs '}' // makes exprs stdin NAME 29 | value '<' '{' exprs '}' // makes exprs stdout NAME 30 | value '<' '<' '{' exprs '}' // makes exprs stdout NAME (append) 31 | value '<>' '{' exprs '}' // makes exprs stdin and stdout NAME 32 | expr | value 33 | expr > value 34 | expr < value 35 | expr >> value 36 | NAME '=' value 37 | cd value 38 39 40 value : '$' NAME 41 | STRING 42 | $(expr) // makes stdout the value 43 | fcall 44 45 fcall : NAME '(' values ')' 46 47 values : value, values 48 | value 49 50 except : EPERM | ENOENT | ESRCH | EINTR | EIO | ENXIO | E2BIG | ENOEXEC | EBADF | ECHILD | EAGAIN | ENOMEM | EACCES | EFAULT | ENOTBLK | EBUSY | EEXIST | EXDEV | ENODEV | ENOTDIR | EISDIR | EINVAL | ENFILE | EMFILE | ENOTTY | ETXTBSY | EFBIG | ENOSPC | ESPIPE | EROFS | EMLINK | EPIPE | EDOM | ERANGE | EDEADLK | ENAMETOOLONG | ENOLCK | ENOSYS | ENOTEMPTY | ELOOP | ENOMSG | EIDRM | ECHRNG | EL2NSYNC | EL3HLT | EL3RST | ELNRNG | EUNATCH | ENOCSI | EL2HLT | EBADE | EBADR | EXFULL | ENOANO | EBADRQC | EBADSLT | EBFONT | ENOSTR | ENODATA | ETIME | ENOSR | ENONET | ENOPKG | EREMOTE | ENOLINK | EADV | ESRMNT | ECOMM | EPROTO | EMULTIHOP | EDOTDOT | EBADMSG | EOVERFLOW | ENOTUNIQ | EBADFD | EREMCHG | ELIBACC | ELIBBAD | ELIBSCN | ELIBMAX | ELIBEXEC | EILSEQ | ERESTART | ESTRPIPE | EUSERS | ENOTSOCK | EDESTADDRREQ | EMSGSIZE | EPROTOTYPE | ENOPROTOOPT | EPROTONOSUPPORT | ESOCKTNOSUPPORT | EOPNOTSUPP