mirror of
https://github.com/PDP-10/its.git
synced 2026-04-26 20:27:13 +00:00
150 lines
2.8 KiB
Plaintext
150 lines
2.8 KiB
Plaintext
/*
|
|
* bcpl syntax
|
|
*/
|
|
digit = [0-9];
|
|
letter = [a-zA-Z_];
|
|
name = letter (letter|digit)*;
|
|
integer = [123456789]digit*;
|
|
hexdigit = [0-9a-fA-F];
|
|
octal = #[0-7][0-7]*;
|
|
hex = #[xX]hexdigit*;
|
|
realdigits = integer "." [0-9]*
|
|
| "." [0-9][0-9]*
|
|
;
|
|
real = realdigits ("e" ([+-]|"") integer | "");
|
|
any = [\n\t \014];
|
|
illegal = [^a-zA-Z\n\t \014#+-*/^%0-9~!=<>:'"&|()[\]{}`@?,.];
|
|
%%
|
|
AND {return(AND);}
|
|
BE {return(BE);}
|
|
BREAK {return(BREAK);}
|
|
BY {return(BY);}
|
|
CASE {return(CASE);}
|
|
DO {return(DO);}
|
|
DEFAULT {return(DEFAULT);}
|
|
EQ {return('=');}
|
|
EQV {return(EQV);}
|
|
ELSE {return(OR);}
|
|
ENDCASE {return(ENDCASE);}
|
|
FALSE {return(FALSE);}
|
|
FOR {return(FOR);}
|
|
FINISH {return(FINISH);}
|
|
GOTO {return(GOTO);}
|
|
GE {return(GE);}
|
|
GR {return('>');}
|
|
GLOBAL {return(GLOBAL);}
|
|
GET {return(GET);}
|
|
IF {return(IF);}
|
|
INTO {return(INTO);}
|
|
LET {return(LET);}
|
|
LV {return('@');}
|
|
LE {return(LE);}
|
|
LS {return('<');}
|
|
LOGOR {return('|');}
|
|
LOGAND {return('&');}
|
|
LOOP {return(LOOP);}
|
|
LSHIFT {return(LSHIFT);}
|
|
MANIFEST {return(MANIFEST);}
|
|
NE {return(NE);}
|
|
NOT {return('~');}
|
|
NEQV {return(NEQV);}
|
|
OR {return(OR);}
|
|
RESULTIS {return(RESULTIS);}
|
|
RETURN {return(RETURN);}
|
|
REM {return(REM);}
|
|
RSHIFT {return(RSHIFT);}
|
|
RV {return('!');}
|
|
REPEAT {return(REPEAT);}
|
|
REPEATWHILE {return(REPEATWHILE);}
|
|
REPEATUNTIL {return(REPEATUNTIL);}
|
|
SWITCHON {return(SWITCHON);}
|
|
STATIC {return(STATIC);}
|
|
TO {return(TO);}
|
|
TEST {return(TEST);}
|
|
TRUE {return(TRUE);}
|
|
THEN {return(THEN);}
|
|
TABLE {return(TABLE);}
|
|
UNTIL {return(UNTIL);}
|
|
UNLESS {return(UNLESS);}
|
|
VEC {return(VEC);}
|
|
VALOF {return(VALOF);}
|
|
WHILE {return(WHILE);}
|
|
|
|
name {
|
|
gettoken(token, sizeof token);
|
|
lexval = lookup(token, 0);
|
|
return(IDENTIFIER);
|
|
}
|
|
hex {return(number(16));}
|
|
octal {return(number(8));}
|
|
integer {return(number(10));}
|
|
|
|
"<" {single: return(*token(0));}
|
|
">" {goto single;}
|
|
"%" {goto single;}
|
|
"/" {goto single;}
|
|
"*" {goto single;}
|
|
"&" {goto single;}
|
|
"|" {goto single;}
|
|
"^" {goto single;}
|
|
"+" {goto single;}
|
|
"-" {goto single;}
|
|
"!" {goto single;}
|
|
"@" {goto single;}
|
|
"~" {goto single;}
|
|
"(" {goto single;}
|
|
")" {goto single;}
|
|
"{" {goto single;}
|
|
"}" {goto single;}
|
|
":" {goto single;}
|
|
";" {goto single;}
|
|
"," {goto single;}
|
|
|
|
":=" {return(GETS);}
|
|
"<=" {return(LE);}
|
|
"~=" {return(NE);}
|
|
">=" {return(GE);}
|
|
"<<" {return(LS);}
|
|
">>" {return(RS);}
|
|
"&&" {return('&');}
|
|
"||" {return('|');}
|
|
"$(" {return('{');}
|
|
"$)" {return('}');}
|
|
"->" {return(ARROW);}
|
|
|
|
"+:=" {return(ASPLUS);}
|
|
"-:=" {return(ASMINUS);}
|
|
"/:=" {return(ASDIV);}
|
|
"REM:=" {return(ASMOD);}
|
|
"*:=" {return(ASTIMES);}
|
|
"<<:=" {return(ASLSHIFT);}
|
|
">>:=" {return(ASRSHIFT);}
|
|
"|:=" {return(ASOR);}
|
|
"&:=" {return(ASAND);}
|
|
"NEQV:=" {return(ASEXOR);}
|
|
|
|
"/*" {comment("*/");}
|
|
"'" {;}
|
|
"\"" {
|
|
lexval = calloc(2, sizeof lexval);
|
|
string(lexval);
|
|
return(STRING);
|
|
}
|
|
any {
|
|
gettoken(token, sizeof token);
|
|
c = *token;
|
|
if (c=='\n')
|
|
yyline++;
|
|
}
|
|
%%
|
|
|
|
number(radix)
|
|
{
|
|
long l;
|
|
char digits[30];
|
|
|
|
gettoken(digits, sizeof digits);
|
|
l = integ(digits, radix);
|
|
return(l);
|
|
}
|