Skip to content

Commit

Permalink
Names in FL concrete syntax; adjusting extractor to comply
Browse files Browse the repository at this point in the history
  • Loading branch information
grammarware committed Jun 24, 2012
1 parent 59da54c commit 48c8d0d
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 9 deletions.
1 change: 1 addition & 0 deletions shared/rascal/src/extract/RascalSyntax2BGF.rsc
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion topics/convergence/guided/bgf/rascal-c.bgf
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf"><bgf:production><label>prg</label><nonterminal>Program</nonterminal><bgf:expression><seplistplus><bgf:expression><nonterminal>Function</nonterminal></bgf:expression><bgf:expression><terminal>\n</terminal></bgf:expression></seplistplus></bgf:expression></bgf:production><bgf:production><label>apply</label><nonterminal>Expr</nonterminal><bgf:expression><sequence><bgf:expression><nonterminal>Name</nonterminal></bgf:expression><bgf:expression><plus><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></plus></bgf:expression></sequence></bgf:expression></bgf:production><bgf:production><label>ifThenElse</label><nonterminal>Expr</nonterminal><bgf:expression><sequence><bgf:expression><terminal>if</terminal></bgf:expression><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression><bgf:expression><terminal>then</terminal></bgf:expression><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression><bgf:expression><terminal>else</terminal></bgf:expression><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></sequence></bgf:expression></bgf:production><bgf:production><label>argument</label><nonterminal>Expr</nonterminal><bgf:expression><nonterminal>Name</nonterminal></bgf:expression></bgf:production><bgf:production><label>binary</label><nonterminal>Expr</nonterminal><bgf:expression><sequence><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression><bgf:expression><nonterminal>Ops</nonterminal></bgf:expression><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></sequence></bgf:expression></bgf:production><bgf:production><nonterminal>Expr</nonterminal><bgf:expression><sequence><bgf:expression><terminal>(</terminal></bgf:expression><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression><bgf:expression><terminal>)</terminal></bgf:expression></sequence></bgf:expression></bgf:production><bgf:production><label>literal</label><nonterminal>Expr</nonterminal><bgf:expression><nonterminal>Int</nonterminal></bgf:expression></bgf:production><bgf:production><label>plus</label><nonterminal>Ops</nonterminal><bgf:expression><terminal>+</terminal></bgf:expression></bgf:production><bgf:production><label>equal</label><nonterminal>Ops</nonterminal><bgf:expression><terminal>==</terminal></bgf:expression></bgf:production><bgf:production><label>minus</label><nonterminal>Ops</nonterminal><bgf:expression><terminal>-</terminal></bgf:expression></bgf:production><bgf:production><label>fun</label><nonterminal>Function</nonterminal><bgf:expression><sequence><bgf:expression><nonterminal>Name</nonterminal></bgf:expression><bgf:expression><plus><bgf:expression><nonterminal>Name</nonterminal></bgf:expression></plus></bgf:expression><bgf:expression><terminal>=</terminal></bgf:expression><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></sequence></bgf:expression></bgf:production></bgf:grammar>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf"><bgf:production><label>prg</label><nonterminal>Program</nonterminal><bgf:expression><selectable><selector>functions</selector><bgf:expression><seplistplus><bgf:expression><nonterminal>Function</nonterminal></bgf:expression><bgf:expression><terminal>\n</terminal></bgf:expression></seplistplus></bgf:expression></selectable></bgf:expression></bgf:production><bgf:production><label>ifThenElse</label><nonterminal>Expr</nonterminal><bgf:expression><sequence><bgf:expression><terminal>if</terminal></bgf:expression><bgf:expression><selectable><selector>cond</selector><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></selectable></bgf:expression><bgf:expression><terminal>then</terminal></bgf:expression><bgf:expression><selectable><selector>thenbranch</selector><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></selectable></bgf:expression><bgf:expression><terminal>else</terminal></bgf:expression><bgf:expression><selectable><selector>elsebranch</selector><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></selectable></bgf:expression></sequence></bgf:expression></bgf:production><bgf:production><nonterminal>Expr</nonterminal><bgf:expression><sequence><bgf:expression><terminal>(</terminal></bgf:expression><bgf:expression><selectable><selector>e</selector><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></selectable></bgf:expression><bgf:expression><terminal>)</terminal></bgf:expression></sequence></bgf:expression></bgf:production><bgf:production><label>literal</label><nonterminal>Expr</nonterminal><bgf:expression><selectable><selector>i</selector><bgf:expression><nonterminal>Int</nonterminal></bgf:expression></selectable></bgf:expression></bgf:production><bgf:production><label>argument</label><nonterminal>Expr</nonterminal><bgf:expression><selectable><selector>a</selector><bgf:expression><nonterminal>Name</nonterminal></bgf:expression></selectable></bgf:expression></bgf:production><bgf:production><label>binary</label><nonterminal>Expr</nonterminal><bgf:expression><sequence><bgf:expression><selectable><selector>lexpr</selector><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></selectable></bgf:expression><bgf:expression><selectable><selector>op</selector><bgf:expression><nonterminal>Ops</nonterminal></bgf:expression></selectable></bgf:expression><bgf:expression><selectable><selector>rexpr</selector><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></selectable></bgf:expression></sequence></bgf:expression></bgf:production><bgf:production><label>apply</label><nonterminal>Expr</nonterminal><bgf:expression><sequence><bgf:expression><selectable><selector>f</selector><bgf:expression><nonterminal>Name</nonterminal></bgf:expression></selectable></bgf:expression><bgf:expression><selectable><selector>vargs</selector><bgf:expression><plus><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></plus></bgf:expression></selectable></bgf:expression></sequence></bgf:expression></bgf:production><bgf:production><label>plus</label><nonterminal>Ops</nonterminal><bgf:expression><terminal>+</terminal></bgf:expression></bgf:production><bgf:production><label>equal</label><nonterminal>Ops</nonterminal><bgf:expression><terminal>==</terminal></bgf:expression></bgf:production><bgf:production><label>minus</label><nonterminal>Ops</nonterminal><bgf:expression><terminal>-</terminal></bgf:expression></bgf:production><bgf:production><label>fun</label><nonterminal>Function</nonterminal><bgf:expression><sequence><bgf:expression><selectable><selector>f</selector><bgf:expression><nonterminal>Name</nonterminal></bgf:expression></selectable></bgf:expression><bgf:expression><selectable><selector>args</selector><bgf:expression><plus><bgf:expression><nonterminal>Name</nonterminal></bgf:expression></plus></bgf:expression></selectable></bgf:expression><bgf:expression><terminal>=</terminal></bgf:expression><bgf:expression><selectable><selector>body</selector><bgf:expression><nonterminal>Expr</nonterminal></bgf:expression></selectable></bgf:expression></sequence></bgf:expression></bgf:production></bgf:grammar>
16 changes: 8 additions & 8 deletions 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
Expand Down

0 comments on commit 48c8d0d

Please sign in to comment.