[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/devtools/kdevelop4-extra-plugins/ruby/parser
From: Jonathan Schmidt-Dominé <devel () the-user ! org>
Date: 2010-01-02 23:04:21
Message-ID: 1262473461.815801.22176.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1069210 by schmidt-domine:
Worked on porting to kdev-pg-qt.
M +66 -182 CMakeLists.txt
A generated/rubyast.h [License: GENERATED FILE]
A generated/rubydefaultvisitor.cpp [License: GENERATED FILE]
A generated/rubydefaultvisitor.h [License: GENERATED FILE]
A generated/rubyparser.cpp [License: GENERATED FILE]
A generated/rubyparser.h [License: GENERATED FILE]
A generated/rubyvisitor.cpp [License: GENERATED FILE]
A generated/rubyvisitor.h [License: GENERATED FILE]
M +1 -1 parsesession.h
M +10 -1 ruby.g
A ruby.ll
D ruby_lexer.h
D ruby_lexer.ll
A rubylexer.h [License: BSD X11 (BSD like)]
--- trunk/playground/devtools/kdevelop4-extra-plugins/ruby/parser/CMakeLists.txt \
#1069209:1069210 @@ -1,205 +1,89 @@
+find_package(KDE4 REQUIRED)
+find_package(KDevPlatform REQUIRED)
+find_package(KDevelop-PG-Qt QUIET)
+find_package(Flex QUIET)
+find_program(FLEX_EXECUTABLE
+ NAMES flex
+ PATHS /usr/bin
+ DOC "Flex executable")
-include_directories( ${QT_INCLUDES} ${KDE4_INCLUDE_DIR} ${KDEVPLATFORM_INCLUDES} \
${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} )
-
-########### next target ###############
-
-set(kdevrubyparser_STAT_SRCS
- decoder.cpp
- decoder.h
- ruby_io.cpp
- ruby_lexer.h
+set(parser_STAT_SRCS
parsesession.cpp
- parsesession.h
)
-# autogenerate the lexer, the parser and the KDevelop codemodel
-
-if(KDEVPG_FOUND)
- include_directories(${KDEVPG_INCLUDE_DIR})
- # Add commands to generate the parsers.
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ruby_ast.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.cpp"
- MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/ruby.g"
- DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/ruby_lexer.h"
- COMMAND ${KDEVPG_EXECUTABLE}
- ARGS --output=ruby
- --debug-visitor
- "${CMAKE_CURRENT_SOURCE_DIR}/ruby.g"
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+if(KDEVPGQT_FOUND)
+ kdevpgqt_generate(_kdevpgList ruby NAMESPACE ruby DEBUG_VISITOR TOKEN_TEXT
+ "${ruby_SOURCE_DIR}/parser/ruby.g"
+ "${ruby_SOURCE_DIR}/parser/rubylexer.h"
)
-else(KDEVPG_FOUND)
- # If kdev-pg is not available, copy the pre-generated parser files from SVN.
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ruby_ast.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.cpp"
- DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_ast.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_parser.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_parser.cpp"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_visitor.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_visitor.cpp"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_default_visitor.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_default_visitor.cpp"
- COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_ast.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_ast.h"
- COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_parser.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.h"
- COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_parser.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.cpp"
- COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.h"
- COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_visitor.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.cpp"
- COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_default_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.h"
- COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_default_visitor.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.cpp"
- COMMENT "kdev-pg is not installed, using the pre-generated parser files from \
SVN."
- )
-endif(KDEVPG_FOUND)
+ set( parser_SRCS
+ ${_kdevpgList}
+ )
+else(KDEVPGQT_FOUND)
+ message(STATUS "Assuming existence of generated parser files")
+ set(parser_SRCS
+ generated/rubyparser.cpp
+ generated/rubyvisitor.cpp
+ generated/rubydefaultvisitor.cpp )
-set(kdevrubyparser_STAT_SRCS
- ${kdevrubyparser_STAT_SRCS}
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_ast.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.cpp"
-)
-set_source_files_properties(
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_ast.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.cpp"
- GENERATED
-)
+endif(KDEVPGQT_FOUND)
-
if(FLEX_EXECUTABLE)
- # Copy ruby_lexer.ll to the builddir, so that flex doesn't write out
- # absolute paths in the generated file when we pass them as arguments.
- # In short, I don't want stuff like
- # '#line 2 "/home/kde/build/.../ruby_lexer.cpp" in SVN.
+ # Add command to generate the lexer.
add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.ll"
- MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/ruby_lexer.ll"
- COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different
- "${CMAKE_CURRENT_SOURCE_DIR}/ruby_lexer.ll"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.ll"
+ OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/generated/rubylexer.cpp"
+ DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/ruby.ll"
+ "${CMAKE_CURRENT_SOURCE_DIR}/FlexLexer.h"
+ "${CMAKE_CURRENT_SOURCE_DIR}/generated/rubyparser.h"
+ COMMAND ${FLEX_EXECUTABLE}
+ ARGS --outfile=generated/rubylexer.cpp
+ -+
+ ruby.ll
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
+
+ set(parser_srcs ${CMAKE_CURRENT_SOURCE_DIR}/generated/rubylexer.cpp \
${parser_srcs}) +
set_source_files_properties(
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.ll"
+ ${CMAKE_CURRENT_SOURCE_DIR}/generated/rubylexer.cpp
GENERATED
)
- # Add command to generate the lexer.
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.cpp"
- MAIN_DEPENDENCY "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.ll"
- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.h"
- COMMAND ${FLEX_EXECUTABLE}
- ARGS -o"ruby_lexer.cpp"
- "ruby_lexer.ll"
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- )
else(FLEX_EXECUTABLE)
- # If flex is not available, copy the pre-generated lexer from SVN.
- add_custom_command(
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.cpp"
- DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_lexer.cpp"
- COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_lexer.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.cpp"
- COMMENT "flex is not installed, using the pre-generated lexer from SVN."
- )
+ message("--- Assuming existence of the generated lexer file \
generated/rubylexer.cpp") + set(parser_srcs \
${CMAKE_CURRENT_SOURCE_DIR}/generated/rubylexer.cpp ${parser_srcs}) \
endif(FLEX_EXECUTABLE)
-set(kdevrubyparser_STAT_SRCS
- ${kdevrubyparser_STAT_SRCS}
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.cpp"
+kde4_add_library( kdev4rubyparser SHARED ${parser_SRCS} ${parser_STAT_SRCS} )
+target_link_libraries( kdev4rubyparser
+ ${KDE4_KDECORE_LIBS}
+ ${KDEVPLATFORM_LANGUAGE_LIBRARIES}
+ ${KDE4_KTEXTEDITOR_LIBS}
)
-set_source_files_properties(
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.cpp"
- GENERATED
-)
-set(kdevrubyparser_STAT_SRCS
- ${kdevrubyparser_STAT_SRCS}
-)
+kde4_add_executable( ruby-parser main.cpp )
+target_link_libraries(ruby-parser ${QT_QTCORE_LIBRARY} kdev4rubyparser)
+install(TARGETS kdev4rubyparser DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS})
-kde4_add_library(kdevrubyparser SHARED ${kdevrubyparser_STAT_SRCS})
-target_link_libraries(kdevrubyparser ${QT_QTCORE_LIBRARY})
-install(TARGETS kdevrubyparser DESTINATION ${LIB_INSTALL_DIR})
-# generate the command-line parser
-add_executable(ruby-parser main.cpp)
-target_link_libraries(ruby-parser kdevrubyparser)
-install(TARGETS ruby-parser ${INSTALL_TARGETS_DEFAULT_ARGS})
-
-
add_custom_target( copy-generated
-
-# 1. copy actions
- # kdev-pg generated files for the ruby parser
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_ast.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_ast.h"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_parser.h"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.cpp"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_parser.cpp"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_visitor.h"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.cpp"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_visitor.cpp"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.h"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_default_visitor.h"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.cpp"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_default_visitor.cpp"
-
- # flex generated file
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.cpp"
- "${CMAKE_CURRENT_SOURCE_DIR}/generated/ruby_lexer.cpp"
-
-# 2. depend on the files being copied
- # kdev-pg generated files for the ruby parser
- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/ruby_ast.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_parser.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_visitor.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.h"
- "${CMAKE_CURRENT_BINARY_DIR}/ruby_default_visitor.cpp"
- # flex generated file
- DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/ruby_lexer.cpp"
-)
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different \
"${ruby_BINARY_DIR}/parser/rubyparser.cpp" \
"${ruby_SOURCE_DIR}/parser/generated/rubyparser.cpp" + COMMAND ${CMAKE_COMMAND} -E \
copy_if_different "${ruby_BINARY_DIR}/parser/rubyparser.h" \
"${ruby_SOURCE_DIR}/parser/generated/rubyparser.h" + COMMAND ${CMAKE_COMMAND} -E \
copy_if_different "${ruby_BINARY_DIR}/parser/rubyast.h" \
"${ruby_SOURCE_DIR}/parser/generated/rubyast.h" + COMMAND ${CMAKE_COMMAND} -E \
copy_if_different "${ruby_BINARY_DIR}/parser/rubyvisitor.h" \
"${ruby_SOURCE_DIR}/parser/generated/rubyvisitor.h" + COMMAND ${CMAKE_COMMAND} -E \
copy_if_different "${ruby_BINARY_DIR}/parser/rubyvisitor.cpp" \
"${ruby_SOURCE_DIR}/parser/generated/rubyvisitor.cpp" + COMMAND ${CMAKE_COMMAND} \
-E copy_if_different "${ruby_BINARY_DIR}/parser/rubydefaultvisitor.h" \
"${ruby_SOURCE_DIR}/parser/generated/rubydefaultvisitor.h" + COMMAND \
${CMAKE_COMMAND} -E copy_if_different \
"${ruby_BINARY_DIR}/parser/rubydefaultvisitor.cpp" \
"${ruby_SOURCE_DIR}/parser/generated/rubydefaultvisitor.cpp" + COMMAND \
${CMAKE_COMMAND} -E copy_if_different "${ruby_BINARY_DIR}/parser/rubydebugvisitor.h" \
"${ruby_SOURCE_DIR}/parser/generated/rubydebugvisitor.h" + COMMAND \
${CMAKE_COMMAND} -E copy_if_different "${ruby_BINARY_DIR}/parser/rubytokentext.h" \
"${ruby_SOURCE_DIR}/parser/generated/rubytokentext.h" + DEPENDS \
"${ruby_BINARY_DIR}/parser/rubyparser.cpp" + DEPENDS \
"${ruby_BINARY_DIR}/parser/rubyparser.h" + DEPENDS \
"${ruby_BINARY_DIR}/parser/rubyvisitor.cpp" + DEPENDS \
"${ruby_BINARY_DIR}/parser/rubyvisitor.h" + DEPENDS \
"${ruby_BINARY_DIR}/parser/rubydefaultvisitor.cpp" + DEPENDS \
"${ruby_BINARY_DIR}/parser/rubydefaultvisitor.h" + DEPENDS \
"${ruby_BINARY_DIR}/parser/rubyast.h" + DEPENDS \
"${ruby_BINARY_DIR}/parser/rubydebugvisitor.h" + DEPENDS \
"${ruby_BINARY_DIR}/parser/rubytokentext.h" + )
--- trunk/playground/devtools/kdevelop4-extra-plugins/ruby/parser/parsesession.h \
#1069209:1069210 @@ -24,7 +24,7 @@
#include <QtCore/QByteArray>
-#include "ruby_parser.h"
+#include "generated/rubyparser.h"
#include "rubyparserexport.h"
namespace ruby
--- trunk/playground/devtools/kdevelop4-extra-plugins/ruby/parser/ruby.g \
#1069209:1069210 @@ -63,6 +63,10 @@
{
class Lexer;
}
+
+#include <QtCore/QString>
+#include <kdebug.h>
+
:]
@@ -90,6 +94,11 @@
char* tokenText(std::size_t begin);
:]
+%parserclass (protected declaration)
+[:
+ void expectedSymbol(ruby::AstNode::AstNodeKind kind, const QString& name) { \
kWarning() << "In AstNode " << kind << ": Expected symbol " << name; } + void \
expectedToken(int kind, enum TokenType token, const QString& name) { kWarning() << \
"In AstNode " << kind << ": Expected token " << name << " (" << token << ")";} +:]
%parserclass (private declaration)
[:
@@ -1055,7 +1064,7 @@
[:
-#include "ruby_lexer.h"
+#include "rubylexer.h"
namespace ruby {
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic