Skip to content

Commit

Permalink
Indentation des grammaires.
Browse files Browse the repository at this point in the history
git-svn-id: http://ladystorm.bigmadarea.net/svn/nf11@21 1e871849-ca45-4617-b4d0-c39c463a1ac7
  • Loading branch information
jeremy committed May 5, 2010
1 parent d3dde09 commit 9cea728
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 158 deletions.
161 changes: 74 additions & 87 deletions src/logoparsing/Logo.g
Original file line number Diff line number Diff line change
@@ -1,97 +1,84 @@
grammar Logo;
options {
output = AST;
backtrack = true;
output = AST;
backtrack = true;
}
tokens {
PROGRAMME;
BLOC;
REPETE = 'REPETE';
AV = 'AV';
TD = 'TD';
TG = 'TG';
REC = 'REC';
FPOS = 'FPOS';
FCAP = 'FCAP';
FCC = 'FCC';
LC = 'LC' ;
BC = 'BC' ;
VE = 'VE';
OP_PLUS = '+' ;
OP_MOINS = '-' ;
OP_MULT = '*' ;
OP_DIV = '/' ;
OP_ET = '&' ;
OP_OU = '|' ;
CMP_EGAL = '=';
CMP_SUP = '>';
CMP_INF = '<';
CMP_SUP_EGAL = '>=';
CMP_INF_EGAL = '<=';
PROGRAMME;
BLOC;
REPETE = 'REPETE';
AV = 'AV';
TD = 'TD';
TG = 'TG';
REC = 'REC';
FPOS = 'FPOS';
FCAP = 'FCAP';
FCC = 'FCC';
LC = 'LC' ;
BC = 'BC' ;
VE = 'VE';
OP_PLUS = '+' ;
OP_MOINS = '-' ;
OP_MULT = '*' ;
OP_DIV = '/' ;
OP_ET = '&' ;
OP_OU = '|' ;
CMP_EGAL = '=';
CMP_SUP = '>';
CMP_INF = '<';
CMP_SUP_EGAL = '>=';
CMP_INF_EGAL = '<=';
}
@lexer::header {
package logoparsing;
package logoparsing;
}
@header {
package logoparsing;
package logoparsing;
}
@members{
boolean valide = true;
public boolean getValide(){
return valide;
}
@members {
boolean valide = true;
public boolean getValide(){
return valide;
}
}
INT : ('0'..'9')+ ;
VRAI : 'VRAI'|'vrai';
FAUX : 'FAUX'|'faux';
WS : (' '|'\t'|('\r'? '\n'))+ { skip(); } ;

programme : liste_instructions -> ^(PROGRAMME liste_instructions)
;
liste_instructions :
(instruction)+
;
bloc :
'[' liste_instructions ']' -> ^(BLOC liste_instructions)
;
instruction :
REPETE^ expr bloc
| ( AV^
| TD^
| TG^
| REC^
| FCAP^ )
expr
| FPOS^ '['! expr expr ']'!
| FCC^ INT
| LC^
| BC^
| VE^
| 'TEST'^ exprBool
;
expr :
sumExpr ;
sumExpr:
multExpr ((OP_PLUS^|OP_MOINS^) multExpr)*
;
multExpr :
atom ((OP_MULT^|OP_DIV^) atom)*
;
exprBool :
exprOu
;
exprOu :
exprEt (OP_OU^ exprEt)*
;
exprEt :
atomBool (OP_ET^ atomBool)*
;
atom:
INT | '('! expr ')'!
;
atomBool :
VRAI
| FAUX
| expr ((CMP_EGAL^|CMP_SUP^|CMP_INF^|CMP_SUP_EGAL^|CMP_INF_EGAL^) expr)?
| '('! exprBool ')'!
;
INT : ('0'..'9')+ ;
VRAI : 'VRAI'|'vrai';
FAUX : 'FAUX'|'faux';
WS : (' '|'\t'|('\r'? '\n'))+ { skip(); } ;
programme
: liste_instructions -> ^(PROGRAMME liste_instructions)
;
liste_instructions
: (instruction)+
;
bloc : '[' liste_instructions ']' -> ^(BLOC liste_instructions)
;
instruction
: REPETE^ expr bloc
| ( AV^ | TD^ | TG^ | REC^ | FCAP^ ) expr
| FPOS^ '['! expr expr ']'!
| FCC^ INT
| LC^
| BC^
| VE^
| 'TEST'^ exprBool
;
expr : sumExpr
;
sumExpr : multExpr ((OP_PLUS^|OP_MOINS^) multExpr)*
;
multExpr: atom ((OP_MULT^|OP_DIV^) atom)*
;
exprBool: exprOu
;
exprOu : exprEt (OP_OU^ exprEt)*
;
exprEt : atomBool (OP_ET^ atomBool)*
;
atom : INT | '('! expr ')'!
;
atomBool: VRAI
| FAUX
| expr ((CMP_EGAL^|CMP_SUP^|CMP_INF^|CMP_SUP_EGAL^|CMP_INF_EGAL^) expr)?
| '('! exprBool ')'!
;
139 changes: 68 additions & 71 deletions src/logoparsing/LogoTree.g
Original file line number Diff line number Diff line change
@@ -1,79 +1,76 @@
tree grammar LogoTree;
options {
tokenVocab = Logo;
ASTLabelType=CommonTree;
tokenVocab = Logo;
ASTLabelType=CommonTree;
}
@header {
package logoparsing;
import logogui.Traceur;
import logogui.Log;
package logoparsing;
import logogui.Traceur;
import logogui.Log;
}
@members{
Traceur traceur;
public void initialize(java.awt.Graphics g) {
traceur = Traceur.getInstance();
traceur.setGraphics(g);
}
public void push(int index) {
((CommonTreeNodeStream)input).push(index);
}
public void pop() {
((CommonTreeNodeStream)input).pop();
}
@members {
Traceur traceur;
public void initialize(java.awt.Graphics g) {
traceur = Traceur.getInstance();
traceur.setGraphics(g);
}
public void push(int index) {
((CommonTreeNodeStream)input).push(index);
}
public void pop() {
((CommonTreeNodeStream)input).pop();
}
}
prog : ^(PROGRAMME liste_instructions)
{Log.appendnl("Programme principal");}
;
bloc :
^(BLOC liste_instructions)
;
liste_instructions :
(instruction)+
;
instruction :
repete
| ^(AV x = expr) {traceur.avance($x.v);}
| ^(TD x = expr) {traceur.tourneDroite($x.v);}
| ^(TG x = expr) {traceur.tourneGauche($x.v);}
| ^(REC x = expr) {traceur.recule($x.v);}
| ^(FPOS x = expr y = expr) {traceur.fixePosition($x.v, $y.v);}
| ^(FCAP x = expr) {traceur.fixeCap($x.v);}
| ^(FCC c = INT) {int m = Integer.parseInt($c.getText()); traceur.couleur(m);}
| LC {traceur.setTrace(false);}
| BC {traceur.setTrace(true);}
| VE {traceur.init();}
| ^('TEST' b = exprBool) {Log.appendnl(Boolean.toString($b.v));}
;
expr returns [double v] :
^(OP_PLUS x=expr y=expr) {$v = $x.v + $y.v;}
| ^(OP_MOINS x=expr y=expr) {$v = $x.v - $y.v;}
| ^(OP_MULT x=expr y=expr) {$v = $x.v * $y.v;}
| ^(OP_DIV x=expr y=expr) {$v = $x.v / $y.v;}
| a = INT {$v = Double.parseDouble($a.getText());}
;
exprBool returns [boolean v] :
^(CMP_EGAL x=expr y=expr) {$v = $x.v == $y.v;}
| ^(CMP_SUP x=expr y=expr) {$v = $x.v > $y.v;}
| ^(CMP_INF x=expr y=expr) {$v = $x.v < $y.v;}
| ^(CMP_SUP_EGAL x=expr y=expr) {$v = $x.v >= $y.v;}
| ^(CMP_INF_EGAL x=expr y=expr) {$v = $x.v <= $y.v;}
| ^(OP_OU b1=exprBool b2=exprBool) {$v = $b1.v || $b2.v;}
| ^(OP_ET b1=exprBool b2=exprBool) {$v = $b1.v && $b2.v;}
| a=expr {$v = $a.v != 0;}
| VRAI {$v = true;}
| FAUX {$v = false;}
prog : ^(PROGRAMME liste_instructions) {Log.appendnl("Programme principal");}
;
bloc : ^(BLOC liste_instructions)
;
liste_instructions
: (instruction)+
;
instruction
: repete
| ^(AV x = expr) {traceur.avance($x.v);}
| ^(TD x = expr) {traceur.tourneDroite($x.v);}
| ^(TG x = expr) {traceur.tourneGauche($x.v);}
| ^(REC x = expr) {traceur.recule($x.v);}
| ^(FPOS x = expr y = expr) {traceur.fixePosition($x.v, $y.v);}
| ^(FCAP x = expr) {traceur.fixeCap($x.v);}
| ^(FCC c = INT) {int m = Integer.parseInt($c.getText()); traceur.couleur(m);}
| LC {traceur.setTrace(false);}
| BC {traceur.setTrace(true);}
| VE {traceur.init();}
| ^('TEST' b = exprBool) {Log.appendnl(Boolean.toString($b.v));}
;
expr returns [double v]
: ^(OP_PLUS x=expr y=expr) {$v = $x.v + $y.v;}
| ^(OP_MOINS x=expr y=expr) {$v = $x.v - $y.v;}
| ^(OP_MULT x=expr y=expr) {$v = $x.v * $y.v;}
| ^(OP_DIV x=expr y=expr) {$v = $x.v / $y.v;}
| a = INT {$v = Double.parseDouble($a.getText());}
;
exprBool returns [boolean v]
: ^(CMP_EGAL x=expr y=expr) {$v = $x.v == $y.v;}
| ^(CMP_SUP x=expr y=expr) {$v = $x.v > $y.v;}
| ^(CMP_INF x=expr y=expr) {$v = $x.v < $y.v;}
| ^(CMP_SUP_EGAL x=expr y=expr) {$v = $x.v >= $y.v;}
| ^(CMP_INF_EGAL x=expr y=expr) {$v = $x.v <= $y.v;}
| ^(OP_OU b1=exprBool b2=exprBool) {$v = $b1.v || $b2.v;}
| ^(OP_ET b1=exprBool b2=exprBool) {$v = $b1.v && $b2.v;}
| a=expr {$v = $a.v != 0;}
| VRAI {$v = true;}
| FAUX {$v = false;}
;
repete
@init{
int mark_list = 0;
}
:
^(REPETE a=expr {mark_list = input.mark();} . )
{
for (int i = 0; i < $a.v ; i++) {
((CommonTreeNodeStream)input).push(mark_list);
bloc();
((CommonTreeNodeStream)input).pop();
}
}
;
@init {
int mark_list = 0;
}
: ^(REPETE a=expr {mark_list = input.mark();} . )
{
for (int i = 0; i < $a.v ; i++) {
((CommonTreeNodeStream)input).push(mark_list);
bloc();
((CommonTreeNodeStream)input).pop();
}
}
;

0 comments on commit 9cea728

Please sign in to comment.