【问题标题】:How to create a program to read xlib code如何创建一个程序来读取 xlib 代码
【发布时间】:2015-09-10 12:39:02
【问题描述】:

在编码方面有点生疏,但我想我会问这个问题。我正在尝试创建一个程序,该程序可以采用命令行文件名并扫描所述文件,以便在 xlib 中找到三角形的坐标。我知道 xlib 从朋友给我的文件中获取格式为 T(28,100) (23,35) (99,54) 的三角形,但是在查看并尝试了 scanf 中的不同表达式后,我似乎无法抓住以我可以用于算法的方式进行坐标:

 int main(int argc,char *argv[])
{
    // First need to scan the file.
    char *pFilename = argv[1];
    FILE * pFile;
    pFile = fopen(pFilename,"r");
    // char Trig = scanf( ,);
}

【问题讨论】:

  • 你自己尝试过什么?你有示例数据吗?另外:您可能想在对文件进行操作时使用fscanf,而不是scanf(读取自stdin
  • 我已经尝试过类似 scanf("T%s9") 的东西作为示例:示例数据如下:T(20,100( (55,34) (40, 60) 我只是专门寻找三角形。
  • 这已经偏离了您在问题中提到的格式。
  • 嗯,不,我只是将 num1-6 放在那里作为示例。我真的是按照我在评论中的方式表达的。让我编辑一下。
  • 是什么让您相信Xlib 正在使用T(28,100) (23,35) (99,54) 语法解析文件? AFAIK,这完全是错误的!或者请编辑您的问题以提供更多参考。

标签: c++ xlib


【解决方案1】:

您需要完全定义程序的输入语法(例如,以EBNF 形式)并使用标准的parsing 技术,可能在内存中构建某种AST(稍后您将根据需要显示) .您可能想逐行读取输入,例如std::getline 因为你可能需要一些预读。

您需要使用标准的lexingparsing 技术(另请参阅this)并可能在内存中构建某种AST;也许使用像flex(用于词法分析)和bisonANTLR(用于解析)这样的代码生成器应该是值得的。否则考虑一些手写的recursive descent parser

Xlib 是一个极低级别但复杂的库(您需要遵循明确的复杂约定,如EWMH)。在Linux上的C++中,最好使用Qt或者libsdl,或者SFML等......

请注意,scanf 是 C 函数,而不是 C++ 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2016-03-26
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多