Eagle Legacy Modernization, LLC

CMacro Grammar

Main program: CMacro_Program

CMacro syntax:

 Count  Terminals:
  CMacro_Character_Literal: quotes:' escape:\ doubled:no multiline:no
217 CMacro_Comment: /* comment */ or // comment to end of line
  CMacro_CommentRestOfLine: comment to end of line
102 CMacro_Define_Definition: An identifier
5,298 CMacro_EndOfLine: End of line
  CMacro_HexNumber: A hex number
  CMacro_Identifier: An identifier
39 CMacro_Identifier_Reference: An identifier
4,617 CMacro_IncludeSys: include system file
59 CMacro_Literal: quotes:" escape:\ doubled:no multiline:no
56 CMacro_MultiLineText: multiline text
11 CMacro_Number: exponent_chars:Ee suffix_chars:Lf trailing_period:yes ignore_char:none
31 CMacro_Parameter_Definition: An identifier
489 CMacro_RestOfLine: Rest of the line
 Count  Statistics(*) Tokens:
    CMacroFunctionParens: '(' [CMacro_Identifier_Reference] ')'
16 (none | 50% | none | none | none | 38% | none | none | none | none | none | none | none | 13% | none | none | none | none | none | none) CMacro_Expression: (CMacro_HexNumber | CMacro_Number | CMacro_Literal | CMacro_Character_Literal | CMacro_FunctionCall | CMacro_IdentifierExpression | CMacro_SignedExpression | CMacro_NotExpression | CMacro_ParenthesizedExpression | CMacro_SymbolExpression | CMacro_MultiplicativeExpression | CMacro_AdditiveExpression | CMacro_RelationalExpression | CMacro_EqualityExpression | CMacro_BitwiseAndExpression | CMacro_ExclusiveOrExpression | CMacro_BitwiseOrExpression | CMacro_ConditionalAndExpression | CMacro_ConditionalOrExpression | CMacro_ConcatenateExpression)
    CMacro_Program: CMacro_Element*
25 all all |   CMacro_CommentLine: CMacro_Comment CMacro_EndOfLine
115 (1% | 22% | 29% | 49% | none) |   CMacro_Element: (CMacro_Pragma_Statement | CMacro_CommentLine | CMacro_StatementOrComment | CMacro_MultiLineText | CMacro_EndOfLine)
5,216 none all none all CMacro_StatementOrComment: [CMacro_EndOfLine] CMacro_StmtBody [CMacro_Comment]* CMacro_EndOfLine
5,216 (none | 2% | 7% | 0% | 1% | 90% | none | 0% | none | none) |   CMacro_StmtBody: (CMacro_IfDefCPlusPlus | CMacro_Define_Statement | CMacro_Error_Statement | CMacro_If_Statement | CMacro_IfDef_Statement | CMacro_Include_Statement | CMacro_LineNumber_Statement | CMacro_Pragma_Statement | CMacro_Region_Statement | CMacro_Undef_Statement)
    CMacro_AdditiveExpression: CMacro_Expression ("+"|"-") CMacro_Expression
    CMacro_BitwiseAndExpression: CMacro_Expression '&' CMacro_Expression
    CMacro_BitwiseOrExpression: CMacro_Expression '|' CMacro_Expression
    CMacro_ConcatenateExpression: CMacro_Expression "##" CMacro_Expression
    CMacro_ConditionalAndExpression: CMacro_Expression "&&" CMacro_Expression
    CMacro_ConditionalOrExpression: CMacro_Expression "||" CMacro_Expression
2 all all all CMacro_EqualityExpression: CMacro_Expression ("=="|"!=") CMacro_Expression
    CMacro_ExclusiveOrExpression: CMacro_Expression '^' CMacro_Expression
    CMacro_FunctionCall: "defined" CMacro_FunctionType
    |   CMacro_FunctionType: (CMacro_Identifier_Reference | CMacroFunctionParens)
6 all none CMacro_IdentifierExpression: CMacro_Identifier_Reference [CMacroFunctionParens]
    CMacro_MultiplicativeExpression: CMacro_Expression ("*"|"/"|"%") CMacro_Expression
    CMacro_NotExpression: '!' CMacro_Expression
    CMacro_ParenthesizedExpression: '(' CMacro_Expression ')'
    CMacro_RelationalExpression: CMacro_Expression ("<"|">"|"<="|">=") CMacro_Expression
    CMacro_SignedExpression: ("+"|"-") CMacro_Expression
    CMacro_SymbolExpression: '#' CMacro_Expression
    CMacro_Pragma_CLang: ("clang"|"GCC") ("diagnostic"|"optimize") CMacro_Pragma_CLang_What
    |   CMacro_Pragma_CLang_What: (CMacro_Pragma_CLangIgnored | CMacro_Pragma_CLangOptimize | CMacro_Literal | ("push"|"pop"))
    |   |   CMacro_Pragma_CLangIgnored: "ignored" CMacro_Literal
    |   |   CMacro_Pragma_CLangOptimize: '(' CMacro_Literal ')'
    CMacro_Pragma_CodeSeg: "code_seg" '(' CMacro_Literal ')'
    CMacro_Pragma_Comment: "comment" '(' "lib" ',' CMacro_Literal ')'
    CMacro_Pragma_Export: ("export"|"import") ("on"|"off")
    CMacro_Pragma_Intrinsic: "intrinsic" '(' [("rotl"|"rotr"|"_rotl"|"_rotr"|"_BitScanReverse"|"_InterlockedCompareExchange"|"_InterlockedCompareExchangePointer"|"_umul128")] ')'
    CMacro_Pragma_Mark: "mark" ['-'] [CMacro_CommentRestOfLine]
    CMacro_Pragma_Message: "message" ["disable"] '(' CMacro_PragmaMsg* ')'
    |   CMacro_PragmaMsg: (CMacro_Literal | ("UNDERFLOW"|"FLOATOVERFL"|"nosimpint"))
    CMacro_Pragma_Pack: "pack" '(' [("push"|"pop")] [','] [CMacro_Number] ')'
    CMacro_Pragma_Region: "region" [CMacro_CommentRestOfLine]
    CMacro_Pragma_RuntimeChecks: "runtime_checks" '(' CMacro_Literal [','] ["off"] [','] [CMacro_Number] ')'
    CMacro_Pragma_STDC: "STDC" "FP_CONTRACT" "OFF"
    CMacro_Pragma_Unroll: "unroll" CMacro_Number
    CMacro_Pragma_Warn: "warn" ['-'] CMacro_Number
3 all all all all 1.00(all) all CMacro_Pragma_Warning: "warning" ['('] ("disable"|"restore"|"push"|"pop"|"default") [':'] [CMacro_PragmaCode]* [')']
3 (none | all | none) |   CMacro_PragmaCode: (',' | CMacro_Number | CMacro_Identifier)
102 all all all none 18% 96% 16% CMacro_Define_Statement: '#' "define" CMacro_Define_Definition [CMacro_Comment] [CMacro_Parameters] [CMacro_RestOfLine] [CMacro_Comment]
18 all 2.44(all) all |   CMacro_Parameters: '(' [CMacro_Param]* ')'
31 (all | none) |   |   CMacro_Param: (CMacro_Parameter_Definition | "...")
391 all all all CMacro_Error_Statement: '#' ("error"|"warn"|"warning") [CMacro_RestOfLine]
33 all all all none all 2.03(all) none 30% none all all 15% CMacro_IfDef_Statement: '#' ("ifdef"|"ifndef") CMacro_Identifier_Reference [CMacro_Comment] CMacro_EndOfLine [CMacro_Element]* [CMacro_IfDefElif]* [CMacro_IfDefElse] [CMacro_EndOfLine] '#' "endif" [CMacro_Comment]
    |   CMacro_IfDefCPlusPlus: '#' "ifdef" "__cplusplus" CMacro_EndOfLine "extern" CMacro_Literal '{' CMacro_EndOfLine '#' "endif" CMacro_EndOfLine [CMacro_Element]* '#' "ifdef" "__cplusplus" CMacro_EndOfLine '}' [CMacro_Comment] CMacro_EndOfLine '#' "endif"
    |   CMacro_IfDefElif: '#' "elif" CMacro_Expression [CMacro_Comment] [CMacro_EndOfLine] [CMacro_Element]*
10 none all all none all 1.00(all) |   CMacro_IfDefElse: [CMacro_EndOfLine] '#' "else" [CMacro_Comment] CMacro_EndOfLine [CMacro_Element]*
12 all all all 25% all 3.00(all) none 17% none all all 8% CMacro_If_Statement: '#' "if" CMacro_Expression [CMacro_Comment] CMacro_EndOfLine [CMacro_Element]* [CMacro_IfElif]* [CMacro_IfElse] [CMacro_EndOfLine] '#' "endif" [CMacro_Comment]
    |   CMacro_IfElif: '#' "elif" CMacro_Expression [CMacro_Comment] [CMacro_EndOfLine] [CMacro_Element]*
2 all all 50% all 1.00(all) |   CMacro_IfElse: '#' "else" [CMacro_Comment] [CMacro_EndOfLine] [CMacro_Element]*
4,676 all all all 1.00(4%) CMacro_Include_Statement: '#' ("include"|"include_next"|"import") CMacro_IncludeWhat [CMacro_Comment]*
4,676 (1% | 99%) |   CMacro_IncludeWhat: (CMacro_Literal | CMacro_IncludeSys)
    CMacro_LineNumber_Statement: '#' ["line"] CMacro_Number CMacro_Literal [CMacro_Number]*
3 all all all CMacro_Pragma_Statement: '#' "pragma" CMacro_Pragma_Type
3 (none | none | none | none | none | none | none | none | none | none | none | none | none | none | all) |   CMacro_Pragma_Type: ("once" | CMacro_Pragma_CLang | CMacro_Pragma_CodeSeg | CMacro_Pragma_Comment | CMacro_Pragma_Export | CMacro_Pragma_Intrinsic | CMacro_Pragma_Mark | CMacro_Pragma_Message | CMacro_Pragma_Pack | CMacro_Pragma_Region | CMacro_Pragma_RuntimeChecks | CMacro_Pragma_STDC | CMacro_Pragma_Unroll | CMacro_Pragma_Warn | CMacro_Pragma_Warning)
    CMacro_Region_Statement: '#' "region" [CMacro_CommentRestOfLine] CMacro_EndOfLine [CMacro_Element]* [CMacro_EndOfLine] '#' "endregion" [CMacro_CommentRestOfLine]
    CMacro_Undef_Statement: '#' "undef" CMacro_Identifier_Reference

Terminals = 14 (instances=10,919)
Tokens = 61 (instances=20,559)

(*) Statistics are shown in the same order as the Tokens.
Percentages are rounded; 'all' and 'none' mean 100% and 0% before rounding.
For lists, it shows the average number of occurrences, excluding empty lists.