小编use*_*872的帖子

Graphviz和ascii输出

是否可以使用Graphviz绘制ASCII图?

像这样的东西:

digraph
{
  this -> is
  this -> a
  a -> test
}
Run Code Online (Sandbox Code Playgroud)

给出以下图片:

图http://img15.imageshack.us/img15/6985/asciia.png

但我想获得ASCII表示:

   this
  /    \
is      a
        |
       test
Run Code Online (Sandbox Code Playgroud)

也许你知道其他工具可以理解点文件格式并可以绘制ascii图表吗?

ascii graphviz

48
推荐指数
5
解决办法
1万
查看次数

如何在c ++中创建map <string,class :: method>并能够搜索并调用它?

我正在尝试用C++创建一个字符串和方法的映射,但我不知道该怎么做.我想做那样的事情(伪代码):

map<string, method> mapping =
{
  "sin", Math::sinFunc,
  "cos", Math::cosFunc,
  ...
};

...

string &function;
handler = mapping.find(function);
int result;

if (handler != NULL)
  result = (int) handler(20);
Run Code Online (Sandbox Code Playgroud)

说实话,我不知道在C++中是否可行.我想有一个字符串,方法的地图,并能够在我的映射中搜索功能.如果给定函数的字符串名称,那么我想用给定的param调用它.

c++ mapping function-pointers

15
推荐指数
2
解决办法
2万
查看次数

如何在Makefile中定义规则,只编译被修改的*.cpp文件(及其依赖项),而不是所有*.cpp文件

让我们说我有文件:

库:

  • one.cpp,one.h
  • two.cpp,two.h
  • three.cpp,three.h

程序:

  • program.cpp

有没有办法,创建Makefile只会编译从上次编译修改的*.cpp?

目前我有类似的东西:

SRCS = one.cpp two.cpp three.cpp
OBJS = $(SRCS:.cpp=.o)

all: $(OBJS) program

.cpp.o:
    g++ -Wall -c $<

program:
    g++ -Wall $(OBJS) program.cpp -o program

clean:
    rm -f $(OBJS) program
Run Code Online (Sandbox Code Playgroud)

我工作正常,但是当我编译我的程序然后更改two.cpp或two.h时我需要首先运行"make clean",因为当我第二次运行"make"时,我得到:

Nothing to be done for 'all'.
Run Code Online (Sandbox Code Playgroud)

我想以这种方式更改我的Makefile,它会识别我的更改并重新编译该文件及其依赖项(如果one.cpp使用来自two.cpp的代码,这些代码已被修改,两个文件都应该重新编译).

所以如果我修改two.cpp,make应该这样做:

g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program
Run Code Online (Sandbox Code Playgroud)

但是如果one.cpp使用了被修改的two.cpp中的代码,那么请执行以下操作:

g++ -Wall -c one.cpp
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

9
推荐指数
1
解决办法
1万
查看次数

bison/flex 中的简单 XML 解析器

我想使用 bison/flex创建简单的 xml 解析器。我不需要验证、注释、参数,只需要<tag>value</tag>,其中可以是数字、字符串或其他<tag>value</tag>

例如:

<div>
  <mul>
    <num>20</num>
    <add>
      <num>1</num>
      <num>5</num>
    </add>
  </mul>
  <id>test</id>
</div>
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我知道可能出现的所有标签的名称。我知道给定标签可以容纳多少个子标签。是否可以创建可以执行以下操作的野牛解析器:

- new Tag("num", 1)           // tag1
- new Tag("num", 5)           // tag2
- new Tag("add", tag1, tag2)  // tag3
- new Tag("num", 20)          // tag4
- new Tag("mul", tag4, tag3)
...
- root = top_tag
Run Code Online (Sandbox Code Playgroud)

标签和子标签数量:

  • 数量:1(仅值)
  • str:1(唯一值)
  • 添加 | 子 | 多| div: 2 (num | str | tag, num | str | tag)

你能帮我语法来创建上面给出的 …

bison lexer xml-parsing flex-lexer

4
推荐指数
1
解决办法
8402
查看次数