ogma-language-c (empty) → 1.0.6
raw patch · 9 files changed
+592/−0 lines, 9 filesdep +QuickCheckdep +arraydep +basebuild-type:Customsetup-changedbinary-added
Dependencies added: QuickCheck, array, base, ogma-language-c, test-framework, test-framework-quickcheck2
Files
- CHANGELOG.md +31/−0
- LICENSE.pdf binary
- Setup.hs +27/−0
- grammar/C.cf +331/−0
- ogma-language-c.cabal +111/−0
- src/.keep +0/−0
- tests/Main.hs +68/−0
- tests/reduced_geofence_msgs.h +12/−0
- tests/reduced_geofence_msgs_bad.h +12/−0
+ CHANGELOG.md view
@@ -0,0 +1,31 @@+# Revision history for ogma-language-c++## [1.0.6] - 2022-11-21++* Version bump 1.0.6 (#64).+* Update license in cabal file to OtherLicense (#62).+* Add empty file to keep directory structure in distributable package (#65).++## [1.0.5] - 2022-09-21++* Version bump 1.0.5 (#60).++## [1.0.4] - 2022-07-21++* Version bump 1.0.4 (#53).++## [1.0.3] - 2022-05-21++* Version bump 1.0.3 (#49).++## [1.0.2] - 2022-03-21++* Version bump 1.0.2 (#43).++## [1.0.1] - 2022-01-21++* Version bump 1.0.1 (#39).++## [1.0.0] - 2021-11-22++* Initial release.
+ LICENSE.pdf view
binary file changed (absent → 117991 bytes)
+ Setup.hs view
@@ -0,0 +1,27 @@+-- | Custom Setup that runs bnfc to generate the language sub-libraries+-- for the parsers included in Ogma.+module Main (main) where++import Distribution.Simple ( defaultMainWithHooks, hookedPrograms,+ postConf, preBuild, simpleUserHooks )+import Distribution.Simple.Program ( Program (..), findProgramVersion,+ simpleProgram )+import System.Process ( system )++-- | Run BNFC on the grammar before the actual build step.+--+-- All options for bnfc are hard-coded here. There is an open bug in Cabal's+-- github repo about supporting BNFC.+main :: IO ()+main = defaultMainWithHooks $ simpleUserHooks+ { hookedPrograms = [ bnfcProgram ]+ , postConf = \args flags packageDesc localBuildInfo -> do+ _ <- system "bnfc --haskell -p Language.C -o src/ grammar/C.cf"+ postConf simpleUserHooks args flags packageDesc localBuildInfo+ }++-- | TODO: This should be in Cabal.Distribution.Simple.Program.Builtin.+bnfcProgram :: Program+bnfcProgram = (simpleProgram "bnfc")+ { programFindVersion = findProgramVersion "--version" id+ }
+ grammar/C.cf view
@@ -0,0 +1,331 @@+-- Copyright 2020 United States Government as represented by the Administrator+-- of the National Aeronautics and Space Administration. All Rights Reserved.+--+-- Disclaimers+--+-- No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY+-- OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT+-- LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO+-- SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A+-- PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT THE+-- SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF+-- PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN+-- ANY MANNER, CONSTITUTE AN ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR+-- RECIPIENT OF ANY RESULTS, RESULTING DESIGNS, HARDWARE, SOFTWARE PRODUCTS OR+-- ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT SOFTWARE. FURTHER,+-- GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING+-- THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES+-- IT "AS IS."+--+-- Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST+-- THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS+-- ANY PRIOR RECIPIENT. IF RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN+-- ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES OR LOSSES ARISING FROM SUCH USE,+-- INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING FROM, RECIPIENT'S+-- USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE+-- UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY+-- PRIOR RECIPIENT, TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY+-- FOR ANY SUCH MATTER SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF THIS+-- AGREEMENT.+--+entrypoints TranslationUnit;++token Identifier ( ( letter | '_' ) (letter | digit | '_' )* ) ;+token IntegerConstant ( ( ["123456789"] digit*)+ | ('0' ["01234567"]+)+ | ('0' ('x' | 'X') ["01234567"]+)+ )+ ( ('u' | 'U' | 'l' | 'L')? ) ;++MkTranslationUnit . TranslationUnit ::= [ExternalDeclaration] ;++(:[]) . [ExternalDeclaration] ::= ExternalDeclaration ;+(:) . [ExternalDeclaration] ::= ExternalDeclaration [ExternalDeclaration] ;++MkExternalDeclarationFunctionDefinition . ExternalDeclaration ::= FunctionDefinition ;+MkExternalDeclarationDeclaration . ExternalDeclaration ::= Declaration ;++MkFunctionDefinition . FunctionDefinition ::= [DeclarationSpecifier] Declarator [Declaration] CompoundStatement ;++MkDeclaration . Declaration ::= DeclarationSpecifiers InitDeclarationListOpt ";" ;++[] . [Declaration] ::= ;+(:) . [Declaration] ::= Declaration [Declaration];++[] . [DeclarationSpecifier] ::= ;+(:) . [DeclarationSpecifier] ::= DeclarationSpecifier [DeclarationSpecifier] ;++DeclarationSpecifiers . DeclarationSpecifiers ::= DeclarationSpecifier [DeclarationSpecifier] ;++MkDeclarationSpecifierStorageClass . DeclarationSpecifier ::= StorageClassSpecifier ;+MkDeclarationSpecifierTypeSpecifier . DeclarationSpecifier ::= TypeSpecifier ;+MkDeclarationSpecifierTypeQualifier . DeclarationSpecifier ::= TypeQualifier ;++MkStorageClassSpecifierAuto . StorageClassSpecifier ::= "auto" ;+MkStorageClassSpecifierRegister . StorageClassSpecifier ::= "register" ;+MkStorageClassSpecifierStatic . StorageClassSpecifier ::= "static" ;+MkStorageClassSpecifierExtern . StorageClassSpecifier ::= "extern" ;+MkStorageClassSpecifierTypedef . StorageClassSpecifier ::= "typedef" ;++MkTypeSpecifierVoid . TypeSpecifier ::= "void" ;+MkTypeSpecifierChar . TypeSpecifier ::= "char" ;+MkTypeSpecifierShort . TypeSpecifier ::= "short" ;+MkTypeSpecifierInt . TypeSpecifier ::= "int" ;+MkTypeSpecifierInt8 . TypeSpecifier ::= "int8_t" ;+MkTypeSpecifierInt16 . TypeSpecifier ::= "int16_t" ;+MkTypeSpecifierInt32 . TypeSpecifier ::= "int32_t" ;+MkTypeSpecifierInt64 . TypeSpecifier ::= "int64_t" ;+MkTypeSpecifierUInt8 . TypeSpecifier ::= "uint8_t" ;+MkTypeSpecifierUInt16 . TypeSpecifier ::= "uint16_t" ;+MkTypeSpecifierUInt32 . TypeSpecifier ::= "uint32_t" ;+MkTypeSpecifierUInt64 . TypeSpecifier ::= "uint64_t" ;+MkTypeSpecifierLong . TypeSpecifier ::= "long" ;+MkTypeSpecifierFloat . TypeSpecifier ::= "float" ;+MkTypeSpecifierDouble . TypeSpecifier ::= "double" ;+MkTypeSpecifierSigned . TypeSpecifier ::= "signed" ;+MkTypeSpecifierUnsigned . TypeSpecifier ::= "unsigned" ;+MkTypeSpecifierStructOrUnion . TypeSpecifier ::= StructOrUnionSpecifier ;+MkTypeSpecifierEnumSpecifier . TypeSpecifier ::= EnumSpecifier ;+-- MkTypeSpecifierTypedefName . TypeSpecifier ::= TypedefName ;++MkTypeQualifierConst . TypeQualifier ::= "const" ;+MkTypeQualifierVolatile . TypeQualifier ::= "volatile" ;++MkStructOrUnionSpecifierWithFields . StructOrUnionSpecifier ::= StructOrUnion IdentifierOpt "{" [StructDeclaration] "}" ;+MkStructOrUnionSpecifierEmpty . StructOrUnionSpecifier ::= StructOrUnion Identifier ;++MkStructOrUnionStruct . StructOrUnion ::= "struct" ;+MkStructOrUnionUnion . StructOrUnion ::= "union" ;++(:[]) . [StructDeclaration] ::= StructDeclaration ;+(:) . [StructDeclaration] ::= StructDeclaration [StructDeclaration];++MkInitDeclarationListOptNothing . InitDeclarationListOpt ::= ;+MkInitDeclarationListOptJust . InitDeclarationListOpt ::= [InitDeclarator] ;++(:[]) . [InitDeclarator] ::= InitDeclarator ;+(:) . [InitDeclarator] ::= InitDeclarator "," [InitDeclarator];++MkInitDeclaratorUninitialized . InitDeclarator ::= Declarator ;+MkInitDeclaratorInitialized . InitDeclarator ::= Declarator "=" Initializer ;++MkStructDeclaration . StructDeclaration ::= [SpecifierQualifier] [StructDeclarator] ";" ;++(:[]) . [SpecifierQualifier] ::= SpecifierQualifier ;+(:) . [SpecifierQualifier] ::= SpecifierQualifier [SpecifierQualifier] ;++MkSpecifierQualifierTypeSpecifier . SpecifierQualifier ::= TypeSpecifier ;+MkSpecifierQualifierTypeQualifier . SpecifierQualifier ::= TypeQualifier ;++(:[]) . [StructDeclarator] ::= StructDeclarator ;+(:) . [StructDeclarator] ::= StructDeclarator "," [StructDeclarator] ;++MkStructDeclaratorDeclarator . StructDeclarator ::= Declarator ;+MkStructDeclaratorConstant . StructDeclarator ::= DeclaratorOpt ":" ConstantExpression ;++MkEnumSpecifierWithCases . EnumSpecifier ::= "enum" IdentifierOpt "{" EnumeratorList "}" ;+MkEnumSpecifierEmpty . EnumSpecifier ::= "enum" Identifier ;++MkEnumeratorList1 . EnumeratorList ::= Enumerator ;+MkEnumeratorListN . EnumeratorList ::= EnumeratorList "," Enumerator ;++MkEnumeratorUninitialized . Enumerator ::= Identifier ;+MkEnumeratorInitialized . Enumerator ::= Identifier "=" ConstantExpression ;++MkDeclaratorOptNothing . DeclaratorOpt ::= ;+MkDeclaratorOptJust . DeclaratorOpt ::= Declarator ;++MkDeclarator . Declarator ::= PointerOpt DirectDeclarator ;++MkDirectDeclaratorIdentifier . DirectDeclarator ::= Identifier ;+MkDirectDeclaratorParDeclarator . DirectDeclarator ::= "(" Declarator ")" ;+MkDirectDeclaratorConstantExpressionOpt . DirectDeclarator ::= DirectDeclarator "[" ConstantExpressionOpt "]" ;+MkDirectDeclaratorParameterTypeList . DirectDeclarator ::= DirectDeclarator "(" ParameterTypeList ")" ;+MkDirectDeclaratorIdentifierListOpt . DirectDeclarator ::= DirectDeclarator "(" IdentifierListOpt ")" ;++MkPointerOptNothing . PointerOpt ::= ;+MkPointerOptJust . PointerOpt ::= Pointer ;++MkPointer1 . Pointer ::= "*" TypeQualifierListOpt ;+MkPointerN . Pointer ::= "*" TypeQualifierListOpt Pointer ;++MkTypeQualifierListOptNothing . TypeQualifierListOpt ::= ;+MkTypeQualifierListOptJust . TypeQualifierListOpt ::= TypeQualifierList ;++MkTypeQualifierList1 . TypeQualifierList ::= TypeQualifier ;+MkTypeQualifierListN . TypeQualifierList ::= TypeQualifierList TypeQualifier ;++MkParameterTypeList . ParameterTypeList ::= ParameterList ;+MkParameterTypeListEllipsis . ParameterTypeList ::= ParameterList "," "..." ;++MkParameterList1 . ParameterList ::= ParameterDeclaration ;+MkParameterListN . ParameterList ::= ParameterList "," ParameterDeclaration ;++MkParameterDeclarationDeclarator . ParameterDeclaration ::= DeclarationSpecifiers Declarator ;+MkParameterDeclarationAbstractDeclaratorOpt . ParameterDeclaration ::= DeclarationSpecifiers AbstractDeclaratorOpt ;++MkIdentifierListOptNothing . IdentifierListOpt ::= ;+MkIdentifierListOptJust . IdentifierListOpt ::= IdentifierList ;++MkIdentifierList1 . IdentifierList ::= Identifier ;+MkIdentifierListN . IdentifierList ::= IdentifierList "," Identifier ;++MkInitializerAssignment . Initializer ::= Expression ;+MkInitializerIniutializerList . Initializer ::= "{" InitializerList "}" ;+MkInitializerIniutializerListC . Initializer ::= "{" InitializerList "," "}" ;++MkInitializerList1 . InitializerList ::= Initializer ;+MkInitializerListN . InitializerList ::= InitializerList "," Initializer ;++MkTypeName . TypeName ::= [SpecifierQualifier] AbstractDeclaratorOpt ;++MkAbstractDeclaratorOptNothing . AbstractDeclaratorOpt ::= ;+MkAbstractDeclaratorOptJust . AbstractDeclaratorOpt ::= AbstractDeclarator ;++MkAbstractDeclaratorPointer . AbstractDeclarator ::= Pointer ;+MkAbstractDeclaratorDirect . AbstractDeclarator ::= PointerOpt DirectAbstractDeclarator ;++MkDirectAbstractDeclaratorOptNothing . DirectAbstractDeclaratorOpt ::= ;+MkDirectAbstractDeclaratorOptJust . DirectAbstractDeclaratorOpt ::= DirectAbstractDeclarator ;++MkDirectAbstractDeclaratorPar . DirectAbstractDeclarator ::= "(" AbstractDeclarator ")" ;+MkDirectAbstractDeclaratorConstantExpressionOpt . DirectAbstractDeclarator ::= DirectAbstractDeclaratorOpt "[" ConstantExpressionOpt "]" ;+MkDirectAbstractDeclaratorParameterTypeList . DirectAbstractDeclarator ::= DirectAbstractDeclaratorOpt "(" ParameterTypeList ")" ;++-- MkTypedefName . TypedefName ::= Identifier ;++MkStatementLabeled . Statement ::= LabeledStatement ;+MkStatementExpression . Statement ::= ExpressionStatement ;+MkStatementCompound . Statement ::= CompoundStatement ;+MkStatementSelection . Statement ::= SelectionStatement ;+MkStatementIteration . Statement ::= IterationStatement ;+MkStatementJump . Statement ::= JumpStatement ;++MkLabeledStatementIdentifier . LabeledStatement ::= Identifier ":" Statement ;+MkLabeledStatementCase . LabeledStatement ::= "case" ConstantExpression ":" Statement ;+MkLabeledStatementDefault . LabeledStatement ::= "default" ":" Statement ;++MkExpressionStatement . ExpressionStatement ::= ExpressionOpt ";" ;++MkCompoundStatement . CompoundStatement ::= "{" [Declaration] [Statement] "}" ;++[] . [Statement] ::= ;+(:) . [Statement] ::= Statement [Statement] ;++MkSelectionStatementIfThen . SelectionStatement ::= "if" "(" Expression ")" Statement ;+MkSelectionStatementIfThenElse . SelectionStatement ::= "if" "(" Expression ")" Statement "else" Statement ;+MkSelectionStatementSwitch . SelectionStatement ::= "switch" "(" Expression ")" Statement ;++MkIterationStatementWhile . IterationStatement ::= "while" "(" Expression ")" Statement ;+MkIterationStatementDo . IterationStatement ::= "do" Statement "while" "(" Expression ")" ";" ;+MkIterationStatementFor . IterationStatement ::= "for" "(" ExpressionOpt ";" ExpressionOpt ";" ExpressionOpt ")" Statement ;++MkJumpStatementGoto . JumpStatement ::= "goto" Identifier ";" ;+MkJumpStatementContinue . JumpStatement ::= "continue" ";" ;+MkJumpStatementBreak . JumpStatement ::= "break" ";" ;+MkJumpStatementReturn . JumpStatement ::= "return" ExpressionOpt ";" ;++MkExpressionOptNothing . ExpressionOpt ::= ;+MkExpressionOptJust . ExpressionOpt ::= Expression ;++coercions Expression 12 ;+Expression12 . Expression12 ::= CastExpression ;+Expression11 . Expression11 ::= Expression11 MultOp Expression12 ;+Expression10 . Expression10 ::= Expression10 AddOp Expression11 ;+Expression9 . Expression9 ::= Expression9 ShiftOp Expression10 ;+Expression8 . Expression8 ::= Expression8 RelOp Expression9 ;+Expression7 . Expression7 ::= Expression7 EqOp Expression8 ;+Expression6 . Expression6 ::= Expression6 "^" Expression7 ;+Expression5 . Expression5 ::= Expression5 "|" Expression6 ;+Expression4 . Expression4 ::= Expression4 "&&" Expression5 ;+Expression3 . Expression3 ::= Expression3 "||" Expression4 ;+Expression2 . Expression2 ::= Expression3 "?" Expression ":" Expression2 ;+Expression1 . Expression1 ::= UnaryExpression AssignmentOperator Expression2 ;+Expression . Expression ::= Expression "," Expression1;++(:[]) . [Expression1] ::= Expression1 ;+(:) . [Expression1] ::= Expression1 "," [Expression1] ;++MkAssignmentOperatorAssign . AssignmentOperator ::= "=" ;+MkAssignmentOperatorTimes . AssignmentOperator ::= "*=" ;+MkAssignmentOperatorDiv . AssignmentOperator ::= "/=" ;+MkAssignmentOperatorMod . AssignmentOperator ::= "%=" ;+MkAssignmentOperatorPlus . AssignmentOperator ::= "+=" ;+MkAssignmentOperatorMinus . AssignmentOperator ::= "-=" ;+MkAssignmentOperatorShiftL . AssignmentOperator ::= "<<=" ;+MkAssignmentOperatorShiftR . AssignmentOperator ::= ">>=" ;+MkAssignmentOperatorAnd . AssignmentOperator ::= "&=" ;+MkAssignmentOperatorXOr . AssignmentOperator ::= "^=" ;+MkAssignmentOperatorOr . AssignmentOperator ::= "|=" ;++MkConditionalExpressionNothing . ConstantExpressionOpt ::= ;+MkConditionalExpressionJust . ConstantExpressionOpt ::= ConstantExpression ;++-- Should be Expression2+MkConstantExpression . ConstantExpression ::= Expression2 ;++EqOpEq . EqOp ::= "==" ;+EqOpNeq . EqOp ::= "!=" ;++RelOpLT . RelOp ::= "<" ;+RelOpGT . RelOp ::= ">" ;+RelOpLE . RelOp ::= "<=" ;+RelOpGE . RelOp ::= ">=" ;++ShiftOpLeft . ShiftOp ::= "<<" ;+ShiftOpRight . ShiftOp ::= ">>" ;++AddOpPlus . AddOp ::= "+" ;+AddOpMinus . AddOp ::= "-" ;++MultOpTimes . MultOp ::= "*" ;+MultOpDiv . MultOp ::= "/" ;+MultOpMod . MultOp ::= "%" ;++MkCastExpression1 . CastExpression ::= UnaryExpression ;+MkCastExpressionN . CastExpression ::= "(" TypeName ")" CastExpression ;++MkUnaryExpressionPostfix . UnaryExpression ::= PostfixExpression ;+MkUnaryExpressionPlus2 . UnaryExpression ::= "++" UnaryExpression ;+MkUnaryExpressionMinus2 . UnaryExpression ::= "--" UnaryExpression ;+MkUnaryExpressionUnaryOp . UnaryExpression ::= UnaryOperator CastExpression ;+MkUnaryExpressionSizeof1 . UnaryExpression ::= "sizeof" UnaryExpression ;+MkUnaryExpressionSizeofPar . UnaryExpression ::= "sizeof" "(" TypeName ")" ;++MkUnaryOperatorAnd . UnaryOperator ::= "&" ;+MkUnaryOperatorTimes . UnaryOperator ::= "*" ;+MkUnaryOperatorPlus . UnaryOperator ::= "+" ;+MkUnaryOperatorMinus . UnaryOperator ::= "-" ;+MkUnaryOperatorTilde . UnaryOperator ::= "~" ;+MkUnaryOperatorBang . UnaryOperator ::= "!" ;++MkPostfixExpression1 . PostfixExpression ::= PrimaryExpression ;+MkPostfixExpressionBrackets . PostfixExpression ::= PostfixExpression "[" Expression "]" ;+MkPostfixExpressionArgumentExpressionListOpt . PostfixExpression ::= PostfixExpression "(" ArgumentExpressionListOpt ")" ;+MkPostfixExpressionDot . PostfixExpression ::= PostfixExpression "." Identifier ;+MkPostfixExpressionArrow . PostfixExpression ::= PostfixExpression "->" Identifier ;+MkPostfixExpressionPlus2 . PostfixExpression ::= PostfixExpression "++" ;+MkPostfixExpressionMinus2 . PostfixExpression ::= PostfixExpression "--" ;++MkPrimaryExpressionIdentifier . PrimaryExpression ::= Identifier ;+MkPrimaryExpressionConstant . PrimaryExpression ::= Constant ;+MkPrimaryExpressionString . PrimaryExpression ::= String ;+MkPrimaryExpressionParExpression . PrimaryExpression ::= "(" Expression ")" ;++MkArgumentExpressionListOptNothing . ArgumentExpressionListOpt ::= ;+MkArgumentExpressionListOptJust . ArgumentExpressionListOpt ::= [Expression1] ;++MkConstantInteger . Constant ::= IntegerConstant ;+MkConstantCharacter . Constant ::= CharacterConstant ;+MkConstantFloating . Constant ::= FloatingConstant ;+-- MkConstantEnumeration . Constant ::= EnumerationConstant ;++MkIdentifierOptNothing . IdentifierOpt ::= ;+MkIdentifierOptJust . IdentifierOpt ::= Identifier ;++MkCharacterConstant . CharacterConstant ::= Char ;+MkFloatingConstant . FloatingConstant ::= Double ;++comment "/*" "*/" ;+comment "//" ;+comment "#" ;
+ ogma-language-c.cabal view
@@ -0,0 +1,111 @@+-- Copyright 2020 United States Government as represented by the Administrator+-- of the National Aeronautics and Space Administration. All Rights Reserved.+--+-- Disclaimers+--+-- No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY+-- OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT+-- LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO+-- SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A+-- PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT THE+-- SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF+-- PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN+-- ANY MANNER, CONSTITUTE AN ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR+-- RECIPIENT OF ANY RESULTS, RESULTING DESIGNS, HARDWARE, SOFTWARE PRODUCTS OR+-- ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT SOFTWARE. FURTHER,+-- GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING+-- THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES+-- IT "AS IS." +--+-- Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST+-- THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS+-- ANY PRIOR RECIPIENT. IF RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN+-- ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES OR LOSSES ARISING FROM SUCH USE,+-- INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING FROM, RECIPIENT'S+-- USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE+-- UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY+-- PRIOR RECIPIENT, TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY+-- FOR ANY SUCH MATTER SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF THIS+-- AGREEMENT.++cabal-version: 2.0+build-type: Custom++name: ogma-language-c+version: 1.0.6+homepage: http://nasa.gov+license: OtherLicense+license-file: LICENSE.pdf+author: Ivan Perez, Alwyn Goodloe+maintainer: ivan.perezdominguez@nasa.gov+category: Aerospace+extra-source-files: CHANGELOG.md+ grammar/C.cf+ src/.keep+ tests/reduced_geofence_msgs.h+ tests/reduced_geofence_msgs_bad.h++synopsis: Ogma: Runtime Monitor translator: C Language Frontend++description: Ogma is a tool to facilitate the integration of safe runtime monitors into+ other systems. Ogma extends+ <https://github.com/Copilot-Language/copilot Copilot>, a high-level runtime+ verification framework that generates hard real-time C99 code.+ .+ This library contains a frontend to read C header files.++custom-setup+ setup-depends:+ base >= 4.11.0.0+ , Cabal >= 2.0+ , process+ , BNFC >= 2.9.1++library++ exposed-modules:+ -- Automatically generated+ Language.C.AbsC+ Language.C.LexC+ Language.C.ParC+ Language.C.PrintC++ autogen-modules:+ Language.C.AbsC+ Language.C.LexC+ Language.C.ParC+ Language.C.PrintC++ build-depends:+ base >= 4.11.0.0 && < 5+ , array >= 0.5.2.0++ hs-source-dirs:+ src++ default-language:+ Haskell2010++test-suite unit-tests+ type:+ exitcode-stdio-1.0++ main-is:+ Main.hs++ build-depends:+ base >= 4.11.0.0 && < 5+ , QuickCheck+ , test-framework+ , test-framework-quickcheck2++ , ogma-language-c++ hs-source-dirs:+ tests++ default-language:+ Haskell2010++ ghc-options:+ -Wall
+ src/.keep view
+ tests/Main.hs view
@@ -0,0 +1,68 @@+-- Copyright 2020 United States Government as represented by the Administrator+-- of the National Aeronautics and Space Administration. All Rights Reserved.+--+-- Disclaimers+--+-- No Warranty: THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY+-- OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT+-- LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO+-- SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A+-- PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT THE+-- SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF+-- PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN+-- ANY MANNER, CONSTITUTE AN ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR+-- RECIPIENT OF ANY RESULTS, RESULTING DESIGNS, HARDWARE, SOFTWARE PRODUCTS OR+-- ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT SOFTWARE. FURTHER,+-- GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING+-- THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES+-- IT "AS IS." +--+-- Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS AGAINST+-- THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS+-- ANY PRIOR RECIPIENT. IF RECIPIENT'S USE OF THE SUBJECT SOFTWARE RESULTS IN+-- ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES OR LOSSES ARISING FROM SUCH USE,+-- INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR RESULTING FROM, RECIPIENT'S+-- USE OF THE SUBJECT SOFTWARE, RECIPIENT SHALL INDEMNIFY AND HOLD HARMLESS THE+-- UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY+-- PRIOR RECIPIENT, TO THE EXTENT PERMITTED BY LAW. RECIPIENT'S SOLE REMEDY+-- FOR ANY SUCH MATTER SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF THIS+-- AGREEMENT.+--+-- | Test C language library.+module Main where++-- External imports+import Data.Either ( isLeft, isRight )+import Test.Framework ( Test, defaultMainWithOpts )+import Test.Framework.Providers.QuickCheck2 ( testProperty )+import Test.QuickCheck ( Property )+import Test.QuickCheck.Monadic ( assert, monadicIO, run )++-- Internal imports+import qualified Language.C.ParC as C ( myLexer, pTranslationUnit )++-- | Run all unit tests for the C parser.+main :: IO ()+main =+ defaultMainWithOpts tests mempty++-- | All unit tests for the C parser.+tests :: [Test.Framework.Test]+tests =+ [ testProperty "Parse C (correct header case)" propParseCOk+ , testProperty "Parse C (incorrect header case)" propParseCFail+ ]++-- | Test the C parser on a well-formed header file.+propParseCOk :: Property+propParseCOk = monadicIO $ do+ content <- run $ readFile "tests/reduced_geofence_msgs.h"+ let program = C.pTranslationUnit $ C.myLexer content+ assert (isRight program)++-- | Test the C parser on an incorrect header file.+propParseCFail :: Property+propParseCFail = monadicIO $ do+ content <- run $ readFile "tests/reduced_geofence_msgs_bad.h"+ let program = C.pTranslationUnit $ C.myLexer content+ assert (isLeft program)
+ tests/reduced_geofence_msgs.h view
@@ -0,0 +1,12 @@+/**+ * @struct geofence_parameters_t+ * @brief data structure containing information about the parameters used by the geofence app+ */+typedef struct{+ uint8_t TlmHeader[CFE_SB_TLM_HDR_SIZE];+ double lookahead;+ double hthreshold;+ double vthreshold;+ double hstepback;+ double vstepback;+}geofence_parameters_t;
+ tests/reduced_geofence_msgs_bad.h view
@@ -0,0 +1,12 @@+/**+ * @struct geofence_parameters_t+ * @brief data structure containing information about the parameters used by the geofence app+ */+typeduuuef struct{+ uint8_t TlmHeader[CFE_SB_TLM_HDR_SIZE];+ double lookahead;+ double hthreshold;+ double vthreshold;+ double hstepback;+ double vstepback;+}geofence_parameters_t;