我正在寻找"tokenizer","parser"和"lexer"是什么以及它们如何相互关联的明确定义(例如,解析器是否使用了tokenizer,反之亦然)?我需要创建一个程序,将通过c/h源文件来提取数据声明和定义.
我一直在寻找示例,可以找到一些信息,但我真的很难掌握语法规则,解析树和抽象语法树等基础概念以及它们如何相互关联.最终这些概念需要存储在实际程序中,但1)它们看起来像什么,2)是否有共同的实现.
我一直在关注这些主题和程序,如Lex和Yacc维基百科,但从未经历过编译器类(EE专业),我发现很难完全理解正在发生的事情.
我已经搜索了一种在java项目中嵌入资源的方法(使用Eclipse v3.6.0),然后在控件中使用该嵌入式资源(例如JLabel
).我见过从文件系统引用资源的方法.项目开发完成后,我想将该应用程序发布为可执行文件.应该注意,这些可执行文件将被部署/启动到Windows,*NIX和Linux平台.
我知道这可以在Visual Studio世界中完成,但是我很不熟悉如何在Java/Eclipse IDE中执行此操作.作为一个附带问题,我如何让Eclipse将项目创建为可执行文件以便可以启动它?
任何帮助是极大的赞赏.
标记
更新1:
根据BalusC的回复,我想分享我解决问题的代码.我的类在" Viking.Test
" 的包下,然后我将图像文件放在包" Viking.Test.Resources
"下.这都是在Eclipse中完成的,用于将图像导入到项目中.
Project/src/Viking/Test/Resources
为'Into folder'参数选择" "在源文件中我添加了以下代码以将图像插入到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) 在 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 中设置变量而无需设置环境变量?
我试图简化数组的声明,但遇到了我正在使用的预处理器的问题.我的初始代码如下所示:
#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) 我的任务是为嵌入式设备编写设备驱动程序,该驱动程序将通过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.
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) 当使用 VS Code 远程 SSH 连接到远程机器时,此操作始终会打开一个新的 VS Code 窗口。有没有办法改变这种行为以使用现有的打开窗口?谢谢
我正在寻找一个正则表达式来确定 32 位十六进制值中的任何值何时不为零。
数据模式看起来像0x00000000
,我想知道任何数字何时不为零。例如, if0x00001000
或0x10000000
or0xB000000
将被正则表达式捕获,但不是0x00000000
模式。现在我执行步行模式匹配
0x[^0]
0x0[^0]
0x00[^0]
...
0x0000000[^0]
Run Code Online (Sandbox Code Playgroud)
这会起作用,但如果可能的话,我更愿意使用一种模式。谢谢。
标记
编辑:我没有提到程序中不需要正则表达式,否则我会使用不同的方法,但我使用正则表达式使用 UltraEdit 在日志文件中搜索值。我本可以开发一个程序或其他一些搜索方法,但我只是懒惰,只是诚实。Ben S 解决方案适用于 UltraEdit 和 Rad Software 正则表达式设计器。ramion 解决方案在这两种工具中都不起作用,不知道为什么。
我使用的是安装了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中描述的方法一样.
提前致谢.
我需要创建一个具有特定大小的结构来优化内存访问。在正常情况下,“保留”字段用于将结构填充为特定大小。我正在寻找一种定义匿名结构的方法,以便我可以使用其大小来填充保留字段,这样我就不必不断更新保留填充大小。
实现这一点的一种方法是
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)