Changeset 3978 for applications/trunk/LFC/Earley/Earley.ref
- Timestamp:
- Oct 18, 2008, 12:21:06 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/trunk/LFC/Earley/Earley.ref
r3977 r3978 1 * $Id$ 2 * 1 3 * Practical Earley Parsing 2 4 * Aycock and Horspool … … 7 9 Check { 8 10 (e.grammar) (TYPE t.name) e.string, 9 <Parse (e.grammar) (e.string) () (((TYPE START) DOT (TYPE t.name) ())) () ()> : e.sets (e.last), 10 e.last : { 11 e.l ((TYPE t.name e.info) e.prod DOT ()) e.r = (e.info) (e.prod); 12 e.last = "Can not parse '"e.string"' as "(TYPE t.name); 13 }; 11 <Parse (e.grammar) (e.string) () (((TYPE START) (DOT (TYPE t.name)) ())) () ()> : e.sets (e.last) = 12 <FindSuccessRule t.name e.last>; 13 } 14 15 FindSuccessRule { 16 t.name ((TYPE t.name e.info) e.prod (DOT) ()) e.rules = (e.info) (e.prod); 17 t.name t.rule e.rules = <FindSuccessRule t.name e.rules>; 18 t.name = "Parsing failed"; 14 19 } 15 20 16 21 Earley { 17 (e.grammar) t.type e.string = <Parse (e.grammar) (e.string) () (((TYPE START) DOT t.type())) () ()>;22 (e.grammar) t.type e.string = <Parse (e.grammar) (e.string) () (((TYPE START) (DOT t.type) ())) () ()>; 18 23 } 19 24 20 25 * In: (e.grammar) (e.string) e.sets (e.rules) (e.current) (e.next) 21 26 Parse { 22 (e.grammar) (e.string) e.sets (e.rules) (e.current) (e.next), <Print (e.grammar) (e.string) e.sets (e.rules) (e.current) (e.next)> : s.x = ;23 27 (e.grammar) () (e.step) e.sets () (e.current) () = e.sets (e.current); 24 28 (e.grammar) (s.char e.string) (e.step) e.sets () (e.current) (e.next) = … … 26 30 (e.grammar) (e.string) (e.step) e.sets (t.rule e.rules) (e.current) (e.next), t.rule : { 27 31 * Scanner 28 ((TYPE t.name e.info) e.1 DOT s.char e.2(e.n)), e.string : {32 ((TYPE t.name e.info) e.1 (DOT s.char e.2) (e.n)), e.string : { 29 33 s.char e.rest_chars = 30 34 <Parse (e.grammar) (e.string) (e.step) e.sets (e.rules) (e.current t.rule) 31 (e.next ((TYPE t.name e.info s.char) e.1 s.char DOT e.2(e.n)))>;35 (e.next ((TYPE t.name e.info s.char) e.1 s.char (DOT e.2) (e.n)))>; 32 36 e.string = 33 37 <Parse (e.grammar) (e.string) (e.step) e.sets (e.rules) (e.current t.rule) (e.next)>; 34 38 }; 35 39 * Predictor 36 (t.type e.1 DOT (TYPE t.name) e.2(e.n)),40 (t.type e.1 (DOT (TYPE t.name) e.2) (e.n)), 37 41 e.current t.rule : e.current2 = 38 42 <Parse (e.grammar) (e.string) (e.step) e.sets 39 43 (<AddPredictions (e.grammar) (e.rules) (e.current2) t.name (e.step)>) (e.current2) (e.next)>; 40 44 * Completer 41 ((TYPE t.name e.info) e.1 DOT(e.n)),45 ((TYPE t.name e.info) e.1 (DOT) (e.n)), 42 46 e.current t.rule : e.current2 = 43 47 <Parse (e.grammar) (e.string) (e.step) e.sets … … 55 59 AddPredictions2 { 56 60 ((e.prod) e.rest_prods) (e.rules) (e.current) t.name (e.step), 57 ((TYPE t.name) DOT e.prod(e.step)) : t.prediction,58 e.rules: {59 e.l t.prediction e.r= <AddPredictions2 (e.rest_prods) (e.rules) (e.current) t.name (e.step)>;60 e.rules, e.current: {61 e.l t.prediction e.r= <AddPredictions2 (e.rest_prods) (e.rules) (e.current) t.name (e.step)>;62 e.current= <AddPredictions2 (e.rest_prods) (e.rules t.prediction) (e.current) t.name (e.step)>;61 ((TYPE t.name) (DOT e.prod) (e.step)) : t.prediction, 62 <IsIn e.rules t.prediction> : { 63 True = <AddPredictions2 (e.rest_prods) (e.rules) (e.current) t.name (e.step)>; 64 False, <IsIn e.current t.prediction> : { 65 True = <AddPredictions2 (e.rest_prods) (e.rules) (e.current) t.name (e.step)>; 66 False = <AddPredictions2 (e.rest_prods) (e.rules t.prediction) (e.current) t.name (e.step)>; 63 67 }; 64 68 }; … … 73 77 74 78 AddCompletions2 { 75 (((TYPE t.name2 e.info2) e.1 DOT (TYPE t.name) e.2(e.step)) e.set) (e.rules) (e.current) t.name e.info,76 ((TYPE t.name2 e.info2 (e.info)) e.1 (TYPE t.name) DOT e.2(e.step)) : t.completion,77 e.rules: {78 e.l t.completion e.r= <AddCompletions2 (e.set) (e.rules) (e.current) t.name e.info>;79 e.rules, e.current: {80 e.l t.completion e.r= <AddCompletions2 (e.set) (e.rules) (e.current) t.name e.info>;81 e.current= <AddCompletions2 (e.set) (e.rules t.completion) (e.current) t.name e.info>;79 (((TYPE t.name2 e.info2) e.1 (DOT (TYPE t.name) e.2) (e.step)) e.set) (e.rules) (e.current) t.name e.info, 80 ((TYPE t.name2 e.info2 (e.info)) e.1 (TYPE t.name) (DOT e.2) (e.step)) : t.completion, 81 <IsIn e.rules t.completion> : { 82 True = <AddCompletions2 (e.set) (e.rules) (e.current) t.name e.info>; 83 False, <IsIn e.current t.completion> : { 84 True = <AddCompletions2 (e.set) (e.rules) (e.current) t.name e.info>; 85 False = <AddCompletions2 (e.set) (e.rules t.completion) (e.current) t.name e.info>; 82 86 }; 83 87 }; … … 86 90 } 87 91 92 IsIn { 93 t.1 e.set t.1 = True; 94 t.1 e.set t.2 = <IsIn e.set t.2>; 95 t.2 = False; 96 } 97 88 98 $ENTRY Go { 89 99 = <Prout 90 100 * E -> E '+' E | 'n' 91 <Check ((PROD (TYPE ('E')) ((TYPE ('E')) '+' (TYPE ('E'))) ('n'))) (TYPE ('E')) ' mn'> '\n' >;92 *<Check ((PROD (TYPE ('E')) ((TYPE ('E')) '+' (TYPE ('E')))) (PROD (TYPE ('E')) ('n'))) (TYPE ('E')) 'n+n+n'>>;101 <Check ((PROD (TYPE ('E')) ((TYPE ('E')) '+' (TYPE ('E'))) ('n'))) (TYPE ('E')) 'n+n'> '\n' 102 <Check ((PROD (TYPE ('E')) ((TYPE ('E')) '+' (TYPE ('E')))) (PROD (TYPE ('E')) ('n'))) (TYPE ('E')) 'n+n+n'>>; 93 103 } 94 104
Note: See TracChangeset
for help on using the changeset viewer.