.gitignore
[prop.git] / prop-src / aggen.pcc
blob95b5e358dc4fbf4130ae751e9ae8e5201e409835
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 //  This file implements the attribute grammar generator.
4 //
5 ///////////////////////////////////////////////////////////////////////////////
6 #include "basics.ph"
7 #include "ir.ph"
8 #include "codegen.h"
9 #include "classdef.h"
10 #include "aggen.h"
12 ///////////////////////////////////////////////////////////////////////////////
14 //  Class to represent an attribute grammar class
16 ///////////////////////////////////////////////////////////////////////////////
17 AttributeGrammarClass::AttributeGrammarClass
18     (Id name, Inherits i, TyQual q, Decls decls)
19     : SyntaxClass(ATTRIBUTE_GRAMMAR_CLASS,name,i,q,decls)
20     {}
21 AttributeGrammarClass::~AttributeGrammarClass() {}
23 ///////////////////////////////////////////////////////////////////////////////
25 //  Method to generate the class interface
27 ///////////////////////////////////////////////////////////////////////////////
28 void AttributeGrammarClass::gen_class_interface(CodeGen& C)
29 {  SyntaxClass::gen_class_interface(C);
32 ///////////////////////////////////////////////////////////////////////////////
34 //  Method to generate the class implementation
36 ///////////////////////////////////////////////////////////////////////////////
37 void AttributeGrammarClass::gen_class_implementation
38    (CodeGen& C, Tys tys, DefKind k)
40    SyntaxClass::gen_class_implementation(C,tys,k);
43 ///////////////////////////////////////////////////////////////////////////////
45 //  Constructor/destructor of the attribute grammar compiler
47 ///////////////////////////////////////////////////////////////////////////////
48 AttributeGrammarCompiler::AttributeGrammarCompiler() {}
49 AttributeGrammarCompiler::~AttributeGrammarCompiler() {}
51 ///////////////////////////////////////////////////////////////////////////////
53 //  Method to generate the attribute grammar
55 ///////////////////////////////////////////////////////////////////////////////
56 void AttributeGrammarCompiler::gen_attribute_grammar(Id id, GramExp e)
57 {  AttributeGrammarClass * C =
58       (AttributeGrammarClass*)
59          ClassDefinition::lookup_class(
60             ClassDefinition::ATTRIBUTE_GRAMMAR_CLASS,id);
61    if (C) C->gen_parser(*this,e);