小编lor*_*hog的帖子

寻找"标记器","解析器"和"词法分析器"的清晰定义以及它们如何相互关联和使用?

我正在寻找"tokenizer","parser"和"lexer"是什么以及它们如何相互关联的明确定义(例如,解析器是否使用了tokenizer,反之亦然)?我需要创建一个程序,将通过c/h源文件来提取数据声明和定义.

我一直在寻找示例,可以找到一些信息,但我真的很难掌握语法规则,解析树和抽象语法树等基础概念以及它们如何相互关联.最终这些概念需要存储在实际程序中,但1)它们看起来像什么,2)是否有共同的实现.

我一直在关注这些主题和程序,如Lex和Yacc维基百科,但从未经历过编译器类(EE专业),我发现很难完全理解正在发生的事情.

parsing tokenize lexer

134
推荐指数
3
解决办法
3万
查看次数

将资源(图像,声音位等)嵌入到Java项目中然后使用这些资源

我已经搜索了一种在java项目中嵌入资源的方法(使用Eclipse v3.6.0),然后在控件中使用该嵌入式资源(例如JLabel).我见过从文件系统引用资源的方法.项目开发完成后,我想将该应用程序发布为可执行文件.应该注意,这些可执行文件将被部署/启动到Windows,*NIX和Linux平台.

我知道这可以在Visual Studio世界中完成,但是我很不熟悉如何在Java/Eclipse IDE中执行此操作.作为一个附带问题,我如何让Eclipse将项目创建为可执行文件以便可以启动它?

任何帮助是极大的赞赏.

标记

更新1:

根据BalusC的回复,我想分享我解决问题的代码.我的类在" Viking.Test" 的包下,然后我将图像文件放在包" Viking.Test.Resources"下.这都是在Eclipse中完成的,用于将图像导入到项目中.

  1. 我通过右键单击导入源的项目 - >导入 - >常规/文件系统导入图像.
  2. 选择包含要导入的图像的文件夹
  3. Project/src/Viking/Test/Resources'Into folder'参数选择" "
  4. 没有改变任何选项并点击"完成"

在源文件中我添加了以下代码以将图像插入到JLabel(LblLogo)中

try
{
  ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  InputStream input = classLoader.getResourceAsStream(
    "Viking/Test/Resources/MyImage.jpg");
  Image logo = ImageIO.read(input);
  LblLogo = new JLabel( new ImageIcon( logo ) );
  LblLogo.setBounds(20, 11, 210, 93);
  getContentPane().add(LblLogo);
}
catch ( IOException e ) {  }
Run Code Online (Sandbox Code Playgroud)

java eclipse resources imagesource

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

如何在 VS Code 设置中使用变量?

在 VS Code 设置中,有一些字段我配置相同。这些就是字体和字体大小。一般来说,我将它们全部设置为相同。我正在尝试在 settings.json 中设置一个可以应用于所有变量的变量。阅读完VS Code 的变量参考后,我得出以下结论:

{
  "common": [
    {
      "font": "Anonymous Pro",
      "fontSize": 10,
    }
  ],

  // Set up the Editor
  "editor.fontFamily":              "${common:font}",
  "editor.fontSize":                "${common:fontSize}",
  "terminal.integrated.fontFamily": "${common:font}",
  "terminal.integrated.fontSize":   "${common:fontSize}",
  "debug.console.fontFamily":       "${common:font}",
  "debug.console.fontSize":         "${common:fontSize}",
}
Run Code Online (Sandbox Code Playgroud)

不过,这似乎不起作用。有没有办法在 settings.json 中设置变量而无需设置环境变量?

visual-studio-code

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

预处理器失败的原因是 - '#'后面没有宏参数

我试图简化数组的声明,但遇到了我正在使用的预处理器的问题.我的初始代码如下所示:

#define REQ_ENTRY(parm_1, parm_2)    \
#if defined(parm_1)                  \
    { parm_1, parm_2 },              \
#endif

typedef struct {
    int parm1,
        parm2;
} MyTypedef_t;

static const MyTypedef_t MyList[] =
{
    REQ_ENTRY( ID_1, 1 )
    REQ_ENTRY( ID_2, 2 )
    REQ_ENTRY( ID_3, 3 )
    REQ_ENTRY( ID_4, 4 )
    REQ_ENTRY( ID_5, 5 )
};
Run Code Online (Sandbox Code Playgroud)

当然,构建失败,错误消息为"错误:'#'后面没有宏参数".这里解释了这个原因(为什么编译器抱怨这个宏声明)

基本上,我试图避免将数组声明为如下,这确实有效:

static const MyTypedef_t MyList[] =
{
    #if defined (ID_1)
    { ID_1, 1 },
    #endif

    #if defined (ID_2)
    { ID_2, 2 },
    #endif

    #if defined (ID_3)
    { ID_3, …
Run Code Online (Sandbox Code Playgroud)

c macros

10
推荐指数
2
解决办法
8880
查看次数

用于嵌入式设备的USB - 设计设备驱动程序/协议栈

我的任务是为嵌入式设备编写设备驱动程序,该驱动程序将通过SPI接口与微控制器通信.最终,USB接口将用于从外部下载更新的代码并在验证阶段使用.

我的问题是,有没有人知道一个好的参考设计或文档或在线教程,它涵盖了嵌入式系统中USB协议栈/设备驱动程序的实现/设计?我刚刚开始阅读650页的USB v2.0规范,目前有点令人生畏.

就像一个FYI,我使用的微控制器是飞思卡尔9S12.

标记

根据goldenmean的(-AD)评论,我想添加以下信息:

1)嵌入式设备使用自定义执行程序,不使用COTS或RTOS.

2)设备将使用中断来指示数据已准备好从设备中检索.

3)我已经阅读了一些关于Linux的文档,但由于我对Linux一点都不熟悉,所以目前它并不是很有用(尽管我希望它会很快).

4)设计方法,至少现在,它为USB设备编写设备驱动程序,然后USB协议层(I/O)将驻留在设备驱动程序之上以解释数据.我认为这将是最好的方法,虽然我可能是错的.

编辑 - 一年后

我只想分享一些项目,然后再从我的脑海中消失,以防我再也无法在USB设备上工作.在开发代码并将其启动并运行第一个时,我遇到了一些障碍.

我遇到的第一个问题是当USB设备连接到主机(在我的情况下为Windows)时,主机发出重置请求.USB设备将复位并清除中断使能标志.我没有阅读足够的文献知道这种情况正在发生,因此我从未收到过设置请求中断.我花了很长时间来弄明白这一点.

我遇到的第二个问题是没有正确处理Set_Configuration的设置请求.我正在处理它,但我没有正确处理请求,因为当设置请求进入时,USB设备没有发送ACK.我最终通过使用硬件USB协议分析仪找到了这个.

我遇到了其他问题,但这些是我花了很长时间才弄明白的两个最大的问题.我不得不担心的另一个问题是大端和小端,飞思卡尔9S12与USB数据格式(英特尔).

我最终构建了USB设备驱动程序,类似于我过去所做的UART设备驱动程序.我已将代码发布到以下URL.

http://lordhog.wordpress.com/2010/12/13/usb-drive

我倾向于使用很多结构,所以人们可能不喜欢它们,因为它们不像使用#defines那样(例如,MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20),但我喜欢它们,因为它使代码对我来说更具可读性.如果有人对此有任何疑问,请随时发送电子邮件,我可以尝试给它一些见解.只要您知道要关注哪些方面,"USB Complete:开发人员指南"这本书就很有帮助.这是一个简单的应用程序,只使用低速USB.

embedded usb device-driver

8
推荐指数
2
解决办法
8074
查看次数

使用 launch.json 中的“输入”选择在 Visual Studio Code 中的 preLaunchTask 中使用

In a project there are a number of helper utilities. In the launch and tasks json files they are configured to allow the user to select the particular utility to build or debug. What I would like to do is have the selection from launch to be passed to the tasks and the task use that selection. The launch.json configuration file looks like:

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug: <Utility App>",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/apps/${input:utility}/${input:utility}", …
Run Code Online (Sandbox Code Playgroud)

visual-studio-code vscode-debugger

6
推荐指数
1
解决办法
1814
查看次数

如何防止为远程 ssh 连接启动新的 VS Code 窗口

当使用 VS Code 远程 SSH 连接到远程机器时,此操作始终会打开一个新的 VS Code 窗口。有没有办法改变这种行为以使用现有的打开窗口?谢谢

visual-studio-code vscode-remote

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

非零十六进制值的正则表达式

我正在寻找一个正则表达式来确定 32 位十六进制值中的任何值何时不为零。

数据模式看起来像0x00000000,我想知道任何数字何时不为零。例如, if0x000010000x10000000or0xB000000将被正则表达式捕获,但不是0x00000000模式。现在我执行步行模式匹配

0x[^0]
0x0[^0]
0x00[^0]
...
0x0000000[^0]
Run Code Online (Sandbox Code Playgroud)

这会起作用,但如果可能的话,我更愿意使用一种模式。谢谢。

标记

编辑:我没有提到程序中不需要正则表达式,否则我会使用不同的方法,但我使用正则表达式使用 UltraEdit 在日志文件中搜索值。我本可以开发一个程序或其他一些搜索方法,但我只是懒惰,只是诚实。Ben S 解决方案适用于 UltraEdit 和 Rad Software 正则表达式设计器。ramion 解决方案在这两种工具中都不起作用,不知道为什么。

regex hex

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

如何使用devtoolset-8-gcc安装gcc8

我使用的是安装了gcc 4.8.5 20150623的CentOS Linux 7.3.1611版.我正在寻找一种方法来安装更新版本的gcc,特别是8.1.我找到了以下网站,介绍如何安装gcc v7 link 1,其中介绍了如何安装gcc v7(使用devtoolset-7-gcc*).我确实遵循了指南,并能够安装gcc v7.虽然,如果我遵循相同的程序,但使用"devtoolset-8-gcc*"而不是返回消息指出"没有包devtoolset-8-gcc*可用.".

执行搜索并找到一个名为"Information for build devtoolset-8-gcc-8.1.1-4.el6" 链接2的页面,但不知道如何安装它.我相信我需要下载rpm源代码,编译/构建源代码,然后最终安装它.

基本上,我正在寻找一种简单的方法来安装gcc v8,就像使用链接1中描述的方法一样.

提前致谢.

linux gcc centos7

1
推荐指数
3
解决办法
4826
查看次数

获取结构中匿名结构的大小

我需要创建一个具有特定大小的结构来优化内存访问。在正常情况下,“保留”字段用于将结构填充为特定大小。我正在寻找一种定义匿名结构的方法,以便我可以使用其大小来填充保留字段,这样我就不必不断更新保留填充大小。

实现这一点的一种方法是

typedef struct _xferStructure_t
{
    struct anonymous
    {
        uint32_t field1;
        uint32_t field2;
        uint32_t field3;
    } _;
  
  uint8_t reserved[1024 - sizeof(struct anonymous)];
    
} xferStructure_t;



int main()
{
    xferStructure_t xferData = {  ._.field1 = 1, ._.field2 = 2, ._.field3 = 3 };
    
    printf("Field 1 = %d", xferData._.field1);
    printf("Reserved = %ld", sizeof(xferData.reserved));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想访问匿名结构中的三个字段而不声明它。所以,像

typedef struct _xferStructure_t
{
    struct anonymous
    {
        uint32_t field1;
        uint32_t field2;
        uint32_t field3;
    };
  
  uint8_t reserved[1024 - sizeof(struct anonymous)];
    
} xferStructure_t;



int main()
{
    xferStructure_t xferData …
Run Code Online (Sandbox Code Playgroud)

c

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