1 // This file is part of Visual D 2 // 3 // Visual D integrates the D programming language into Visual Studio 4 // Copyright (c) 2010-2011 by Rainer Schuetze, All Rights Reserved 5 // 6 // Distributed under the Boost Software License, Version 1.0. 7 // See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt 8 9 module vdc.parser.iasm; 10 11 import vdc.util; 12 import vdc.lexer; 13 import vdc.parser.engine; 14 15 import ast = vdc.ast.all; 16 17 class AsmInstruction 18 { 19 static Action enter(Parser p) 20 { 21 p.pushNode(new ast.AsmInstruction(p.tok)); 22 return shift(p); 23 } 24 25 static Action shift(Parser p) 26 { 27 switch(p.tok.id) 28 { 29 case TOK_EOF: 30 return p.parseError("end of file in asm block"); 31 case TOK_semicolon: 32 case TOK_rcurly: 33 return Forward; 34 default: 35 p.topNode!(ast.AsmInstruction).addToken(p.tok); 36 p.pushState(&shift); 37 return Accept; 38 } 39 } 40 } 41 42 //-- GRAMMAR_BEGIN -- 43 //AsmInstruction: 44 // Identifier : AsmInstruction 45 // "align" IntegerExpression 46 // "even" 47 // "naked" 48 // "db" Operands 49 // "ds" Operands 50 // "di" Operands 51 // "dl" Operands 52 // "df" Operands 53 // "dd" Operands 54 // "de" Operands 55 // Opcode 56 // Opcode Operands 57 // 58 //Operands: 59 // Operand 60 // Operand , Operands 61 // 62 //IntegerExpression: 63 // IntegerLiteral 64 // Identifier 65 // 66 //Operand: 67 // AsmExp 68 // 69 //AsmExp: 70 // AsmLogOrExp 71 // AsmLogOrExp ? AsmExp : AsmExp 72 // 73 //AsmLogOrExp: 74 // AsmLogAndExp 75 // AsmLogAndExp || AsmLogAndExp 76 // 77 //AsmLogAndExp: 78 // AsmOrExp 79 // AsmOrExp && AsmOrExp 80 // 81 //AsmOrExp: 82 // AsmXorExp 83 // AsmXorExp | AsmXorExp 84 // 85 //AsmXorExp: 86 // AsmAndExp 87 // AsmAndExp ^ AsmAndExp 88 // 89 //AsmAndExp: 90 // AsmEqualExp 91 // AsmEqualExp & AsmEqualExp 92 // 93 //AsmEqualExp: 94 // AsmRelExp 95 // AsmRelExp == AsmRelExp 96 // AsmRelExp != AsmRelExp 97 // 98 //AsmRelExp: 99 // AsmShiftExp 100 // AsmShiftExp < AsmShiftExp 101 // AsmShiftExp <= AsmShiftExp 102 // AsmShiftExp > AsmShiftExp 103 // AsmShiftExp >= AsmShiftExp 104 // 105 //AsmShiftExp: 106 // AsmAddExp 107 // AsmAddExp << AsmAddExp 108 // AsmAddExp >> AsmAddExp 109 // AsmAddExp >>> AsmAddExp 110 // 111 //AsmAddExp: 112 // AsmMulExp 113 // AsmMulExp + AsmMulExp 114 // AsmMulExp - AsmMulExp 115 // 116 //AsmMulExp: 117 // AsmBrExp 118 // AsmBrExp * AsmBrExp 119 // AsmBrExp / AsmBrExp 120 // AsmBrExp % AsmBrExp 121 // 122 //AsmBrExp: 123 // AsmUnaExp 124 // AsmBrExp [ AsmExp ] 125 // 126 //AsmUnaExp: 127 // AsmTypePrefix AsmExp 128 // "offsetof" AsmExp 129 // "seg" AsmExp 130 // + AsmUnaExp 131 // - AsmUnaExp 132 // ! AsmUnaExp 133 // ~ AsmUnaExp 134 // AsmPrimaryExp 135 // 136 //AsmPrimaryExp: 137 // IntegerLiteral 138 // FloatLiteral 139 // "__LOCAL_SIZE" 140 // $ 141 // Register 142 // DotIdentifier 143 // 144 //DotIdentifier: 145 // Identifier 146 // Identifier . DotIdentifier 147 // 148 //AsmTypePrefix: 149 // "near" "ptr" 150 // "far" "ptr" 151 // byte "ptr" 152 // short "ptr" 153 // int "ptr" 154 // "word" "ptr" 155 // "dword" "ptr" 156 // "qword" "ptr" 157 // float "ptr" 158 // double "ptr" 159 // real "ptr" 160 // 161 //Register: 162 // TOK_register 163 // 164 //Opcode: 165 // TOK_opcode 166 // 167 //Identifier: 168 // TOK_Identifier 169 // 170 //Integer: 171 // IntegerLiteral 172 // 173 //IntegerLiteral: 174 // TOK_IntegerLiteral 175 // 176 //FloatLiteral: 177 // TOK_FloatLiteral 178 // 179 //StringLiteral: 180 // TOK_StringLiteral 181 // 182 //CharacterLiteral: 183 // TOK_CharacterLiteral 184 // 185 //// removed from grammar: 186 //// 187 ////Register: 188 //// AL AH AX EAX 189 //// BL BH BX EBX 190 //// CL CH CX ECX 191 //// DL DH DX EDX 192 //// BP EBP 193 //// SP ESP 194 //// DI EDI 195 //// SI ESI 196 //// ES CS SS DS GS FS 197 //// CR0 CR2 CR3 CR4 198 //// DR0 DR1 DR2 DR3 DR6 DR7 199 //// TR3 TR4 TR5 TR6 TR7 200 //// ST 201 //// ST(0) ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7) 202 //// MM0 MM1 MM2 MM3 MM4 MM5 MM6 MM7 203 //// XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 204 ////