mirror of
https://github.com/ksherlock/mpw.git
synced 2025-02-27 09:29:44 +00:00
parser updates
This commit is contained in:
parent
b85cf313c0
commit
62a374ee16
@ -1,7 +1,8 @@
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
add_definitions(-I ${CMAKE_SOURCE_DIR}/)
|
||||
|
||||
|
||||
set(DEBUGGER_SRC lexer.cpp parser.c)
|
||||
set(DEBUGGER_SRC lexer.cpp parser.cpp)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT lexer.cpp
|
||||
@ -11,11 +12,12 @@ add_custom_command(
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT parser.c parser.h
|
||||
OUTPUT parser.cpp parser.h
|
||||
COMMAND cp -f "${CMAKE_CURRENT_SOURCE_DIR}/parser.lemon" "parser.lemon"
|
||||
COMMAND lemon parser.lemon
|
||||
COMMAND cp -f parser.h "${CMAKE_CURRENT_SOURCE_DIR}/"
|
||||
COMMAND cp -f parser.out "${CMAKE_CURRENT_SOURCE_DIR}/"
|
||||
COMMAND mv -f parser.c parser.cpp
|
||||
MAIN_DEPENDENCY parser.lemon
|
||||
DEPENDS commands.h
|
||||
)
|
||||
|
@ -1,12 +1,15 @@
|
||||
#ifndef __debugger_commands__
|
||||
#define __debugger_commands__
|
||||
|
||||
|
||||
enum {
|
||||
NullCommand,
|
||||
Help,
|
||||
Print,
|
||||
PrintRegisters,
|
||||
Dump,
|
||||
List,
|
||||
Info,
|
||||
Break,
|
||||
TBreak,
|
||||
Continue,
|
||||
|
@ -12,14 +12,13 @@
|
||||
// re2c -b -i
|
||||
|
||||
|
||||
extern "C" {
|
||||
//extern "C" {
|
||||
|
||||
void *ParseAlloc(void *(*mallocProc)(size_t));
|
||||
void ParseFree(void *p, void (*freeProc)(void*));
|
||||
void Parse(void *yyp, int yymajor, uint32_t yyminor, Command *command);
|
||||
void ParseTrace(FILE *TraceFILE, char *zTracePrompt);
|
||||
|
||||
}
|
||||
//}
|
||||
|
||||
// p / print expression
|
||||
// hd / hexdump expression [:expression]
|
||||
@ -154,6 +153,9 @@ bool ParseLine(const char *iter, Command *command)
|
||||
'<' { Parse(parser, tkLT, 0, command); continue; }
|
||||
'>' { Parse(parser, tkGT, 0, command); continue; }
|
||||
|
||||
':' { Parse(parser, tkCOLON, 0, command); continue; }
|
||||
'@' { Parse(parser, tkAT, 0, command); continue; }
|
||||
|
||||
[0-9]+ {
|
||||
// integer
|
||||
uint32_t data;
|
||||
@ -283,7 +285,7 @@ bool ParseLine(const char *iter, Command *command)
|
||||
}
|
||||
|
||||
'tbrk' | 'tbreak' | 'toolbreak' {
|
||||
Parse(parser, tkBREAK, 0, command);
|
||||
Parse(parser, tkTBREAK, 0, command);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -303,15 +305,22 @@ bool ParseLine(const char *iter, Command *command)
|
||||
}
|
||||
|
||||
|
||||
';h' | ';hd' | ';hexdump' {
|
||||
Parse(parser, tkSEMIH, 0, command);
|
||||
continue;
|
||||
}
|
||||
|
||||
';i' | ';info' {
|
||||
Parse(parser, tkSEMII, 0, command);
|
||||
continue;
|
||||
}
|
||||
|
||||
';l' | ';list' {
|
||||
Parse(parser, tkSEMIL, 0, command);
|
||||
continue;
|
||||
}
|
||||
|
||||
';h' | ';hd' | ';hexdump' {
|
||||
Parse(parser, tkSEMIH, 0, command);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
[_A-Za-z][_A-Za-z0-9] + {
|
||||
// identifier. lookup global address, tool number, etc.
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <string.h>
|
||||
#include "commands.h"
|
||||
|
||||
#include <toolbox/MM.h>
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@ -113,6 +114,24 @@ stmt ::= DUMP expr(a) EOL.
|
||||
command->argv[0] = a;
|
||||
}
|
||||
|
||||
stmt ::= DUMP expr(a) COLON expr(b) EOL.
|
||||
{
|
||||
// range dump
|
||||
command->action = Dump;
|
||||
command->argc = 2;
|
||||
command->argv[0] = a;
|
||||
command->argv[1] = b;
|
||||
}
|
||||
|
||||
stmt ::= DUMP expr(a) AT expr(b) EOL.
|
||||
{
|
||||
// count dump
|
||||
command->action = Dump;
|
||||
command->argc = 2;
|
||||
command->argv[0] = a;
|
||||
command->argv[1] = a+b;
|
||||
}
|
||||
|
||||
stmt ::= LIST expr(a) EOL.
|
||||
{
|
||||
command->action = List;
|
||||
@ -120,12 +139,6 @@ stmt ::= LIST expr(a) EOL.
|
||||
command->argv[0] = a;
|
||||
}
|
||||
|
||||
stmt ::= expr(a) SEMIL EOL.
|
||||
{
|
||||
command->action = List;
|
||||
command->argc = 1;
|
||||
command->argv[0] = a;
|
||||
}
|
||||
|
||||
stmt ::= expr(a) SEMIH EOL.
|
||||
{
|
||||
@ -134,6 +147,23 @@ stmt ::= expr(a) SEMIH EOL.
|
||||
command->argv[0] = a;
|
||||
}
|
||||
|
||||
stmt ::= expr(a) SEMII EOL.
|
||||
{
|
||||
command->action = NullCommand;
|
||||
command->argc = 0;
|
||||
|
||||
MM::Native::MemoryInfo(a);
|
||||
}
|
||||
|
||||
|
||||
|
||||
stmt ::= expr(a) SEMIL EOL.
|
||||
{
|
||||
command->action = List;
|
||||
command->argc = 1;
|
||||
command->argv[0] = a;
|
||||
}
|
||||
|
||||
|
||||
stmt ::= DREGISTER(a) EQ expr(b) EOL.
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user