Merge branch 'infix' of git://github.com/EdwardXXIV/factor into edwardxxiv
commit
9cfa9817da
|
@ -1,3 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Philipp Brüschweiler
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
IN: infix.ast
|
IN: infix.ast
|
||||||
|
|
||||||
TUPLE: ast-number value ;
|
TUPLE: ast-number value ;
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Philipp Brüschweiler
|
|
@ -1,4 +1,6 @@
|
||||||
USING: help.syntax help.markup prettyprint locals ;
|
! Copyright (C) 2009 Philipp Brüschweiler
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: help.syntax help.markup math prettyprint locals sequences ;
|
||||||
IN: infix
|
IN: infix
|
||||||
|
|
||||||
HELP: [infix
|
HELP: [infix
|
||||||
|
@ -36,3 +38,54 @@ HELP: [infix|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
{ POSTPONE: [infix POSTPONE: [infix| } related-words
|
{ POSTPONE: [infix POSTPONE: [infix| } related-words
|
||||||
|
|
||||||
|
ARTICLE: "infix" "Infix notation"
|
||||||
|
"The " { $vocab-link "infix" } " vocabulary implements support for infix notation in Factor source code."
|
||||||
|
{ $subsection POSTPONE: [infix }
|
||||||
|
{ $subsection POSTPONE: [infix| }
|
||||||
|
$nl
|
||||||
|
"The usual infix math operators are supported:"
|
||||||
|
{ $list
|
||||||
|
{ $link + }
|
||||||
|
{ $link - }
|
||||||
|
{ $link * }
|
||||||
|
{ $link / }
|
||||||
|
{ { $snippet "%" } ", which is the infix operator for " { $link mod } "." }
|
||||||
|
}
|
||||||
|
"The standard precedence rules apply: Grouping with parentheses before " { $snippet "*" } ", " { $snippet "/" } "and " { $snippet "%" } " before " { $snippet "+" } " and " { $snippet "-" } "."
|
||||||
|
{ $example
|
||||||
|
"USING: infix prettyprint ;"
|
||||||
|
"[infix 5-40/10*2 infix] ."
|
||||||
|
"-3"
|
||||||
|
}
|
||||||
|
$nl
|
||||||
|
"You can call Factor words in infix expressions just as you would in C. There are some restrictions on which words are legal to use though:"
|
||||||
|
{ $list
|
||||||
|
"The word must return exactly one value."
|
||||||
|
"The word name must consist of the letters a-z, A-Z, _ or 0-9, and the first character can't be a number."
|
||||||
|
}
|
||||||
|
{ $example
|
||||||
|
"USING: infix locals math math.functions prettyprint ;"
|
||||||
|
":: binary_entropy ( p -- h )"
|
||||||
|
" [infix -(p*log(p) + (1-p)*log(1-p)) / log(2) infix] ;"
|
||||||
|
"[infix binary_entropy( sqrt(0.25) ) infix] ."
|
||||||
|
"1.0"
|
||||||
|
}
|
||||||
|
$nl
|
||||||
|
"You can access " { $vocab-link "sequences" } " inside infix expressions with the familiar " { $snippet "arr[index]" } " notation."
|
||||||
|
{ $example
|
||||||
|
"USING: arrays infix prettyprint ;"
|
||||||
|
"[infix| myarr [ { 1 2 3 4 } ] | myarr[4/2]*3 infix] ."
|
||||||
|
"9"
|
||||||
|
}
|
||||||
|
"Please note: in Factor " { $emphasis "fixnums are sequences too." } " If you are not careful with sequence accesses you may introduce subtle bugs:"
|
||||||
|
{ $example
|
||||||
|
"USING: arrays infix locals prettyprint ;"
|
||||||
|
":: add-2nd-element ( x y -- res )"
|
||||||
|
" [infix x[1] + y[1] infix] ;"
|
||||||
|
"{ 1 2 3 } 5 add-2nd-element ."
|
||||||
|
"3"
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
ABOUT: "infix"
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Philipp Brüschweiler
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: infix infix.private kernel locals math math.functions
|
USING: infix infix.private kernel locals math math.functions
|
||||||
tools.test ;
|
tools.test ;
|
||||||
IN: infix.tests
|
IN: infix.tests
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Philipp Brüschweiler
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors assocs combinators combinators.short-circuit
|
USING: accessors assocs combinators combinators.short-circuit
|
||||||
effects fry infix.parser infix.ast kernel locals.parser
|
effects fry infix.parser infix.ast kernel locals.parser
|
||||||
locals.types math multiline namespaces parser quotations
|
locals.types math multiline namespaces parser quotations
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Philipp Brüschweiler
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: infix.ast infix.parser infix.tokenizer tools.test ;
|
USING: infix.ast infix.parser infix.tokenizer tools.test ;
|
||||||
IN: infix.parser.tests
|
IN: infix.parser.tests
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Philipp Brüschweiler
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: infix.ast infix.tokenizer kernel math peg.ebnf sequences
|
USING: infix.ast infix.tokenizer kernel math peg.ebnf sequences
|
||||||
strings vectors ;
|
strings vectors ;
|
||||||
IN: infix.parser
|
IN: infix.parser
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Support for infix notation in Factor programs
|
|
@ -0,0 +1 @@
|
||||||
|
extensions
|
|
@ -1,3 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Philipp Brüschweiler
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: infix.ast infix.tokenizer tools.test ;
|
USING: infix.ast infix.tokenizer tools.test ;
|
||||||
IN: infix.tokenizer.tests
|
IN: infix.tokenizer.tests
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Philipp Brüschweiler
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: infix.ast kernel peg peg.ebnf math.parser sequences
|
USING: infix.ast kernel peg peg.ebnf math.parser sequences
|
||||||
strings ;
|
strings ;
|
||||||
IN: infix.tokenizer
|
IN: infix.tokenizer
|
||||||
|
|
Loading…
Reference in New Issue