小编Vin*_*arg的帖子

为简单的伪代码语言创建解析器?

我想在Java中创建一个简单的解析器,用于像伪语言(保持僵化)的"伪代码".一个示例伪代码是 -

//This is a comment
$x1 = readint
$x2 = readint

$dx = $x2 - $x1
#f = $dx / 2

if ($dx > 0)
{
  loop while(#f > 1)
  {
     print(#f)
     #f = #f / 2
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,上面的代码是严格的,在一行上不能有多个语句,整数以$开头,浮点数以#开头等.

要解析这样的代码,首先我可以使用StringTokenizer,然后使用正则表达式来匹配整数变量,浮点变量或关键字.

这种做法好吗?对于循环语句,我如何存储表达式,以便我不必在每次迭代中进行标记化?

我可以考虑将表达式(如#f = #f/2)转换为抛光表示法,然后将其存储在堆栈中.在每次迭代中,在弹出操作数时,我可以替换每个变量的值.但这足够有效吗?

提前感谢,任何建议.

java parsing

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

写入模块范围的变量

可以说我有这3个(小)python文件 -

a.py

myvar = 'a'
Run Code Online (Sandbox Code Playgroud)

b.py

import a
import c

myvar = 'b'
c.pr()
Run Code Online (Sandbox Code Playgroud)

c.py

from a import myvar

def pr():
    print myvar
Run Code Online (Sandbox Code Playgroud)

现在,如果我执行,b.py我得到输出

a
Run Code Online (Sandbox Code Playgroud)

但我真的希望输出为

b
Run Code Online (Sandbox Code Playgroud)

所以请告诉我如何重组/修改程序,以便为模块范围 myvar分配不同的值.

python

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

提高应用程序性能的简单方法

基本上我有兴趣知道你走了多远,以确保您的用户获得最佳的应用程序.

  1. 当两者都可能时,哪一个更喜欢动态/静态内存分配.
  2. 刮痧int和使用shortint8_t.它会真的有用吗?或者它会更令人头痛?
  3. 动态分配"按比例"大量内存(由于缺少实际内存所需的信息).然后将其重新分配给较小的内存(紧凑)并删除前者.例如.我分配了1000个单位的内存.然后在计算之后,我确定只需要400个单位.所以我分配新的400个单位,复制400个项目,然后删除1000个单位.在这个过程中,我最终会分配更多的内存,即在某个时候有1400个单位.那么我真的应该努力分配新的400个单位并让600个单位浪费吗?[主要问题]
  4. 有效使用union哪些有助于降低内存使用量?

我相信还有更重要的一点缺失.任何其他已知或本土的方式来增加记忆和时间表现是受欢迎的.

c++ performance

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

几何函数索引

我正在制作一种基于命令的应用程序来绘制几何图形.因此,如果用户输入的内容类似于RECT 100, 50, 200, 120我在绘图面板上的指定位置绘制矩形.

所以对于这个我需要映射RECTg.drawRect(100, 50, 200, 120);和所有这些类似的功能来绘制几何图形.

我将使用哈希映射进行映射,但我不知道如何在java中构建函数数组.在C++中,我已经做到了这一点.

键可以是'RECT',值可以是索引的偏移量.

请告诉我如何索引这些功能.或者还有更好的方法来解决主要问题吗?

java indexing graphics swing hashmap

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

Makefile 只编译第一个文件一个makefile指令

f1: f1.cpp f.h  
    g++ -c -Wall -g f1.cpp

f2: f2.cpp f.h  
    g++ -c -Wall -g f.cpp
Run Code Online (Sandbox Code Playgroud)

这个makefile不会编译f2.cppf2.o 它只编译第一个文件,知道为什么吗?

c++ makefile

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

由于类型不匹配,无法将一个指针指向另一个指针,或者编译器说

这是头文件代码stack.h:

#include <iostream>
using namespace std;
//template <class T> struct stackNode;
//template <class T>
struct stackNode {
int item;
stackNode *Next;
stackNode *Prev;
//stackNode *Temp;

};
class stackClass {
public:
stackClass();
stackClass(const stackClass &right);
~stackClass();
stackClass &operator=(const stackClass &right);
int counter;
int StackIsEmpty(void);
//stackNode *origptr;
void push( int item, bool &success);
int pop(void);

int GetStackTop(void);

protected:
stackNode *GetStackTopPtr(void);


private:

stackNode *Top;
stackNode *Current;
//stackNode *origptr;
//stackNode<T> *Next; 
};
Run Code Online (Sandbox Code Playgroud)

这是实现文件stack.cpp:

#include "stack.h"

//constructor 
stackClass::stackClass(){
        Top = NULL;
        int counter = 0; …
Run Code Online (Sandbox Code Playgroud)

c++ stack pointers class assign

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

如何比较5位精度的双打?

我想比较两个落在[0.0,1.0]的双打.

我的功能(取自/sf/answers/1213901/) -

inline bool isEqual(double x, double y)
{
    const double epsilon = 0.000001;
    return fabs(x - y) < epsilon;
}
Run Code Online (Sandbox Code Playgroud)

用法-

cerr << isEqual(1.000001, 1.000002) << endl;
cerr << isEqual(1.000010, 1.000020) << endl;
Run Code Online (Sandbox Code Playgroud)

输出是 -

0
0
Run Code Online (Sandbox Code Playgroud)

而我期待第一个true,第二个false.请告诉我哪里出错了以及如何解决?

c++ precision double

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