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,