Cface__CDefinitionParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 12 Aug 2015 07:32:13 +0100
changeset 43 9327987437ae
parent 40 7d1e77b6115e
permissions -rw-r--r--
Added mappings for LLVM C and LLVM C Extensions These are used to generate C callouts for jv:llvm_s project.

"{ Package: 'jv:cface' }"

"{ NameSpace: Cface }"

SmaCC::SmaCCParser subclass:#CDefinitionParser
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Cface-Parser'
!


!CDefinitionParser class methodsFor:'generated-accessing'!

scannerClass
	^Cface::CDefinitionScanner
! !

!CDefinitionParser class methodsFor:'generated-comments'!

parserDefinitionComment

	"%start DefinitionFile;

DefinitionFile:
        Definition* 
        { CDefinitionFileNode new definitions: '1' } ;

Definition:       
          Function { '1' }               
        | Struct { '1' }                 
        | Union { '1' }          
        | Enum { '1' }           
        | Typedef { '1' }                
        ;

Generated:
        ""#Generated"" ""from:"" <file> 'file' { file value } 
        ;

Function:
        ""("" ""function"" <name> 'name' ""("" Argument* 'arguments' "")"" Return 'return' "")"" 
                { CFunctionNode new 
                                cName:(name  value);
                                arguments:arguments;
                                return:return }
        ;
        
        
Argument:
        ""("" ""argument"" ""("" Type 'type' "")"" <name> 'name' "")"" 
                { (CArgumentNode new
                                cName:(name value);
                                type:type) }
        | ""("" ""argument"" ""("" Type 'type' "")"" ""value"" 'name' "")"" 
                { (CArgumentNode new
                                cName:(name value);
                                type:type) }
        | ""("" ""argument"" ""("" Type 'type' "")"" ""array"" 'name' "")"" 
                { (CArgumentNode new
                                cName:(name value);
                                type:type) }
        ;                               


Return:
        ""("" ""return"" Type 'Type' "")"" { Type } 
        ;

FunctionPrototype:
        ""("" ""function-type"" <name> 'name' ""("" FunctionPrototypeArgument* 'arguments' "")"" Return 'return' "")"" 
                { CFunctionTypeNode new
                                cName:(name  value); 
                                arguments:arguments;
                                return:return } 
        ;


FunctionPrototypeArgument:
        ""("" ""argument"" ""("" Type  "")"" "")"" 
                { CArgumentNode new
                                cName:nil; 
                                type:'4'        }
        ;

Type:
          Const 
                { '1' } 
        | BuiltinType
                { '1' }
        | Pointer 
                { '1' } 
        | Array
                { '1' } 
        | FunctionPrototype     
                { '1' } 
        | Struct
                { '1' }         
        | Union
                { '1' }         
        | Enum
                { '1' }         
        | <name>
                { CUserDefinedTypeNode new cName: '1' value }
        ;

BuiltinType:
     ""unsigned"" BuiltinType
                { CUnsignedNode new type: '2' }                 
  |  ""signed"" BuiltinType
                { '2' }     
  | ""long"" BuiltinType
                { CLongNode new type: '2' }             
  | ""short"" BuiltinType
                { CShortNode new type: '2' }                            
        | ""int""
                { CIntNode new }
        | ""char""
                { CCharNode new }                                       
        | ""double""
                { CDoubleNode new }                                     
        | ""float""
                { CFloatNode new }                                      
        | ""void""
                { CVoidNode new }                                       
        | ""wchar_t""
                { CWCharNode new }                                       

        ;



Array:
        ""("" ""array"" ""("" Type "")"" <number> "")"" 
                { CArrayNode new
                                type:'4';
                                size:'6' value } 
        ;

Const:
        ""const"" Type 
                { CConstNode new type: '2' }
        ;
        
        
                                
Pointer:
        ""("" ""pointer-to"" Type "")"" 
                { CPointerNode new type:'3' } ;


Struct:
                ""("" ""struct"" [ <name> ] 'name' "":size"" <number> 'size' StructField* 'fields' "")"" 
                { CStructNode new
                                cName:(name ifNotNil:[name value]);
                                cBitSize: size value asNumber;
                                fields:fields;
                                foreign:false

 } 
|                 ""("" ""struct-foreign"" [ <name> ] 'name'  "":size"" <number> 'size' StructField* 'fields' "")"" 
                { CStructNode new
                                cName:(name ifNotNil:[name value]);
                                cBitSize: size value asNumber;
                                fields:fields;
                                foreign:true

 } 
        ;

Union:
                ""("" ""union"" [ <name> ] 'name' "":size"" <number> 'size'  StructField* 'fields' "")"" 
                { CUnionNode new 
                                cName:(name ifNotNil:[name value]);
                                cBitSize: size value asNumber;
                                fields:fields;
                                foreign: false
                 } 
    |   ""("" ""union-foreign"" [ <name> ] 'name' "":size"" <number> 'size'  StructField* 'fields' "")"" 
                { CUnionNode new 
                                cName:(name ifNotNil:[name value]);
                                cBitSize: size value asNumber;
                                fields:fields;
                                foreign:true
 } 

        ;



        
StructField:
          ""("" ""field"" ""("" Type  "")"" <name>  "":offset"" <number> "")""
                { CStructFieldNode new
                                cName:('6' value);
                                offset: '8' value asNumber;
                                type:'4' }
    | ""("" ""field"" ""("" Type  "")"" ""value"" "":offset"" <number> "")""
                { CStructFieldNode new
                                cName:('6' value);
                                offset: '8' value asNumber;
                                type:'4' }
    | ""("" ""field"" ""("" Type  "")"" ""function"" "":offset"" <number> "")""
                { CStructFieldNode new
                                cName:('6' value);
                                offset: '8' value asNumber;    
                                type:'4' }
    | ""("" ""field"" ""("" "")"" "":offset"" "")""
                { nil }
        ;
        
                

Enum:
                ""("" ""enum"" 'foreign' [ <name> ] 'name'EnumValue* 'fields' "")"" 
                { CEnumNode new
                                cName:(name ifNotNil:[name value]);
                                values:fields;
                                foreign: false;
                                typedef:false
                }
        |       ""("" ""enum-foreign"" [ <name> ] 'name'EnumValue* 'fields' "")"" 
                { CEnumNode new
                                cName:(name ifNotNil:[name value]);
                                values:fields;
                                foreign: true;
                                typedef:false
                }

        ;



EnumValue:
        ""("" ""value"" ""("" <name> 'name' "")"" <number> 'number' "")""
                { (CEnumValueNode new 
                                cName:(name value);
                                intValue:(number value)) } ;

Typedef:
        ""("" ""typedef""  <name> 'name' Type 'type' "")"" 
        { CTypedefNode new
                        cName:(name value);
                        type:type} 
    | ""("" ""typedef-foreign"" <name> 'name' Type 'type' "")"" 
        { CTypedefNode new
                        cName:(name value);
                        type:type;
                        foreign:true } 

    ;
"
! !

!CDefinitionParser class methodsFor:'generated-starting states'!

startingStateForDefFile
	^1

    "Modified: / 10-02-2008 / 10:29:48 / janfrog"
!

startingStateForDefinitionFile
	^1
! !

!CDefinitionParser methodsFor:'accessing'!

nodeStack
    ^ nodeStack

    "Created: / 02-11-2007 / 12:34:17 / haja"
! !

!CDefinitionParser methodsFor:'generated-reduction actions'!

reduceActionForArgument1:nodes 
    ^ ((CArgumentNode new)
        cName:((nodes at:6) value);
        type:(nodes at:4))
!

reduceActionForArgument2:nodes 
    ^ ((CArgumentNode new)
        cName:((nodes at:6) value);
        type:(nodes at:4))
!

reduceActionForArgument3:nodes 
    ^ ((CArgumentNode new)
        cName:((nodes at:6) value);
        type:(nodes at:4))
!

reduceActionForArguments1:nodes 
    ^ OrderedCollection new

    "Modified: / 28-11-2007 / 17:11:19 / haja"
!

reduceActionForArguments2:nodes 
    ^ (nodes at:6)
        addFirst:(FunctionArgumentNode cName:((nodes at:4) value) id:(nodes at:2));
        yourself

    "Modified: / 28-11-2007 / 17:11:19 / haja"
    "Modified: / 10-02-2008 / 19:08:18 / janfrog"
!

reduceActionForArray1:nodes 
    ^ (CArrayNode new)
        type:(nodes at:4);
        size:(nodes at:6) value
!

reduceActionForBuiltinType10:nodes 
    ^ CWCharNode new
!

reduceActionForBuiltinType1:nodes 
    ^ CUnsignedNode new type:(nodes at:2)
!

reduceActionForBuiltinType2:nodes 
    ^ nodes at:2
!

reduceActionForBuiltinType3:nodes 
    ^ CLongNode new type:(nodes at:2)
!

reduceActionForBuiltinType4:nodes 
    ^ CShortNode new type:(nodes at:2)
!

reduceActionForBuiltinType5:nodes 
    ^ CIntNode new
!

reduceActionForBuiltinType6:nodes 
    ^ CCharNode new
!

reduceActionForBuiltinType7:nodes 
    ^ CDoubleNode new
!

reduceActionForBuiltinType8:nodes 
    ^ CFloatNode new
!

reduceActionForBuiltinType9:nodes 
    ^ CVoidNode new
!

reduceActionForConst1:nodes 
    ^ CConstNode new type:(nodes at:2)
!

reduceActionForDefBody1:nodes 
    ^ OrderedCollection new

    "Modified: / 10-02-2008 / 10:32:17 / janfrog"
!

reduceActionForDefBody2:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 10:32:17 / janfrog"
!

reduceActionForDefBody3:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 10:32:17 / janfrog"
!

reduceActionForDefBody4:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 10:32:17 / janfrog"
!

reduceActionForDefBody5:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 10:32:17 / janfrog"
!

reduceActionForDefBody6:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 10:32:17 / janfrog"
!

reduceActionForDefBody7:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 10:32:17 / janfrog"
!

reduceActionForDefBody8:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 10:32:17 / janfrog"
!

reduceActionForDefBody9:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 10:32:17 / janfrog"
!

reduceActionForDefFile1:nodes 
    ^ FileNode generatedFrom:(nodes at:1) defBody:(nodes at:2)

    "Modified: / 10-02-2008 / 10:29:48 / janfrog"
!

reduceActionForDefinition1:nodes 
    ^ nodes at:1
!

reduceActionForDefinition2:nodes 
    ^ nodes at:1
!

reduceActionForDefinition3:nodes 
    ^ nodes at:1
!

reduceActionForDefinition4:nodes 
    ^ nodes at:1
!

reduceActionForDefinition5:nodes 
    ^ nodes at:1
!

reduceActionForDefinition6:nodes 
    ^ nodes at:1

    "Modified: / 10-02-2008 / 19:43:38 / janfrog"
!

reduceActionForDefinition7:nodes 
    ^ nodes at:1

    "Modified: / 10-02-2008 / 19:43:38 / janfrog"
!

reduceActionForDefinition8:nodes 
    ^ nodes at:1

    "Modified: / 10-02-2008 / 19:43:38 / janfrog"
!

reduceActionForDefinitionFile1:nodes 
    ^ CDefinitionFileNode new definitions:(nodes at:1)
!

reduceActionForEnum1:nodes 
    ^ (CEnumNode new)
        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
        values:(nodes at:4);
        foreign:false;
        typeDef:false

    "Modified: / 26-12-2014 / 23:45:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

reduceActionForEnum2:nodes 
    ^ (CEnumNode new)
        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
        values:(nodes at:4);
        foreign:true;
        typeDef:false

    "Modified: / 26-12-2014 / 23:45:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

reduceActionForEnumField1:nodes 
    ^ (CEnumFieldNode name:((nodes at:4) value) number:((nodes at:6) value))

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForEnumFields1:nodes 
    ^ OrderedCollection new

    "Modified: / 10-02-2008 / 10:26:48 / janfrog"
!

reduceActionForEnumFields2:nodes 
    ^ (nodes at:8)
        addFirst:(EnumFieldNode name:((nodes at:4) value)
                    number:((nodes at:6) value));
        yourself

    "Modified: / 10-02-2008 / 10:26:49 / janfrog"
!

reduceActionForEnumValue1:nodes 
    ^ ((CEnumValueNode new)
        cName:((nodes at:4) value);
        intValue:((nodes at:6) value))
!

reduceActionForFunction1:nodes 
    ^ (CFunctionNode new)
        cName:((nodes at:3) value);
        arguments:(nodes at:5);
        return:(nodes at:7)
!

reduceActionForFunctionArguments1:nodes 
    ^ OrderedCollection new

    "Modified: / 10-02-2008 / 10:25:11 / janfrog"
!

reduceActionForFunctionArguments2:nodes 
    ^ (nodes at:8)
        addFirst:(FunctionArgumentNode cName:((nodes at:6) value) id:(nodes at:4));
        yourself

    "Modified: / 10-02-2008 / 19:08:18 / janfrog"
!

reduceActionForFunctionPrototype1:nodes 
    ^ (CFunctionTypeNode new)
        cName:((nodes at:3) value);
        arguments:(nodes at:5);
        return:(nodes at:7)
!

reduceActionForFunctionPrototypeArgument1:nodes 
    ^ (CArgumentNode new)
        cName:nil;
        type:(nodes at:4)
!

reduceActionForFunctionPrototypeArguments1:nodes 
    ^ OrderedCollection new

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForFunctionPrototypeArguments2:nodes 
    ^ (nodes at:7)
        addFirst:(CArgumentNode cName:nil id:(nodes at:4));
        yourself

    "Modified: / 10-02-2008 / 19:08:18 / janfrog"
!

reduceActionForGenerated1:nodes 
    ^ (nodes at:3) value
!

reduceActionForGroup_____Function___Struct___Enum___Union___Typedef1:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____Function___Struct___Enum___Union___Typedef2:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____Function___Struct___Enum___Union___Typedef3:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____Function___Struct___Enum___Union___Typedef4:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____Function___Struct___Enum___Union___Typedef5:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____Pointer___Array___Function___Type1:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____Pointer___Array___Function___Type2:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____Pointer___Array___Function___Type3:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____Pointer___Array___Function___Type4:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____StructField___Struct___Union1:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____StructField___Struct___Union2:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____StructField___Struct___Union3:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____UnionField___Struct___Union1:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____UnionField___Struct___Union2:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_____UnionField___Struct___Union3:nodes 
    ^ nodes at:1

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForGroup_______foreign_1:nodes 
    ^ nodes at:1

    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
!

reduceActionForGroup_______type_1:nodes 
    ^ nodes at:1

    "Created: / 05-12-2007 / 18:36:56 / haja"
!

reduceActionForGroup_______typedef_1:nodes 
    ^ nodes at:1

    "Created: / 05-12-2007 / 18:31:48 / haja"
!

reduceActionForGroup______foreign_1:nodes 
    ^ nodes at:1

    "Modified: / 19-11-2007 / 09:51:07 / haja"
!

reduceActionForGroup______name_1:nodes 
    ^ nodes at:1
!

reduceActionForGroup______number_____name_1:nodes 
    ^ nodes at:1

    "Modified: / 29-10-2007 / 10:36:04 / haja"
!

reduceActionForGroup______number_____name_2:nodes 
    ^ nodes at:1

    "Modified: / 29-10-2007 / 10:36:04 / haja"
!

reduceActionForGroup______type_1:nodes 
    ^ nodes at:1

    "Created: / 05-12-2007 / 18:45:57 / haja"
!

reduceActionForGroup______type__1:nodes 
    ^ nodes at:1

    "Modified: / 05-12-2007 / 18:45:57 / haja"
!

reduceActionForGroup______typedef__1:nodes 
    ^ nodes at:1

    "Modified: / 12-02-2008 / 21:56:04 / janfrog"
!

reduceActionForId1:nodes 
    ^ nodes at:1

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForId2:nodes 
    ^ nodes at:1

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForId3:nodes 
    ^ nodes at:1

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForId4:nodes 
    ^ nodes at:1

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForId5:nodes 
    ^ IdNode names:(nodes at:1)

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForLocalStruct1:nodes 
    ^ StructNode 
        name:((nodes at:3) value)
        fields:(nodes at:4)
        local:true
        foreign:((nodes at:2) isNil not)
        typedef:false

    "Modified: / 10-02-2008 / 09:46:55 / janfrog"
!

reduceActionForLocalUnion1:nodes 
    ^ UnionNode 
        name:((nodes at:3) value)
        fields:(nodes at:4)
        local:true
        foreign:((nodes at:2) isNil not)
        typedef:false

    "Modified: / 10-02-2008 / 09:46:55 / janfrog"
!

reduceActionForLong1:nodes 
    ^ CUnsignedNode new type:(nodes at:1)

    "Created: / 10-02-2008 / 19:50:10 / janfrog"
!

reduceActionForNames1:nodes 
    ^ OrderedCollection new

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForNames2:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1) value;
        yourself

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForOptional__Group_______foreign_1:nodes 
    ^ nil

    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
!

reduceActionForOptional__Group_______foreign_2:nodes 
    ^ nodes at:1

    "Modified: / 17-02-2008 / 18:45:28 / janfrog"
!

reduceActionForOptional__Group_______type_1:nodes 
    ^ nil

    "Created: / 05-12-2007 / 18:36:56 / haja"
!

reduceActionForOptional__Group_______type_2:nodes 
    ^ nodes at:1

    "Created: / 05-12-2007 / 18:36:56 / haja"
!

reduceActionForOptional__Group_______typedef_1:nodes 
    ^ nil

    "Created: / 05-12-2007 / 18:31:48 / haja"
!

reduceActionForOptional__Group_______typedef_2:nodes 
    ^ nodes at:1

    "Created: / 05-12-2007 / 18:31:48 / haja"
!

reduceActionForOptional__Group______foreign_1:nodes 
    ^ nil

    "Modified: / 19-11-2007 / 09:51:07 / haja"
!

reduceActionForOptional__Group______foreign_2:nodes 
    ^ nodes at:1

    "Modified: / 19-11-2007 / 09:51:07 / haja"
!

reduceActionForOptional__Group______name_1:nodes 
    ^ nil
!

reduceActionForOptional__Group______name_2:nodes 
    ^ nodes at:1
!

reduceActionForOptional__Group______type_1:nodes 
    ^ nil

    "Created: / 05-12-2007 / 18:45:57 / haja"
!

reduceActionForOptional__Group______type_2:nodes 
    ^ nodes at:1

    "Created: / 05-12-2007 / 18:45:57 / haja"
!

reduceActionForOptional__Group______type__1:nodes 
    ^ nil

    "Modified: / 05-12-2007 / 18:45:57 / haja"
!

reduceActionForOptional__Group______type__2:nodes 
    ^ nodes at:1

    "Modified: / 05-12-2007 / 18:45:57 / haja"
!

reduceActionForOptional__Group______typedef__1:nodes 
    ^ nil

    "Modified: / 12-02-2008 / 21:56:04 / janfrog"
!

reduceActionForOptional__Group______typedef__2:nodes 
    ^ nodes at:1

    "Modified: / 12-02-2008 / 21:56:04 / janfrog"
!

reduceActionForOptional___local_1:nodes 
    ^ nil

    "Modified: / 29-10-2007 / 11:05:17 / haja"
!

reduceActionForOptional___local_2:nodes 
    ^ nodes at:1

    "Modified: / 29-10-2007 / 11:05:17 / haja"
!

reduceActionForPointer1:nodes 
    ^ CPointerNode new type:(nodes at:3)
!

reduceActionForRepeat_Multiple___name_1:nodes 
    ^ OrderedCollection with:(nodes at:1)

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForRepeat_Multiple___name_2:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForRepeat__Argument1:nodes 
    ^ OrderedCollection new
!

reduceActionForRepeat__Argument2:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself
!

reduceActionForRepeat__Definition1:nodes 
    ^ OrderedCollection new
!

reduceActionForRepeat__Definition2:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself
!

reduceActionForRepeat__EnumField1:nodes 
    ^ OrderedCollection new

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForRepeat__EnumField2:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForRepeat__EnumValue1:nodes 
    ^ OrderedCollection new
!

reduceActionForRepeat__EnumValue2:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself
!

reduceActionForRepeat__FunctionPrototypeArgument1:nodes 
    ^ OrderedCollection new
!

reduceActionForRepeat__FunctionPrototypeArgument2:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself
!

reduceActionForRepeat__Group_____Function___Struct___Enum___Union___Typedef1:nodes 
    ^ OrderedCollection new

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForRepeat__Group_____Function___Struct___Enum___Union___Typedef2:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForRepeat__Group_____StructField___Struct___Union1:nodes 
    ^ OrderedCollection new

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForRepeat__Group_____StructField___Struct___Union2:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForRepeat__Group_____UnionField___Struct___Union1:nodes 
    ^ OrderedCollection new

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForRepeat__Group_____UnionField___Struct___Union2:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself

    "Created: / 25-10-2007 / 18:05:35 / haja"
!

reduceActionForRepeat__StructField1:nodes 
    ^ OrderedCollection new
!

reduceActionForRepeat__StructField2:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself
!

reduceActionForReturn1:nodes 
    ^ nodes at:3
!

reduceActionForStruct1:nodes 
    ^ (CStructNode new)
        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
        cBitSize:(nodes at:5) value asNumber;
        fields:(nodes at:6);
        foreign:false
!

reduceActionForStruct2:nodes 
    ^ (CStructNode new)
        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
        cBitSize:(nodes at:5) value asNumber;
        fields:(nodes at:6);
        foreign:true
!

reduceActionForStructField1:nodes 
    ^ (CStructFieldNode new)
        cName:((nodes at:6) value);
        offset:(nodes at:8) value asNumber;
        type:(nodes at:4)
!

reduceActionForStructField2:nodes 
    ^ (CStructFieldNode new)
        cName:((nodes at:6) value);
        offset:(nodes at:8) value asNumber;
        type:(nodes at:4)
!

reduceActionForStructField3:nodes 
    ^ (CStructFieldNode new)
        cName:((nodes at:6) value);
        offset:(nodes at:8) value asNumber;
        type:(nodes at:4)
!

reduceActionForStructField4:nodes 
    ^ nil
!

reduceActionForStructFields1:nodes 
    ^ OrderedCollection new

    "Modified: / 10-02-2008 / 09:36:44 / janfrog"
!

reduceActionForStructFields2:nodes 
    ^ (nodes at:6)
        addFirst:(StructFieldNode cName:((nodes at:4) value) id:(nodes at:2));
        yourself

    "Modified: / 10-02-2008 / 19:08:18 / janfrog"
!

reduceActionForStructFields3:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 09:36:44 / janfrog"
!

reduceActionForStructFields4:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 09:36:44 / janfrog"
!

reduceActionForStructOrUnionFields1:nodes 
    ^ (nodes at:1)
        add:(nodes at:2);
        yourself

    "Modified: / 10-02-2008 / 10:21:30 / janfrog"
!

reduceActionForStructOrUnionFields2:nodes 
    ^ OrderedCollection new

    "Modified: / 10-02-2008 / 10:21:30 / janfrog"
!

reduceActionForStructOrUnionFields3:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 09:42:27 / janfrog"
!

reduceActionForStructOrUnionFields4:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 09:42:27 / janfrog"
!

reduceActionForType1:nodes 
    ^ nodes at:1
!

reduceActionForType2:nodes 
    ^ nodes at:1
!

reduceActionForType3:nodes 
    ^ nodes at:1
!

reduceActionForType4:nodes 
    ^ nodes at:1
!

reduceActionForType5:nodes 
    ^ nodes at:1
!

reduceActionForType6:nodes 
    ^ nodes at:1
!

reduceActionForType7:nodes 
    ^ nodes at:1
!

reduceActionForType8:nodes 
    ^ nodes at:1
!

reduceActionForType9:nodes 
    ^ CUnresolvedTypeNode new cName:(nodes at:1) value
!

reduceActionForTypedef1:nodes 
    ^ (CTypedefNode new)
        cName:((nodes at:3) value);
        type:(nodes at:4)
!

reduceActionForTypedef2:nodes 
    ^ (CTypedefNode new)
        cName:((nodes at:3) value);
        type:(nodes at:4);
        foreign:true
!

reduceActionForTypedefEnum1:nodes 
    ^ CEnumNode 
        name:((nodes at:4) value)
        fields:(nodes at:5)
        foreign:((nodes at:3) isNil not)
        typedef:true

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForTypedefStruct1:nodes 
    ^ CStructNode 
        name:((nodes at:4) value)
        fields:(nodes at:5)
        local:false
        foreign:((nodes at:3) isNil not)
        typedef:true

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForTypedefUnion1:nodes 
    ^ CUnionNode 
        name:((nodes at:3) value)
        fields:(nodes at:4)
        local:false
        foreign:((nodes at:2) isNil not)
        typedef:true

    "Modified: / 10-02-2008 / 10:48:29 / janfrog"
!

reduceActionForUnion1:nodes 
    ^ (CUnionNode new)
        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
        cBitSize:(nodes at:5) value asNumber;
        fields:(nodes at:6);
        foreign:false
!

reduceActionForUnion2:nodes 
    ^ (CUnionNode new)
        cName:((nodes at:3) ifNotNil:[ (nodes at:3) value ]);
        cBitSize:(nodes at:5) value asNumber;
        fields:(nodes at:6);
        foreign:true
!

reduceActionForUnionFields1:nodes 
    ^ OrderedCollection new

    "Modified: / 10-02-2008 / 09:36:44 / janfrog"
!

reduceActionForUnionFields2:nodes 
    ^ (nodes at:6)
        addFirst:(UnionFieldNode cName:((nodes at:4) value) id:(nodes at:2));
        yourself

    "Modified: / 10-02-2008 / 19:08:18 / janfrog"
!

reduceActionForUnionFields3:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 09:36:44 / janfrog"
!

reduceActionForUnionFields4:nodes 
    ^ (nodes at:2)
        addFirst:(nodes at:1);
        yourself

    "Modified: / 10-02-2008 / 09:36:44 / janfrog"
!

reduceActionForUnsigned1:nodes 
    ^ CUnsignedNode new type:(nodes at:1)

    "Modified: / 10-02-2008 / 19:50:10 / janfrog"
! !

!CDefinitionParser methodsFor:'generated-tables'!

reduceTable
	^#(
#(41 0 #'reduceActionForRepeat__EnumValue1:')
#(41 2 #'reduceActionForRepeat__EnumValue2:')
#(42 7 #reduceActionForEnumValue1:)
#(43 0 #'reduceActionForRepeat__StructField1:')
#(43 2 #'reduceActionForRepeat__StructField2:')
#(44 9 #reduceActionForStructField1:)
#(44 9 #reduceActionForStructField2:)
#(44 9 #reduceActionForStructField3:)
#(44 6 #reduceActionForStructField4:)
#(45 0 #'reduceActionForOptional__Group______name_1:')
#(45 1 #'reduceActionForOptional__Group______name_2:')
#(46 1 #'reduceActionForGroup______name_1:')
#(47 7 #reduceActionForArray1:)
#(48 4 #reduceActionForPointer1:)
#(49 2 #reduceActionForBuiltinType1:)
#(49 2 #reduceActionForBuiltinType2:)
#(49 2 #reduceActionForBuiltinType3:)
#(49 2 #reduceActionForBuiltinType4:)
#(49 1 #reduceActionForBuiltinType5:)
#(49 1 #reduceActionForBuiltinType6:)
#(49 1 #reduceActionForBuiltinType7:)
#(49 1 #reduceActionForBuiltinType8:)
#(49 1 #reduceActionForBuiltinType9:)
#(49 1 #reduceActionForBuiltinType10:)
#(50 2 #reduceActionForConst1:)
#(51 8 #reduceActionForFunctionPrototype1:)
#(52 0 #'reduceActionForRepeat__FunctionPrototypeArgument1:')
#(52 2 #'reduceActionForRepeat__FunctionPrototypeArgument2:')
#(53 6 #reduceActionForFunctionPrototypeArgument1:)
#(54 1 #reduceActionForType1:)
#(54 1 #reduceActionForType2:)
#(54 1 #reduceActionForType3:)
#(54 1 #reduceActionForType4:)
#(54 1 #reduceActionForType5:)
#(54 1 #reduceActionForType6:)
#(54 1 #reduceActionForType7:)
#(54 1 #reduceActionForType8:)
#(54 1 #reduceActionForType9:)
#(55 4 #reduceActionForReturn1:)
#(56 0 #'reduceActionForRepeat__Argument1:')
#(56 2 #'reduceActionForRepeat__Argument2:')
#(57 7 #reduceActionForArgument1:)
#(57 7 #reduceActionForArgument2:)
#(57 7 #reduceActionForArgument3:)
#(58 3 #reduceActionForGenerated1:)
#(59 5 #reduceActionForTypedef1:)
#(59 5 #reduceActionForTypedef2:)
#(60 5 #reduceActionForEnum1:)
#(60 5 #reduceActionForEnum2:)
#(61 7 #reduceActionForUnion1:)
#(61 7 #reduceActionForUnion2:)
#(62 7 #reduceActionForStruct1:)
#(62 7 #reduceActionForStruct2:)
#(63 8 #reduceActionForFunction1:)
#(64 1 #reduceFor:)
#(65 0 #'reduceActionForRepeat__Definition1:')
#(65 2 #'reduceActionForRepeat__Definition2:')
#(66 1 #reduceActionForDefinition1:)
#(66 1 #reduceActionForDefinition2:)
#(66 1 #reduceActionForDefinition3:)
#(66 1 #reduceActionForDefinition4:)
#(66 1 #reduceActionForDefinition5:)
#(67 1 #reduceActionForDefinitionFile1:)
)
!

transitionTable
	^#(
#[1 0 226 0 31 0 226 0 40 0 13 0 65 0 17 0 67]
#[1 0 226 0 31 0 226 0 40 0 13 0 65 0 21 0 67]
#[1 0 25 0 31 0 254 0 40 0 29 0 59 0 33 0 60 0 37 0 61 0 41 0 62 0 45 0 63 0 49 0 66]
#[0 0 0 0 40]
#[0 0 0 0 40]
#[1 0 53 0 1 0 57 0 2 0 61 0 3 0 65 0 4 0 69 0 7 0 73 0 8 0 77 0 9 0 81 0 11 0 85 0 30]
#[0 0 250 0 31 0 40]
#[0 0 246 0 31 0 40]
#[0 0 242 0 31 0 40]
#[0 0 238 0 31 0 40]
#[0 0 234 0 31 0 40]
#[0 0 230 0 31 0 40]
#[0 0 89 0 34]
#[0 0 93 0 34]
#[1 0 42 0 29 0 42 0 31 0 97 0 34 0 101 0 45 0 105 0 46]
#[1 0 42 0 29 0 42 0 31 0 97 0 34 0 109 0 45 0 105 0 46]
#[1 0 42 0 10 0 97 0 34 0 113 0 45 0 105 0 46]
#[1 0 42 0 10 0 97 0 34 0 117 0 45 0 105 0 46]
#[1 0 42 0 10 0 97 0 34 0 121 0 45 0 105 0 46]
#[1 0 42 0 10 0 97 0 34 0 125 0 45 0 105 0 46]
#[0 0 129 0 34]
#[1 0 133 0 13 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 0 177 0 31 0 181 0 34 0 185 0 47 0 189 0 48 0 193 0 49 0 197 0 50 0 201 0 51 0 205 0 54 0 209 0 60 0 213 0 61 0 217 0 62]
#[1 0 133 0 13 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 0 177 0 31 0 181 0 34 0 185 0 47 0 189 0 48 0 193 0 49 0 197 0 50 0 201 0 51 0 221 0 54 0 209 0 60 0 213 0 61 0 217 0 62]
#[0 0 50 0 10 0 29 0 31]
#[1 0 6 0 29 0 6 0 31 0 225 0 41]
#[0 0 46 0 10 0 29 0 31]
#[1 0 6 0 29 0 6 0 31 0 229 0 41]
#[0 0 233 0 10]
#[0 0 237 0 10]
#[0 0 241 0 10]
#[0 0 245 0 10]
#[0 0 249 0 31]
#[1 0 133 0 13 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 0 177 0 31 0 181 0 34 0 185 0 47 0 189 0 48 0 193 0 49 0 197 0 50 0 201 0 51 0 253 0 54 0 209 0 60 0 213 0 61 0 217 0 62]
#[0 0 98 0 29]
#[0 0 94 0 29]
#[0 0 90 0 29]
#[0 0 86 0 29]
#[0 0 82 0 29]
#[0 0 78 0 29]
#[1 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 1 1 0 49]
#[1 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 1 5 0 49]
#[1 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 1 9 0 49]
#[1 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 1 13 0 49]
#[1 0 61 0 3 0 65 0 4 0 69 0 7 0 73 0 8 0 77 0 9 0 81 0 11 1 17 0 12 1 21 0 24 1 25 0 26]
#[0 0 154 0 29]
#[0 0 134 0 29]
#[0 0 130 0 29]
#[0 0 126 0 29]
#[0 0 122 0 29]
#[0 0 138 0 29]
#[0 1 29 0 29]
#[0 0 150 0 29]
#[0 0 146 0 29]
#[0 0 142 0 29]
#[0 1 33 0 29]
#[1 1 37 0 29 1 41 0 31 1 45 0 42]
#[1 1 49 0 29 1 41 0 31 1 45 0 42]
#[0 1 53 0 35]
#[0 1 57 0 35]
#[0 1 61 0 35]
#[0 1 65 0 35]
#[1 0 162 0 29 0 162 0 31 1 69 0 56]
#[0 0 102 0 29]
#[0 0 74 0 29]
#[0 0 70 0 29]
#[0 0 66 0 29]
#[0 0 62 0 29]
#[1 0 133 0 13 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 0 177 0 31 0 181 0 34 0 185 0 47 0 189 0 48 0 193 0 49 0 197 0 50 0 201 0 51 1 73 0 54 0 209 0 60 0 213 0 61 0 217 0 62]
#[0 1 77 0 34]
#[0 1 81 0 31]
#[0 0 190 0 31 0 40]
#[0 0 186 0 31 0 40]
#[0 0 198 0 29 0 31 0 40]
#[0 1 85 0 27]
#[0 0 10 0 29 0 31]
#[0 0 194 0 29 0 31 0 40]
#[1 0 18 0 29 0 18 0 31 1 89 0 43]
#[1 0 18 0 29 0 18 0 31 1 93 0 43]
#[1 0 18 0 29 0 18 0 31 1 97 0 43]
#[1 0 18 0 29 0 18 0 31 1 101 0 43]
#[1 1 105 0 29 1 109 0 31 1 113 0 57]
#[0 1 117 0 29]
#[0 1 121 0 31]
#[1 0 133 0 13 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 0 177 0 31 0 181 0 34 0 185 0 47 0 189 0 48 0 193 0 49 0 197 0 50 0 201 0 51 1 125 0 54 0 209 0 60 0 213 0 61 0 217 0 62]
#[0 1 129 0 31]
#[1 1 133 0 29 1 137 0 31 1 141 0 44]
#[1 1 145 0 29 1 137 0 31 1 141 0 44]
#[1 1 149 0 29 1 137 0 31 1 141 0 44]
#[1 1 153 0 29 1 137 0 31 1 141 0 44]
#[1 1 157 0 31 1 161 0 55]
#[0 1 165 0 28]
#[0 0 166 0 29 0 31]
#[0 0 58 0 29]
#[1 0 110 0 29 0 110 0 31 1 169 0 52]
#[0 1 173 0 29]
#[0 1 177 0 34]
#[0 0 206 0 29 0 31 0 40]
#[0 1 181 0 6]
#[0 0 22 0 29 0 31]
#[0 0 202 0 29 0 31 0 40]
#[0 0 214 0 29 0 31 0 40]
#[0 0 210 0 29 0 31 0 40]
#[0 1 185 0 25]
#[0 1 189 0 29]
#[0 1 193 0 31]
#[1 1 197 0 29 1 201 0 31 1 205 0 53]
#[0 1 209 0 35]
#[0 1 213 0 29]
#[0 1 217 0 31]
#[1 0 133 0 13 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 0 177 0 31 0 181 0 34 0 185 0 47 0 189 0 48 0 193 0 49 0 197 0 50 0 201 0 51 1 221 0 54 0 209 0 60 0 213 0 61 0 217 0 62]
#[0 0 218 0 31 0 40]
#[1 0 133 0 13 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 0 177 0 31 0 181 0 34 0 185 0 47 0 189 0 48 0 193 0 49 0 197 0 50 0 201 0 51 1 225 0 54 0 209 0 60 0 213 0 61 0 217 0 62]
#[1 1 157 0 31 1 229 0 55]
#[0 1 233 0 28]
#[0 0 114 0 29 0 31]
#[0 1 237 0 29]
#[0 1 241 0 35]
#[1 0 133 0 13 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 1 245 0 29 0 177 0 31 0 181 0 34 0 185 0 47 0 189 0 48 0 193 0 49 0 197 0 50 0 201 0 51 1 249 0 54 0 209 0 60 0 213 0 61 0 217 0 62]
#[0 1 253 0 29]
#[0 2 1 0 29]
#[0 2 5 0 29]
#[0 2 9 0 31]
#[0 0 54 0 29]
#[0 2 13 0 29]
#[0 2 17 0 5]
#[0 2 21 0 29]
#[0 0 158 0 29]
#[1 2 25 0 26 2 29 0 27 2 33 0 34]
#[0 0 106 0 29]
#[1 0 133 0 13 0 137 0 14 0 141 0 15 0 145 0 16 0 149 0 17 0 153 0 18 0 157 0 19 0 161 0 20 0 165 0 21 0 169 0 22 0 173 0 23 0 177 0 31 0 181 0 34 0 185 0 47 0 189 0 48 0 193 0 49 0 197 0 50 0 201 0 51 2 37 0 54 0 209 0 60 0 213 0 61 0 217 0 62]
#[0 0 14 0 29 0 31]
#[0 2 41 0 29]
#[1 2 45 0 27 2 49 0 30 2 53 0 34]
#[0 2 57 0 29]
#[0 2 61 0 29]
#[0 2 65 0 29]
#[0 2 69 0 29]
#[0 0 38 0 29 0 31]
#[0 2 73 0 5]
#[0 2 77 0 5]
#[0 2 81 0 5]
#[0 0 178 0 29 0 31]
#[0 0 174 0 29 0 31]
#[0 0 170 0 29 0 31]
#[0 2 85 0 29]
#[0 2 89 0 35]
#[0 2 93 0 35]
#[0 2 97 0 35]
#[0 0 118 0 29 0 31]
#[0 2 101 0 29]
#[0 2 105 0 29]
#[0 2 109 0 29]
#[0 0 30 0 29 0 31]
#[0 0 34 0 29 0 31]
#[0 0 26 0 29 0 31]
)
! !

!CDefinitionParser methodsFor:'private'!

performReduceMethod: aSymbol with: items 

    | cNode |
    cNode := super performReduceMethod: aSymbol with: items.
    (cNode isKindOf: CNode) ifTrue:
        [cNode line: scanner lineNumber].
    ^cNode

    "Created: / 10-07-2008 / 15:59:04 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 10-07-2008 / 20:05:24 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!CDefinitionParser methodsFor:'private-error handling'!

reportErrorMessage: aString

    super reportErrorMessage: 'line ', scanner lineNumber printString, ': ' , aString

    "Created: / 04-07-2008 / 12:13:14 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!CDefinitionParser class methodsFor:'documentation'!

version
    ^ '$Id$'
!

version_HG

    ^ '$Changeset: <not expanded> $'
!

version_SVN
    ^ '$Id$'
! !