我试图寻找这个问题的答案,但似乎找不到一个.我正在尝试使用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脚本来测试我在汇编中针对预期输出编写的各种代码的输出.但是我很难将输出重定向到文件中.我写了以下内容:
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) 我试图让一个形状因光源而有一些阴影,但我希望形状都是一种颜色.
我的问题是,无论我怎么努力,我似乎都无法在奇异的颜色模型上得到任何阴影.我已将模型简化为单个三角形,以使此示例更清晰:
#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) 我是一个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) 我想创建一个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)