小编Cas*_*ton的帖子

Bison:如果令牌不符合规则,如何忽略令牌

我正在编写一个处理评论的程序以及其他一些东西.如果评论在特定的地方,那么我的程序会做一些事情.

Flex在发现评论时传递令牌,然后Bison会查看该令牌是否符合特定规则.如果是,则需要与该规则相关联的操作.

事情就是这样:我收到的输入实际上可能在错误的地方有评论.在这种情况下,我只想忽略注释而不是标记错误.

我的问题:
如果令牌符合规则,我如何使用令牌,但如果不符合则忽略它?我可以将令牌设为"可选"吗?

(注意:我现在能想到的唯一方法就是在每个可能的规则中将注释标记分散到每个可能的位置.必须有一个比这更好的解决方案.也许有一些涉及根的规则?)

token bison flex-lexer

7
推荐指数
2
解决办法
4802
查看次数

数字比较中的歧义(C中)?

我对C语言编程并不太熟悉(我只用语言做了一些小项目),然而,我的教授说了一些关于它的行为,这让我有些困惑.

他说的是这段代码有时根本不打印任何东西(我完全复制了板上的内容,我相信这是C的伪代码,因为"print"不在C中):

    int a = ___________;
    int b = ___________;

    if (a < b)
   print (“<“);
    if (a > b)
   print (“>”);
    if (a==b)
   print(“=”);
Run Code Online (Sandbox Code Playgroud)

基本上,你可以在那些没有满足这些条件的int变量中存储一些东西(_ __ _显然不是真正的代码,它只表示存在某些东西).它不一定需要一些填充那些空白的int数字......它可能是世界上的任何东西(并且可能存在在此代码之前发生的事情).

什么能填补这些空白,不会产生任何结果,为什么?

ps - 它与溢出,未定义的行为,超出范围的错误或类似的东西有关

pps - 我很难相信这位教授是错的.他比任何我接触过的人都更了解编程.我确信在某些情况下这是真的.

c int comparison ambiguity

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

Flex中令牌匹配的优先顺序

如果这个帖子的标题有点令人困惑,我很抱歉.我要问的是Flex(词法分析器)如何处理优先级问题?

例如,假设我有两个具有相似正则表达式的令牌,按以下顺序编写:

"//"[!\/]{1}    return FIRST;
"//"[!\/]{1}\<  return SECOND;
Run Code Online (Sandbox Code Playgroud)

如果输入"//!<",将返回FIRST或SECOND吗?或两者?

第一个字符串将在SECOND字符串之前到达,但似乎返回SECOND将是正确的行为.

lexical-analysis tokenize flex-lexer

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

C++:从星号不是乘法符号的字符串中删除所有星号

所以基本上,我可能会看到一些字符串:"嘿,这是一个字符串*这个字符串很棒97*3 = 27*这个字符串很酷".

但是,这个字符串可能很大.我试图从字符串中删除所有星号,除非星号似乎表示乘法.效率在这里有点重要,我很难找到一个好的算法来从中删除所有非乘法星号.

为了确定星号是否用于乘法,我显然可以检查它是否夹在两个数字之间.

因此,我以为我可以做一些像(伪代码)的事情:

wasNumber = false
Loop through string
   if number 
      set wasNumber = true
   else
      set wasNumber = false
   if asterisk
      if wasNumber
         if the next word is a number
            do nothing
         else
            remove asterisk
      else
         remove asterisk
Run Code Online (Sandbox Code Playgroud)

然而,在一个巨大的字符串上,这是丑陋和低效的.您能想到在C++中实现这一目标的更好方法吗?

另外,我怎么能真正检查一个单词是否是一个数字?它被允许为小数.我知道有一个函数来检查一个字符是否是一个数字......

c++ algorithm performance erase

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

在C中编写自己的shell,如何运行Unix可执行文件?

在我的一门课程中,我们正在编写自己的shell(基本上是从头开始).

我们已经处理过编写词法分析器和解析器来将输入划分为更容易处理的漂亮"命令"结构.同样,我有一个函数read_command(),它将一次读取一个命令,并找出它是什么类型的命令(管道/和/或/简单/等).

我现在正在尝试编写execute_command(struct command cmd)实际接受命令并运行它的函数.我正在努力学习如何开始实际编写这个功能.

让我们说我只是得到一个非常简单cat foo.txt的命令.我的命令结构将它整齐划分,所以我有一个单词数组,其中包含两个单词.

现在我想cat用参数运行可执行文件foo.txt.我意识到我应该使用$PATH变量来尝试查找可执行文件,然后使用此参数运行它.

我正在努力解决几个主要问题:

  1. 我如何实际搜索命令cat?请记住,该程序使用C.我可以使用哪些功能搜索目录?我如何使用PATH执行此操作?
  2. 当我找到命令时cat,如何将其foo.txt作为参数运行?怎么能在C中完成?

c unix shell path

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

如何在C++中实现3 <= X <= 10?

我希望能够写作

if (3 <= X <= 10)
{

}
else if (20 < X < 100) 
{ //...etc
Run Code Online (Sandbox Code Playgroud)

在C++中并正确评估它.我知道你可以用Python做到这一点,我认为这是表达条件的一种非常易读的方式.

我不想写:

if (3 <= X && X <= 10) //etc.
Run Code Online (Sandbox Code Playgroud)

我怎么能用C++做到这一点?可能吗?什么会超载运营商的样子?如果没有,你能解释为什么不可能吗?

c++ operator-overloading

6
推荐指数
3
解决办法
1345
查看次数

如何在PHP中使用mysql_real_escape_string函数

所以在我写的这个程序中,我实际上是使用表单从用户那里获取SQL查询.然后我继续在我的数据库上运行该查询.

我知道不要"信任"用户输入,所以我想对输入进行清理.我正在尝试使用mysql_real_escape_string但是没有成功使它工作.

根据输入,这是我正在尝试的内容: select * from Actor;

//"query" is the input string: 
$clean_string = mysql_real_escape_string($query, $db_connection); 
$rs = mysql_query($clean_string, $db_connection); 
if (!$rs) 
{ 
    echo "Invalid input!"; 
} 
Run Code Online (Sandbox Code Playgroud)

这总是给我的

"输入无效!"

错误.

当我取出clean_string部分并运行mysql_query查询时,

"输入无效"

消息未输出.相反,当我这样做时:

$rs = mysql_query($query, $db_connection); 
if (!$rs) 
{ 
   echo "Invalid input!"; 
} 
Run Code Online (Sandbox Code Playgroud)

它不输出

"输入无效".

但是,我需要使用该mysql_real_escape_string功能.我究竟做错了什么?

更新:

鉴于 select * from Actor;作为输入,我发现以下.

使用echo语句我发现在清理之前,字符串保存了值: select * from Actor; 这是正确的.但是,在清理后它会保留不正确的值select *\r\nfrom Actor;,因此会显示错误消息.为什么 mysql_real_escape_string这样做?

php mysql mysql-real-escape-string

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

OCaml:使用传递给函数的比较运算符

我是OCaml菜鸟.我试图弄清楚如何处理传递给函数的比较运算符.

我的函数只是尝试传入一个比较运算符(=,<,>等)和一个int.

let myFunction comparison x = 
if (x (comparison) 10) then 
   10
else
   x;;
Run Code Online (Sandbox Code Playgroud)

我希望这段代码能够评估(如果传入"="):

if (x = 10) then
   10
else
   x;;
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.特别是,它认为x是一个bool,如此错误消息所示:

This expression has type 'a -> int -> bool
but an expression was expected of type int
Run Code Online (Sandbox Code Playgroud)

我怎么能做我想做的事情?

在一个附带问题上,我怎么能自己解决这个问题所以我不必依赖论坛的外界帮助?有哪些好的资源?

ocaml functional-programming function comparator

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

在P4V上设置我自己的个人存储库

我是源代码控制的新手.我现在在一个团队工作,我们正在使用Perforce(GUI版本P4V).我已经连接到我的团队的存储库,在我知道我有工作之后,我将新文件或我的更改提交到存储库.

这一切都很好,花花公子,但我不想经常向他们的存储库提交.他们使用所有这些文件运行频繁的构建,我发现最好在它们完成并正常工作时提交它,而不是在整个过程中递增.

我的问题:我发现我经常把文件搞砸了,不知道我搞砸了什么.如果我能够恢复到所述文件的早期工作版本,那将是太棒了.但是,通过我使用我的团队的源代码控制的方式,这是不可能的.我想建立我自己的团队源代码控制的本地版本,我可以更频繁地提交事物(但实际上并不是所有人都能看到).我希望它是相同的,但我的提交仅供我个人使用(因此如果它们不完美则不会弄乱它们的构建).

我基本上想要一个克隆的存储库,我可以在将它检查到他们的存储库之前检查我的个人用途.

我怎样才能做到这一点?我不得不承认,我发现使用源代码控制有点令人困惑.

version-control perforce localhost p4v

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

OCaml:迭代列表并跳过错误构造函数的元素

这似乎是一件奇怪的事情,你肯定会建议一个更好的方法来做到这一点.

这是我的目标:

我想滚动浏览传递给函数的列表的每个元素.如果它是构造函数Y,那么我想调用它上面的一些函数.如果它是构造函数Z,我想跳过它.

如果有一种方法可以在if语句中检查这个,那么这似乎是要走的路,因为我不需要编写其他的.但是,我只知道如何在比赛中检查这一点.

例如:

let myFunct list = 
List.iter (fun x -> match x with
           | Y y -> otherFunction y
          ) list;;
Run Code Online (Sandbox Code Playgroud)

现在,这给了我一个关于无法处理Z的警告.所以我可以在那里扔东西像......

let myFunct list = 
List.iter (fun x -> match x with
           | Y y -> otherFunction y
           | Z z -> (*skip*)
          ) list;;
Run Code Online (Sandbox Code Playgroud)

当然,我不能把Z的比赛留空......

我怎样才能完成我想要做的事情?

ocaml loops function pattern-matching

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