Hello everyone! I've been working on this grammar for quite some time now, and
it works quite well except for one little detail: white spaces are not allowed.
Since the input is user-created, it's supposed to be "user-friendly", thus
more readable with spaces between each elements. I really don't understand this
because I've declared the white spaces to be skipped. Any help on this issue
would be greatly appreciated! Here is the input followed by the grammar:
------------
input
------------
#LIB::Logic
sample(a,b,c;g,h;k){
g=a*b;
h=c'+g*k;
k=!g+c;
}
#ENDLIB
------------
grammar
------------
grammar Logic;
options {
output = AST;
ASTLabelType = CommonTree;
}
tokens {
INV = '\'';
STMT_END = ';';
}
@header {
import java.util.HashMap;
}
@members {
HashMap<String,Integer> memory = new HashMap<String,Integer>();
}
circuit: (library {System.out.println($library.tree.toStringTree());})+
;
library: lib='#LIB::' ID (NEWLINE)? function+ '#ENDLIB' -> ^(LIBRARY ID
^(FLIST[$lib, "FLIST "] function+))
;
function: user_def bloc (NEWLINE)? -> ^(FCT function_id bloc)
;
bloc: lc='{' stmt+ '}' -> ^(SLIST[$lc, "SLIST"] stmt+)
;
function_id: ID '(' inparam? ';' outparam ';' ioparam? ')' -> ^(ID ^(INPARAM
inparam)? ^(OUTPARAM outparam) ^(IOPARAM ioparam)?)
;
inparam: (ids+=ID) (coma=',' ids+=ID)* -> ID+
;
outparam: (ids+=ID) (coma=',' ids+=ID)* -> ID+
;
ioparam: (ids+=ID) (coma=',' ids+=ID)* -> ID+
;
stmt: ID ' ' function_id STMT_END -> ^(STMT ID function_id)
| ID '=' expr STMT_END -> ^('=' ID expr)
| NEWLINE ->
;
expr: multExpr ('+'^ multExpr)*
;
multExpr: phase (('*'^|' '^) phase)*
;
phase: atom (INV)? -> ^(PHASE INV? atom)
| '!' atom -> ^(PHASE '\'' atom)
;
atom: ID
| '(' expr ')'
;
ID: ('a'..'z'|'A'..'Z'|'_')('a'..'z'|'A'..'Z'|'_'|'0'..'9')* | INT;
fragment
INT: '0'|'1';
NEWLINE: ('\r'? '\n')+;
WS: (' '|'\t'|'\r'|'\n')+ {skip();};
COMMENT : '//' ( options{greedy=false;}: . )* '\n' {skip();}
| '/*' ( options{greedy=false;}: . )* '*/' {skip();};
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"il-antlr-interest" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/il-antlr-interest?hl=en
-~----------~----~----~----~------~----~------~--~---