staload "grammar.sats"
local
#define K 0
in
val eof = symbol_make_string_int ("$", K+0)
val id = symbol_make_string_int ("id", K+1)
val num = symbol_make_string_int ("num", K+2)
val lparen = symbol_make_string_int ("(", K+3)
val rparen = symbol_make_string_int (")", K+4)
val add = symbol_make_string_int ("+", K+5)
val sub = symbol_make_string_int ("-", K+6)
val mul = symbol_make_string_int ("*", K+7)
val div = symbol_make_string_int ("/", K+8)
val theTermLst = $lst (
eof, id, num, lparen, rparen, add, sub, mul, div
)
end
local
#define K 256
in
val S = symbol_make_string_int ("S", K+0)
val E = symbol_make_string_int ("E", K+1)
val T = symbol_make_string_int ("T", K+2)
val F = symbol_make_string_int ("F", K+3)
val theNontermLst = $lst (S, E, T, F)
end
val rule_S = RULE ("rule_S", S, alpha) where {
val alpha = array0_make_arraysize $arrsz {symbol_t} (E, eof)
}
val rule_E_1 = RULE ("rule_E_1", E, alpha) where {
val alpha = array0_make_arraysize $arrsz {symbol_t} (E, add, T)
}
val rule_E_2 = RULE ("rule_E_2", E, alpha) where {
val alpha = array0_make_arraysize $arrsz {symbol_t} (E, sub, T)
}
val rule_E_3 = RULE ("rule_E_3", E, alpha) where {
val alpha = array0_make_arraysize $arrsz {symbol_t} (T)
}
val rule_T_1 = RULE ("rule_T_1", T, alpha) where {
val alpha = array0_make_arraysize $arrsz {symbol_t} (T, mul, F)
}
val rule_T_2 = RULE ("rule_T_2", T, alpha) where {
val alpha = array0_make_arraysize $arrsz {symbol_t} (T, div, F)
}
val rule_T_3 = RULE ("rule_T_3", T, alpha) where {
val alpha = array0_make_arraysize $arrsz {symbol_t} (F)
}
val rule_F_1 = RULE ("rule_F_1", F, alpha) where {
val alpha = array0_make_arraysize $arrsz {symbol_t} (id)
}
val rule_F_2 = RULE ("rule_F_2", F, alpha) where {
val alpha = array0_make_arraysize $arrsz {symbol_t} (num)
}
val rule_F_3 = RULE ("rule_F_3", F, alpha) where {
val alpha = array0_make_arraysize $arrsz {symbol_t} (lparen, E, rparen)
}
val grammar_3_10 = '{
termlst= theTermLst, nontermlst= theNontermLst, rules= rules
} where {
val rules = $lst (
rule_S
, rule_E_1, rule_E_2, rule_E_3
, rule_T_1, rule_T_2, rule_T_3
, rule_F_1, rule_F_2, rule_F_3
)
}
dynload "grammar.dats"
implement main () = let
val () = print "The rules of the Grammar 3.10 are given as follows:\n"
val () = print_grammar (grammar_3_10)
val () = compute_nullable_first_follow_tables (grammar_3_10)
in
print_nullable_first_follow_tables (grammar_3_10)
end