diff --git a/shared/rascal/src/extract/RascalSyntax2BGF.rsc b/shared/rascal/src/extract/RascalSyntax2BGF.rsc index fe675ac7..2cfd4cd7 100644 --- a/shared/rascal/src/extract/RascalSyntax2BGF.rsc +++ b/shared/rascal/src/extract/RascalSyntax2BGF.rsc @@ -57,6 +57,7 @@ default BGFProduction prod2prod(Production def) = production("", "?", syntax::BG BGFExpression rhs2expr([Symbol s]) = symbol2expr(s); BGFExpression rhs2expr(list[Symbol] seq) = syntax::BGF::sequence([symbol2expr(s) | s <- seq, layouts(_) !:= s]); +BGFExpression symbol2expr(label(str x, Symbol s)) = syntax::BGF::selectable(x,symbol2expr(s)); BGFExpression symbol2expr(\sort(str x)) = syntax::BGF::nonterminal(x); BGFExpression symbol2expr(conditional(\sort(str x),{except(_)})) = syntax::BGF::nonterminal(x); // cannot represent better in BGF BGFExpression symbol2expr(\lex(str x)) = syntax::BGF::nonterminal(x); diff --git a/topics/convergence/guided/bgf/rascal-c.bgf b/topics/convergence/guided/bgf/rascal-c.bgf index e61a7b60..dc2f4609 100644 --- a/topics/convergence/guided/bgf/rascal-c.bgf +++ b/topics/convergence/guided/bgf/rascal-c.bgf @@ -1,2 +1,2 @@ -ProgramFunction\nExprNameExprExprifExprthenExprelseExprExprNameExprExprOpsExprExpr(Expr)ExprIntOps+Ops==Ops-FunctionNameName=Expr +ProgramfunctionsFunction\nExprifcondExprthenthenbranchExprelseelsebranchExprExpr(eExpr)ExpriIntExpraNameExprlexprExpropOpsrexprExprExprfNamevargsExprOps+Ops==Ops-FunctionfNameargsName=bodyExpr diff --git a/topics/fl/rascal/src/Concrete.rsc b/topics/fl/rascal/src/Concrete.rsc index 6c56ae44..6321c750 100644 --- a/topics/fl/rascal/src/Concrete.rsc +++ b/topics/fl/rascal/src/Concrete.rsc @@ -1,15 +1,15 @@ @contributor{Vadim Zaytsev - vadim@grammarware.net - SWAT, CWI} module Concrete -start syntax Program = prg: {Function "\n"}+; -syntax Function = fun: Name Name+ "=" Expr ; +start syntax Program = prg: {Function "\n"}+ functions; +syntax Function = fun: Name f Name+ args "=" Expr body; syntax Expr - = binary: Expr Ops Expr - | apply: Name Expr!apply+ - | ifThenElse: "if" Expr "then" Expr "else" Expr - | bracket "(" Expr ")" - | argument: Name - | literal: Int + = binary: Expr lexpr Ops op Expr rexpr + | apply: Name f Expr!apply+ vargs + | ifThenElse: "if" Expr cond "then" Expr thenbranch "else" Expr elsebranch + | bracket "(" Expr e ")" + | argument: Name a + | literal: Int i ; syntax Ops