parser updates

This commit is contained in:
Kelvin Sherlock 2013-07-05 13:56:24 -04:00
parent b85cf313c0
commit 62a374ee16
4 changed files with 60 additions and 16 deletions

View File

@ -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
)

View File

@ -1,12 +1,15 @@
#ifndef __debugger_commands__
#define __debugger_commands__
enum {
NullCommand,
Help,
Print,
PrintRegisters,
Dump,
List,
Info,
Break,
TBreak,
Continue,

View File

@ -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.

View File

@ -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.
{