From 901f622281851e540c66cf3445617c7591ef77a7 Mon Sep 17 00:00:00 2001 From: grammarware Date: Mon, 6 Jul 2009 11:26:43 +0000 Subject: [PATCH] TXL parser for FL git-svn-id: https://slps.svn.sourceforge.net/svnroot/slps@657 ab42f6e0-554d-0410-b580-99e487e6eeb2 --- topics/fl/txl/FL.Txl | 67 ++++++++++++++++++++++++++++++++++++++++++ topics/fl/txl/Makefile | 3 ++ 2 files changed, 70 insertions(+) create mode 100644 topics/fl/txl/FL.Txl create mode 100644 topics/fl/txl/Makefile diff --git a/topics/fl/txl/FL.Txl b/topics/fl/txl/FL.Txl new file mode 100644 index 00000000..a4f7fb36 --- /dev/null +++ b/topics/fl/txl/FL.Txl @@ -0,0 +1,67 @@ +% Calculator.Txl - simple numerical expression evaluator + +% Part I. Syntax specification +define program + [fun+] +end define + +define fun + [id] [id+] = [expression] [newline] +end define + +define expression + [expression] [op] [expression] + | [id] [expression+] + | if [expression] then [expression] else [expression] + | [expression] == [expression] + | [primary] +end define + +define op + + + | - + | == +end define + +define primary + [number] + | [id] + | ( [expression] ) +end define + + +% Part 2. Transformation rules +rule main + replace [expression] + E [expression] + construct NewE [expression] + E [resolveAddition] + [resolveSubtraction] + [resolveBracketedExpressions] + 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 resolveBracketedExpressions + replace [primary] + ( N [number] ) + by + N +end rule + diff --git a/topics/fl/txl/Makefile b/topics/fl/txl/Makefile new file mode 100644 index 00000000..e111b448 --- /dev/null +++ b/topics/fl/txl/Makefile @@ -0,0 +1,3 @@ +test: + cp ../shared/factorial.txt factorial.fl + txl -newline factorial.fl