Eagle Legacy Modernization, LLC

IntelASM Grammar

Main program: IntelASM_Program

IntelASM syntax:

 Count  Terminals:
34 IntelASM_Comment: ; or // comment to end of line
  IntelASM_CommentToEndOfLine: comment to end of line
  IntelASM_Define_Definition: An identifier
118 IntelASM_EndOfLine: End of line
  IntelASM_HexNumber: A hex number
8 IntelASM_Identifier_Reference: An identifier
9 IntelASM_Label_Definition: An identifier
42 IntelASM_Label_Reference: An identifier
16 IntelASM_Literal: quotes:'" escape:none doubled:no multiline:no
  IntelASM_Macro_Definition: An identifier
20 IntelASM_Number: exponent_chars:none suffix_chars:none trailing_period:no ignore_char:none
 Count  Statistics(*) Tokens:
    IntelASM_CpuDirective: "cpu" IntelASM_CPUValue*
    |   IntelASM_CPUValue: ("MMX"|"SSE"|"SSE2"|"SSE3"|"SSSE3")
    IntelASM_DefineDirective: '%' "define" IntelASM_Define_Definition [IntelASM_Identifier_Reference]
1 all all all all IntelASM_EquDirective: IntelASM_Label_Definition [':'] "EQU" IntelASM_Expression
1 all all IntelASM_GlobalDirective: "GLOBAL" IntelASM_Identifier_Reference
    IntelASM_IncludeDirective: ['%'] "include" IntelASM_Filename
    |   IntelASM_Filename: (IntelASM_BareFilename | IntelASM_Literal)
    |   |   IntelASM_BareFilename: IntelASM_Identifier_Reference*
    IntelASM_ListDirective: '.' ("list"|"xlist")
    IntelASM_MacroDirective: '%' "macro" IntelASM_Macro_Definition IntelASM_Number IntelASM_EndOfLine IntelASM_Line* IntelASM_EndMacro
    |   IntelASM_EndMacro: '%' "endmacro"
2 all all IntelASM_SectionDirective: ("SECTION"|"SECTION_TEXT") [(".data"|".rodata"|".text")]
    IntelASM_TitleDirective: "TITLE" IntelASM_CommentToEndOfLine
1 all all all IntelASM_AdditiveExpression: IntelASM_Expression ("+"|"-") IntelASM_Expression
1 all all all IntelASM_Brackets: '[' IntelASM_Expression ']'
    IntelASM_BytePtr: "BYTE" "PTR" IntelASM_Expression
1 all IntelASM_Dollar: '$'
    IntelASM_DwordPtr: "DWORD" "PTR" '[' IntelASM_Expression ']'
    IntelASM_MultiplicativeExpression: IntelASM_Expression ("*") IntelASM_Expression
6 all IntelASM_RegisterExpr: IntelASM_Register
6 all IntelASM_VariableExpr: IntelASM_Identifier_Reference
38 all all IntelASM_CALL: "CALL" IntelASM_Label_Reference
2 all all all all IntelASM_CMP: "CMP" IntelASM_Register ',' IntelASM_Expression
1 none all 3.00 IntelASM_DB: [IntelASM_DBtimes] "DB" IntelASM_Expression*
    |   IntelASM_DBtimes: "TIMES" IntelASM_Number
    IntelASM_DQ: "DQ" IntelASM_Expression*
4 all all IntelASM_JMP: ("JC"|"JE"|"JG"|"JGE"|"JL"|"JLE"|"JMP"|"JNE"|"JNZ"|"JZ") IntelASM_Label_Reference
2 all IntelASM_NoArgs: ("CLD"|"LODSB"|"MOVSB"|"NOP"|"RET"|"STD"|"STOSB")
2 all all IntelASM_OneArg: ("DEC"|"DIV"|"INC"|"MUL"|"NEG"|"POP"|"PUSH"|"REP"|"REPZ"|"SETZ") IntelASM_Register
    IntelASM_REPNE: "REPNE" "SCASB"
2 all IntelASM_SysCall: "SYSCALL"
43 all all all all IntelASM_TwoArgs: ("ADD"|"AND"|"LEA"|"MOV"|"MOVSX"|"MOVZX"|"OR"|"SHL"|"SHR"|"SUB"|"TEST"|"XOR") IntelASM_Variable ',' IntelASM_Expression
4 all all IntelASM_Directive: IntelASM_DirectiveList IntelASM_EndOfLine
4 (none | none | 25% | 25% | none | none | none | 50% | none) |   IntelASM_DirectiveList: (IntelASM_CpuDirective | IntelASM_DefineDirective | IntelASM_EquDirective | IntelASM_GlobalDirective | IntelASM_IncludeDirective | IntelASM_ListDirective | IntelASM_MacroDirective | IntelASM_SectionDirective | IntelASM_TitleDirective)
51 (none | 39% | 31% | 12% | 12% | 2% | none | none | 2% | none | 2%) IntelASM_Expression: (IntelASM_HexNumber | IntelASM_Number | IntelASM_Literal | IntelASM_RegisterExpr | IntelASM_VariableExpr | IntelASM_Brackets | IntelASM_BytePtr | IntelASM_DwordPtr | IntelASM_Dollar | IntelASM_MultiplicativeExpression | IntelASM_AdditiveExpression)
94 all 22% all IntelASM_Instruction: IntelASM_RegularInstruction [IntelASM_Comment] IntelASM_EndOfLine
94 (40% | 2% | 1% | none | 4% | 2% | 2% | 46% | none | 2%) |   IntelASM_RegularInstruction: (IntelASM_CALL | IntelASM_CMP | IntelASM_DB | IntelASM_DQ | IntelASM_JMP | IntelASM_NoArgs | IntelASM_OneArg | IntelASM_TwoArgs | IntelASM_REPNE | IntelASM_SysCall)
8 all all IntelASM_Label: IntelASM_Label_Definition ':'
1 26.00 IntelASM_Program: IntelASM_Line*
139 (14% | 9% | 3% | 68% | 6%) |   IntelASM_Line: (IntelASM_EndOfLine | IntelASM_Comment | IntelASM_Directive | IntelASM_Instruction | IntelASM_Label)
52 all IntelASM_Register: ("EAX"|"EBX"|"ECX"|"EDX"|"ESI"|"EDI"|"EBP"|"ESP"|"RAX"|"RBX"|"RCX"|"RDX"|"R8"|"R9"|"R10"|"CS"|"DS"|"SS"|"ES"|"FS"|"GS"|"AH"|"AL"|"BH"|"BL"|"CH"|"CL"|"DH"|"DL"|"AX"|"BX"|"CX"|"DX"|"BP"|"SI"|"DI"|"SP"|"RDI"|"RSI")
43 (none | 5% | 93% | 2%) IntelASM_Variable: (IntelASM_Brackets_Address | IntelASM_Brackets_Register | IntelASM_Register | IntelASM_Identifier_Reference)
    |   IntelASM_Brackets_Address: '[' IntelASM_Identifier_Reference ']'
2 all all all |   IntelASM_Brackets_Register: '[' IntelASM_Register ']'

Terminals = 11 (instances=247)
Tokens = 44 (instances=605)

(*) 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.