first commit
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
/*
|
||||
BSD License
|
||||
|
||||
Copyright (c) 2013, Tom Everett
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. Neither the name of Tom Everett nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
grammar pdp7asm;
|
||||
|
||||
prog
|
||||
: line+
|
||||
;
|
||||
|
||||
line
|
||||
: (label? declarations? comment? eol)
|
||||
| eol
|
||||
;
|
||||
|
||||
declarations
|
||||
: declaration (';' declaration)*
|
||||
;
|
||||
|
||||
declaration
|
||||
: opcode argument+
|
||||
;
|
||||
|
||||
argument
|
||||
: expression
|
||||
;
|
||||
|
||||
expression
|
||||
: multiplyingExpression ((PLUS|MINUS) multiplyingExpression)*
|
||||
;
|
||||
|
||||
multiplyingExpression
|
||||
: atom ((TIMES|DIV) atom)*
|
||||
;
|
||||
|
||||
atom
|
||||
: variable
|
||||
| LOC
|
||||
| RELOC
|
||||
| STRING
|
||||
| DECIMAL
|
||||
| DECIMAL_MINUS
|
||||
| OCTAL
|
||||
| HEX
|
||||
;
|
||||
|
||||
eol
|
||||
: EOL
|
||||
;
|
||||
|
||||
comment
|
||||
: COMMENT
|
||||
;
|
||||
|
||||
label
|
||||
: IDENTIFIER ':'
|
||||
;
|
||||
|
||||
variable
|
||||
: IDENTIFIER
|
||||
;
|
||||
|
||||
opcode
|
||||
: 'jms'
|
||||
| 'dac'
|
||||
| 'lac'
|
||||
| 'and'
|
||||
| 'jmp'
|
||||
| 'tad'
|
||||
| 'sad'
|
||||
| 'sys'
|
||||
| 'sna'
|
||||
| 'spa'
|
||||
;
|
||||
|
||||
LOC
|
||||
: '.'
|
||||
;
|
||||
|
||||
RELOC
|
||||
: '..'
|
||||
;
|
||||
|
||||
PLUS
|
||||
: '+'
|
||||
;
|
||||
|
||||
MINUS
|
||||
: '-'
|
||||
;
|
||||
|
||||
TIMES
|
||||
: '*'
|
||||
;
|
||||
|
||||
DIV
|
||||
: '/'
|
||||
;
|
||||
|
||||
IDENTIFIER
|
||||
: [a-zA-Z]+
|
||||
;
|
||||
|
||||
HEX
|
||||
: [0-9a-f]+
|
||||
;
|
||||
|
||||
DECIMAL
|
||||
: 'd' [0-9]+
|
||||
;
|
||||
|
||||
OCTAL
|
||||
: 'o' [0-7]+
|
||||
;
|
||||
|
||||
DECIMAL_MINUS
|
||||
: 'dm' [0-9]+
|
||||
;
|
||||
|
||||
STRING
|
||||
: '<' [a-zA-Z0-9$*,%/]+ '>'
|
||||
;
|
||||
|
||||
COMMENT
|
||||
: '"' ~[\r\n]*
|
||||
;
|
||||
|
||||
EOL
|
||||
: [\r\n]+
|
||||
;
|
||||
|
||||
WS
|
||||
: [ \t] -> skip
|
||||
;
|
||||
Reference in New Issue
Block a user