semanticAttribute = {
function stanza(stanzaOf) {
let s = stanzaOf.ast
if (s.statements) {
let r = Object.assign({}, s.header, {statements: s.statements})
if (r.needs) {
r.statements.unshift(
...r.needs.map(need => ({type: "need", need: need}))
)
delete r.needs
}
r.statements = r.statements.filter(stmt => stmt.type !== "empty")
return r
}
return s
}
return {
Epoch: stanzas => ({
type: "epoch",
stanzas: stanzas.asIteration().ast,
}),
Epochs: epochs => ({
type: "root",
epochs: epochs.asIteration().ast
}),
stanzaOf(header, _1, _2, statements) {
let h = header.ast
let s = statements.asIteration()
return {
header: h,
statements: s[0] ? s[0].ast : [],
}
},
attributeStmt_incomplete(name, _2) {
return {
type: "attribute",
name: name.sourceString,
valueString: "",
valueSource: _2.source,
source: this.source,
}
},
attributeStmt_complete(name, _2, _3, _4, value) {
return {
type: "attribute",
name: name.sourceString,
valueString: value.sourceString,
valueSource: value.source,
source: this.source,
}
},
annotationStmtSimple(name, _3) {
return {
type: "annotation",
name: name.sourceString,
source: this.source,
}
},
annotationStmtParameterized(name, _3, param, _5) {
return {
type: "annotation",
name: name.sourceString,
param: param.sourceString,
paramString: param.sourceString,
paramSource: param.source,
source: this.source,
}
},
componentStanzaStmt(_, stmt) {
return stmt.ast
},
annotationStanzaStmt(_, stmt) {
return stmt.ast
},
needStanzaStmt(_, stmt) {
return stmt.ast
},
emptyStmt(_1) {
return {
type: "empty",
}
},
needStanzaHeader_incomplete1(_1, _2) {
return {type: "empty"}
},
needStanzaHeader_incomplete2(_1, _2) {
return {type: "empty"}
},
needStanzaHeader_complete(_1, _2, name, _3, _4) {
return {
type: "need",
need: name.sourceString,
source: this.source,
}
},
annotationStanzaHeader(name, _) {
return {
type: "component",
name: name.ast,
source: this.source,
}
},
componentStanzaHeaderSimple(name, _1) {
return {
type: "component",
source: this.source,
name: name.ast,
}
},
componentStanzaHeaderLegacy(name, _1, _2, needs) {
return {
type: "component",
name: name.ast,
needs: needs.asIteration().ast,
source: this.source,
}
},
stanza(stanzaOf) {
return stanza(stanzaOf)
},
needStanza(stanzaOf) {
return stanza(stanzaOf)
},
ident(_1, _2) { return this.sourceString },
_terminal() { return this.sourceString },
annotationName(_1, _2) { return this.sourceString },
componentName(_1) { return this.sourceString },
}
;
}