Skip to content

Commit ee617da

Browse files
committed
Cleaned up NGrammar and its test. Tweaked ParseTree string rep.
1 parent 41ccb69 commit ee617da

File tree

3 files changed

+7
-126
lines changed

3 files changed

+7
-126
lines changed

library/shared/src/main/scala/org/sireum/parser/NGrammar.scala

Lines changed: 0 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,6 @@ object NElement {
4141
@strictpure override def toST: ST =
4242
st"""NElement.Ref($isTerminal, "$ruleName", u32"${conversions.U32.toZ(num)}")"""
4343
}
44-
@datatype class Opt(val ruleName: String, val num: U32) extends NElement {
45-
@strictpure override def toST: ST =
46-
st"""NElement.Opt("$ruleName", u32"${conversions.U32.toZ(num)}")"""
47-
}
48-
@datatype class Star(val ruleName: String, val num: U32) extends NElement {
49-
@strictpure override def toST: ST =
50-
st"""NElement.Star("$ruleName", u32"${conversions.U32.toZ(num)}")"""
51-
}
52-
@datatype class Plus(val ruleName: String, val num: U32) extends NElement {
53-
@strictpure override def toST: ST =
54-
st"""NElement.Plus("$ruleName", u32"${conversions.U32.toZ(num)}")"""
55-
}
5644
}
5745
@datatype trait NRule {
5846
@pure def name: String
@@ -106,18 +94,6 @@ object NGrammar {
10694
w.writeB(e.isTerminal)
10795
w.writeString(e.ruleName)
10896
w.writeU32(e.num)
109-
case e: NElement.Opt =>
110-
w.writeZ(2)
111-
w.writeString(e.ruleName)
112-
w.writeU32(e.num)
113-
case e: NElement.Star =>
114-
w.writeZ(3)
115-
w.writeString(e.ruleName)
116-
w.writeU32(e.num)
117-
case e: NElement.Plus =>
118-
w.writeZ(4)
119-
w.writeString(e.ruleName)
120-
w.writeU32(e.num)
12197
}
12298
}
12399

@@ -133,18 +109,6 @@ object NGrammar {
133109
val ruleName = r.readString()
134110
val num = r.readU32()
135111
return NElement.Ref(isTerminal = isTerminal, ruleName = ruleName, num = num)
136-
case 2 =>
137-
val ruleName = r.readString()
138-
val num = r.readU32()
139-
return NElement.Opt(ruleName = ruleName, num = num)
140-
case 3 =>
141-
val ruleName = r.readString()
142-
val num = r.readU32()
143-
return NElement.Star(ruleName = ruleName, num = num)
144-
case 4 =>
145-
val ruleName = r.readString()
146-
val num = r.readU32()
147-
return NElement.Plus(ruleName = ruleName, num = num)
148112
case _ => halt(s"Invalid NElement tag: $tag")
149113
}
150114
}
@@ -253,22 +217,6 @@ object NGrammar {
253217
}
254218
return r
255219
}
256-
def parseStar(ruleNum: U32, i: Z): Option[(Z, ISZ[ParseTree])] = {
257-
var trees = ISZ[ParseTree]()
258-
var j = i
259-
while (pt.predict(ruleNum, lookahead(j)).nonEmpty) {
260-
parseRule(ruleNum, j) match {
261-
case Some((next, ts)) =>
262-
if (next == j) {
263-
halt(s"Infeasible: rule did not consume any input")
264-
}
265-
j = next
266-
trees = trees ++ ts
267-
case _ => halt(s"Infeasible")
268-
}
269-
}
270-
return Some((j, trees))
271-
}
272220
def parseElement(e: NElement, i: Z): Option[(Z, ISZ[ParseTree])] = {
273221
e match {
274222
case e: NElement.Str =>
@@ -299,23 +247,6 @@ object NGrammar {
299247
} else {
300248
return parseRule(e.num, i)
301249
}
302-
case e: NElement.Opt =>
303-
if (pt.predict(e.num, lookahead(i)).nonEmpty) {
304-
return parseRule(e.num, i)
305-
} else {
306-
return Some((i, ISZ()))
307-
}
308-
case e: NElement.Plus =>
309-
parseRule(e.num, i) match {
310-
case Some((j, ts)) =>
311-
parseStar(e.num, j) match {
312-
case Some((k, ts2)) => return Some((k, ts ++ ts2))
313-
case _ => return Some((j, ts))
314-
}
315-
case _ => return None()
316-
}
317-
case e: NElement.Star => return parseStar(e.num, i)
318-
case e => halt(s"Unsupported: $e")
319250
}
320251
}
321252
def parseElements(elements: NRule.Elements, i: Z): Option[(Z, ISZ[ParseTree])] = {

library/shared/src/main/scala/org/sireum/parser/ParseTree.scala

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,20 +49,21 @@ object ParseTree {
4949
@hidden val tipe: U32,
5050
@hidden val isHidden: B,
5151
@hidden val posOpt: Option[Position]) extends ParseTree with Token {
52-
@pure override def toST: ST = {
53-
return if (ops.StringOps(ruleName).startsWith("'")) st""""${ops.StringOps(text).escapeST}""""
52+
@strictpure override def toST: ST =
53+
if (ops.StringOps(ruleName).startsWith("'")) st""""${ops.StringOps(text).escapeST}""""
5454
else st"""$ruleName["${ops.StringOps(text).escapeST}"]"""
55-
}
5655
@strictpure def toLeaf: ParseTree.Leaf = this
5756
@strictpure def num: U32 = tipe
5857
}
5958

6059
@datatype class Node(val children: ISZ[ParseTree],
6160
@hidden val ruleName: String,
6261
@hidden val tipe: U32) extends ParseTree {
63-
@pure override def toST: ST = {
64-
return st"""$ruleName(${(for (child <- children) yield child.toST, ", ")})"""
65-
}
62+
@strictpure override def toST: ST =
63+
st"""$ruleName(
64+
| ${(for (child <- children) yield child.toST, ",\n")}
65+
|)"""
66+
6667
}
6768

6869
@record class DotGenerator {

library/shared/src/test/scala/org/sireum/NGrammarCompactTest.scala

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -199,54 +199,6 @@ class NGrammarCompactTest extends TestSuite {
199199
assert(decoded == ng)
200200
}
201201

202-
// NGrammar: NRule.Elements with NElement.Opt
203-
* - {
204-
val ng = NGrammar(
205-
ruleMap = HashSMap.empty[U32, NRule] +
206-
u32"0" ~> NRule.Elements(
207-
name = "optRule",
208-
num = u32"0",
209-
isSynthetic = F,
210-
elements = ISZ(NElement.Opt(ruleName = "maybeExpr", num = u32"7"))
211-
),
212-
pt = emptyPT
213-
)
214-
val decoded = NGrammar.fromCompact(ng.toCompact)
215-
assert(decoded == ng)
216-
}
217-
218-
// NGrammar: NRule.Elements with NElement.Star
219-
* - {
220-
val ng = NGrammar(
221-
ruleMap = HashSMap.empty[U32, NRule] +
222-
u32"0" ~> NRule.Elements(
223-
name = "starRule",
224-
num = u32"0",
225-
isSynthetic = F,
226-
elements = ISZ(NElement.Star(ruleName = "stmts", num = u32"8"))
227-
),
228-
pt = emptyPT
229-
)
230-
val decoded = NGrammar.fromCompact(ng.toCompact)
231-
assert(decoded == ng)
232-
}
233-
234-
// NGrammar: NRule.Elements with NElement.Plus
235-
* - {
236-
val ng = NGrammar(
237-
ruleMap = HashSMap.empty[U32, NRule] +
238-
u32"0" ~> NRule.Elements(
239-
name = "plusRule",
240-
num = u32"0",
241-
isSynthetic = F,
242-
elements = ISZ(NElement.Plus(ruleName = "args", num = u32"9"))
243-
),
244-
pt = emptyPT
245-
)
246-
val decoded = NGrammar.fromCompact(ng.toCompact)
247-
assert(decoded == ng)
248-
}
249-
250202
// NGrammar: NRule.Alts
251203
* - {
252204
val ng = NGrammar(
@@ -274,9 +226,6 @@ class NGrammarCompactTest extends TestSuite {
274226
elements = ISZ(
275227
NElement.Str(value = "(", num = u32"10"),
276228
NElement.Ref(isTerminal = T, ruleName = "ID", num = u32"11"),
277-
NElement.Opt(ruleName = "typeAnnot", num = u32"12"),
278-
NElement.Star(ruleName = "args", num = u32"13"),
279-
NElement.Plus(ruleName = "stmts", num = u32"14"),
280229
NElement.Ref(isTerminal = F, ruleName = "body", num = u32"15"),
281230
NElement.Str(value = ")", num = u32"16")
282231
)

0 commit comments

Comments
 (0)