]> gitweb.factorcode.org Git - factor.git/commitdiff
Fix conflict
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 25 Jun 2008 09:07:37 +0000 (04:07 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 25 Jun 2008 09:07:37 +0000 (04:07 -0500)
1  2 
extra/peg/ebnf/ebnf.factor

index e3d44585a7258c3d27e817115c4e7fe6e748188d,47255341788f3a4e2c2a17567bfe86c08e6bf7a9..0bf07f268792d074e3c38fbabf1b0d07bfde3509
@@@ -1,14 -1,45 +1,45 @@@
  ! Copyright (C) 2007 Chris Double.\r
  ! See http://factorcode.org/license.txt for BSD license.\r
- USING: kernel compiler.units parser words arrays strings math.parser sequences \r
+ USING: kernel compiler.units words arrays strings math.parser sequences \r
         quotations vectors namespaces math assocs continuations peg\r
 -       peg.parsers unicode.categories multiline combinators combinators.lib \r
 -       splitting accessors effects sequences.deep peg.search inference \r
 -       io.streams.string io prettyprint parser ;\r
 +       peg.parsers unicode.categories multiline combinators.lib \r
 +       splitting accessors effects sequences.deep peg.search\r
 +       combinators.short-circuit ;\r
  IN: peg.ebnf\r
  \r
+ : rule ( name word -- parser )\r
+   #! Given an EBNF word produced from EBNF: return the EBNF rule\r
+   "ebnf-parser" word-prop at ;\r
\r
+ TUPLE: tokenizer any one many ;\r
\r
+ : default-tokenizer ( -- tokenizer )\r
+   T{ tokenizer f \r
+     [ any-char ]\r
+     [ token ]\r
+     [ [ = ] curry any-char swap semantic ]\r
+   } ;\r
\r
+ : parser-tokenizer ( parser -- tokenizer )\r
+   [ 1quotation ] keep\r
+   [ swap [ = ] curry semantic ] curry dup tokenizer boa ;\r
\r
+ : rule-tokenizer ( name word -- tokenizer )\r
+   rule parser-tokenizer ;\r
\r
+ : tokenizer ( -- word )\r
+   \ tokenizer get-global [ default-tokenizer ] unless* ;\r
\r
+ : reset-tokenizer ( -- )\r
+   default-tokenizer \ tokenizer set-global ;\r
\r
+ : TOKENIZER: \r
+   scan search [ "Tokenizer not found" throw ] unless*\r
+   execute \ tokenizer set-global ; parsing\r
\r
  TUPLE: ebnf-non-terminal symbol ;\r
  TUPLE: ebnf-terminal symbol ;\r
+ TUPLE: ebnf-foreign word rule ;\r
  TUPLE: ebnf-any-character ;\r
  TUPLE: ebnf-range pattern ;\r
  TUPLE: ebnf-ensure group ;\r