1
1
use std::str::FromStr;
2
2
use num_bigint::BigInt;
3
- use analytic_engine::core::{TypedConst, BasicBinOp, BinOp, BasicUnaryOp, UnaryOp, Expr, NumRep};
3
+ use analytic_engine::core::{TypedConst, BasicBinOp, BinOp, BasicUnaryOp, UnaryOp, Expr, NumRep, MachineRep };
4
4
5
5
grammar;
6
6
@@ -10,7 +10,7 @@ pub Tree: Expr = {
10
10
#[precedence(level="1")]
11
11
<op:Op0> <t:Tree> => Expr::UnaryOp(op, Box::new(t)),
12
12
#[precedence(level="2")]
13
- <t:Tree> "as" <r:Rep > => Expr::Cast(r , Box::new(t)),
13
+ <t:Tree> "as" <mr:MRep > => Expr::Cast(mr , Box::new(t)),
14
14
#[precedence(level="3")] #[assoc(side="left")]
15
15
<l:Tree> <op:Op1> <r:Tree> => Expr::BinOp(op, Box::new(l), Box::new(r)),
16
16
#[precedence(level="4")] #[assoc(side="left")]
@@ -39,18 +39,18 @@ OpCode2: BasicBinOp = {
39
39
}
40
40
41
41
Op0: UnaryOp = {
42
- <op:OpCode0> <r:Rep > => UnaryOp::new(op, Some(r)),
42
+ <op:OpCode0> <r:MRep > => UnaryOp::new(op, Some(r)),
43
43
<op:OpCode0> => UnaryOp::new(op, None),
44
44
}
45
45
46
46
Op1: BinOp = {
47
- <op:OpCode1> <r:Rep > => BinOp::new(op, Some(r)),
47
+ <op:OpCode1> <r:MRep > => BinOp::new(op, Some(r)),
48
48
<op:OpCode1> => BinOp::new(op, None),
49
49
}
50
50
51
51
Op2: BinOp = {
52
- <op:OpCode2> <r:Rep > => BinOp::new(op, Some(r)),
53
- <op: OpCode2> => BinOp::new(op , None),
52
+ <op:OpCode2> <r:MRep > => BinOp::new(op, Some(r)),
53
+ OpCode2 => BinOp::new(<> , None),
54
54
}
55
55
56
56
Const: TypedConst = {
@@ -59,14 +59,20 @@ Const: TypedConst = {
59
59
}
60
60
61
61
Rep: NumRep = {
62
- "u8" => NumRep::U8,
63
- "u16" => NumRep::U16,
64
- "u32" => NumRep::U32,
65
- "u64" => NumRep::U64,
66
- "i8" => NumRep::I8,
67
- "i16" => NumRep::I16,
68
- "i32" => NumRep::I32,
69
- "i64" => NumRep::I64,
62
+ "?" => NumRep::AUTO,
63
+ MRep => NumRep::Concrete(<>),
64
+ }
65
+
66
+
67
+ MRep: MachineRep = {
68
+ "u8" => MachineRep::U8,
69
+ "u16" => MachineRep::U16,
70
+ "u32" => MachineRep::U32,
71
+ "u64" => MachineRep::U64,
72
+ "i8" => MachineRep::I8,
73
+ "i16" => MachineRep::I16,
74
+ "i32" => MachineRep::I32,
75
+ "i64" => MachineRep::I64,
70
76
}
71
77
72
78
Num: BigInt = <s:r"-?[0-9]+"> => BigInt::from_str(s).unwrap();
0 commit comments