From 995d28fb2fdb74d96ea5b72b4537cf6a0a99c335 Mon Sep 17 00:00:00 2001 From: Sam Anklesaria Date: Tue, 10 Mar 2009 16:14:39 -0500 Subject: [PATCH] debugging, documentation for peg-lexer --- extra/peg-lexer/peg-lexer-docs.factor | 11 +++++++++++ extra/peg-lexer/peg-lexer.factor | 8 ++++---- 2 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 extra/peg-lexer/peg-lexer-docs.factor diff --git a/extra/peg-lexer/peg-lexer-docs.factor b/extra/peg-lexer/peg-lexer-docs.factor new file mode 100644 index 0000000000..7b45ffb87d --- /dev/null +++ b/extra/peg-lexer/peg-lexer-docs.factor @@ -0,0 +1,11 @@ +USING: peg.ebnf help.syntax help.markup strings ; +IN: peg-lexer +ABOUT: "peg-lexer" + +HELP: ON-BNF: +{ $syntax "ON-BNF: word ... ;ON-BNF" } +{ $description "Creates a parsing word using a parser for lexer control, adding the resulting ast to the stack. Parser syntax is as in " { $link POSTPONE: EBNF: } } ; + +HELP: create-bnf +{ $values { "word" string } { "parser" parser } } +{ $description "Runtime equivalent of ON-BNF- also useful with manually constructed parsers." } ; \ No newline at end of file diff --git a/extra/peg-lexer/peg-lexer.factor b/extra/peg-lexer/peg-lexer.factor index 52cc5861b6..bc191fd878 100644 --- a/extra/peg-lexer/peg-lexer.factor +++ b/extra/peg-lexer/peg-lexer.factor @@ -38,11 +38,11 @@ M: lex-hash at* swap { [ execute [ error-stack get first throw ] unless* ] with-global-lexer ast>> ; -: create-bnf ( name parser -- ) [ lexer get skip-blank parse* dup V{ } = [ parsed ] unless ] curry - define POSTPONE: parsing ; - +: create-bnf ( name parser -- ) reset-tokenizer [ lexer get skip-blank parse* dup V{ } = [ parsed ] unless ] curry + define word make-parsing ; + : ON-BNF: CREATE-WORD reset-tokenizer ";ON-BNF" parse-multiline-string parse-ebnf - main swap at reset-tokenizer create-bnf ; parsing + main swap at create-bnf ; parsing ! Tokenizer like standard factor lexer EBNF: factor