小编S.A*_*hid的帖子

递归下降解析器

"现代编译器设计"一书是关于编译器的好书.在它的源代码中,令我烦恼的是AST或抽象语法树.假设我们想写一个括号表达式解析器解析是这样的:((2+3)*4) * 2!这本书说我们有一个像:

        ((2+3)*4) * 2
          /   |     \
       (2+3)  *4    * 2
        /     | \
     (2+3)    *  4
     / | \
    2  + 3
Run Code Online (Sandbox Code Playgroud)

所以我应该在内存中保存一棵树还是只使用递归调用; 注意:如果我不将其存储在内存中,如何将其转换为机器代码?

解析码:

int parse(Expression &expr)
{
  if(token.class=='D')
  { 
    expr.type='D';
    expr.value=token.val-'0';
    get_next_token();
    return 1;
  }
  if(token.class=='(') 
  {
    expr.type='P';
    get_next_token();
    parse(&expr->left);
    parse_operator(&expr->op);
    parse(&expr->right);
    if(token.class!=')')
      Error("missing )");
    get_next_token();
    return 1;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

语法是:

expr -> expr | (expr op expr)
digit   -> 0|1|2....|9
op  -> +|*
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction parsing

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

用户输入,我们该怎么做?

我们如何从prolog中获取用户的内容:例如:

animal(dog).
animal(cat).
write('please type animal name:'),nl.
/* How to read from user and store it to X 
and then check that user has typed animal name ?*/
?-animal(X).
Run Code Online (Sandbox Code Playgroud)

prolog

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

位图跨步和4字节关系?

这句话的意思是:

Stride属性,以字节为单位保存一行的宽度.然而,行的大小可能不是像素大小的精确倍数,因为为了提高效率,系统确保将数据打包成以四字节边界开始并填充为四个字节的倍数的行.

c# image bitmap image-processing

9
推荐指数
3
解决办法
4506
查看次数

OpenGL着色语言TRANSFORM_TEX

在unity3d中,有一段顶点着色器的代码:

v2f vert(appdata_full v) {
    v2f o;

    o.pos = mul (UNITY_MATRIX_MVP, v.vertex);   
    o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
    o.vertexColor = v.color * _TintColor;

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

在下面的行中:

o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
Run Code Online (Sandbox Code Playgroud)

TRANSFORM_TEX函数的主要任务是什么,它在CgFx中是等价的!

shader unity-game-engine

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

CreateGraphics()方法和Paint事件参数

我已经阅读过CreateGraphics()将为我们做这些步骤的地方:

  1. 调用BeginPaint
  2. 画画
  3. 调用EndPaint

我的代码是这样的:

private void Form1_Load(object sender, EventArgs e)
{
    grFrom = this.CreateGraphics();
    grFrom.FillRectangle(Brushes.Red, this.ClientRectangle);
}
Run Code Online (Sandbox Code Playgroud)

没有红色矩形...但是,当我在下面复制行时Form1_paint,每个东西都正常运行.

grFrom.FillRectangle(Brushes.Red, this.ClientRectangle);
Run Code Online (Sandbox Code Playgroud)

所以,问题就在这里:什么是e.GraphicsForm1_paint

CreateGraphics还是e.Graphics

c# gdi+

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

int和char数组有什么区别?

下面的int和char数组有什么区别:

int main()
{
    int numbers[] = {2,1,3};
    char letter[] = {'a','b','\0'};
    cout<< numbers<<endl;
    cout<< letter<<endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0x22ff12 // an address
ab
Run Code Online (Sandbox Code Playgroud)

为什么不显示213?我知道数组的名称将指向其第一个元素的地址,但为什么char数组显示不同的行为?

c++

5
推荐指数
3
解决办法
2819
查看次数

什么是通道和多个着色器通道及其私有变量

我知道多通道渲染是渲染场景的各个部分并将它们组合到应用混合因子的图像中,这已经在渲染图形中完成了。但是什么是着色器中的一次通道和什么是多通道。例如,下面的着色器用于使用第一盏灯的漫射照明:

Shader "Cg per-vertex diffuse lighting" {
   Properties {
      _Color ("Diffuse Material Color", Color) = (1,1,1,1) 
   }
   SubShader {
      Pass {    
         Tags { "LightMode" = "ForwardBase" } 
            // make sure that all uniforms are correctly set

         CGPROGRAM

         #pragma vertex vert  
         #pragma fragment frag 

         #include "UnityCG.cginc"

         uniform float4 _LightColor0; 
            // color of light source (from "Lighting.cginc")

         uniform float4 _Color; // define shader property for shaders

         struct vertexInput {
            float4 vertex : POSITION;
            float3 normal : NORMAL;
         };
         struct vertexOutput {
            float4 …
Run Code Online (Sandbox Code Playgroud)

opengl shader cg glsl unity-game-engine

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

在 Java Android 项目中使用 C# Dll

我想在由 Java(不是 Xamarin 或 Mono)开发的 Android 项目中使用 C# DLL。我解决此问题的第一个策略包含以下步骤:

  1. 通过 DllExport 从 C# 代码创建 C++ 可用的 DLL。(为 C# 代码创建 C++ 包装器)
  2. 从使用上一步生成的 DLL 的 C++ 项目创建一个 .so 库。

所以我使用了DLLExport(https://github.com/3F/DllExport

C# 方面:

namespace NumbersLibCS
{
    public class Math
    {
        public Math()
        {

        }


        [DllExport]
        public static int GetRandomEvenNumber()
        {
            var rnd = new Random();
            int n = rnd.Next(1, 1000 ) * 2;
            return n;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但在 C++ 中使用生成的 DLL 我认为我应该只使用 Android 操作系统上不可用的 windows.h 库:

#include <windows.h>

typedef …
Run Code Online (Sandbox Code Playgroud)

c# c++ android dllexport .net-core

5
推荐指数
0
解决办法
826
查看次数

C#for win32或c ++

我知道C++的Windows编程比C#更难.因为我们应该创建WNDCLASS并初始化它并使用API​​ Funcs和...

但是我的问题在这里,对于Windows编程,C#比C++好吗?

如果是,为什么用C++创建大型程序.

c# c++ winapi visual-c++

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

LINQ超过数据集错误

我正在尝试使用以下代码从数据集中检索数据:

    var all_pepole = from rows_of_bank in ds1.Tables[0].Rows select rows_of_bank;
    foreach (System.Data.DataRow row in all_pepole)
    {
        Console.WriteLine("{0} {1} is {2} years old.", row[0].ToString(), row[1].ToString(), row[2].ToString());
    }
Run Code Online (Sandbox Code Playgroud)

但是这个代码会给我带来错误,这是错误的:

无法找到源类型"System.Data.DataRowCollection"的查询模式的实现.找不到"选择".考虑明确指定范围变量'rows_of_bank'的类型

c# linq linq-to-sql

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