Adding my oop parser test to svn. Looks promising so far, but still very young

This commit is contained in:
Jonathan Turner 2009-06-23 23:41:57 +00:00
parent 32edcf170d
commit f4efd62e65
2 changed files with 85 additions and 0 deletions

11
chaioop/CMakeLists.txt Normal file
View File

@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 2.6)
project(chaioop)
SET (CMAKE_BUILD_TYPE gdb)
SET (CMAKE_C_FLAGS_GDB " -Wall -ggdb")
SET (CMAKE_CXX_FLAGS_GDB " -Wall -ggdb")
include_directories(../langkit ../dispatchkit)
add_executable(chaioop_test main.cpp)

74
chaioop/main.cpp Normal file
View File

@ -0,0 +1,74 @@
#include <iostream>
#include <vector>
namespace langkit {
class Token {
std::string text;
std::vector<Token> children;
};
class Parser {
std::string::iterator input_pos, input_end;
public:
bool Int() {
bool retval = false;
if ((input_pos != input_end) && (*input_pos >= '0') && (*input_pos <= '9')) {
retval = true;
while ((input_pos != input_end) && (*input_pos >= '0') && (*input_pos <= '9')) {
++input_pos;
}
}
return retval;
}
bool Id() {
bool retval = false;
if ((input_pos != input_end) && (((*input_pos >= 'A') && (*input_pos <= 'Z')) || ((*input_pos >= 'a') && (*input_pos <= 'z')))) {
retval = true;
while ((input_pos != input_end) && (((*input_pos >= 'A') && (*input_pos <= 'Z')) || ((*input_pos >= 'a') && (*input_pos <= 'z')))) {
++input_pos;
}
}
return retval;
}
bool Char(char c) {
bool retval = false;
if ((input_pos != input_end) && (*input_pos == c)) {
++input_pos;
retval = true;
}
return retval;
}
bool Arg_List() {
bool retval = Id() || Int();
while (retval && Char(',')) {
retval = Id() || Int();
}
return retval;
}
bool parse(std::string input) {
input_pos = input.begin();
input_end = input.end();
return Id() && Char('(') && Arg_List() && Char(')');
}
};
};
int main() {
langkit::Parser parser;
std::cout << "Hello, world" << std::endl;
std::cout << parser.parse("e(x,10)") << std::endl;
return 0;
}