1 from modgrammar
import *
3 grammar_whitespace_mode
= 'explicit'
4 grammar_whitespace
= WS_NOEOL
8 grammar
= (OPTIONAL(SPACE
), EOL
)
9 grammar_collapse
= True
12 class SemicolonEol(Grammar
):
13 grammar
= (OPTIONAL(SPACE
), L(";"), SVFEol
)
14 grammar_collapse
= True
17 class Integer(Grammar
):
19 grammar_collapse
= True
23 grammar
= (Integer
, (L("."), OPTIONAL(Integer
)), OPTIONAL(L("E"), Integer
))
26 class Hexadecimal(Grammar
):
27 grammar
= (L("("), WORD("0-9A-Fa-f"), L(")"))
28 grammar_collapse
= True
31 class StableState(Grammar
):
32 grammar
= (L("IRPAUSE") |
L("DRPAUSE") |
L("RESET") |
L("IDLE"))
33 grammar_collapse
= True
36 class ScanSpec(Grammar
):
37 """The specification of Scan In/Scan out data"""
38 grammar
= (SPACE
, Integer
, SPACE
,
39 OPTIONAL(L("TDI"), OPTIONAL(SPACE
), Hexadecimal
),
40 OPTIONAL(OPTIONAL(SPACE
), L("TDO"), OPTIONAL(SPACE
), Hexadecimal
),
41 OPTIONAL(OPTIONAL(SPACE
), L("MASK"), OPTIONAL(SPACE
), Hexadecimal
),
42 OPTIONAL(OPTIONAL(SPACE
), L("SMASK"), OPTIONAL(SPACE
), Hexadecimal
)
44 grammar_collapse
= True
47 class EmptyLine(Grammar
):
51 class Comment(Grammar
):
52 grammar
= (L("!"), REST_OF_LINE
, SVFEol
)
56 grammar
= (L("ENDDR"), SPACE
, StableState
, SemicolonEol
)
60 grammar
= (L("ENDIR"), SPACE
, StableState
, SemicolonEol
)
63 class Frequency(Grammar
):
64 grammar
= (L("FREQUENCY"), OPTIONAL(SPACE
, Float
, OPTIONAL(SPACE
), L("HZ")), OPTIONAL(SPACE
), SemicolonEol
)
68 grammar
= (L("HDR"), ScanSpec
, SemicolonEol
)
72 grammar
= (L("HIR"), ScanSpec
, SemicolonEol
)
78 class Runtest(Grammar
):
81 OPTIONAL(SPACE
, StableState
),
82 OPTIONAL(SPACE
, Integer
, OPTIONAL(SPACE
), (L("TCK") |
L("SCK"))),
83 OPTIONAL(SPACE
, Float
, OPTIONAL(SPACE
), L("SEC")),
84 OPTIONAL(SPACE
, L("MAXIMUM"), SPACE
, Float
, OPTIONAL(SPACE
), L("SEC")),
85 OPTIONAL(SPACE
, L("ENDSTATE"), SPACE
, StableState
),
91 grammar
= (L("SDR"), ScanSpec
, SemicolonEol
)
95 grammar
= (L("SIR"), ScanSpec
, SemicolonEol
)
99 # TODO: Path to reach state
100 grammar
= (L("STATE"), SPACE
, StableState
, SemicolonEol
)
104 grammar
= (L("TDR"), ScanSpec
, SemicolonEol
)
108 grammar
= (L("TIR"), ScanSpec
, SemicolonEol
)
112 grammar
= (L("TRST"), SPACE
, (L("ON") |
L("OFF") |
L("Z") |
L("ABSENT")), SemicolonEol
)
115 class SVFFile(Grammar
):
116 grammar
= ONE_OR_MORE(EmptyLine | Comment | Trst | EndDR | EndIR | SIR | SDR | Runtest | State | HDR | HIR | TDR | TIR
)