Skip to content

Commit

Permalink
Added parser support for vectors.
Browse files Browse the repository at this point in the history
  • Loading branch information
Troy Varney committed Nov 27, 2012
1 parent 5288f83 commit abcc9b0
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion crono/src/crono/Parser.jj
Expand Up @@ -19,6 +19,7 @@ import crono.type.CronoInteger;
import crono.type.CronoString; import crono.type.CronoString;
import crono.type.CronoType; import crono.type.CronoType;
import crono.type.CronoTypeId; import crono.type.CronoTypeId;
import crono.type.CronoVector;
import crono.type.Nil; import crono.type.Nil;
import crono.type.Quote; import crono.type.Quote;
import crono.type.Symbol; import crono.type.Symbol;
Expand Down Expand Up @@ -52,12 +53,14 @@ TOKEN:
{ {
< LPAR : "(" > < LPAR : "(" >
| < RPAR : ")" > | < RPAR : ")" >
| < RBRACKET : "]" >
| < LBRACKET : "[" >
| < INTEGER : ("-")? (["0"-"9"])+ > | < INTEGER : ("-")? (["0"-"9"])+ >
| < FLOAT : ("-")? (["0"-"9"])+ "." (["0"-"9"])+ > | < FLOAT : ("-")? (["0"-"9"])+ "." (["0"-"9"])+ >
| < CHAR : "'" ([" "-"~"] | ("\\" ~["\n", "\r", "\t"])) "'" > | < CHAR : "'" ([" "-"~"] | ("\\" ~["\n", "\r", "\t"])) "'" >
| < STRING : "\"" ("\\" ~["\n"] | ~["\"", "\n"])* "\"" > | < STRING : "\"" ("\\" ~["\n"] | ~["\"", "\n"])* "\"" >
| < TYPEID : ":" (["a"-"z","A"-"Z"] (["a"-"z","A"-"Z","-"])?)+ > | < TYPEID : ":" (["a"-"z","A"-"Z"] (["a"-"z","A"-"Z","-"])?)+ >
| < SYMBOL : ["!"-"&", "*"-"/", ";"-"~"] (["!"-"'", "*"-"~"])* > | < SYMBOL : ["!"-"&", "*"-"/", ";"-"Z", "\\", "^"-"~"] (["!"-"'", "*"-"/", ";"-"Z", "\\", "^"-"~"])* >
| < QUOTE : "'" > | < QUOTE : "'" >
} }


Expand All @@ -70,6 +73,8 @@ Atom atom():
{ {
Token n; Token n;
Atom a; Atom a;
CronoType node;
ArrayList<CronoType> types = new ArrayList<CronoType>();
} }
{ {
n = <INTEGER> { n = <INTEGER> {
Expand All @@ -90,6 +95,18 @@ Atom atom():
} }
return new CronoCharacter(n.image); return new CronoCharacter(n.image);
} }
| <LBRACKET>
(
node = node() {
types.add(node);
}
)* <RBRACKET> {
if(types.size() > 0) {
return new CronoVector(types.toArray(new CronoType[types.size()]));
}else {
return new CronoVector(1);
}
}
| n = <TYPEID> { | n = <TYPEID> {
if(debug) { if(debug) {
System.out.println("Parser: Saw <TYPEID>"); System.out.println("Parser: Saw <TYPEID>");
Expand Down

0 comments on commit abcc9b0

Please sign in to comment.