TXL is a programming language created in 1985 by James Cordy.
#1492on PLDB | 39Years Old | 69Repos |
TXL is a special-purpose programming language originally designed by Charles Halpern-Hamu and James Cordy at the University of Toronto in 1985. The acronym "TXL" originally stood for "Turing eXtender Language" after the language's original purpose, the specification and rapid prototyping of variants and extensions of the Turing programming language, but no longer has any meaningful interpretation. Modern TXL is specifically designed for creating, manipulating and rapidly prototyping language-based descriptions, tools and applications using source transformation. Read more on Wikipedia...
% Calculator.Txl - simple numerical expression evaluator
% Part I. Syntax specification
define program
[expression]
end define
define expression
[term]
| [expression] [addop] [term]
end define
define term
[primary]
| [term] [mulop] [primary]
end define
define primary
[number]
| ( [expression] )
end define
define addop
'+
| '-
end define
define mulop
'*
| '/
end define
% Part 2. Transformation rules
rule main
replace [expression]
E [expression]
construct NewE [expression]
E [resolveAddition] [resolveSubtraction] [resolveMultiplication]
[resolveDivision] [resolveParentheses]
where not
NewE [= E]
by
NewE
end rule
rule resolveAddition
replace [expression]
N1 [number] + N2 [number]
by
N1 [+ N2]
end rule
rule resolveSubtraction
replace [expression]
N1 [number] - N2 [number]
by
N1 [- N2]
end rule
rule resolveMultiplication
replace [term]
N1 [number] * N2 [number]
by
N1 [* N2]
end rule
rule resolveDivision
replace [term]
N1 [number] / N2 [number]
by
N1 [/ N2]
end rule
rule resolveParentheses
replace [primary]
( N [number] )
by
N
end rule
function fact
replace [number]
n [number]
construct nMinusOne [number]
n [- 1]
where
n [> 1]
construct factMinusOne [number]
nMinusOne [fact]
by
n [* factMinusOne]
end function
function fact0
replace [number]
0
by
1
end function