1 from modgrammar
import *
3 grammar_whitespace_mode
= 'explicit'
4 grammar_whitespace
= WS_NOEOL
7 grammar
= (OPTIONAL(SPACE
), EOL
)
8 grammar_collapse
= True
10 class SemicolonEol(Grammar
):
11 grammar
= (OPTIONAL(SPACE
), L(";"), SVFEol
)
12 grammar_collapse
= True
14 class Integer(Grammar
):
16 grammar_collapse
= True
19 grammar
= (Integer
, (L("."), OPTIONAL(Integer
)), OPTIONAL(L("E"), Integer
))
21 class Hexadecimal(Grammar
):
22 grammar
= (L("("), WORD("0-9A-F"), L(")"))
23 grammar_collapse
= True
25 class StableState(Grammar
):
26 grammar
= (L("IRPAUSE") |
L("DRPAUSE") |
L("RESET") |
L("IDLE"))
27 grammar_collapse
= True
30 class ScanSpec(Grammar
):
31 """The specification of Scan In/Scan out data"""
32 grammar
= (SPACE
, Integer
, SPACE
,
33 OPTIONAL(L("TDI"), OPTIONAL(SPACE
), Hexadecimal
),
34 OPTIONAL(OPTIONAL(SPACE
), L("TDO"), OPTIONAL(SPACE
), Hexadecimal
),
35 OPTIONAL(OPTIONAL(SPACE
), L("MASK"), OPTIONAL(SPACE
), Hexadecimal
),
36 OPTIONAL(OPTIONAL(SPACE
), L("SMASK"), OPTIONAL(SPACE
), Hexadecimal
)
38 grammar_collapse
= True
41 class EmptyLine(Grammar
):
44 class Comment(Grammar
):
45 grammar
= (L("!"), REST_OF_LINE
, SVFEol
)
48 grammar
= (L("ENDDR"), SPACE
, StableState
, SemicolonEol
)
51 grammar
= (L("ENDIR"), SPACE
, StableState
, SemicolonEol
)
53 class Frequency(Grammar
):
54 grammar
= (L("FREQUENCY"), OPTIONAL(SPACE
, Float
, OPTIONAL(SPACE
), L("HZ")), OPTIONAL(SPACE
), SemicolonEol
)
57 grammar
= (L("HDR"), ScanSpec
, SemicolonEol
)
60 grammar
= (L("HIR"), ScanSpec
, SemicolonEol
)
64 class Runtest(Grammar
):
67 OPTIONAL(SPACE
, StableState
),
68 OPTIONAL(SPACE
, Integer
, OPTIONAL(SPACE
), (L("TCK") |
L("SCK"))),
69 OPTIONAL(SPACE
, Float
, OPTIONAL(SPACE
), L("SEC")),
70 OPTIONAL(SPACE
, L("MAXIMUM"), SPACE
, Float
, OPTIONAL(SPACE
), L("SEC")),
71 OPTIONAL(SPACE
, L("ENDSTATE"), SPACE
, StableState
),
76 grammar
= (L("SDR"), ScanSpec
, SemicolonEol
)
79 grammar
= (L("SIR"), ScanSpec
, SemicolonEol
)
82 # TODO: Path to reach state
83 grammar
= (L("STATE"), SPACE
, StableState
, SemicolonEol
)
86 grammar
= (L("TDR"), ScanSpec
, SemicolonEol
)
89 grammar
= (L("TIR"), ScanSpec
, SemicolonEol
)
92 grammar
= (L("TRST"), SPACE
, (L("ON") |
L("OFF") |
L("Z") |
L("ABSENT")), SemicolonEol
)
95 class SVFFile(Grammar
):
96 grammar
= ONE_OR_MORE(EmptyLine | Comment | Trst | EndDR | EndIR | SIR | SDR | Runtest | State
)