小编Sar*_*all的帖子

Python PLY解析器

我试图寻找这个问题的答案,但似乎找不到一个.我正在尝试使用PLY编写一个Python解析器,用于编写语言.我的BNF的简化版本如下所示:

statement-list -> statement ',' statement-list |
                 'print' expr

statement -> ident 'was' 'a' type |
             ident 'became' expr

type -> 'number' | 'letter'

expr -> factor |
       expr '+' factor |
       expr '-' factor

factor -> number | letter | ident
Run Code Online (Sandbox Code Playgroud)

其中数字和字母类似于int和char.

Yacc文档(http://www.dabeaz.com/ply/ply.html#ply_nn23)仅显示简单算术表达式的语法,其中明确了p [0]应该是什么.

def p_expression_plus(p):
   'expression : expression PLUS term'
    p[0] = p[1] + p[3]
Run Code Online (Sandbox Code Playgroud)

我的问题是我如何为我的BNF中的陈述清单做些什么?我有:

def p_statement_list_comma(p):
    'statement-list : statement COMMA statement-list'
Run Code Online (Sandbox Code Playgroud)

但我真的不确定下一步该放什么.任何帮助将非常感谢!

python parsing yacc ply

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

将linux中汇编代码的运行结果重定向到文本文件

我正在尝试编写一个Python脚本来测试我在汇编中针对预期输出编写的各种代码的输出.但是我很难将输出重定向到文件中.我写了以下内容:

extern printf
LINUX   equ     80H     ; interupt number for entering Linux kernel
EXIT    equ     1       ; Linux system call 1 i.e. exit ()
section .data
    intfmt: db "%ld", 10, 0

segment .text
    global  main


main:
    push rax
    push rsi
    push rdi
    mov rsi, 10
    mov rdi, intfmt
    xor rax, rax
    call printf
    pop rdi
    pop rsi
    pop rax 
    call os_return      ; return to operating system


os_return:
    mov  rax, EXIT      ; Linux system call 1 i.e. exit ()
    mov  rbx, …
Run Code Online (Sandbox Code Playgroud)

linux assembly printf gcc io-redirection

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

无法让OpenGL中的Gouraud Shading工作

我试图让一个形状因光源而有一些阴影,但我希望形状都是一种颜色.

我的问题是,无论我怎么努力,我似乎​​都无法在奇异的颜色模型上得到任何阴影.我已将模型简化为单个三角形,以使此示例更清晰:

#include <GL/glut.h>
#include <math.h>
#include <iostream>

#include<map>
#include<vector>

using namespace std;

/* Verticies for simplified demo */
float vertices[][3] = {
            {0.1, 0.1, 0.1},
            {0.2, 0.8, 0.3},
            {0.3, 0.5, 0.5},
            {0.8, 0.2, 0.1},
           };
const int VERTICES_SIZE = 4;
/* Polygons for simplified demo */
int polygon[][3] = {
                {0, 1, 3},
                {0, 2, 1},
                {0, 3, 2},
                {1, 2, 3},
            };
const int POLYGON_SIZE = 4;
/* Average point for looking at */
float av_point[3];

/*
 * …
Run Code Online (Sandbox Code Playgroud)

c++ opengl gouraud

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

cudaMallocHost甚至无法分配最小的内存

我是一个CUDA新手,所以想知道是否有人可以帮助我.

我读到pinning可以严重改善你的程序性能,所以我试着这样做.我在GeForce GT 330上运行我的代码,它的计算能力为1.0.

当我运行我的程序时,我得到cudaMallocHost无法分配内存,所以我把我的问题浓缩成一个小例子,可以在下面看到.

Mesh.hpp

#ifndef MESH_HPP_

#define MESH_HPP_


#include <cstddef>
#include <vector>

#include <driver_types.h>

class Mesh{
public:
  Mesh();
  ~Mesh();  
  void pin_data();

  std::vector<size_t> _a;
  size_t* _a_pinned;

private:
  void cuda_check(cudaError_t success);
};

#endif /* MESH_HPP_ */
Run Code Online (Sandbox Code Playgroud)

Mesh.cpp

#include <iostream>
#include <cmath>
#include <vector>
#include <string.h>

#include <cuda.h>
#include <cuda_runtime.h>

#include "Mesh.hpp"

Mesh::Mesh(){
  for(size_t i = 0; i < 10; i++){
    _a.push_back(i);
  }
}

Mesh::~Mesh() {
  cudaFreeHost(_a_pinned);
}

void Mesh::pin_data() {
  size_t _a_bytes = sizeof(size_t) * _a.size();

  cuda_check(cudaMallocHost((void **)_a_pinned, _a_bytes));
  memcpy(_a_pinned, …
Run Code Online (Sandbox Code Playgroud)

c++ cuda

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

如何将MouseListener添加到Java Swing Canvas上的项目

我想创建一个Java面板,用于创建用户单击的对象.由于我的实际应用程序使用MVC方法,我也希望这些对象能够在模型更改时重新绘制自己,并提供更改其属性的菜单.

我认为控制x和y位置的最佳方法是采用基于画布的方法,从方法中JPanel调用这些对象的draw paintComponent方法.然而,这只会在画布上绘制形状,并且不会添加对象本身而失去控制对象属性的所有能力.如果有人能告诉我最适合自己想做的事情,我将非常感激.

我已经创建了一些示例代码,可以在下面看到.单击时,我希望圆圈改变颜色,这是使用MouseListener实现的(它基本上代表在这个小例子中更改模型属性).此外,我还想确保放大/缩小仍然适用于任何示例代码/建议可以提供,所以我添加了按钮来放大和缩小对象作为快速测试.

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.awt.geom.Ellipse2D;

public class Main  {

    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                ExamplePanel panel = new ExamplePanel();

                frame.add(panel);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

    //I could not get this to with when it extended JLayeredPane
    private static class ExamplePanel extends JPanel {
        private static final int maxX = 500;
        private static final …
Run Code Online (Sandbox Code Playgroud)

java swing position canvas

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

标签 统计

c++ ×2

assembly ×1

canvas ×1

cuda ×1

gcc ×1

gouraud ×1

io-redirection ×1

java ×1

linux ×1

opengl ×1

parsing ×1

ply ×1

position ×1

printf ×1

python ×1

swing ×1

yacc ×1