-- ThreeC4CProdAbGram.ThreeC4 -- Sturgis, May 10, 1986 2:59:25 pm PDT Include[ThreeC4BaseDecl, ThreeC4RecFcnDecl, ThreeC4BasicAbTypes]; ThreeC4CProdAbGram: Module = Begin -- NOTE: must eventually remove FormExpCode and FormExpListCode from main collection of recursive functions. However, FormExpCode is still applied to ModId, but only for use here. -- this module contains the abstract grammar for concrete productions and build expressions -- the following are used here and in CProdImpl IntervalForm: EnumeratedBaseType = {closed, leftOpen, rightOpen, fullOpen}; EqualIntervalForm: BaseFunction[IntervalForm.a, IntervalForm.b] Returns[BOOLEAN]; DotedNameFill: BaseFunction[Name] Returns[CodeFiller]; FormBuildExpCode: TreeRecursiveFunction[Tree, BOOLEAN, LookupContext, Usage.arg] Returns[MesaCode, Type, Usage.result] DamagedReps[Usage.arg]; FormBuildExpListCode: TreeRecursiveFunction[Tree, LookupContext, Usage.arg] Returns[MesaCode, TypeList, Usage.result] DamagedReps[Usage.arg]; FormBuildPositionCode: TreeRecursiveFunction[Tree, BOOLEAN, LookupContext, Usage.arg] Returns[MesaCode, Usage.result] DamagedReps[Usage.arg]; FormBuildLengthCode: TreeRecursiveFunction[Tree, BOOLEAN, LookupContext, Usage.arg] Returns[MesaCode, Usage.result] DamagedReps[Usage.arg]; FormIntervalBuildPositionCode: TreeRecursiveFunction[Tree, BuildExpList, BOOLEAN, LookupContext, Usage.arg] Returns[MesaCode, Usage.result] DamagedReps[Usage.arg]; FormIntervalBuildLengthCode: TreeRecursiveFunction[Tree, BuildExpList, BOOLEAN, LookupContext, Usage.arg] Returns[MesaCode, Usage.result] DamagedReps[Usage.arg]; -- the ConcreteProduction abstract type is declared in BasicAbTypes ConcreteProduction: AbstractProduction[ModId, ConcreteRightSideList, BuildExp]; ConcreteRightSideList: AbstractType[FormRightSideContext, FormNameList, FormTypeList, FormNodeVarAssignCode, SyntaxRightSideFileCode]; ConcreteRightSideList.empty: AbstractProduction[]; ConcreteRightSideList.one: AbstractProduction[ConcreteRightSideItem]; ConcreteRightSideList.many: AbstractProduction[ConcreteRightSideList, ConcreteRightSideItem]; ConcreteRightSideItem: AbstractType[FormRightSideContext, FormNameList, FormTypeList, FormNodeVarAssignCode, SyntaxRightSideFileCode]; ConcreteRightSideItem.rope: AbstractProduction[Rope]; ConcreteRightSideItem.modId: AbstractProduction[ModId]; BuildExp: AbstractType[FormBuildExpCode, FormBuildPositionCode, FormBuildLengthCode]; BuildExp.modId: AbstractProduction[ModId]; BuildExp.buildNode: AbstractProduction[ModId, IntervalExp, BuildExpList]; BuildExpList: AbstractType[FormBuildExpListCode, FormBuildPositionCode, FormBuildLengthCode]; BuildExpList.empty: AbstractProduction[]; BuildExpList.one: AbstractProduction[BuildExp]; BuildExpList.many: AbstractProduction[BuildExpList, BuildExp]; IntervalExp: AbstractType[FormIntervalBuildPositionCode, FormIntervalBuildLengthCode]; IntervalExp.none: AbstractProduction[]; IntervalExp.present: AbstractProduction[IntervalForm.form, ModId.left, ModId.right] End.