diff --git a/topics/extraction/asfix2btf/AsFixToBGF.asf b/topics/extraction/asfix2btf/AsFixToBGF.asf
new file mode 100644
index 00000000..fcb1dd82
--- /dev/null
+++ b/topics/extraction/asfix2btf/AsFixToBGF.asf
@@ -0,0 +1,133 @@
+equations
+
+[map-asfix-to-bgf]
+asfix2bgf(&T1)
+=
+
+ trafoProds(accuProds(&T1,))
+
+
+ [traversal] accuProds(appl(&P1,[&Tcs1]),&P*2) = accuProds(&Tcs1,&P*2 &P1)
+[default-traversal] accuProds(&T1,&Tcs1,&P*2) = accuProds(&T1,accuProds(&Tcs1,&P*2))
+
+[recursion] trafoProds(&P1 &P*2) = trafoProd(&P1)trafoProds(&P*2)
+[recursion-final] trafoProds() =
+
+[prod-to-null] trafoProd(prod([],&S0,&As1)) =
+[prod-to-null] trafoProd(list(&S1)) =
+[prod-to-null] trafoProd(prod([&Scs1],lex(&S1),&As1)) =
+[prod-to-null] trafoProd(prod([&Scs1],lit(&Z1),&As1)) =
+
+[kill-layout-before] trafoProd(prod([cf(opt(layout)),&Scs1],&S0,&As1)) = trafoProd(prod([&Scs1],&S0,&As1))
+[kill-layout-before] trafoProd(prod([cf(layout),&Scs1],&S0,&As1)) = trafoProd(prod([&Scs1],&S0,&As1))
+[kill-layout-before] trafoProd(prod([lex(&S1),&Scs1],&S0,&As1)) = trafoProd(prod([&Scs1],&S0,&As1))
+[kill-layout-before] trafoProd(prod([cf(layout),&Scs1],&S0,&As1)) = trafoProd(prod([&Scs1],&S0,&As1))
+
+[prod-start] trafoProd(prod([cf(sort(&Z1)),&Scs1],sort(""),&As1)) = strcon2chardata(&Z1)
+
+[a]
+trafoProd(prod(&Ss1,cf(sort(&Z0)),&As1))
+=
+
+ derivelabel(&As1)
+ strcon2chardata(&Z0)
+ symbols2expr(&Ss1)
+
+
+[lit-prod-labelled]
+trafoProd(prod([lit(&Z1)],cf(sort(&Z0)),&As1))
+=
+
+ derivelabel(&As1)
+ strcon2chardata(&Z0)
+
+ strcon2chardata(&Z1)
+
+
+
+[map-cf]
+symbols2expr([cf(&S1)])
+=
+symbols2expr([&S1])
+
+[map-plus]
+symbols2expr([iter(&S1)])
+=
+
+
+ symbols2expr([&S1])
+
+
+
+[map-optional]
+symbols2expr([opt(&S1)])
+=
+
+ symbols2expr([&S1])
+
+
+[map-literal-to-terminal]
+symbols2expr([lit(&Z1)])
+=
+
+ strcon2chardata(&Z1)
+
+
+[map-sort-to-nonterminal]
+symbols2expr([sort(&Z1)])
+=
+
+ strcon2chardata(&Z1)
+
+
+[map-layout-to-nothing]
+symbols2expr([cf(opt(layout)),&Scs2])
+=
+symbols2expr([&Scs2])
+
+[default-map-one]
+symbols2expr([&S1])
+=
+
+
+ ?
+
+
+
+[default-map]
+symbols2expr([&S1,&Scs2])
+=
+
+
+ flattenexprs([&S1,&Scs2])
+
+
+
+[map-flattened-no-layout]
+flattenexprs([cf(opt(layout)),&Scs2])
+=
+flattenexprs([&Scs2])
+
+[default-map-flattened]
+flattenexprs([&S1,&Scs2])
+=
+symbols2expr([&S1])flattenexprs([&Scs2])
+
+[map-flattened-final]
+flattenexprs([])
+=
+
+[labeling-no-label]
+derivelabel(no-attrs) =
+
+[labeling-only-label]
+derivelabel(attrs([term(cons(&L1))])) =
+
+[labeling-first-label]
+derivelabel(attrs([term(cons(&L1)),&A*2])) =
+
+[default-labeling-not-first-label]
+derivelabel(attrs([&A1,&A*2])) = derivelabel(attrs([&A*2]))
+
+[default-labeling-last-label]
+derivelabel(attrs([&A1])) =
diff --git a/topics/extraction/asfix2btf/AsFixToBGF.sdf b/topics/extraction/asfix2btf/AsFixToBGF.sdf
new file mode 100644
index 00000000..81ab70d6
--- /dev/null
+++ b/topics/extraction/asfix2btf/AsFixToBGF.sdf
@@ -0,0 +1,47 @@
+module AsFixToBGF
+
+imports
+ languages/asfix/syntax/Parsetree
+ languages/xml/syntax/XML
+ basic/NatCon
+ AsFixTokens
+ Tokens
+
+exports
+ sorts
+ Element Tree
+ context-free syntax
+ asfix2bgf(Tree) -> Element
+
+hiddens
+context-free syntax
+ accuProds({Tree ","}+,Production*) -> Production* {traversal(accu,top-down,break)}
+ trafoProds(Production*) -> Content*
+ trafoProd(Production) -> Content*
+ symbols2expr(Symbols) -> Element
+ flattenexprs(Symbols) -> Content*
+ derivelabel(Attributes) -> Content*
+
+variables
+ "&A" [0-9]+ -> Attr
+ "&A*" [0-9]+ -> {Attr ","}+
+ "&As" [0-9]+ -> Attributes
+ "&C" [0-9]+ -> Content
+ "&C*" [0-9]+ -> Content*
+ "&E" [0-9]+ -> Element
+ "&N" [0-9]+ -> Sort
+ "&T" [0-9]+ -> Tree
+ "&T*" [0-9]+ -> Tree*
+ "&Tcs" [0-9]+ -> {Tree ","}+
+ "&S" [0-9]+ -> Symbol
+ "&S*" [0-9]+ -> Symbol*
+ "&Ss" [0-9]+ -> Symbols
+ "&Scs" [0-9]+ -> {Symbol ","}*
+ "&Z" [0-9]+ -> StrCon
+ "&P" [0-9]+ -> Production
+ "&P*" [0-9]+ -> Production*
+ "&Ps" [0-9]+ -> Productions
+ "&I" [0-9]+ -> NatCon
+ "&Ics" [0-9]+ -> {NatCon ","}+
+ "&B" [0-9]+ -> Args
+ "&L" [0-9]+ -> IdCon
diff --git a/topics/extraction/asfix2btf/AsFixTokens.asf b/topics/extraction/asfix2btf/AsFixTokens.asf
index 34e20e3d..4147e979 100644
--- a/topics/extraction/asfix2btf/AsFixTokens.asf
+++ b/topics/extraction/asfix2btf/AsFixTokens.asf
@@ -11,48 +11,6 @@ chardata(&Char1 &Char*1) := tree2chardata([&T*2])
==============================================
tree2chardata([&N1,&T*2]) = chardata ( &Chr1 &Char1 &Char*1 )
-
-
-
-[zero]
-strchar(&Chr1) := mapsymbol(&N1)
-========================================
-list2chardata([&N1]) = chardata(&Chr1)
-
-[one]
-strchar(&Chr1) := mapsymbol(&N1),
-chardata(&Char1 &Char*1) := list2chardata([&N*2])
-==============================================
-list2chardata([&N1,&N*2]) = chardata ( &Chr1 &Char1 &Char*1 )
-
-[one]
-symbols2chardata([&N1]) = [mapsymbol(&N1)]
-
-[one]
-&C1 := mapsymbol(&N1),
-[&C*2] := symbols2chardata([&N*2])
-===============================================
-symbols2chardata([&N1,&N*2]) = [&C1,&C*2]
-
-[strcon-of-length-1]
-array2chardata([&StrChr1]) = strcon(\" &StrChr1 \")
-
-[strcon-of-length-1]
-strcon(\" &StrChr+1 \" ):= array2chardata([&C*2])
-====================================================
-array2chardata([&StrChr1,&C*2]) = strcon(\" &StrChr1 &StrChr+1 \")
-
-[strcon-of-length-1]
-strchar(&Chr1) := &StrChr1
-========================================
-array2chars([&StrChr1]) = chardata(&Chr1)
-
-[strcon-of-length-1]
-strchar(&Chr1) := &StrChr1,
-chardata(&Char1 &Char*1) := array2chars([&C*2])
-====================================================
-array2chars([&StrChr1,&C*2]) = chardata ( &Chr1 &Char1 &Char*1 )
-
[alpha-a] mapsymbol(97) = a
[alpha-b] mapsymbol(98) = b
[alpha-c] mapsymbol(99) = c
diff --git a/topics/extraction/asfix2btf/AsFixTokens.sdf b/topics/extraction/asfix2btf/AsFixTokens.sdf
index d1d55d85..17a82139 100644
--- a/topics/extraction/asfix2btf/AsFixTokens.sdf
+++ b/topics/extraction/asfix2btf/AsFixTokens.sdf
@@ -1,7 +1,5 @@
module AsFixTokens
-%% mapTree(appl(prod([lex(iter(char-class([range(97,122)])))],lex(sort("NAME")),no-attrs),[appl(list(lex(iter(char-class([range(97,122)])))),[102,117,110])]))
-%% [97,122] -> a,z
%% [102,117,110] -> fun
imports
@@ -13,38 +11,23 @@ imports
exports
sorts
- CharNumList CharValList StrCon CharData
- context-free start-symbols
- CharNumList CharValList
+ Args CharData
context-free syntax
- "[" {NatCon ","}+ "]" -> CharNumList
- "[" {StrChar ","}+ "]" -> CharValList
- "symbols2chardata" "(" CharNumList ")" -> CharValList
- "mapsymbol" "(" NatCon ")" -> StrChar
- array2chardata(CharValList) -> StrCon
- array2chars(CharValList) -> CharData
- list2chardata(CharNumList) -> CharData
- tree2chardata(Args) -> CharData
+ tree2chardata(Args) -> CharData
hiddens
-%% imports
- %%basic/Whitespace
+ context-free syntax
+ mapsymbol(NatCon) -> StrChar
variables
- "&N" [0-9]+ -> NatCon %% char number
- "&N*" [0-9]+ -> {NatCon ","}+ %% char number
- "&C" [0-9]+ -> StrChar
- "&C*" [0-9]+ -> {StrChar ","}+
- "&T" [0-9]+ -> Tree
+ "&N" [0-9]+ -> NatCon
"&T*" [0-9]+ -> {Tree ","}+
lexical variables
- "&StrChr" [0-9]+ -> StrChar
- "&StrChr+" [0-9]+ -> StrChar+
"&Chr" [0-9]* -> ~[\0-\31\n\t\"\\\<\&]
"&Char" [0-9]* -> ~[\<\&]
"&Char*" [0-9]* -> ~[\<\&]*
- %% "&S" [0-9]+ -> Symbol
-
%% Python code to generate the boring part of the ASF:
%% for x in range(97,123):
-%% print '['+chr(x)+']','mapsymbol('+`x`+')','=',chr(x)
+%% print '[alpha-'+chr(x)+']','mapsymbol('+`x`+')','=',chr(x)
+%% for x in range(48,58):
+%% print '[digit-'+chr(x)+']','mapsymbol('+`x`+')','=',chr(x)
diff --git a/topics/extraction/asfix2btf/Main.asf b/topics/extraction/asfix2btf/Main.asf
index 6d7f7945..132387ef 100644
--- a/topics/extraction/asfix2btf/Main.asf
+++ b/topics/extraction/asfix2btf/Main.asf
@@ -1,9 +1,12 @@
equations
-[map-asfix-to-btf]
+[map-asfix-to-btf]
main(parsetree(&T1,&I1))
=
-mapTree(&T1)
+
+ asfix2bgf(&T1)
+ mapTree(&T1)
+
[kill-layout-before]
mapTree(appl(prod([cf(opt(layout)),&Scs1],&S0,&As1),[&T1,&Tcs1]))
diff --git a/topics/extraction/asfix2btf/Main.sdf b/topics/extraction/asfix2btf/Main.sdf
index e657dee0..d9837f0f 100644
--- a/topics/extraction/asfix2btf/Main.sdf
+++ b/topics/extraction/asfix2btf/Main.sdf
@@ -4,6 +4,7 @@ module Main
languages/asfix/syntax/Parsetree
languages/xml/syntax/XML
basic/NatCon
+ AsFixToBGF
AsFixTokens
Tokens
@@ -20,11 +21,6 @@ module Main
hiddens
context-free syntax
- accuTrees(ParseTree,Tree*) -> Tree* {traversal(accu,top-down,break)}
- accuTrees(Args,Tree*) -> Tree* {traversal(accu,top-down,break)}
- accuTrees(Tree*,Tree*) -> Tree* {traversal(accu,top-down,break)}
- trafoTrees(Tree*) -> Content*
- trafoTree(Tree) -> Element
"mapTrees" "(" {Tree ","}* ")" -> Content*
"mapTree" "(" Tree ")" -> Element
%% "mapTree2Tree" "(" Tree ")" -> Element
@@ -62,3 +58,4 @@ module Main
"&Ps" [0-9]+ -> Productions
"&I" [0-9]+ -> NatCon
"&Ics" [0-9]+ -> {NatCon ","}+
+ "&B" [0-9]+ -> Args
diff --git a/topics/extraction/asfix2btf/Makefile b/topics/extraction/asfix2btf/Makefile
index ecde0c7b..1617f252 100644
--- a/topics/extraction/asfix2btf/Makefile
+++ b/topics/extraction/asfix2btf/Makefile
@@ -1,19 +1,13 @@
-validator = ../../../download/msv/msv.jar
metaenv = `which asfe | xargs dirname`/..
sdfl = ${metaenv}/share/sdf-library/library
asfl = ${metaenv}/share/asf-library/library
-schemata = ../../../shared/xsd
all: build test
build: Main.tbl Main.eqs
Main.eqs: *.sdf *.asf
- eqs-dump -m Main -o 1.eqs
- eqs-dump -m Tokens -o 2.eqs
- eqs-dump -m AsFixTokens -o 3.eqs
- concat-asf -o Main.eqs 1.eqs 2.eqs 3.eqs
- rm -f ?.eqs
+ eqs-dump -m Main -o Main.eqs
Main.tbl: *.sdf
cp ../sdf2bgf/Tokens.* .
@@ -37,7 +31,7 @@ tblcat:
@cat ${sdfl}/basic/StrCon.sdf >> Main.def
@cat ${sdfl}/basic/IdentifierCon.sdf >> Main.def
@cat ${sdfl}/basic/Comments.sdf >> Main.def
- @cat Main.sdf Tokens.sdf >> Main.def
+ @cat Main.sdf Tokens.sdf AsFixTokens AsFixToBGF>> Main.def
sdf2table -m Main Main.def
test:
@@ -47,10 +41,10 @@ test:
@echo "main(" > fac.trm
@cat ../../fl/shared/factorial.txt | python ../../fl/asfsdf/pre.py | sglr -p ../../fl/asfsdf/FL.tbl -t >> fac.trm
@echo ")" >> fac.trm
- cat asfix.trm | sglr -p Main.tbl | asfe -e Main.eqs | unparsePT | python post.py > small.btf
- cat fac.trm | sglr -p Main.tbl | asfe -e Main.eqs | unparsePT | python post.py > myfactorial.btf
+ cat asfix.trm | sglr -p Main.tbl | asfe -e Main.eqs | unparsePT > small.btf
+ cat fac.trm | sglr -p Main.tbl | asfe -e Main.eqs | unparsePT > myfactorial.btf
cp ../xml2btf/tests/factorial.btf .
- java -jar ${validator} -warning ${schemata}/btf.xsd *.btf
+ ls -1 *.btf | xargs -n1 checkxml btf
clean:
rm -f reduct.out
diff --git a/topics/extraction/asfix2btf/post.py b/topics/extraction/asfix2btf/post.py
deleted file mode 100644
index 75f6e771..00000000
--- a/topics/extraction/asfix2btf/post.py
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/python
-import sys
-sys.stdin.readline()
-print ''
-for line in sys.stdin:
- print line,